⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp_c source file.htm

📁 关于PPP点对点协议的一些详细资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
00136 <SPAN class=comment>       CC=8;*/</SPAN>
00137        CC=0;Debug(<SPAN class=stringliteral>"Ricevuto ack  "</SPAN>);
00138        <SPAN class=keywordflow>while</SPAN> (SKK-&gt;flag&amp;3) delay(5);
00139        Debug(<SPAN class=stringliteral>"2\n"</SPAN>);
00140        SKK-&gt;flag|=3;
00141        <SPAN class=keywordflow>if</SPAN> (SeqSIN&gt;SKK-&gt;seqSIN) { CC|=2;
00142 <SPAN class=comment>/*          for (tTCP=SKK-&gt;buflenTX,tTCP1=0;(tTCP1&lt;(SeqSIN-SKK-&gt;seqSIN))&amp;&amp;</SPAN>
00143 <SPAN class=comment>                (tTCP!=SKK-&gt;buflenW_TX);tTCP=(tTCP+1)%3000,tTCP1++) ;</SPAN>
00144 <SPAN class=comment>          if ((SKK-&gt;buflenTX+=tTCP1)&gt;=3000) SKK-&gt;buflenTX-=3000;</SPAN>
00145 <SPAN class=comment>          SKK-&gt;seqSIN+=tTCP1;*/</SPAN>
00146 <SPAN class=comment>/*          printf("ricTCP1: seqSIN=%x skk-&gt;seqSIN buflenTX=%u lungh=%u\n",SeqSIN,SKK-&gt;seqSIN,SKK-&gt;buflenTX,lungh);*/</SPAN>           <SPAN class=keywordflow>if</SPAN> (SKK-&gt;buflenTX&lt;(SeqSIN-SKK-&gt;seqSIN)) { SKK-&gt;flag&amp;=0xfc;  Errore(7,<SPAN class=stringliteral>"rxTCP:Ack SeqSIN errato"</SPAN>);}
00147           SKK-&gt;buflenTX-=(u_short)(SeqSIN-SKK-&gt;seqSIN);
00148           copymem(SKK-&gt;bufTX+(u_short)(SeqSIN-SKK-&gt;seqSIN),SKK-&gt;bufTX,SKK-&gt;buflenTX); <SPAN class=comment>/* OK */</SPAN>
00149           SKK-&gt;seqSIN=SeqSIN;
00150 <SPAN class=comment>/*          printf("ricTCP2: seqSIN=%x skk-&gt;seqSIN buflenTX=%u lungh=%u\n",SeqSIN,SKK-&gt;seqSIN,SKK-&gt;buflenTX,lungh);*/</SPAN>           CC|=4;
00151        }
00152        <SPAN class=keywordflow>if</SPAN> ((SeqACK&lt;=SKK-&gt;seqACK)&amp;&amp;( (ttt=(SKK-&gt;seqACK-SeqACK)) &lt;=(lungh-20))) {
00153 <SPAN class=comment>/*       if (SeqACK==SKK-&gt;seqACK) { */</SPAN>
00154           <SPAN class=keywordflow>if</SPAN> ((SKK-&gt;buflenRX+lungh-20-ttt)&lt;3000) {
00155              CC|=1;
00156 <SPAN class=comment>/*        printf("ricTCP3: seqACK=%x skk-&gt;seqACK buflenRX=%u lungh=%u\n",SeqACK,SKK-&gt;seqACK,SKK-&gt;buflenRX,lungh);*/</SPAN>
00157              copymem(buffTCP+20+ttt,SKK-&gt;bufRX+SKK-&gt;buflenRX,lungh-20-ttt);
00158              SKK-&gt;seqACK+=(u_int)lungh-20-ttt;
00159              SKK-&gt;buflenRX+=lungh-20-ttt;
00160 <SPAN class=comment>/*    printf("ricTCP4: seqACK=%x skk-&gt;seqACK buflenRX=%u lungh=%u\n",SeqACK,SKK-&gt;seqACK,SKK-&gt;buflenRX,lungh);*/</SPAN>
00161           }  
00162        } <SPAN class=keywordflow>else</SPAN>
00163        <SPAN class=keywordflow>if</SPAN> (SeqACK&lt;SKK-&gt;seqACK) CC|=1;
00164        SKK-&gt;flag&amp;=0xfc;
00165        <SPAN class=keywordflow>if</SPAN> ((SKK-&gt;stato==3)&amp;&amp;(CC&amp;1)&amp;&amp;(lungh-20)&amp;&amp;(!(FLAg&amp;FIN))) MandaTcp(ACK);
00166        CC=0;
00167     } 
00168     <SPAN class=keywordflow>if</SPAN> (FLAg&amp;RST) <SPAN class=comment>/* ricevuto rst */</SPAN>
00169        deregistraIP(sk);
00170     <SPAN class=keywordflow>if</SPAN> (FLAg&amp;FIN) { <SPAN class=comment>/* ricevuto fin */</SPAN>
00171        <SPAN class=keywordflow>if</SPAN> ((SKK-&gt;stato!=4)&amp;&amp;(SKK-&gt;stato!=3))  Errore(4,<SPAN class=stringliteral>"rxTCP:FinAck e socket!=3"</SPAN>);
00172        SKK-&gt;seqACK++;
00173        MandaTcp(ACK);
00174        <SPAN class=keywordflow>if</SPAN> (SKK-&gt;stato==3) {
00175           MandaTcp(FIN|ACK);
00176           SKK-&gt;stato=7;
00177        }
00178     }
00179   }
00180   errore:
00181   CC=0;
00182   <SPAN class=keywordflow>return</SPAN> 1;
00183 }
00184 
00185 u_char nonsoTCP(u_int Ip,u_char *buffTCP,u_short lungh) {
00186 <SPAN class=preprocessor>#define lunghTcp ((bufTCP[12]&amp;0xf0)&gt;&gt;2)</SPAN>
00187 <SPAN class=preprocessor></SPAN>  Debug(<SPAN class=stringliteral>"nonsoTCP\n"</SPAN>);  
00188   <SPAN class=keywordflow>if</SPAN> (lungh&gt;3000) <SPAN class=keywordflow>return</SPAN> 0;
00189   setmem(bufTCP,0,lungh);
00190   copymem(buffTCP,bufTCP,lungh);
00191   Tcp(bufTCP,PrtSRC,PrtDST,SeqSIN,SeqACK,RST,3000);
00192   <SPAN class=keywordflow>if</SPAN> (SeqACK) { *(u_int *)(bufTCP+8)=scbyte4(SeqACK+1); *(bufTCP+13)|=ACK; }
00193      <SPAN class=keywordflow>if</SPAN> (!mandaIP(Ip,6,bufTCP,lungh))  Errore(6,<SPAN class=stringliteral>"nonsoTCP:errore mandaIP RST"</SPAN>);
00194   <SPAN class=keywordflow>return</SPAN> 1;
00195  errore:
00196 
00197   <SPAN class=keywordflow>return</SPAN> 0;
00198 }
00199 
00200 
00201 <SPAN class=preprocessor>#undef SKK</SPAN>
00202 <SPAN class=preprocessor></SPAN><SPAN class=preprocessor>#define SKK Sok[tTCP]</SPAN>
00203 <SPAN class=preprocessor></SPAN>
00204 <SPAN class=preprocessor>#define passato(a) ((SKK-&gt;timeout+a)&lt;adesso)</SPAN>
00205 <SPAN class=preprocessor></SPAN><SPAN class=preprocessor>#define passato2(a) ((SKK-&gt;timeout2+a)&lt;adesso)</SPAN>
00206 <SPAN class=preprocessor></SPAN><SPAN class=keywordtype>void</SPAN> TimeoutTCP(u_short tTCP) {
00207   u_short tTCP1;
00208       <SPAN class=keywordflow>if</SPAN> (SKK-&gt;stato==1) {          <SPAN class=comment>/* se e' in fase di instaurazione */</SPAN>
00209           <SPAN class=keywordflow>if</SPAN> passato(3) { <SPAN class=comment>/* se bisogna mandare il pacchetto SYN */</SPAN>
00210               Debug(<SPAN class=stringliteral>"MandaSYN"</SPAN>);  
00211               SKK-&gt;timeout=adesso;
00212               setmem(bufTCP,0,20);
00213               Debug(<SPAN class=stringliteral>"TimeoutTCP stato=1 \n"</SPAN>);  
00214               Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,SYN,3000);
00215               mandaIP(SKK-&gt;IPdst,6,bufTCP,20);
00216           } <SPAN class=keywordflow>else</SPAN> {
00217 <SPAN class=comment>/*          if (reteDEBUG&amp;2) printf("T=%u t2=%u\n",adesso,SKK-&gt;timeout2); */</SPAN>
00218           <SPAN class=keywordflow>if</SPAN> passato2(18) 
00219               {
00220                  Debug(<SPAN class=stringliteral>"timeout MandaSYN"</SPAN>);  
00221 <SPAN class=comment>/*                 if (reteDEBUG&amp;2) printf("Tempo=%u timeout2=%u\n",adesso,SKK-&gt;timeout2); */</SPAN>
00222                  deregistraIP(tTCP);
00223               }
00224           }       
00225        } <SPAN class=keywordflow>else</SPAN>
00226        <SPAN class=keywordflow>if</SPAN> (SKK-&gt;stato==2) {          <SPAN class=comment>/* se e' in fase di listen e ha ricevuto un SIN */</SPAN>
00227           <SPAN class=keywordflow>if</SPAN> passato(3) {    <SPAN class=comment>/* se bisogna mandare il pacchetto SINACK */</SPAN>
00228               SKK-&gt;timeout=adesso;
00229               setmem(bufTCP,0,20);
00230               Debug(<SPAN class=stringliteral>"TimeoutTCP stato=2 \n"</SPAN>);  
00231               Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,SYN|ACK,3000);
00232               mandaIP(SKK-&gt;IPdst,6,bufTCP,20);
00233               SKK-&gt;flag=0;
00234           } <SPAN class=keywordflow>else</SPAN>
00235           <SPAN class=keywordflow>if</SPAN> passato2(10) {<SPAN class=comment>/* se va in timeout2 riporta il socket a 8 */</SPAN>
00236               setmem(bufTCP,0,20);
00237               Debug(<SPAN class=stringliteral>"Timeout2TCP stato=2 \n"</SPAN>);  
00238               Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,RST|ACK,3000);
00239               mandaIP(SKK-&gt;IPdst,6,bufTCP,20);
00240               SKK-&gt;IPdst=0;SKK-&gt;PRTdst=0;SKK-&gt;timeout=0;SKK-&gt;timeout2=0;
00241               SKK-&gt;stato=8;
00242           }
00243        } <SPAN class=keywordflow>else</SPAN>
00244        <SPAN class=keywordflow>if</SPAN> (SKK-&gt;stato==4) {          <SPAN class=comment>/* se e' in fase di chiusura */</SPAN>
00245           <SPAN class=keywordflow>if</SPAN> passato(3) { <SPAN class=comment>/* se bisogna mandare il pacchetto FINACK */</SPAN>
00246               SKK-&gt;timeout=adesso;
00247               setmem(bufTCP,0,20);
00248               Debug(<SPAN class=stringliteral>"TimeoutTCP stato=4 \n"</SPAN>);  
00249               Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,FIN|ACK,3000);
00250               mandaIP(SKK-&gt;IPdst,6,bufTCP,20);
00251           } <SPAN class=keywordflow>else</SPAN>
00252           <SPAN class=keywordflow>if</SPAN> passato2(18) {
00253               setmem(bufTCP,0,20);
00254               Debug(<SPAN class=stringliteral>"Timeout2TCP stato=4 \n"</SPAN>);  
00255               Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,RST|ACK,3000);
00256               mandaIP(SKK-&gt;IPdst,6,bufTCP,20);
00257               deregistraIP(tTCP);
00258           }
00259        } <SPAN class=keywordflow>else</SPAN>
00260        <SPAN class=keywordflow>if</SPAN> ((SKK-&gt;stato==3)&amp;&amp;(SKK-&gt;buflenTX)&amp;&amp;
00261           passato(5)) {
00262             Debug(<SPAN class=stringliteral>"TimeoutTCP stato=3"</SPAN>);  
00263             <SPAN class=keywordflow>while</SPAN> (SKK-&gt;flag&amp;1) delay(5);
00264             SKK-&gt;flag|=1;
00265             Debug(<SPAN class=stringliteral>" 1"</SPAN>);  
00266             setmem(bufTCP,0,TCP_MTU+60);
00267             SKK-&gt;timeout=adesso;
00268             <SPAN class=keywordflow>if</SPAN> (SKK-&gt;buflenTX&lt;TCP_MTU) tTCP1=SKK-&gt;buflenTX; <SPAN class=keywordflow>else</SPAN> tTCP1=TCP_MTU;
00269             copymem(SKK-&gt;bufTX,bufTCP+20,tTCP1);
00270             Tcp(bufTCP,SKK-&gt;PRTsrc,SKK-&gt;PRTdst,SKK-&gt;seqSIN,SKK-&gt;seqACK,PSH|ACK,3000);
00271             mandaIP(SKK-&gt;IPdst,6,bufTCP,tTCP1+20);
00272             SKK-&gt;flag&amp;=0xfe;
00273             Debug(<SPAN class=stringliteral>" 0\n"</SPAN>);  
00274        } <SPAN class=keywordflow>else</SPAN>  
00275        <SPAN class=keywordflow>if</SPAN> (((SKK-&gt;stato==7)||(SKK-&gt;stato==4))&amp;&amp;(!SKK-&gt;buflenRX)&amp;&amp;passato2(13))
00276             deregistraIP(tTCP);
00277 }
00278 
00279 <SPAN class=keywordtype>void</SPAN> Init_tcp() {
00280    <SPAN class=keywordflow>if</SPAN> (bufTCP==NULL) bufTCP=malloc(3000);
00281 }
</PRE></DIV>
<HR>

<ADDRESS style="align: right"><SMALL>Generato il Tue Jun 17 15:27:45 2003 per 
ItaliOs da <A href="http://www.doxygen.org/index.html"><IMG height=53 
alt=doxygen src="tcp_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 + -