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

📄 a00192.html

📁 uip-1.0,give everyone who want.
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00225"></a>00225   <span class="comment">/* Call the generator function to generate the data in the</span><a name="l00226"></a>00226 <span class="comment">     uip_appdata buffer. */</span><a name="l00227"></a>00227   s-&gt;sendlen = generate(arg);<a name="l00228"></a>00228   s-&gt;sendptr = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;<a name="l00229"></a>00229 <a name="l00230"></a>00230   s-&gt;state = STATE_NONE;  <a name="l00231"></a>00231   <span class="keywordflow">do</span> {<a name="l00232"></a>00232     <span class="comment">/* Call the generator function again if we are called to perform a</span><a name="l00233"></a>00233 <span class="comment">       retransmission. */</span><a name="l00234"></a>00234     <span class="keywordflow">if</span>(<a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()) {<a name="l00235"></a>00235       generate(arg);<a name="l00236"></a>00236     }<a name="l00237"></a>00237     <span class="comment">/* Wait until all data is sent and acknowledged. */</span><a name="l00238"></a>00238     <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&amp;s-&gt;psockpt, data_acked(s) &amp; send_data(s));<a name="l00239"></a>00239   } <span class="keywordflow">while</span>(s-&gt;sendlen &gt; 0);<a name="l00240"></a>00240   <a name="l00241"></a>00241   s-&gt;state = STATE_NONE;<a name="l00242"></a>00242   <a name="l00243"></a>00243   <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&amp;s-&gt;psockpt);<a name="l00244"></a>00244 }<a name="l00245"></a>00245 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00246"></a>00246 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a><a name="l00247"></a><a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">00247</a> <a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a>(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *<a class="code" href="a00082.html">psock</a>)<a name="l00248"></a>00248 {<a name="l00249"></a>00249   <span class="keywordflow">return</span> psock-&gt;<a class="code" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">bufsize</a> - psock-&gt;<a class="code" href="a00082.html#d6bd03239291629676e4c0286ebb650f">buf</a>.<a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>;<a name="l00250"></a>00250 }<a name="l00251"></a>00251 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00252"></a>00252 <span class="keywordtype">char</span><a name="l00253"></a><a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">00253</a> <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s)<a name="l00254"></a>00254 {<a name="l00255"></a>00255   <span class="keywordflow">if</span>(s-&gt;<a class="code" href="a00082.html#a408ca8630154ebd039f37a828399f7b">readlen</a> &gt; 0) {<a name="l00256"></a>00256     <span class="comment">/* There is data in the uip_appdata buffer that has not yet been</span><a name="l00257"></a>00257 <span class="comment">       read with the PSOCK_READ functions. */</span><a name="l00258"></a>00258     <span class="keywordflow">return</span> 1;<a name="l00259"></a>00259   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(s-&gt;<a class="code" href="a00082.html#fda184638130452f3570966acc5b97f9">state</a> == STATE_READ) {<a name="l00260"></a>00260     <span class="comment">/* All data in uip_appdata buffer already consumed. */</span><a name="l00261"></a>00261     s-&gt;<a class="code" href="a00082.html#fda184638130452f3570966acc5b97f9">state</a> = STATE_BLOCKED_NEWDATA;<a name="l00262"></a>00262     <span class="keywordflow">return</span> 0;<a name="l00263"></a>00263   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {<a name="l00264"></a>00264     <span class="comment">/* There is new data that has not been consumed. */</span><a name="l00265"></a>00265     <span class="keywordflow">return</span> 1;<a name="l00266"></a>00266   } <span class="keywordflow">else</span> {<a name="l00267"></a>00267     <span class="comment">/* There is no new data. */</span><a name="l00268"></a>00268     <span class="keywordflow">return</span> 0;<a name="l00269"></a>00269   }<a name="l00270"></a>00270 }<a name="l00271"></a>00271 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00272"></a>00272 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_readto(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *<a class="code" href="a00082.html">psock</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c))<a name="l00273"></a>00273 {<a name="l00274"></a>00274   <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&amp;psock-&gt;psockpt);<a name="l00275"></a>00275 <a name="l00276"></a>00276   buf_setup(&amp;psock-&gt;buf, psock-&gt;bufptr, psock-&gt;bufsize);<a name="l00277"></a>00277   <a name="l00278"></a>00278   <span class="comment">/* XXX: Should add buf_checkmarker() before do{} loop, if</span><a name="l00279"></a>00279 <span class="comment">     incoming data has been handled while waiting for a write. */</span><a name="l00280"></a>00280 <a name="l00281"></a>00281   <span class="keywordflow">do</span> {<a name="l00282"></a>00282     <span class="keywordflow">if</span>(psock-&gt;readlen == 0) {<a name="l00283"></a>00283       <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&amp;psock-&gt;psockpt, <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(psock));<a name="l00284"></a>00284       psock-&gt;state = STATE_READ;<a name="l00285"></a>00285       psock-&gt;readptr = (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;<a name="l00286"></a>00286       psock-&gt;readlen = <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();<a name="l00287"></a>00287     }<a name="l00288"></a>00288   } <span class="keywordflow">while</span>((buf_bufto(&amp;psock-&gt;buf, c,<a name="l00289"></a>00289                      &amp;psock-&gt;readptr,<a name="l00290"></a>00290                      &amp;psock-&gt;readlen) &amp; BUF_FOUND) == 0);<a name="l00291"></a>00291   <a name="l00292"></a>00292   <span class="keywordflow">if</span>(<a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a>(psock) == 0) {<a name="l00293"></a>00293     psock-&gt;state = STATE_NONE;<a name="l00294"></a>00294     <a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&amp;psock-&gt;psockpt);<a name="l00295"></a>00295   }<a name="l00296"></a>00296   <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&amp;psock-&gt;psockpt);<a name="l00297"></a>00297 }<a name="l00298"></a>00298 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00299"></a>00299 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_readbuf(<span class="keyword">register</span> <span class="keyword">struct</span> psock *psock))<a name="l00300"></a>00300 {<a name="l00301"></a>00301   <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&amp;psock-&gt;psockpt);<a name="l00302"></a>00302 <a name="l00303"></a>00303   buf_setup(&amp;psock-&gt;buf, psock-&gt;bufptr, psock-&gt;bufsize);<a name="l00304"></a>00304   <a name="l00305"></a>00305   <span class="comment">/* XXX: Should add buf_checkmarker() before do{} loop, if</span><a name="l00306"></a>00306 <span class="comment">     incoming data has been handled while waiting for a write. */</span><a name="l00307"></a>00307 <a name="l00308"></a>00308   <span class="keywordflow">do</span> {<a name="l00309"></a>00309     <span class="keywordflow">if</span>(psock-&gt;readlen == 0) {<a name="l00310"></a>00310       <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&amp;psock-&gt;psockpt, <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(psock));<a name="l00311"></a>00311       printf(<span class="stringliteral">"Waited for newdata\n"</span>);<a name="l00312"></a>00312       psock-&gt;state = STATE_READ;<a name="l00313"></a>00313       psock-&gt;readptr = (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;<a name="l00314"></a>00314       psock-&gt;readlen = <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();<a name="l00315"></a>00315     }<a name="l00316"></a>00316   } <span class="keywordflow">while</span>(buf_bufdata(&amp;psock-&gt;buf, psock-&gt;bufsize,<a name="l00317"></a>00317                          &amp;psock-&gt;readptr,<a name="l00318"></a>00318                          &amp;psock-&gt;readlen) != BUF_FULL);<a name="l00319"></a>00319 <a name="l00320"></a>00320   <span class="keywordflow">if</span>(<a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a>(psock) == 0) {<a name="l00321"></a>00321     psock-&gt;state = STATE_NONE;<a name="l00322"></a>00322     <a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&amp;psock-&gt;psockpt);<a name="l00323"></a>00323   }<a name="l00324"></a>00324   <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&amp;psock-&gt;psockpt);<a name="l00325"></a>00325 }<a name="l00326"></a>00326 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00327"></a>00327 <span class="keywordtype">void</span><a name="l00328"></a>00328 psock_init(<span class="keyword">register</span> <span class="keyword">struct</span> psock *psock, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> buffersize)<a name="l00329"></a>00329 {<a name="l00330"></a>00330   psock-&gt;state = STATE_NONE;<a name="l00331"></a>00331   psock-&gt;readlen = 0;<a name="l00332"></a>00332   psock-&gt;bufptr = buffer;<a name="l00333"></a>00333   psock-&gt;bufsize = buffersize;<a name="l00334"></a>00334   buf_setup(&amp;psock-&gt;buf, buffer, buffersize);<a name="l00335"></a>00335   <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&amp;psock-&gt;pt);<a name="l00336"></a>00336   <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&amp;psock-&gt;psockpt);<a name="l00337"></a>00337 }<a name="l00338"></a>00338 <span class="comment">/*---------------------------------------------------------------------------*/</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address></body></html>

⌨️ 快捷键说明

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