?? ppp_c source file.htm
字號:
00412 pppout_dati[0]=strlen(UserID); <SPAN class=comment>/*userid */</SPAN>
00413 <SPAN class=keywordflow>if</SPAN> (reteDEBUG&4) printf(<SPAN class=stringliteral>"sizeuserid=%u\n"</SPAN>,strlen(UserID));
00414 copymem(UserID,pppout_dati+1,tPPP=strlen(UserID));
00415 pppout_dati[tPPP+1]=strlen(PassWD); <SPAN class=comment>/*password */</SPAN>
00416 <SPAN class=keywordflow>if</SPAN> (reteDEBUG&4) printf(<SPAN class=stringliteral>"sizepasswd=%u\n"</SPAN>,strlen(PassWD));
00417 copymem(PassWD,pppout_dati+tPPP+2,t=strlen(PassWD));
00418 PPPout(1,ppp_id+1,0x03,0xc023,tPPP+t+4+2) <SPAN class=comment>/*ConfReq userid password*/</SPAN>
00419 mandappp();
00420 }
00421 u_char RxPAPConfAck() {
00422 <SPAN class=keywordflow>return</SPAN> (stato&0x2000)&&(ppp_code==2);
00423 }
00424 u_char RxPAPConfNackRej() {
00425 <SPAN class=keywordflow>return</SPAN> (stato&0x2000)&&(ppp_code>2);
00426 }
00427 u_char RxIPCPConfReq() {
00428 <SPAN class=keywordflow>return</SPAN> (stato&0x4000)&&(ppp_code==1);
00429 }
00430 <SPAN class=keywordtype>void</SPAN> TxIPCPConfAckNack() {
00431 ppp_ack2=ppp_ack=2;
00432 <SPAN class=keywordflow>for</SPAN> (tPPP=t=0;t<(scbyte(ppp_len)-4);) {
00433 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==3)&&(ppp_dati[t+1]==6)) {
00434 ppp_ack2=2; <SPAN class=comment>/* ack */</SPAN>
00435 IPremoto=*(u_int *)(ppp_dati+t+2);
00436 } <SPAN class=keywordflow>else</SPAN> {
00437 ppp_ack2=4;
00438 }
00439 <SPAN class=keywordflow>if</SPAN> ((ppp_ack2==4)&&(ppp_ack<4)) tPPP=0;
00440 <SPAN class=keywordflow>if</SPAN> ((ppp_ack!=4)||(ppp_ack2==4)) {
00441 copymem(ppp_dati+t,pppout_dati+tPPP,ppp_dati[t+1]);
00442 tPPP+=pppout_dati[tPPP+1];
00443 }
00444 <SPAN class=keywordflow>if</SPAN> (ppp_ack<ppp_ack2) ppp_ack=ppp_ack2;
00445 t+=ppp_dati[t+1];
00446 }<SPAN class=comment>/* loop opzioni */</SPAN>
00447 PPPout(ppp_ack,ppp_id,0x03,0x8021,tPPP+11-7);
00448 mandappp();
00449 }
00450
00451 <SPAN class=keywordtype>void</SPAN> TxIPCPConfReq() {
00452 PPPout(1,ppp_id+1,0x03,0x8021,4+18) <SPAN class=comment>/*ConfReq ip*/</SPAN>
00453 copymem(<SPAN class=stringliteral>"\x03\x06"</SPAN>,pppout_dati,2);
00454 copymem((u_char *)(&IPlocale),pppout_dati+2,4);
00455 copymem(<SPAN class=stringliteral>"\x81\x06"</SPAN>,pppout_dati+6,2);
00456 copymem((u_char *)(&IPDNS1),pppout_dati+8,4);
00457 copymem(<SPAN class=stringliteral>"\x83\x06"</SPAN>,pppout_dati+12,2);
00458 copymem((u_char *)(&IPDNS2),pppout_dati+14,4);
00459 mandappp();
00460 }
00461
00462 u_char RxIPCPConfNack() {
00463 <SPAN class=keywordflow>if</SPAN> ((stato&0x4000)&&(ppp_code==3)) {
00464 <SPAN class=keywordflow>for</SPAN> (tPPP=t=0;t<(scbyte(ppp_len)-4);) {
00465 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==3)&&(ppp_dati[t+1]==6)) IPlocale=*(u_int *)(ppp_dati+t+2);
00466 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==0x81)&&(ppp_dati[t+1]==6)) IPDNS1=*(u_int *)(ppp_dati+t+2);
00467 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==0x83)&&(ppp_dati[t+1]==6)) IPDNS2=*(u_int *)(ppp_dati+t+2);
00468 t+=ppp_dati[t+1];
00469 }
00470 <SPAN class=keywordflow>return</SPAN> 1;
00471 }
00472 <SPAN class=keywordflow>return</SPAN> 0;
00473 }
00474 u_char RxIPCPConfRej() {
00475 <SPAN class=keywordflow>return</SPAN> (stato&0x4000)&&(ppp_code==4);
00476 }
00477
00478
00479 <SPAN class=comment>/* da implementare */</SPAN>
00480 u_char RxLCPTermReq() {
00481 <SPAN class=keywordflow>return</SPAN> (stato&0x100)&&(ppp_code==5);
00482 }
00483 <SPAN class=keywordtype>void</SPAN> TxLCPTermAck() {
00484 <SPAN class=comment>/* while (F_PPP) ;</SPAN>
00485 <SPAN class=comment> F_PPP=1;*/</SPAN>
00486 PPPout(6,ppp_id,0x03,ppp_proto,scbyte(ppp_len));
00487 copymem(ppp_dati,pppout_dati,scbyte(ppp_len)-4);
00488 mandappp();
00489 stato=0;
00490 <SPAN class=comment>/* F_PPP=0; */</SPAN>
00491 }
00492 <SPAN class=comment>/* -- */</SPAN>
00493
00494
00495 u_char RxIPCPConfAck() {
00496 <SPAN class=keywordflow>if</SPAN> ((stato&0x4000)&&(ppp_code==2)) {
00497 <SPAN class=keywordflow>for</SPAN> (tPPP=t=0;t<(scbyte(ppp_len)-4);) {
00498 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==3)&&(ppp_dati[t+1]==6)) IPlocale=*(u_int *)(ppp_dati+t+2);
00499 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==0x81)&&(ppp_dati[t+1]==6)) IPDNS1=*(u_int *)(ppp_dati+t+2);
00500 <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==0x83)&&(ppp_dati[t+1]==6)) IPDNS2=*(u_int *)(ppp_dati+t+2);
00501 t+=ppp_dati[t+1];
00502 }
00503 <SPAN class=keywordflow>return</SPAN> 1;
00504 }
00505 <SPAN class=keywordflow>return</SPAN> 0;
00506 }
00507
00508 <SPAN class=keywordflow>if</SPAN> (stato&0x0400) { TxLCPConfReq();stato=1;}
00509 leggiPPP();
00510 stato&=0x03ff;
00511 <SPAN class=keywordflow>if</SPAN> (npunta!=npunta2) {
00512 <SPAN class=keywordflow>if</SPAN> (reteDEBUG&2) printf(<SPAN class=stringliteral>"riceviPPP npunta!=npunta2\n"</SPAN>);
00513 ppp=(u_char *)(buffRX+punta[npunta2]);
00514 logga(ppp,<SPAN class=stringliteral>"Inp"</SPAN>);
00515 <SPAN class=keywordflow>if</SPAN> ((stato&0x3ff)<=0x3f) delay(200);
00516 npunta2=(npunta2+1)%10;
00517 <SPAN class=keywordflow>if</SPAN> (ppp_fcs==pppfcs(PPPINITFCS,ppp+1,scbyte(ppp_len)+4)) {<SPAN class=comment>/* fcs OK */</SPAN>
00518 <SPAN class=keywordflow>if</SPAN> (ppp_proto==0x21c0) stato|=0x1000; <SPAN class=comment>/* lcp */</SPAN> <SPAN class=keywordflow>else</SPAN>
00519 <SPAN class=keywordflow>if</SPAN> (ppp_proto==0x23c0) stato|=0x2000; <SPAN class=comment>/* pap */</SPAN> <SPAN class=keywordflow>else</SPAN>
00520 <SPAN class=keywordflow>if</SPAN> (ppp_proto==0x2180) stato|=0x4000; <SPAN class=comment>/* ipcp */</SPAN> <SPAN class=keywordflow>else</SPAN>
00521 <SPAN class=keywordflow>if</SPAN> (ppp_proto==0x2100) stato|=0x8000; <SPAN class=comment>/* ip */</SPAN> <SPAN class=keywordflow>else</SPAN>
00522 stato|=0x8000; <SPAN class=comment>/* gli altri */</SPAN>
00523 PPPtimeout=adesso;
00524 }
00525 } <SPAN class=keywordflow>else</SPAN>
00526 <SPAN class=keywordflow>if</SPAN> ((stato&0x3ff)==0x3ff) <SPAN class=keywordflow>goto</SPAN> fine; <SPAN class=comment>/* non ci sono dati e il link e' attivo */</SPAN>
00527 <SPAN class=keywordflow>else</SPAN>
00528 <SPAN class=keywordflow>if</SPAN> ( (PPPtimeout+2)< adesso )
00529 { PPPtimeout=2+adesso;stato|=0x0800;} <SPAN class=comment>/* timeout */</SPAN>
00530 <SPAN class=keywordflow>if</SPAN> (RxLCPTermReq()) { stato=0; TxLCPTermAck(); }
00531 <SPAN class=keywordflow>if</SPAN> ((stato&0x7ff)<15) {
00532 <SPAN class=keywordflow>if</SPAN> (TIMEOUT_PPP) { TxLCPConfReq(); stato=(stato&0xffc)|1; }
00533 <SPAN class=keywordflow>if</SPAN> (RxLCPConfReq()) {
00534 <SPAN class=keywordflow>if</SPAN> ((stato&0xc) == 0xc) { TxLCPConfReq(); stato = 1; } <SPAN class=keywordflow>else</SPAN>
00535 {
00536 stato=(stato&0xfff3)|0x0004;
00537 ppp_ack=2;
00538 TxLCPConfAckNack();
00539 <SPAN class=keywordflow>if</SPAN> (ppp_ack==2) stato|=8;
00540 }
00541 } <SPAN class=comment>/* if RxLCPConfReq */</SPAN>
00542 <SPAN class=keywordflow>if</SPAN> (RxLCPConfNackRej()) { stato=0; printf(<SPAN class=stringliteral>"opzioni invalide\n"</SPAN>); }
00543 <SPAN class=keywordflow>if</SPAN> (RxLCPConfAck()) stato|=2;
00544
00545 } <SPAN class=keywordflow>else</SPAN> <SPAN class=comment>/* if stato<15 */</SPAN>
00546 <SPAN class=keywordflow>if</SPAN> ((stato&0x7ff)==15) { <SPAN class=comment>/* LCP -> PAP */</SPAN>
00547 asyncmap=asyncmap2;
00548 TxPAPConfReq();
00549 stato|=16;
00550 } <SPAN class=keywordflow>else</SPAN>
00551 <SPAN class=keywordflow>if</SPAN> ((stato&0x7ff)<63) { <SPAN class=comment>/* PAP */</SPAN>
00552 <SPAN class=keywordflow>if</SPAN> (TIMEOUT_PPP) TxPAPConfReq();
00553 <SPAN class=keywordflow>if</SPAN> (RxPAPConfAck()) stato|=32;
00554 <SPAN class=keywordflow>if</SPAN> (RxPAPConfNackRej()) { stato=0;printf(<SPAN class=stringliteral>"Autenticazione fallita\n"</SPAN>);}
00555 } <SPAN class=keywordflow>else</SPAN> <SPAN class=comment>/* se stato < 63 */</SPAN>
00556 <SPAN class=comment>/* if ((stato&0x7ff)==63) { PAP -> IPCP </SPAN>
00557 <SPAN class=comment> TxIPCPConfReq(); stato|=64; </SPAN>
00558 <SPAN class=comment> } else */</SPAN>
00559 <SPAN class=keywordflow>if</SPAN> ((stato&0x7ff)<1023) { <SPAN class=comment>/* IPCP */</SPAN>
00560 <SPAN class=keywordflow>if</SPAN> ((TIMEOUT_PPP)||((stato&0x03c0)==0x0300)) { TxIPCPConfReq(); stato=(stato&0xfbf)|64; }
00561 <SPAN class=keywordflow>if</SPAN> (RxIPCPConfReq()) { stato=(stato&0xdff)|256;
00562 TxIPCPConfAckNack();
00563 <SPAN class=keywordflow>if</SPAN> (ppp_ack==2) stato|=512;
00564 }
00565 <SPAN class=keywordflow>if</SPAN> (RxIPCPConfAck()) stato|=128;
00566 <SPAN class=keywordflow>if</SPAN> (RxIPCPConfNack()) TxIPCPConfReq();
00567 <SPAN class=keywordflow>if</SPAN> (RxIPCPConfRej()) { stato=0; printf(<SPAN class=stringliteral>"opzioni IP rigettate dal remoto\n"</SPAN>); }
00568 }
00569 <SPAN class=keywordflow>if</SPAN> ((stato&0x03ff)==0x03ff) {
00570 <SPAN class=keywordflow>if</SPAN> (stato&0x8000) {
00571 <SPAN class=keywordflow>if</SPAN> (ppp_proto==scbyte(0x0021))
00572 <SPAN class=keywordflow>if</SPAN> (scbyte(ppp_len)<=9900) {
00573 copymem(ppp+5,pppout,scbyte(ppp_len));
00574 pppout[scbyte(ppp_len)]=0;
00575 pppout[scbyte(ppp_len)+1]=0;
00576 riceviIP(pppout,scbyte(ppp_len));
00577 }
00578 <SPAN class=keywordflow>if</SPAN> (ppp_proto==scbyte(0x80fd))
00579 <SPAN class=keywordflow>if</SPAN> (ppp_code==1) {
00580 <SPAN class=comment>/* while (F_PPP);</SPAN>
00581 <SPAN class=comment> F_PPP=1;*/</SPAN>
00582 PPPout(2,ppp_id,0x03,0x80fd,scbyte(ppp_len))
00583 copymem(ppp_dati,pppout_dati,scbyte(ppp_len)-4);
00584 mandappp();
00585 <SPAN class=comment>/* F_PPP=0; */</SPAN>
00586 }
00587 }
00588 }
00589 <SPAN class=keywordflow>if</SPAN> (stato&0xf000) leds|=1;
00590 fine:
00591 mandaser();
00592 <SPAN class=keywordflow>return</SPAN> 0;
00593 }
00594
00595
00596 u_char inizializzaPPP() {
00597 asyncmap=0xffffffff;
00598 <SPAN class=keywordflow>if</SPAN> (reteDEBUG&16) asyncmapno=1; <SPAN class=keywordflow>else</SPAN> asyncmapno=0;
00599 <SPAN class=keywordflow>if</SPAN> (reteDEBUG&2) printf(<SPAN class=stringliteral>"inizializzaPPP\n"</SPAN>);
00600 <SPAN class=keywordflow>if</SPAN> (buff==0) buff=malloc(10000);
00601 <SPAN class=keywordflow>if</SPAN> (buffRX==0) buff=malloc(10000);
00602 <SPAN class=keywordflow>if</SPAN> (bufTX==0) bufTX=malloc(100000);
00603 pppout=(u_char *)buff;
00604 ppp=(u_char *)buffRX;
00605 setmem(buff,0,10000);
00606 setmem(buffRX,0,10000);
00607 punta[npunta2=0]=-1;npunta=0;
00608 stato=0;
00609 <SPAN class=keywordflow>return</SPAN> 1;
00610 }
00611
00612 u_char chiudiPPP() {
00613 RETE_=0;
00614 <SPAN class=keywordflow>return</SPAN> 1;
00615 }
00616
</PRE></DIV>
<HR>
<ADDRESS style="align: right"><SMALL>Generato il Tue Jun 17 15:27:43 2003 per
ItaliOs da <A href="http://www.doxygen.org/index.html"><IMG height=53
alt=doxygen src="ppp_c Source File.files/doxygen.png" width=110 align=middle
border=0></A>1.3-rc3 </SMALL></ADDRESS></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -