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

📄 a00201.html

📁 uip-1.0,give everyone who want.
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00465"></a>00465   <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(&amp;conn-&gt;ripaddr, <a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>);<a name="l00466"></a>00466   <a name="l00467"></a>00467   <span class="keywordflow">return</span> conn;<a name="l00468"></a>00468 }<a name="l00469"></a>00469 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span><a name="l00470"></a>00470 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00471"></a>00471 <span class="preprocessor">#if UIP_UDP</span><a name="l00472"></a>00472 <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a> *<a name="l00473"></a><a class="code" href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af">00473</a> <a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *<a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">rport</a>)<a name="l00474"></a>00474 {<a name="l00475"></a>00475   <span class="keyword">register</span> <span class="keyword">struct </span><a class="code" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a> *conn;<a name="l00476"></a>00476   <a name="l00477"></a>00477   <span class="comment">/* Find an unused local port. */</span><a name="l00478"></a>00478  again:<a name="l00479"></a>00479   ++lastport;<a name="l00480"></a>00480 <a name="l00481"></a>00481   <span class="keywordflow">if</span>(lastport &gt;= 32000) {<a name="l00482"></a>00482     lastport = 4096;<a name="l00483"></a>00483   }<a name="l00484"></a>00484   <a name="l00485"></a>00485   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; ++c) {<a name="l00486"></a>00486     <span class="keywordflow">if</span>(<a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[c].<a class="code" href="a00095.html#981392e295db4d024eea95805c51c371">lport</a> == <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(lastport)) {<a name="l00487"></a>00487       <span class="keywordflow">goto</span> again;<a name="l00488"></a>00488     }<a name="l00489"></a>00489   }<a name="l00490"></a>00490 <a name="l00491"></a>00491 <a name="l00492"></a>00492   conn = 0;<a name="l00493"></a>00493   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; ++c) {<a name="l00494"></a>00494     <span class="keywordflow">if</span>(<a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[c].<a class="code" href="a00095.html#981392e295db4d024eea95805c51c371">lport</a> == 0) {<a name="l00495"></a>00495       conn = &amp;<a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[c];<a name="l00496"></a>00496       <span class="keywordflow">break</span>;<a name="l00497"></a>00497     }<a name="l00498"></a>00498   }<a name="l00499"></a>00499 <a name="l00500"></a>00500   <span class="keywordflow">if</span>(conn == 0) {<a name="l00501"></a>00501     <span class="keywordflow">return</span> 0;<a name="l00502"></a>00502   }<a name="l00503"></a>00503   <a name="l00504"></a>00504   conn-&gt;<a class="code" href="a00095.html#981392e295db4d024eea95805c51c371">lport</a> = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(lastport);<a name="l00505"></a>00505   conn-&gt;rport = <a class="code" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">rport</a>;<a name="l00506"></a>00506   <span class="keywordflow">if</span>(<a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a> == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {<a name="l00507"></a>00507     memset(conn-&gt;ripaddr, 0, <span class="keyword">sizeof</span>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a>));<a name="l00508"></a>00508   } <span class="keywordflow">else</span> {<a name="l00509"></a>00509     <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(&amp;conn-&gt;ripaddr, <a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>);<a name="l00510"></a>00510   }<a name="l00511"></a>00511   conn-&gt;ttl = <a class="code" href="a00153.html#gb61381673de27f31848c5396bf0b338e">UIP_TTL</a>;<a name="l00512"></a>00512   <a name="l00513"></a>00513   <span class="keywordflow">return</span> conn;<a name="l00514"></a>00514 }<a name="l00515"></a>00515 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span><a name="l00516"></a>00516 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00517"></a>00517 <span class="keywordtype">void</span><a name="l00518"></a><a class="code" href="a00150.html#gaa585784b0914cac1d37f07f85457008">00518</a> <a class="code" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)<a name="l00519"></a>00519 {<a name="l00520"></a>00520   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>; ++c) {<a name="l00521"></a>00521     <span class="keywordflow">if</span>(uip_listenports[c] == port) {<a name="l00522"></a>00522       uip_listenports[c] = 0;<a name="l00523"></a>00523       <span class="keywordflow">return</span>;<a name="l00524"></a>00524     }<a name="l00525"></a>00525   }<a name="l00526"></a>00526 }<a name="l00527"></a>00527 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00528"></a>00528 <span class="keywordtype">void</span><a name="l00529"></a><a class="code" href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8">00529</a> <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)<a name="l00530"></a>00530 {<a name="l00531"></a>00531   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>; ++c) {<a name="l00532"></a>00532     <span class="keywordflow">if</span>(uip_listenports[c] == 0) {<a name="l00533"></a>00533       uip_listenports[c] = port;<a name="l00534"></a>00534       <span class="keywordflow">return</span>;<a name="l00535"></a>00535     }<a name="l00536"></a>00536   }<a name="l00537"></a>00537 }<a name="l00538"></a>00538 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00539"></a>00539 <span class="comment">/* XXX: IP fragment reassembly: not well-tested. */</span><a name="l00540"></a>00540 <a name="l00541"></a>00541 <span class="preprocessor">#if UIP_REASSEMBLY &amp;&amp; !UIP_CONF_IPV6</span><a name="l00542"></a>00542 <span class="preprocessor"></span><span class="preprocessor">#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)</span><a name="l00543"></a>00543 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> uip_reassbuf[UIP_REASS_BUFSIZE];<a name="l00544"></a>00544 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];<a name="l00545"></a>00545 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f,<a name="l00546"></a>00546                                     0x0f, 0x07, 0x03, 0x01};<a name="l00547"></a>00547 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_reasslen;<a name="l00548"></a>00548 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> uip_reassflags;<a name="l00549"></a>00549 <span class="preprocessor">#define UIP_REASS_FLAG_LASTFRAG 0x01</span><a name="l00550"></a>00550 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> uip_reasstmr;<a name="l00551"></a>00551 <a name="l00552"></a>00552 <span class="preprocessor">#define IP_MF   0x20</span><a name="l00553"></a>00553 <span class="preprocessor"></span><a name="l00554"></a>00554 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a><a name="l00555"></a>00555 uip_reass(<span class="keywordtype">void</span>)<a name="l00556"></a>00556 {<a name="l00557"></a>00557   <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> offset, len;<a name="l00558"></a>00558   <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> i;<a name="l00559"></a>00559 <a name="l00560"></a>00560   <span class="comment">/* If ip_reasstmr is zero, no packet is present in the buffer, so we</span><a name="l00561"></a>00561 <span class="comment">     write the IP header of the fragment into the reassembly</span><a name="l00562"></a>00562 <span class="comment">     buffer. The timer is updated with the maximum age. */</span><a name="l00563"></a>00563   <span class="keywordflow">if</span>(uip_reasstmr == 0) {<a name="l00564"></a>00564     memcpy(uip_reassbuf, &amp;<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;vhl, <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>);<a name="l00565"></a>00565     uip_reasstmr = <a class="code" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">UIP_REASS_MAXAGE</a>;<a name="l00566"></a>00566     uip_reassflags = 0;<a name="l00567"></a>00567     <span class="comment">/* Clear the bitmap. */</span><a name="l00568"></a>00568     memset(uip_reassbitmap, 0, <span class="keyword">sizeof</span>(uip_reassbitmap));<a name="l00569"></a>00569   }<a name="l00570"></a>00570 <a name="l00571"></a>00571   <span class="comment">/* Check if the incoming fragment matches the one currently present</span><a name="l00572"></a>00572 <span class="comment">     in the reasembly buffer. If so, we proceed with copying the</span><a name="l00573"></a>00573 <span class="comment">     fragment into the buffer. */</span><a name="l00574"></a>00574   <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;srcipaddr[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;srcipaddr[0] &amp;&amp;<a name="l00575"></a>00575      <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;srcipaddr[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;srcipaddr[1] &amp;&amp;<a name="l00576"></a>00576      <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;destipaddr[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;destipaddr[0] &amp;&amp;<a name="l00577"></a>00577      <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;destipaddr[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;destipaddr[1] &amp;&amp;<a name="l00578"></a>00578      <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;ipid[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;ipid[0] &amp;&amp;<a name="l00579"></a>00579      <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;ipid[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>-&gt;ipid[1]) {<a name="l00580"></a>00580 <a name="l00581"></a>00581     len = (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;len[0] &lt;&lt; 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;len[1] - (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;vhl &amp; 0x0f) * 4;<a name="l00582"></a>00582 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -