diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
| commit | a6163888f3c56123b1db313743c6147ba498732c (patch) | |
| tree | ff7d15d991d1d09ba6cbc0cec80924f57445bfdd /third_party/uip-1.0/doc/html | |
| parent | c3e4c9a25c2910d2d66d52215b3406b13d5b23d5 (diff) | |
Add third_party libs
Diffstat (limited to 'third_party/uip-1.0/doc/html')
200 files changed, 33635 insertions, 0 deletions
diff --git a/third_party/uip-1.0/doc/html/a00036.html b/third_party/uip-1.0/doc/html/a00036.html new file mode 100644 index 0000000..fdef4e3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00036.html @@ -0,0 +1,120 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: hello-world.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>hello-world.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup helloworld</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * An example of how to write uIP applications</span>
+<a name="l00009"></a>00009 <span class="comment"> * with protosockets.</span>
+<a name="l00010"></a>00010 <span class="comment"> * \author</span>
+<a name="l00011"></a>00011 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="comment">/*</span>
+<a name="l00015"></a>00015 <span class="comment"> * This is a short example of how to write uIP applications using</span>
+<a name="l00016"></a>00016 <span class="comment"> * protosockets.</span>
+<a name="l00017"></a>00017 <span class="comment"> */</span>
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="comment">/*</span>
+<a name="l00020"></a>00020 <span class="comment"> * We define the application state (struct hello_world_state) in the</span>
+<a name="l00021"></a>00021 <span class="comment"> * hello-world.h file, so we need to include it here. We also include</span>
+<a name="l00022"></a>00022 <span class="comment"> * uip.h (since this cannot be included in hello-world.h) and</span>
+<a name="l00023"></a>00023 <span class="comment"> * <string.h>, since we use the memcpy() function in the code.</span>
+<a name="l00024"></a>00024 <span class="comment"> */</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="a00101.html">hello-world.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <string.h></span>
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="comment">/*</span>
+<a name="l00030"></a>00030 <span class="comment"> * Declaration of the protosocket function that handles the connection</span>
+<a name="l00031"></a>00031 <span class="comment"> * (defined at the end of the code).</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="keyword">static</span> <span class="keywordtype">int</span> handle_connection(<span class="keyword">struct</span> <a name="_a100"></a><a class="code" href="a00078.html">hello_world_state</a> *s);
+<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00035"></a>00035 <span class="comment">/*</span>
+<a name="l00036"></a>00036 <span class="comment"> * The initialization function. We must explicitly call this function</span>
+<a name="l00037"></a>00037 <span class="comment"> * from the system initialization code, some time after uip_init() is</span>
+<a name="l00038"></a>00038 <span class="comment"> * called.</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="keywordtype">void</span>
+<a name="l00041"></a>00041 <a name="a101"></a><a class="code" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a>(<span class="keywordtype">void</span>)
+<a name="l00042"></a>00042 {
+<a name="l00043"></a>00043 <span class="comment">/* We start to listen for connections on TCP port 1000. */</span>
+<a name="l00044"></a>00044 <a name="a102"></a><a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a name="a103"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1000));
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00047"></a>00047 <span class="comment">/*</span>
+<a name="l00048"></a>00048 <span class="comment"> * In hello-world.h we have defined the UIP_APPCALL macro to</span>
+<a name="l00049"></a>00049 <span class="comment"> * hello_world_appcall so that this funcion is uIP's application</span>
+<a name="l00050"></a>00050 <span class="comment"> * function. This function is called whenever an uIP event occurs</span>
+<a name="l00051"></a>00051 <span class="comment"> * (e.g. when a new connection is established, new data arrives, sent</span>
+<a name="l00052"></a>00052 <span class="comment"> * data is acknowledged, data needs to be retransmitted, etc.).</span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054 <span class="keywordtype">void</span>
+<a name="l00055"></a>00055 <a name="a104"></a><a class="code" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00056"></a>00056 {
+<a name="l00057"></a>00057 <span class="comment">/*</span>
+<a name="l00058"></a>00058 <span class="comment"> * The uip_conn structure has a field called "appstate" that holds</span>
+<a name="l00059"></a>00059 <span class="comment"> * the application state of the connection. We make a pointer to</span>
+<a name="l00060"></a>00060 <span class="comment"> * this to access it easier.</span>
+<a name="l00061"></a>00061 <span class="comment"> */</span>
+<a name="l00062"></a>00062 <span class="keyword">struct </span><a class="code" href="a00078.html">hello_world_state</a> *s = &(<a name="a105"></a><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a name="a106"></a><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="comment">/*</span>
+<a name="l00065"></a>00065 <span class="comment"> * If a new connection was just established, we should initialize</span>
+<a name="l00066"></a>00066 <span class="comment"> * the protosocket in our applications' state structure.</span>
+<a name="l00067"></a>00067 <span class="comment"> */</span>
+<a name="l00068"></a>00068 <span class="keywordflow">if</span>(<a name="a107"></a><a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00069"></a>00069 <a name="a108"></a><a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s-><a name="a109"></a><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, s-><a name="a110"></a><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>));
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="comment">/*</span>
+<a name="l00073"></a>00073 <span class="comment"> * Finally, we run the protosocket function that actually handles</span>
+<a name="l00074"></a>00074 <span class="comment"> * the communication. We pass it a pointer to the application state</span>
+<a name="l00075"></a>00075 <span class="comment"> * of the current connection.</span>
+<a name="l00076"></a>00076 <span class="comment"> */</span>
+<a name="l00077"></a>00077 handle_connection(s);
+<a name="l00078"></a>00078 }
+<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00080"></a>00080 <span class="comment">/*</span>
+<a name="l00081"></a>00081 <span class="comment"> * This is the protosocket function that handles the communication. A</span>
+<a name="l00082"></a>00082 <span class="comment"> * protosocket function must always return an int, but must never</span>
+<a name="l00083"></a>00083 <span class="comment"> * explicitly return - all return statements are hidden in the PSOCK</span>
+<a name="l00084"></a>00084 <span class="comment"> * macros.</span>
+<a name="l00085"></a>00085 <span class="comment"> */</span>
+<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00087"></a>00087 handle_connection(<span class="keyword">struct</span> <a class="code" href="a00078.html">hello_world_state</a> *s)
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 <a name="a111"></a><a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <a name="a112"></a><a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="stringliteral">"Hello. What is your name?\n"</span>);
+<a name="l00092"></a>00092 <a name="a113"></a><a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="charliteral">'\n'</span>);
+<a name="l00093"></a>00093 strncpy(s-><a name="a114"></a><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>, s-><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>));
+<a name="l00094"></a>00094 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="stringliteral">"Hello "</span>);
+<a name="l00095"></a>00095 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, s-><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>);
+<a name="l00096"></a>00096 <a name="a115"></a><a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00097"></a>00097
+<a name="l00098"></a>00098 <a name="a116"></a><a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00037.html b/third_party/uip-1.0/doc/html/a00037.html new file mode 100644 index 0000000..243168a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00037.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: hello-world.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>hello-world.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup helloworld Hello, world</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * A small example showing how to write applications with</span>
+<a name="l00011"></a>00011 <span class="comment"> * \ref psock "protosockets".</span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013 <span class="comment"></span>
+<a name="l00014"></a>00014 <span class="comment">/**</span>
+<a name="l00015"></a>00015 <span class="comment"> * \file</span>
+<a name="l00016"></a>00016 <span class="comment"> * Header file for an example of how to write uIP applications</span>
+<a name="l00017"></a>00017 <span class="comment"> * with protosockets.</span>
+<a name="l00018"></a>00018 <span class="comment"> * \author</span>
+<a name="l00019"></a>00019 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00020"></a>00020 <span class="comment"> */</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="preprocessor">#ifndef __HELLO_WORLD_H__</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define __HELLO_WORLD_H__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a>00025 <span class="comment">/* Since this file will be included by uip.h, we cannot include uip.h</span>
+<a name="l00026"></a>00026 <span class="comment"> here. But we might need to include uipopt.h if we need the u8_t and</span>
+<a name="l00027"></a>00027 <span class="comment"> u16_t datatypes. */</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00031"></a>00031
+<a name="l00032"></a>00032 <span class="comment">/* Next, we define the uip_tcp_appstate_t datatype. This is the state</span>
+<a name="l00033"></a>00033 <span class="comment"> of our application, and the memory required for this state is</span>
+<a name="l00034"></a>00034 <span class="comment"> allocated together with each TCP connection. One application state</span>
+<a name="l00035"></a>00035 <span class="comment"> for each TCP connection. */</span>
+<a name="l00036"></a>00036 <span class="keyword">typedef</span> <span class="keyword">struct </span><a name="_a117"></a><a class="code" href="a00078.html">hello_world_state</a> {
+<a name="l00037"></a>00037 <span class="keyword">struct </span><a name="_a118"></a><a class="code" href="a00082.html">psock</a> <a name="a119"></a><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>;
+<a name="l00038"></a>00038 <span class="keywordtype">char</span> <a name="a120"></a><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>[10];
+<a name="l00039"></a>00039 <span class="keywordtype">char</span> <a name="a121"></a><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>[40];
+<a name="l00040"></a>00040 } <a name="_a122"></a><a class="code" href="a00085.html">uip_tcp_appstate_t</a>;
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="comment">/* Finally we define the application function to be called by uIP. */</span>
+<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a name="a123"></a><a class="code" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00044"></a>00044 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL hello_world_appcall</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_APPCALL */</span>
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a name="a124"></a><a class="code" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#endif </span><span class="comment">/* __HELLO_WORLD_H__ */</span>
+<a name="l00051"></a>00051 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00052"></a>00052 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00038.html b/third_party/uip-1.0/doc/html/a00038.html new file mode 100644 index 0000000..e0621cb --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00038.html @@ -0,0 +1,282 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: smtp.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>smtp.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup smtp SMTP E-mail sender</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is</span>
+<a name="l00011"></a>00011 <span class="comment"> * the standard way of sending and transfering e-mail on the</span>
+<a name="l00012"></a>00012 <span class="comment"> * Internet. This simple example implementation is intended as an</span>
+<a name="l00013"></a>00013 <span class="comment"> * example of how to implement protocols in uIP, and is able to send</span>
+<a name="l00014"></a>00014 <span class="comment"> * out e-mail but has not been extensively tested.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016 <span class="comment"></span>
+<a name="l00017"></a>00017 <span class="comment">/**</span>
+<a name="l00018"></a>00018 <span class="comment"> * \file</span>
+<a name="l00019"></a>00019 <span class="comment"> * SMTP example implementation</span>
+<a name="l00020"></a>00020 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00021"></a>00021 <span class="comment"> */</span>
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <span class="comment">/*</span>
+<a name="l00024"></a>00024 <span class="comment"> * Copyright (c) 2004, Adam Dunkels.</span>
+<a name="l00025"></a>00025 <span class="comment"> * All rights reserved.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00028"></a>00028 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00029"></a>00029 <span class="comment"> * are met:</span>
+<a name="l00030"></a>00030 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00031"></a>00031 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00032"></a>00032 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00033"></a>00033 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00034"></a>00034 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00035"></a>00035 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00036"></a>00036 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00037"></a>00037 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00040"></a>00040 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00041"></a>00041 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00042"></a>00042 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00043"></a>00043 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00044"></a>00044 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00045"></a>00045 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00046"></a>00046 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00047"></a>00047 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00048"></a>00048 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00049"></a>00049 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00052"></a>00052 <span class="comment"> *</span>
+<a name="l00053"></a>00053 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00056"></a>00056 <span class="comment"> */</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include "<a class="code" href="a00105.html">smtp.h</a>"</span>
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#include "smtp-strings.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include <string.h></span>
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="keyword">static</span> <span class="keyword">struct </span><a name="_a163"></a><a class="code" href="a00085.html">smtp_state</a> s;
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">char</span> *localhostname;
+<a name="l00068"></a>00068 <span class="keyword">static</span> <a name="a164"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> smtpserver;
+<a name="l00069"></a>00069
+<a name="l00070"></a>00070 <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a>00073 <span class="preprocessor">#define ISO_period 0x2e</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#define ISO_2 0x32</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define ISO_3 0x33</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define ISO_4 0x34</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define ISO_5 0x35</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00082"></a>00082 <span class="keyword">static</span>
+<a name="l00083"></a>00083 <a name="a165"></a><a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(smtp_thread(<span class="keywordtype">void</span>))
+<a name="l00084"></a>00084 {
+<a name="l00085"></a>00085 <a name="a166"></a><a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s.psock);
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 <a name="a167"></a><a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a name="a168"></a><a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">if</span>(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+<a name="l00090"></a>00090 <a name="a169"></a><a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00091"></a>00091 <a name="a170"></a><a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(2);
+<a name="l00092"></a>00092 <a name="a171"></a><a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00093"></a>00093 }
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <a name="a172"></a><a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_helo);
+<a name="l00096"></a>00096 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, localhostname);
+<a name="l00097"></a>00097 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a name="a173"></a><a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00102"></a>00102 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00103"></a>00103 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(3);
+<a name="l00104"></a>00104 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_mail_from);
+<a name="l00108"></a>00108 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a name="a174"></a><a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>);
+<a name="l00109"></a>00109 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00114"></a>00114 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00115"></a>00115 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(4);
+<a name="l00116"></a>00116 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_rcpt_to);
+<a name="l00120"></a>00120 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a name="a175"></a><a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>);
+<a name="l00121"></a>00121 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00126"></a>00126 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00127"></a>00127 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(5);
+<a name="l00128"></a>00128 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keywordflow">if</span>(s.cc != 0) {
+<a name="l00132"></a>00132 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_rcpt_to);
+<a name="l00133"></a>00133 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.cc);
+<a name="l00134"></a>00134 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00139"></a>00139 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00140"></a>00140 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(6);
+<a name="l00141"></a>00141 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 }
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_data);
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a name="a176"></a><a class="code" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">ISO_3</a>) {
+<a name="l00150"></a>00150 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00151"></a>00151 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(7);
+<a name="l00152"></a>00152 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_to);
+<a name="l00156"></a>00156 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>);
+<a name="l00157"></a>00157 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 <span class="keywordflow">if</span>(s.cc != 0) {
+<a name="l00160"></a>00160 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_cc);
+<a name="l00161"></a>00161 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.cc);
+<a name="l00162"></a>00162 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00163"></a>00163 }
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_from);
+<a name="l00166"></a>00166 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>);
+<a name="l00167"></a>00167 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_subject);
+<a name="l00170"></a>00170 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a name="a177"></a><a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a>);
+<a name="l00171"></a>00171 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 <a name="a178"></a><a class="code" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">PSOCK_SEND</a>(&s.psock, s.<a name="a179"></a><a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a>, s.<a name="a180"></a><a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a>);
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnlperiodcrnl);
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00178"></a>00178 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00179"></a>00179 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00180"></a>00180 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(8);
+<a name="l00181"></a>00181 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_quit);
+<a name="l00185"></a>00185 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(<a name="a181"></a><a class="code" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">SMTP_ERR_OK</a>);
+<a name="l00186"></a>00186 <a name="a182"></a><a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s.psock);
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00189"></a>00189 <span class="keywordtype">void</span>
+<a name="l00190"></a>00190 <a name="a183"></a><a class="code" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00191"></a>00191 {
+<a name="l00192"></a>00192 <span class="keywordflow">if</span>(<a name="a184"></a><a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()) {
+<a name="l00193"></a>00193 s.connected = 0;
+<a name="l00194"></a>00194 <span class="keywordflow">return</span>;
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196 <span class="keywordflow">if</span>(<a name="a185"></a><a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>() || <a name="a186"></a><a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00197"></a>00197 s.connected = 0;
+<a name="l00198"></a>00198 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(1);
+<a name="l00199"></a>00199 <span class="keywordflow">return</span>;
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201 smtp_thread();
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00204"></a>00204 <span class="comment">/**</span>
+<a name="l00205"></a>00205 <span class="comment"> * Specificy an SMTP server and hostname.</span>
+<a name="l00206"></a>00206 <span class="comment"> *</span>
+<a name="l00207"></a>00207 <span class="comment"> * This function is used to configure the SMTP module with an SMTP</span>
+<a name="l00208"></a>00208 <span class="comment"> * server and the hostname of the host.</span>
+<a name="l00209"></a>00209 <span class="comment"> *</span>
+<a name="l00210"></a>00210 <span class="comment"> * \param lhostname The hostname of the uIP host.</span>
+<a name="l00211"></a>00211 <span class="comment"> *</span>
+<a name="l00212"></a>00212 <span class="comment"> * \param server A pointer to a 4-byte array representing the IP</span>
+<a name="l00213"></a>00213 <span class="comment"> * address of the SMTP server to be configured.</span>
+<a name="l00214"></a>00214 <span class="comment"> */</span>
+<a name="l00215"></a>00215 <span class="keywordtype">void</span>
+<a name="l00216"></a>00216 smtp_configure(<span class="keywordtype">char</span> *lhostname, <span class="keywordtype">void</span> *server)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 localhostname = lhostname;
+<a name="l00219"></a>00219 <a name="a187"></a><a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(smtpserver, server);
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00222"></a>00222 <span class="comment">/**</span>
+<a name="l00223"></a>00223 <span class="comment"> * Send an e-mail.</span>
+<a name="l00224"></a>00224 <span class="comment"> *</span>
+<a name="l00225"></a>00225 <span class="comment"> * \param to The e-mail address of the receiver of the e-mail.</span>
+<a name="l00226"></a>00226 <span class="comment"> * \param cc The e-mail address of the CC: receivers of the e-mail.</span>
+<a name="l00227"></a>00227 <span class="comment"> * \param from The e-mail address of the sender of the e-mail.</span>
+<a name="l00228"></a>00228 <span class="comment"> * \param subject The subject of the e-mail.</span>
+<a name="l00229"></a>00229 <span class="comment"> * \param msg The actual e-mail message.</span>
+<a name="l00230"></a>00230 <span class="comment"> * \param msglen The length of the e-mail message.</span>
+<a name="l00231"></a>00231 <span class="comment"> */</span>
+<a name="l00232"></a>00232 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
+<a name="l00233"></a>00233 smtp_send(<span class="keywordtype">char</span> *<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>, <span class="keywordtype">char</span> *cc, <span class="keywordtype">char</span> *<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>,
+<a name="l00234"></a>00234 <span class="keywordtype">char</span> *<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a>, <span class="keywordtype">char</span> *<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a>, <a name="a188"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a>)
+<a name="l00235"></a>00235 {
+<a name="l00236"></a>00236 <span class="keyword">struct </span><a name="a189"></a><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *conn;
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 conn = <a name="a190"></a><a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(smtpserver, <a name="a191"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(25));
+<a name="l00239"></a>00239 <span class="keywordflow">if</span>(conn == <a name="a192"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> 0;
+<a name="l00241"></a>00241 }
+<a name="l00242"></a>00242 s.connected = 1;
+<a name="l00243"></a>00243 s.<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a> = to;
+<a name="l00244"></a>00244 s.cc = cc;
+<a name="l00245"></a>00245 s.<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a> = from;
+<a name="l00246"></a>00246 s.<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a> = subject;
+<a name="l00247"></a>00247 s.<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a> = msg;
+<a name="l00248"></a>00248 s.<a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a> = msglen;
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <a name="a193"></a><a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s.psock, s.inputbuffer, <span class="keyword">sizeof</span>(s.inputbuffer));
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="keywordflow">return</span> 1;
+<a name="l00253"></a>00253 }
+<a name="l00254"></a>00254 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00255"></a>00255 <span class="keywordtype">void</span>
+<a name="l00256"></a>00256 <a name="a194"></a><a class="code" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a>(<span class="keywordtype">void</span>)
+<a name="l00257"></a>00257 {
+<a name="l00258"></a>00258 s.connected = 0;
+<a name="l00259"></a>00259 }
+<a name="l00260"></a>00260 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00261"></a>00261 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00262"></a>00262 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00039.html b/third_party/uip-1.0/doc/html/a00039.html new file mode 100644 index 0000000..04b8dfe --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00039.html @@ -0,0 +1,123 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: smtp.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>smtp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment"></span>
+<a name="l00002"></a>00002 <span class="comment">/**</span>
+<a name="l00003"></a>00003 <span class="comment"> * \addtogroup smtp</span>
+<a name="l00004"></a>00004 <span class="comment"> * @{</span>
+<a name="l00005"></a>00005 <span class="comment"> */</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="comment"></span>
+<a name="l00008"></a>00008 <span class="comment">/**</span>
+<a name="l00009"></a>00009 <span class="comment"> * \file</span>
+<a name="l00010"></a>00010 <span class="comment"> * SMTP header file</span>
+<a name="l00011"></a>00011 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="comment">/*</span>
+<a name="l00015"></a>00015 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00016"></a>00016 <span class="comment"> * All rights reserved.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00019"></a>00019 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00020"></a>00020 <span class="comment"> * are met:</span>
+<a name="l00021"></a>00021 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00022"></a>00022 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00023"></a>00023 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00024"></a>00024 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00025"></a>00025 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00026"></a>00026 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00027"></a>00027 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00028"></a>00028 <span class="comment"> * written permission.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00031"></a>00031 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00032"></a>00032 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00033"></a>00033 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00034"></a>00034 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00035"></a>00035 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00036"></a>00036 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00037"></a>00037 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00038"></a>00038 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00039"></a>00039 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00040"></a>00040 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00041"></a>00041 <span class="comment"> *</span>
+<a name="l00042"></a>00042 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#ifndef __SMTP_H__</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define __SMTP_H__</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00051"></a>00051 <span class="comment"></span>
+<a name="l00052"></a>00052 <span class="comment">/**</span>
+<a name="l00053"></a>00053 <span class="comment"> * Error number that signifies a non-error condition.</span>
+<a name="l00054"></a>00054 <span class="comment"> */</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#define SMTP_ERR_OK 0</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00057"></a>00057 <span class="comment">/**</span>
+<a name="l00058"></a>00058 <span class="comment"> * Callback function that is called when an e-mail transmission is</span>
+<a name="l00059"></a>00059 <span class="comment"> * done.</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> * This function must be implemented by the module that uses the SMTP</span>
+<a name="l00062"></a>00062 <span class="comment"> * module.</span>
+<a name="l00063"></a>00063 <span class="comment"> *</span>
+<a name="l00064"></a>00064 <span class="comment"> * \param error The number of the error if an error occured, or</span>
+<a name="l00065"></a>00065 <span class="comment"> * SMTP_ERR_OK.</span>
+<a name="l00066"></a>00066 <span class="comment"> */</span>
+<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a name="a195"></a><a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> error);
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a name="a196"></a><a class="code" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a>(<span class="keywordtype">void</span>);
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="comment">/* Functions. */</span>
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> smtp_configure(<span class="keywordtype">char</span> *localhostname, <a name="a197"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *smtpserver);
+<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> smtp_send(<span class="keywordtype">char</span> *to, <span class="keywordtype">char</span> *from,
+<a name="l00074"></a>00074 <span class="keywordtype">char</span> *subject, <span class="keywordtype">char</span> *msg,
+<a name="l00075"></a>00075 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> msglen);
+<a name="l00076"></a>00076 <span class="preprocessor">#define SMTP_SEND(to, cc, from, subject, msg) \</span>
+<a name="l00077"></a>00077 <span class="preprocessor"> smtp_send(to, cc, from, subject, msg, strlen(msg))</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span>
+<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a name="a198"></a><a class="code" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="keyword">struct </span><a name="_a199"></a><a class="code" href="a00085.html">smtp_state</a> {
+<a name="l00082"></a>00082 <a name="a200"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a name="a201"></a><a class="code" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">state</a>;
+<a name="l00083"></a>00083 <span class="keywordtype">char</span> *to;
+<a name="l00084"></a>00084 <span class="keywordtype">char</span> *from;
+<a name="l00085"></a>00085 <span class="keywordtype">char</span> *subject;
+<a name="l00086"></a>00086 <span class="keywordtype">char</span> *msg;
+<a name="l00087"></a>00087 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> msglen;
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a202"></a><a class="code" href="a00085.html#68204df6bde3e3c27271ebde10579a57">sentlen</a>, <a name="a203"></a><a class="code" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">textlen</a>;
+<a name="l00090"></a>00090 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a204"></a><a class="code" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">sendptr</a>;
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 };
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL smtp_appcall</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00085.html">smtp_state</a> <a name="a205"></a><a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="preprocessor">#endif </span><span class="comment">/* __SMTP_H__ */</span>
+<a name="l00102"></a>00102 <span class="comment"></span>
+<a name="l00103"></a>00103 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00040.html b/third_party/uip-1.0/doc/html/a00040.html new file mode 100644 index 0000000..c5d2eb8 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00040.html @@ -0,0 +1,459 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: webclient.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>webclient.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup webclient Web client</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * This example shows a HTTP client that is able to download web pages</span>
+<a name="l00011"></a>00011 <span class="comment"> * and files from web servers. It requires a number of callback</span>
+<a name="l00012"></a>00012 <span class="comment"> * functions to be implemented by the module that utilizes the code:</span>
+<a name="l00013"></a>00013 <span class="comment"> * webclient_datahandler(), webclient_connected(),</span>
+<a name="l00014"></a>00014 <span class="comment"> * webclient_timedout(), webclient_aborted(), webclient_closed().</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016 <span class="comment"></span>
+<a name="l00017"></a>00017 <span class="comment">/**</span>
+<a name="l00018"></a>00018 <span class="comment"> * \file</span>
+<a name="l00019"></a>00019 <span class="comment"> * Implementation of the HTTP client.</span>
+<a name="l00020"></a>00020 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00021"></a>00021 <span class="comment"> */</span>
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <span class="comment">/*</span>
+<a name="l00024"></a>00024 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00025"></a>00025 <span class="comment"> * All rights reserved.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00028"></a>00028 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00029"></a>00029 <span class="comment"> * are met:</span>
+<a name="l00030"></a>00030 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00031"></a>00031 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00032"></a>00032 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00033"></a>00033 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00034"></a>00034 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00035"></a>00035 <span class="comment"> * with the distribution.</span>
+<a name="l00036"></a>00036 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00037"></a>00037 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00038"></a>00038 <span class="comment"> * written permission.</span>
+<a name="l00039"></a>00039 <span class="comment"> *</span>
+<a name="l00040"></a>00040 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00041"></a>00041 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00042"></a>00042 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00043"></a>00043 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00044"></a>00044 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00045"></a>00045 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00046"></a>00046 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00047"></a>00047 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00048"></a>00048 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00049"></a>00049 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00050"></a>00050 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00051"></a>00051 <span class="comment"> *</span>
+<a name="l00052"></a>00052 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00053"></a>00053 <span class="comment"> *</span>
+<a name="l00054"></a>00054 <span class="comment"> * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> */</span>
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "uiplib.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="a00111.html">webclient.h</a>"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="a00103.html">resolv.h</a>"</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include <string.h></span>
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#define WEBCLIENT_TIMEOUT 100</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067 <span class="preprocessor">#define WEBCLIENT_STATE_STATUSLINE 0</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_HEADERS 1</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_DATA 2</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_CLOSE 3</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a>00072 <span class="preprocessor">#define HTTPFLAG_NONE 0</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_OK 1</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_MOVED 2</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_ERROR 3</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define ISO_space 0x20</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keyword">struct </span><a name="_a251"></a><a class="code" href="a00097.html">webclient_state</a> s;
+<a name="l00084"></a>00084
+<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00086"></a>00086 <span class="keywordtype">char</span> *
+<a name="l00087"></a>00087 <a name="a252"></a><a class="code" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a>(<span class="keywordtype">void</span>)
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 <span class="keywordflow">return</span> s.<a name="a253"></a><a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>;
+<a name="l00090"></a>00090 }
+<a name="l00091"></a>00091 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00092"></a>00092 <span class="keywordtype">char</span> *
+<a name="l00093"></a>00093 <a name="a254"></a><a class="code" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a>(<span class="keywordtype">void</span>)
+<a name="l00094"></a>00094 {
+<a name="l00095"></a>00095 <span class="keywordflow">return</span> s.<a name="a255"></a><a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>;
+<a name="l00096"></a>00096 }
+<a name="l00097"></a>00097 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00098"></a>00098 <span class="keywordtype">char</span> *
+<a name="l00099"></a>00099 <a name="a256"></a><a class="code" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a>(<span class="keywordtype">void</span>)
+<a name="l00100"></a>00100 {
+<a name="l00101"></a>00101 <span class="keywordflow">return</span> s.<a name="a257"></a><a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>;
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00104"></a>00104 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00105"></a>00105 <a name="a258"></a><a class="code" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a>(<span class="keywordtype">void</span>)
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107 <span class="keywordflow">return</span> s.<a name="a259"></a><a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>;
+<a name="l00108"></a>00108 }
+<a name="l00109"></a>00109 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00110"></a>00110 <span class="keywordtype">void</span>
+<a name="l00111"></a>00111 <a name="a260"></a><a class="code" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a>(<span class="keywordtype">void</span>)
+<a name="l00112"></a>00112 {
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 }
+<a name="l00115"></a>00115 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00116"></a>00116 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00117"></a>00117 init_connection(<span class="keywordtype">void</span>)
+<a name="l00118"></a>00118 {
+<a name="l00119"></a>00119 s.<a name="a261"></a><a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a name="a262"></a><a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>;
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 s.<a name="a263"></a><a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> = <span class="keyword">sizeof</span>(http_get) - 1 + 1 +
+<a name="l00122"></a>00122 <span class="keyword">sizeof</span>(http_10) - 1 +
+<a name="l00123"></a>00123 <span class="keyword">sizeof</span>(http_crnl) - 1 +
+<a name="l00124"></a>00124 <span class="keyword">sizeof</span>(http_host) - 1 +
+<a name="l00125"></a>00125 <span class="keyword">sizeof</span>(http_crnl) - 1 +
+<a name="l00126"></a>00126 strlen(http_user_agent_fields) +
+<a name="l00127"></a>00127 strlen(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>) + strlen(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>);
+<a name="l00128"></a>00128 s.<a name="a264"></a><a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a> = 0;
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 s.<a name="a265"></a><a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00131"></a>00131 }
+<a name="l00132"></a>00132 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00133"></a>00133 <span class="keywordtype">void</span>
+<a name="l00134"></a>00134 <a name="a266"></a><a class="code" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a>(<span class="keywordtype">void</span>)
+<a name="l00135"></a>00135 {
+<a name="l00136"></a>00136 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a name="a267"></a><a class="code" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a>;
+<a name="l00137"></a>00137 }
+<a name="l00138"></a>00138 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
+<a name="l00140"></a>00140 <a name="a268"></a><a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(<span class="keywordtype">char</span> *<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, u16_t <a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>, <span class="keywordtype">char</span> *<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>)
+<a name="l00141"></a>00141 {
+<a name="l00142"></a>00142 <span class="keyword">struct </span><a name="a269"></a><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *conn;
+<a name="l00143"></a>00143 <a name="a270"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ipaddr;
+<a name="l00144"></a>00144 <span class="keyword">static</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+<a name="l00145"></a>00145
+<a name="l00146"></a>00146 <span class="comment">/* First check if the host is an IP address. */</span>
+<a name="l00147"></a>00147 ipaddr = &addr;
+<a name="l00148"></a>00148 <span class="keywordflow">if</span>(uiplib_ipaddrconv(host, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)addr) == 0) {
+<a name="l00149"></a>00149 ipaddr = (<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *)<a name="a271"></a><a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(host);
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordflow">if</span>(ipaddr == <a name="a272"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> 0;
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 conn = <a name="a273"></a><a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(ipaddr, <a name="a274"></a><a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(port));
+<a name="l00157"></a>00157
+<a name="l00158"></a>00158 <span class="keywordflow">if</span>(conn == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00159"></a>00159 <span class="keywordflow">return</span> 0;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 s.<a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a> = port;
+<a name="l00163"></a>00163 strncpy(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, file, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00164"></a>00164 strncpy(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, host, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>));
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 init_connection();
+<a name="l00167"></a>00167 <span class="keywordflow">return</span> 1;
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *
+<a name="l00171"></a>00171 copy_string(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *dest,
+<a name="l00172"></a>00172 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> len)
+<a name="l00173"></a>00173 {
+<a name="l00174"></a>00174 strncpy(dest, src, len);
+<a name="l00175"></a>00175 <span class="keywordflow">return</span> dest + len;
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00179"></a>00179 senddata(<span class="keywordtype">void</span>)
+<a name="l00180"></a>00180 {
+<a name="l00181"></a>00181 u16_t len;
+<a name="l00182"></a>00182 <span class="keywordtype">char</span> *getrequest;
+<a name="l00183"></a>00183 <span class="keywordtype">char</span> *cptr;
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > 0) {
+<a name="l00186"></a>00186 cptr = getrequest = (<span class="keywordtype">char</span> *)<a name="a275"></a><a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 cptr = copy_string(cptr, http_get, <span class="keyword">sizeof</span>(http_get) - 1);
+<a name="l00189"></a>00189 cptr = copy_string(cptr, s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, strlen(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00190"></a>00190 *cptr++ = <a name="a276"></a><a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a>;
+<a name="l00191"></a>00191 cptr = copy_string(cptr, http_10, <span class="keyword">sizeof</span>(http_10) - 1);
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 cptr = copy_string(cptr, http_crnl, <span class="keyword">sizeof</span>(http_crnl) - 1);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 cptr = copy_string(cptr, http_host, <span class="keyword">sizeof</span>(http_host) - 1);
+<a name="l00196"></a>00196 cptr = copy_string(cptr, s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, strlen(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>));
+<a name="l00197"></a>00197 cptr = copy_string(cptr, http_crnl, <span class="keyword">sizeof</span>(http_crnl) - 1);
+<a name="l00198"></a>00198
+<a name="l00199"></a>00199 cptr = copy_string(cptr, http_user_agent_fields,
+<a name="l00200"></a>00200 strlen(http_user_agent_fields));
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 len = s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > <a name="a277"></a><a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()?
+<a name="l00203"></a>00203 <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>():
+<a name="l00204"></a>00204 s.getrequestleft;
+<a name="l00205"></a>00205 <a name="a278"></a><a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(&(getrequest[s.<a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a>]), len);
+<a name="l00206"></a>00206 }
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00209"></a>00209 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00210"></a>00210 acked(<span class="keywordtype">void</span>)
+<a name="l00211"></a>00211 {
+<a name="l00212"></a>00212 u16_t len;
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > 0) {
+<a name="l00215"></a>00215 len = s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()?
+<a name="l00216"></a>00216 <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>():
+<a name="l00217"></a>00217 s.getrequestleft;
+<a name="l00218"></a>00218 s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> -= len;
+<a name="l00219"></a>00219 s.<a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a> += len;
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221 }
+<a name="l00222"></a>00222 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00223"></a>00223 <span class="keyword">static</span> u16_t
+<a name="l00224"></a>00224 parse_statusline(u16_t len)
+<a name="l00225"></a>00225 {
+<a name="l00226"></a>00226 <span class="keywordtype">char</span> *cptr;
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> < <span class="keyword">sizeof</span>(s.<a name="a279"></a><a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>)) {
+<a name="l00229"></a>00229 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] = *(<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00230"></a>00230 ++((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00231"></a>00231 --len;
+<a name="l00232"></a>00232 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] == <a name="a280"></a><a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>) {
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 <span class="keywordflow">if</span>((strncmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_10,
+<a name="l00235"></a>00235 <span class="keyword">sizeof</span>(http_10) - 1) == 0) ||
+<a name="l00236"></a>00236 (strncmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_11,
+<a name="l00237"></a>00237 <span class="keyword">sizeof</span>(http_11) - 1) == 0)) {
+<a name="l00238"></a>00238 cptr = &(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[9]);
+<a name="l00239"></a>00239 s.<a name="a281"></a><a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a name="a282"></a><a class="code" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">HTTPFLAG_NONE</a>;
+<a name="l00240"></a>00240 <span class="keywordflow">if</span>(strncmp(cptr, http_200, <span class="keyword">sizeof</span>(http_200) - 1) == 0) {
+<a name="l00241"></a>00241 <span class="comment">/* 200 OK */</span>
+<a name="l00242"></a>00242 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a name="a283"></a><a class="code" href="a00163.html#gda99954e0f6905091885934e86c278cc">HTTPFLAG_OK</a>;
+<a name="l00243"></a>00243 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(cptr, http_301, <span class="keyword">sizeof</span>(http_301) - 1) == 0 ||
+<a name="l00244"></a>00244 strncmp(cptr, http_302, <span class="keyword">sizeof</span>(http_302) - 1) == 0) {
+<a name="l00245"></a>00245 <span class="comment">/* 301 Moved permanently or 302 Found. Location: header line</span>
+<a name="l00246"></a>00246 <span class="comment"> will contain thw new location. */</span>
+<a name="l00247"></a>00247 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a name="a284"></a><a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>;
+<a name="l00248"></a>00248 } <span class="keywordflow">else</span> {
+<a name="l00249"></a>00249 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 1] = 0;
+<a name="l00250"></a>00250 }
+<a name="l00251"></a>00251 } <span class="keywordflow">else</span> {
+<a name="l00252"></a>00252 <a name="a285"></a><a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00253"></a>00253 <a name="a286"></a><a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>();
+<a name="l00254"></a>00254 <span class="keywordflow">return</span> 0;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <span class="comment">/* We're done parsing the status line, so we reset the pointer</span>
+<a name="l00258"></a>00258 <span class="comment"> and start parsing the HTTP headers.*/</span>
+<a name="l00259"></a>00259 s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00260"></a>00260 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a name="a287"></a><a class="code" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a>;
+<a name="l00261"></a>00261 <span class="keywordflow">break</span>;
+<a name="l00262"></a>00262 } <span class="keywordflow">else</span> {
+<a name="l00263"></a>00263 ++s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265 }
+<a name="l00266"></a>00266 <span class="keywordflow">return</span> len;
+<a name="l00267"></a>00267 }
+<a name="l00268"></a>00268 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00269"></a>00269 <span class="keyword">static</span> <span class="keywordtype">char</span>
+<a name="l00270"></a>00270 casecmp(<span class="keywordtype">char</span> *str1, <span class="keyword">const</span> <span class="keywordtype">char</span> *str2, <span class="keywordtype">char</span> len)
+<a name="l00271"></a>00271 {
+<a name="l00272"></a>00272 <span class="keyword">static</span> <span class="keywordtype">char</span> c;
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 <span class="keywordflow">while</span>(len > 0) {
+<a name="l00275"></a>00275 c = *str1;
+<a name="l00276"></a>00276 <span class="comment">/* Force lower-case characters. */</span>
+<a name="l00277"></a>00277 <span class="keywordflow">if</span>(c & 0x40) {
+<a name="l00278"></a>00278 c |= 0x20;
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280 <span class="keywordflow">if</span>(*str2 != c) {
+<a name="l00281"></a>00281 <span class="keywordflow">return</span> 1;
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 ++str1;
+<a name="l00284"></a>00284 ++str2;
+<a name="l00285"></a>00285 --len;
+<a name="l00286"></a>00286 }
+<a name="l00287"></a>00287 <span class="keywordflow">return</span> 0;
+<a name="l00288"></a>00288 }
+<a name="l00289"></a>00289 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00290"></a>00290 <span class="keyword">static</span> u16_t
+<a name="l00291"></a>00291 parse_headers(u16_t len)
+<a name="l00292"></a>00292 {
+<a name="l00293"></a>00293 <span class="keywordtype">char</span> *cptr;
+<a name="l00294"></a>00294 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> < <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>)) {
+<a name="l00297"></a>00297 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] = *(<span class="keywordtype">char</span> *)uip_appdata;
+<a name="l00298"></a>00298 ++((<span class="keywordtype">char</span> *)uip_appdata);
+<a name="l00299"></a>00299 --len;
+<a name="l00300"></a>00300 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] == <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>) {
+<a name="l00301"></a>00301 <span class="comment">/* We have an entire HTTP header line in s.httpheaderline, so</span>
+<a name="l00302"></a>00302 <span class="comment"> we parse it. */</span>
+<a name="l00303"></a>00303 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[0] == <a name="a288"></a><a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>) {
+<a name="l00304"></a>00304 <span class="comment">/* This was the last header line (i.e., and empty "\r\n"), so</span>
+<a name="l00305"></a>00305 <span class="comment"> we are done with the headers and proceed with the actual</span>
+<a name="l00306"></a>00306 <span class="comment"> data. */</span>
+<a name="l00307"></a>00307 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a name="a289"></a><a class="code" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a>;
+<a name="l00308"></a>00308 <span class="keywordflow">return</span> len;
+<a name="l00309"></a>00309 }
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 1] = 0;
+<a name="l00312"></a>00312 <span class="comment">/* Check for specific HTTP header fields. */</span>
+<a name="l00313"></a>00313 <span class="keywordflow">if</span>(casecmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_content_type,
+<a name="l00314"></a>00314 <span class="keyword">sizeof</span>(http_content_type) - 1) == 0) {
+<a name="l00315"></a>00315 <span class="comment">/* Found Content-type field. */</span>
+<a name="l00316"></a>00316 cptr = strchr(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, <span class="charliteral">';'</span>);
+<a name="l00317"></a>00317 <span class="keywordflow">if</span>(cptr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00318"></a>00318 *cptr = 0;
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 strncpy(s.<a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>, s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a> +
+<a name="l00321"></a>00321 <span class="keyword">sizeof</span>(http_content_type) - 1, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>));
+<a name="l00322"></a>00322 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(casecmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_location,
+<a name="l00323"></a>00323 <span class="keyword">sizeof</span>(http_location) - 1) == 0) {
+<a name="l00324"></a>00324 cptr = s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a> +
+<a name="l00325"></a>00325 <span class="keyword">sizeof</span>(http_location) - 1;
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 <span class="keywordflow">if</span>(strncmp(cptr, http_http, 7) == 0) {
+<a name="l00328"></a>00328 cptr += 7;
+<a name="l00329"></a>00329 <span class="keywordflow">for</span>(i = 0; i < s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 7; ++i) {
+<a name="l00330"></a>00330 <span class="keywordflow">if</span>(*cptr == 0 ||
+<a name="l00331"></a>00331 *cptr == <span class="charliteral">'/'</span> ||
+<a name="l00332"></a>00332 *cptr == <span class="charliteral">' '</span> ||
+<a name="l00333"></a>00333 *cptr == <span class="charliteral">':'</span>) {
+<a name="l00334"></a>00334 s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>[i] = 0;
+<a name="l00335"></a>00335 <span class="keywordflow">break</span>;
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>[i] = *cptr;
+<a name="l00338"></a>00338 ++cptr;
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341 strncpy(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, cptr, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00342"></a>00342 <span class="comment">/* s.file[s.httpheaderlineptr - i] = 0;*/</span>
+<a name="l00343"></a>00343 }
+<a name="l00344"></a>00344
+<a name="l00345"></a>00345
+<a name="l00346"></a>00346 <span class="comment">/* We're done parsing, so we reset the pointer and start the</span>
+<a name="l00347"></a>00347 <span class="comment"> next line. */</span>
+<a name="l00348"></a>00348 s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00349"></a>00349 } <span class="keywordflow">else</span> {
+<a name="l00350"></a>00350 ++s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00351"></a>00351 }
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 <span class="keywordflow">return</span> len;
+<a name="l00354"></a>00354 }
+<a name="l00355"></a>00355 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00356"></a>00356 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00357"></a>00357 newdata(<span class="keywordtype">void</span>)
+<a name="l00358"></a>00358 {
+<a name="l00359"></a>00359 u16_t len;
+<a name="l00360"></a>00360
+<a name="l00361"></a>00361 len = <a name="a290"></a><a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>) {
+<a name="l00364"></a>00364 len = parse_statusline(len);
+<a name="l00365"></a>00365 }
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a> && len > 0) {
+<a name="l00368"></a>00368 len = parse_headers(len);
+<a name="l00369"></a>00369 }
+<a name="l00370"></a>00370
+<a name="l00371"></a>00371 <span class="keywordflow">if</span>(len > 0 && s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a> &&
+<a name="l00372"></a>00372 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> != <a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>) {
+<a name="l00373"></a>00373 <a name="a291"></a><a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>((<span class="keywordtype">char</span> *)uip_appdata, len);
+<a name="l00374"></a>00374 }
+<a name="l00375"></a>00375 }
+<a name="l00376"></a>00376 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00377"></a>00377 <span class="keywordtype">void</span>
+<a name="l00378"></a>00378 <a name="a292"></a><a class="code" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00379"></a>00379 {
+<a name="l00380"></a>00380 <span class="keywordflow">if</span>(<a name="a293"></a><a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00381"></a>00381 s.<a name="a294"></a><a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00382"></a>00382 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>;
+<a name="l00383"></a>00383 senddata();
+<a name="l00384"></a>00384 <a name="a295"></a><a class="code" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a>();
+<a name="l00385"></a>00385 <span class="keywordflow">return</span>;
+<a name="l00386"></a>00386 }
+<a name="l00387"></a>00387
+<a name="l00388"></a>00388 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a>) {
+<a name="l00389"></a>00389 <a name="a296"></a><a class="code" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a>();
+<a name="l00390"></a>00390 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00391"></a>00391 <span class="keywordflow">return</span>;
+<a name="l00392"></a>00392 }
+<a name="l00393"></a>00393
+<a name="l00394"></a>00394 <span class="keywordflow">if</span>(<a name="a297"></a><a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>()) {
+<a name="l00395"></a>00395 <a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>();
+<a name="l00396"></a>00396 }
+<a name="l00397"></a>00397 <span class="keywordflow">if</span>(<a name="a298"></a><a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00398"></a>00398 <a name="a299"></a><a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>();
+<a name="l00399"></a>00399 }
+<a name="l00400"></a>00400
+<a name="l00401"></a>00401
+<a name="l00402"></a>00402 <span class="keywordflow">if</span>(<a name="a300"></a><a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00403"></a>00403 s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00404"></a>00404 acked();
+<a name="l00405"></a>00405 }
+<a name="l00406"></a>00406 <span class="keywordflow">if</span>(<a name="a301"></a><a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00407"></a>00407 s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00408"></a>00408 newdata();
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410 <span class="keywordflow">if</span>(<a name="a302"></a><a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>() ||
+<a name="l00411"></a>00411 <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() ||
+<a name="l00412"></a>00412 <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00413"></a>00413 senddata();
+<a name="l00414"></a>00414 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a name="a303"></a><a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00415"></a>00415 ++s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a>;
+<a name="l00416"></a>00416 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> == <a name="a304"></a><a class="code" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">WEBCLIENT_TIMEOUT</a>) {
+<a name="l00417"></a>00417 <a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>();
+<a name="l00418"></a>00418 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00419"></a>00419 <span class="keywordflow">return</span>;
+<a name="l00420"></a>00420 }
+<a name="l00421"></a>00421 <span class="comment">/* senddata();*/</span>
+<a name="l00422"></a>00422 }
+<a name="l00423"></a>00423
+<a name="l00424"></a>00424 <span class="keywordflow">if</span>(<a name="a305"></a><a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()) {
+<a name="l00425"></a>00425 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> != <a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>) {
+<a name="l00426"></a>00426 <span class="comment">/* Send NULL data to signal EOF. */</span>
+<a name="l00427"></a>00427 <a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>(<a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
+<a name="l00428"></a>00428 } <span class="keywordflow">else</span> {
+<a name="l00429"></a>00429 <span class="keywordflow">if</span>(<a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>) == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00430"></a>00430 <a name="a306"></a><a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>);
+<a name="l00431"></a>00431 }
+<a name="l00432"></a>00432 <a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, s.<a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>, s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>);
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434 }
+<a name="l00435"></a>00435 }
+<a name="l00436"></a>00436 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00437"></a>00437 <span class="comment"></span>
+<a name="l00438"></a>00438 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00439"></a>00439 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00041.html b/third_party/uip-1.0/doc/html/a00041.html new file mode 100644 index 0000000..8d0125a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00041.html @@ -0,0 +1,248 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: webclient.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>webclient.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup webclient</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * Header file for the HTTP client.</span>
+<a name="l00009"></a>00009 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00010"></a>00010 <span class="comment"> */</span>
+<a name="l00011"></a>00011
+<a name="l00012"></a>00012 <span class="comment">/*</span>
+<a name="l00013"></a>00013 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00014"></a>00014 <span class="comment"> * All rights reserved.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00017"></a>00017 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00018"></a>00018 <span class="comment"> * are met:</span>
+<a name="l00019"></a>00019 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00020"></a>00020 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00021"></a>00021 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00022"></a>00022 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00023"></a>00023 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00024"></a>00024 <span class="comment"> * with the distribution.</span>
+<a name="l00025"></a>00025 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00026"></a>00026 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00027"></a>00027 <span class="comment"> * written permission.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00030"></a>00030 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00031"></a>00031 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00032"></a>00032 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00033"></a>00033 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00034"></a>00034 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00035"></a>00035 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00036"></a>00036 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00037"></a>00037 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00038"></a>00038 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00039"></a>00039 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00040"></a>00040 <span class="comment"> *</span>
+<a name="l00041"></a>00041 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> */</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#ifndef __WEBCLIENT_H__</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define __WEBCLIENT_H__</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#include "webclient-strings.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="preprocessor">#define WEBCLIENT_CONF_MAX_URLLEN 100</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 <span class="keyword">struct </span><a name="_a307"></a><a class="code" href="a00097.html">webclient_state</a> {
+<a name="l00056"></a>00056 u8_t <a name="_a308"></a><a class="code" href="a00087.html">timer</a>;
+<a name="l00057"></a>00057 u8_t <a name="a309"></a><a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a>;
+<a name="l00058"></a>00058 u8_t <a name="a310"></a><a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a>;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 u16_t port;
+<a name="l00061"></a>00061 <span class="keywordtype">char</span> host[40];
+<a name="l00062"></a>00062 <span class="keywordtype">char</span> file[<a name="a311"></a><a class="code" href="a00163.html#g5a5bfd7e9060903893481db90645187b">WEBCLIENT_CONF_MAX_URLLEN</a>];
+<a name="l00063"></a>00063 u16_t <a name="a312"></a><a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a>;
+<a name="l00064"></a>00064 u16_t <a name="a313"></a><a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a>;
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="keywordtype">char</span> <a name="a314"></a><a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[200];
+<a name="l00067"></a>00067 u16_t <a name="a315"></a><a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 <span class="keywordtype">char</span> <a name="a316"></a><a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>[32];
+<a name="l00070"></a>00070 };
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00097.html">webclient_state</a> <a name="a317"></a><a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00073"></a>00073 <span class="preprocessor">#define UIP_APPCALL webclient_appcall</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/**</span>
+<a name="l00076"></a>00076 <span class="comment"> * Callback function that is called from the webclient code when HTTP</span>
+<a name="l00077"></a>00077 <span class="comment"> * data has been received.</span>
+<a name="l00078"></a>00078 <span class="comment"> *</span>
+<a name="l00079"></a>00079 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00080"></a>00080 <span class="comment"> * webclient code. The function is called from the webclient module</span>
+<a name="l00081"></a>00081 <span class="comment"> * when HTTP data has been received. The function is not called when</span>
+<a name="l00082"></a>00082 <span class="comment"> * HTTP headers are received, only for the actual data.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * \note This function is called many times, repetedly, when data is</span>
+<a name="l00085"></a>00085 <span class="comment"> * being received, and not once when all data has been received.</span>
+<a name="l00086"></a>00086 <span class="comment"> *</span>
+<a name="l00087"></a>00087 <span class="comment"> * \param data A pointer to the data that has been received.</span>
+<a name="l00088"></a>00088 <span class="comment"> * \param len The length of the data that has been received.</span>
+<a name="l00089"></a>00089 <span class="comment"> */</span>
+<a name="l00090"></a>00090 <span class="keywordtype">void</span> <a name="a318"></a><a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>(<span class="keywordtype">char</span> *data, u16_t len);
+<a name="l00091"></a>00091 <span class="comment"></span>
+<a name="l00092"></a>00092 <span class="comment">/**</span>
+<a name="l00093"></a>00093 <span class="comment"> * Callback function that is called from the webclient code when the</span>
+<a name="l00094"></a>00094 <span class="comment"> * HTTP connection has been connected to the web server.</span>
+<a name="l00095"></a>00095 <span class="comment"> *</span>
+<a name="l00096"></a>00096 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00097"></a>00097 <span class="comment"> * webclient code.</span>
+<a name="l00098"></a>00098 <span class="comment"> */</span>
+<a name="l00099"></a>00099 <span class="keywordtype">void</span> <a name="a319"></a><a class="code" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a>(<span class="keywordtype">void</span>);
+<a name="l00100"></a>00100 <span class="comment"></span>
+<a name="l00101"></a>00101 <span class="comment">/**</span>
+<a name="l00102"></a>00102 <span class="comment"> * Callback function that is called from the webclient code if the</span>
+<a name="l00103"></a>00103 <span class="comment"> * HTTP connection to the web server has timed out.</span>
+<a name="l00104"></a>00104 <span class="comment"> *</span>
+<a name="l00105"></a>00105 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00106"></a>00106 <span class="comment"> * webclient code.</span>
+<a name="l00107"></a>00107 <span class="comment"> */</span>
+<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a name="a320"></a><a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>(<span class="keywordtype">void</span>);
+<a name="l00109"></a>00109 <span class="comment"></span>
+<a name="l00110"></a>00110 <span class="comment">/**</span>
+<a name="l00111"></a>00111 <span class="comment"> * Callback function that is called from the webclient code if the</span>
+<a name="l00112"></a>00112 <span class="comment"> * HTTP connection to the web server has been aborted by the web</span>
+<a name="l00113"></a>00113 <span class="comment"> * server.</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00116"></a>00116 <span class="comment"> * webclient code.</span>
+<a name="l00117"></a>00117 <span class="comment"> */</span>
+<a name="l00118"></a>00118 <span class="keywordtype">void</span> <a name="a321"></a><a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>(<span class="keywordtype">void</span>);
+<a name="l00119"></a>00119 <span class="comment"></span>
+<a name="l00120"></a>00120 <span class="comment">/**</span>
+<a name="l00121"></a>00121 <span class="comment"> * Callback function that is called from the webclient code when the</span>
+<a name="l00122"></a>00122 <span class="comment"> * HTTP connection to the web server has been closed.</span>
+<a name="l00123"></a>00123 <span class="comment"> *</span>
+<a name="l00124"></a>00124 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00125"></a>00125 <span class="comment"> * webclient code.</span>
+<a name="l00126"></a>00126 <span class="comment"> */</span>
+<a name="l00127"></a>00127 <span class="keywordtype">void</span> <a name="a322"></a><a class="code" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a>(<span class="keywordtype">void</span>);
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 <span class="comment"></span>
+<a name="l00131"></a>00131 <span class="comment">/**</span>
+<a name="l00132"></a>00132 <span class="comment"> * Initialize the webclient module.</span>
+<a name="l00133"></a>00133 <span class="comment"> */</span>
+<a name="l00134"></a>00134 <span class="keywordtype">void</span> <a name="a323"></a><a class="code" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a>(<span class="keywordtype">void</span>);
+<a name="l00135"></a>00135 <span class="comment"></span>
+<a name="l00136"></a>00136 <span class="comment">/**</span>
+<a name="l00137"></a>00137 <span class="comment"> * Open an HTTP connection to a web server and ask for a file using</span>
+<a name="l00138"></a>00138 <span class="comment"> * the GET method.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * This function opens an HTTP connection to the specified web server</span>
+<a name="l00141"></a>00141 <span class="comment"> * and requests the specified file using the GET method. When the HTTP</span>
+<a name="l00142"></a>00142 <span class="comment"> * connection has been connected, the webclient_connected() callback</span>
+<a name="l00143"></a>00143 <span class="comment"> * function is called and when the HTTP data arrives the</span>
+<a name="l00144"></a>00144 <span class="comment"> * webclient_datahandler() callback function is called.</span>
+<a name="l00145"></a>00145 <span class="comment"> *</span>
+<a name="l00146"></a>00146 <span class="comment"> * The callback function webclient_timedout() is called if the web</span>
+<a name="l00147"></a>00147 <span class="comment"> * server could not be contacted, and the webclient_aborted() callback</span>
+<a name="l00148"></a>00148 <span class="comment"> * function is called if the HTTP connection is aborted by the web</span>
+<a name="l00149"></a>00149 <span class="comment"> * server.</span>
+<a name="l00150"></a>00150 <span class="comment"> *</span>
+<a name="l00151"></a>00151 <span class="comment"> * When the HTTP request has been completed and the HTTP connection is</span>
+<a name="l00152"></a>00152 <span class="comment"> * closed, the webclient_closed() callback function will be called.</span>
+<a name="l00153"></a>00153 <span class="comment"> *</span>
+<a name="l00154"></a>00154 <span class="comment"> * \note If the function is passed a host name, it must already be in</span>
+<a name="l00155"></a>00155 <span class="comment"> * the resolver cache in order for the function to connect to the web</span>
+<a name="l00156"></a>00156 <span class="comment"> * server. It is therefore up to the calling module to implement the</span>
+<a name="l00157"></a>00157 <span class="comment"> * resolver calls and the signal handler used for reporting a resolv</span>
+<a name="l00158"></a>00158 <span class="comment"> * query answer.</span>
+<a name="l00159"></a>00159 <span class="comment"> *</span>
+<a name="l00160"></a>00160 <span class="comment"> * \param host A pointer to a string containing either a host name or</span>
+<a name="l00161"></a>00161 <span class="comment"> * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).</span>
+<a name="l00162"></a>00162 <span class="comment"> *</span>
+<a name="l00163"></a>00163 <span class="comment"> * \param port The port number to which to connect, in host byte order.</span>
+<a name="l00164"></a>00164 <span class="comment"> *</span>
+<a name="l00165"></a>00165 <span class="comment"> * \param file A pointer to the name of the file to get.</span>
+<a name="l00166"></a>00166 <span class="comment"> *</span>
+<a name="l00167"></a>00167 <span class="comment"> * \retval 0 if the host name could not be found in the cache, or</span>
+<a name="l00168"></a>00168 <span class="comment"> * if a TCP connection could not be created.</span>
+<a name="l00169"></a>00169 <span class="comment"> *</span>
+<a name="l00170"></a>00170 <span class="comment"> * \retval 1 if the connection was initiated.</span>
+<a name="l00171"></a>00171 <span class="comment"> */</span>
+<a name="l00172"></a>00172 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a name="a324"></a><a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(<span class="keywordtype">char</span> *host, u16_t port, <span class="keywordtype">char</span> *file);
+<a name="l00173"></a>00173 <span class="comment"></span>
+<a name="l00174"></a>00174 <span class="comment">/**</span>
+<a name="l00175"></a>00175 <span class="comment"> * Close the currently open HTTP connection.</span>
+<a name="l00176"></a>00176 <span class="comment"> */</span>
+<a name="l00177"></a>00177 <span class="keywordtype">void</span> <a name="a325"></a><a class="code" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a>(<span class="keywordtype">void</span>);
+<a name="l00178"></a>00178 <span class="keywordtype">void</span> <a name="a326"></a><a class="code" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00179"></a>00179 <span class="comment"></span>
+<a name="l00180"></a>00180 <span class="comment">/**</span>
+<a name="l00181"></a>00181 <span class="comment"> * Obtain the MIME type of the current HTTP data stream.</span>
+<a name="l00182"></a>00182 <span class="comment"> *</span>
+<a name="l00183"></a>00183 <span class="comment"> * \return A pointer to a string contaning the MIME type. The string</span>
+<a name="l00184"></a>00184 <span class="comment"> * may be empty if no MIME type was reported by the web server.</span>
+<a name="l00185"></a>00185 <span class="comment"> */</span>
+<a name="l00186"></a>00186 <span class="keywordtype">char</span> *<a name="a327"></a><a class="code" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a>(<span class="keywordtype">void</span>);
+<a name="l00187"></a>00187 <span class="comment"></span>
+<a name="l00188"></a>00188 <span class="comment">/**</span>
+<a name="l00189"></a>00189 <span class="comment"> * Obtain the filename of the current HTTP data stream.</span>
+<a name="l00190"></a>00190 <span class="comment"> *</span>
+<a name="l00191"></a>00191 <span class="comment"> * The filename of an HTTP request may be changed by the web server,</span>
+<a name="l00192"></a>00192 <span class="comment"> * and may therefore not be the same as when the original GET request</span>
+<a name="l00193"></a>00193 <span class="comment"> * was made with webclient_get(). This function is used for obtaining</span>
+<a name="l00194"></a>00194 <span class="comment"> * the current filename.</span>
+<a name="l00195"></a>00195 <span class="comment"> *</span>
+<a name="l00196"></a>00196 <span class="comment"> * \return A pointer to the current filename.</span>
+<a name="l00197"></a>00197 <span class="comment"> */</span>
+<a name="l00198"></a>00198 <span class="keywordtype">char</span> *<a name="a328"></a><a class="code" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a>(<span class="keywordtype">void</span>);
+<a name="l00199"></a>00199 <span class="comment"></span>
+<a name="l00200"></a>00200 <span class="comment">/**</span>
+<a name="l00201"></a>00201 <span class="comment"> * Obtain the hostname of the current HTTP data stream.</span>
+<a name="l00202"></a>00202 <span class="comment"> *</span>
+<a name="l00203"></a>00203 <span class="comment"> * The hostname of the web server of an HTTP request may be changed</span>
+<a name="l00204"></a>00204 <span class="comment"> * by the web server, and may therefore not be the same as when the</span>
+<a name="l00205"></a>00205 <span class="comment"> * original GET request was made with webclient_get(). This function</span>
+<a name="l00206"></a>00206 <span class="comment"> * is used for obtaining the current hostname.</span>
+<a name="l00207"></a>00207 <span class="comment"> *</span>
+<a name="l00208"></a>00208 <span class="comment"> * \return A pointer to the current hostname.</span>
+<a name="l00209"></a>00209 <span class="comment"> */</span>
+<a name="l00210"></a>00210 <span class="keywordtype">char</span> *<a name="a329"></a><a class="code" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a>(<span class="keywordtype">void</span>);
+<a name="l00211"></a>00211 <span class="comment"></span>
+<a name="l00212"></a>00212 <span class="comment">/**</span>
+<a name="l00213"></a>00213 <span class="comment"> * Obtain the port number of the current HTTP data stream.</span>
+<a name="l00214"></a>00214 <span class="comment"> *</span>
+<a name="l00215"></a>00215 <span class="comment"> * The port number of an HTTP request may be changed by the web</span>
+<a name="l00216"></a>00216 <span class="comment"> * server, and may therefore not be the same as when the original GET</span>
+<a name="l00217"></a>00217 <span class="comment"> * request was made with webclient_get(). This function is used for</span>
+<a name="l00218"></a>00218 <span class="comment"> * obtaining the current port number.</span>
+<a name="l00219"></a>00219 <span class="comment"> *</span>
+<a name="l00220"></a>00220 <span class="comment"> * \return The port number of the current HTTP data stream, in host byte order.</span>
+<a name="l00221"></a>00221 <span class="comment"> */</span>
+<a name="l00222"></a>00222 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a name="a330"></a><a class="code" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a>(<span class="keywordtype">void</span>);
+<a name="l00223"></a>00223
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225
+<a name="l00226"></a>00226 <span class="preprocessor">#endif </span><span class="comment">/* __WEBCLIENT_H__ */</span>
+<a name="l00227"></a>00227 <span class="comment"></span>
+<a name="l00228"></a>00228 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00042.html b/third_party/uip-1.0/doc/html/a00042.html new file mode 100644 index 0000000..c7ed516 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00042.html @@ -0,0 +1,106 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: example-mainloop-with-arp.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>example-mainloop-with-arp.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="a00139.html">uip_arp.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include "network-device.h"</span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include "httpd.h"</span>
+<a name="l00005"></a>00005 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#define BUF ((struct uip_eth_hdr *)&uip_buf[0])</span>
+<a name="l00008"></a>00008 <span class="preprocessor"></span>
+<a name="l00009"></a>00009 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00010"></a>00010 <span class="keywordtype">int</span>
+<a name="l00011"></a>00011 main(<span class="keywordtype">void</span>)
+<a name="l00012"></a>00012 {
+<a name="l00013"></a>00013 <span class="keywordtype">int</span> i;
+<a name="l00014"></a>00014 <a name="a60"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00015"></a>00015 <span class="keyword">struct </span><a name="_a61"></a><a class="code" href="a00087.html">timer</a> periodic_timer, arp_timer;
+<a name="l00016"></a>00016
+<a name="l00017"></a>00017 <a name="a62"></a><a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&periodic_timer, <a name="a63"></a><a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> / 2);
+<a name="l00018"></a>00018 <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&arp_timer, <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> * 10);
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 network_device_init();
+<a name="l00021"></a>00021 <a name="a64"></a><a class="code" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a>();
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <a name="a65"></a><a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 192,168,0,2);
+<a name="l00024"></a>00024 <a name="a66"></a><a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(ipaddr);
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <a name="a67"></a><a class="code" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a>();
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="keywordflow">while</span>(1) {
+<a name="l00029"></a>00029 <a name="a68"></a><a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = network_device_read();
+<a name="l00030"></a>00030 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00031"></a>00031 <span class="keywordflow">if</span>(<a name="a69"></a><a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a name="a70"></a><a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(<a name="a71"></a><a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a>)) {
+<a name="l00032"></a>00032 <a name="a72"></a><a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>();
+<a name="l00033"></a>00033 <a name="a73"></a><a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>();
+<a name="l00034"></a>00034 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00035"></a>00035 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00036"></a>00036 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00037"></a>00037 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00038"></a>00038 <a name="a74"></a><a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+<a name="l00039"></a>00039 network_device_send();
+<a name="l00040"></a>00040 }
+<a name="l00041"></a>00041 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(<a name="a75"></a><a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a>)) {
+<a name="l00042"></a>00042 <a name="a76"></a><a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>();
+<a name="l00043"></a>00043 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00044"></a>00044 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00045"></a>00045 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00046"></a>00046 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00047"></a>00047 network_device_send();
+<a name="l00048"></a>00048 }
+<a name="l00049"></a>00049 }
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a name="a77"></a><a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&periodic_timer)) {
+<a name="l00052"></a>00052 <a name="a78"></a><a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a>(&periodic_timer);
+<a name="l00053"></a>00053 <span class="keywordflow">for</span>(i = 0; i < <a name="a79"></a><a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; i++) {
+<a name="l00054"></a>00054 <a name="a80"></a><a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i);
+<a name="l00055"></a>00055 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00056"></a>00056 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00057"></a>00057 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00058"></a>00058 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00059"></a>00059 <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+<a name="l00060"></a>00060 network_device_send();
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062 }
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span> <span class="keywordflow">for</span>(i = 0; i < <a name="a81"></a><a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; i++) {
+<a name="l00066"></a>00066 <a name="a82"></a><a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i);
+<a name="l00067"></a>00067 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00068"></a>00068 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00069"></a>00069 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00070"></a>00070 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00071"></a>00071 <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+<a name="l00072"></a>00072 network_device_send();
+<a name="l00073"></a>00073 }
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 <span class="comment">/* Call the ARP timer function every 10 seconds. */</span>
+<a name="l00078"></a>00078 <span class="keywordflow">if</span>(<a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&arp_timer)) {
+<a name="l00079"></a>00079 <a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a>(&arp_timer);
+<a name="l00080"></a>00080 <a name="a83"></a><a class="code" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a>();
+<a name="l00081"></a>00081 }
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083 }
+<a name="l00084"></a>00084 <span class="keywordflow">return</span> 0;
+<a name="l00085"></a>00085 }
+<a name="l00086"></a>00086 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00043.html b/third_party/uip-1.0/doc/html/a00043.html new file mode 100644 index 0000000..53361f1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00043.html @@ -0,0 +1,82 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: example-mainloop-without-arp.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>example-mainloop-without-arp.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="a00139.html">uip_arp.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include "network-device.h"</span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include "httpd.h"</span>
+<a name="l00005"></a>00005 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00008"></a>00008 <span class="keywordtype">int</span>
+<a name="l00009"></a>00009 main(<span class="keywordtype">void</span>)
+<a name="l00010"></a>00010 {
+<a name="l00011"></a>00011 <span class="keywordtype">int</span> i;
+<a name="l00012"></a>00012 <a name="a84"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00013"></a>00013 <span class="keyword">struct </span><a name="_a85"></a><a class="code" href="a00087.html">timer</a> periodic_timer;
+<a name="l00014"></a>00014
+<a name="l00015"></a>00015 <a name="a86"></a><a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&periodic_timer, <a name="a87"></a><a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> / 2);
+<a name="l00016"></a>00016
+<a name="l00017"></a>00017 network_device_init();
+<a name="l00018"></a>00018 <a name="a88"></a><a class="code" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a>();
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 <a name="a89"></a><a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 192,168,0,2);
+<a name="l00021"></a>00021 <a name="a90"></a><a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(ipaddr);
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <a name="a91"></a><a class="code" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a>();
+<a name="l00024"></a>00024
+<a name="l00025"></a>00025 <span class="keywordflow">while</span>(1) {
+<a name="l00026"></a>00026 <a name="a92"></a><a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = network_device_read();
+<a name="l00027"></a>00027 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00028"></a>00028 <a name="a93"></a><a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>();
+<a name="l00029"></a>00029 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00030"></a>00030 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00031"></a>00031 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00032"></a>00032 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00033"></a>00033 network_device_send();
+<a name="l00034"></a>00034 }
+<a name="l00035"></a>00035 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a name="a94"></a><a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&periodic_timer)) {
+<a name="l00036"></a>00036 <a name="a95"></a><a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a>(&periodic_timer);
+<a name="l00037"></a>00037 <span class="keywordflow">for</span>(i = 0; i < <a name="a96"></a><a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; i++) {
+<a name="l00038"></a>00038 <a name="a97"></a><a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i);
+<a name="l00039"></a>00039 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00040"></a>00040 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00041"></a>00041 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00042"></a>00042 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00043"></a>00043 network_device_send();
+<a name="l00044"></a>00044 }
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span> <span class="keywordflow">for</span>(i = 0; i < <a name="a98"></a><a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; i++) {
+<a name="l00049"></a>00049 <a name="a99"></a><a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i);
+<a name="l00050"></a>00050 <span class="comment">/* If the above function invocation resulted in data that</span>
+<a name="l00051"></a>00051 <span class="comment"> should be sent out on the network, the global variable</span>
+<a name="l00052"></a>00052 <span class="comment"> uip_len is set to a value > 0. */</span>
+<a name="l00053"></a>00053 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l00054"></a>00054 network_device_send();
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 }
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060 <span class="keywordflow">return</span> 0;
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00044.html b/third_party/uip-1.0/doc/html/a00044.html new file mode 100644 index 0000000..40e5ad2 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00044.html @@ -0,0 +1,370 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: telnetd.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>telnetd.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00014"></a>00014 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00015"></a>00015 <span class="comment"> * written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00019"></a>00019 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00021"></a>00021 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00023"></a>00023 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00024"></a>00024 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00025"></a>00025 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00026"></a>00026 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00027"></a>00027 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "telnetd.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00121.html">memb.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00107.html">shell.h</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="preprocessor">#include <string.h></span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00045"></a>00045 <span class="keyword">struct </span>telnetd_line {
+<a name="l00046"></a>00046 <span class="keywordtype">char</span> line[TELNETD_CONF_LINELEN];
+<a name="l00047"></a>00047 };
+<a name="l00048"></a>00048 <a name="a206"></a><a class="code" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB</a>(linemem, <span class="keyword">struct</span> telnetd_line, TELNETD_CONF_NUMLINES);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#define STATE_NORMAL 0</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define STATE_IAC 1</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define STATE_WILL 2</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define STATE_WONT 3</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DO 4</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DONT 5</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define STATE_CLOSE 6</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keyword">struct </span><a name="_a207"></a><a class="code" href="a00086.html">telnetd_state</a> s;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="preprocessor">#define TELNET_IAC 255</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_WILL 251</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_WONT 252</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_DO 253</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_DONT 254</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> *
+<a name="l00067"></a>00067 alloc_line(<span class="keywordtype">void</span>)
+<a name="l00068"></a>00068 {
+<a name="l00069"></a>00069 <span class="keywordflow">return</span> <a name="a208"></a><a class="code" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a>(&linemem);
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00073"></a>00073 dealloc_line(<span class="keywordtype">char</span> *line)
+<a name="l00074"></a>00074 {
+<a name="l00075"></a>00075 <a name="a209"></a><a class="code" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a>(&linemem, line);
+<a name="l00076"></a>00076 }
+<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00078"></a>00078 <span class="keywordtype">void</span>
+<a name="l00079"></a>00079 <a name="a210"></a>shell_quit(<span class="keywordtype">char</span> *str)
+<a name="l00080"></a>00080 {
+<a name="l00081"></a>00081 s.<a name="a211"></a><a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_CLOSE;
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00085"></a>00085 sendline(<span class="keywordtype">char</span> *line)
+<a name="l00086"></a>00086 {
+<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00090"></a>00090 <span class="keywordflow">if</span>(s.<a name="a212"></a><a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] == <a name="a213"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00091"></a>00091 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] = line;
+<a name="l00092"></a>00092 <span class="keywordflow">break</span>;
+<a name="l00093"></a>00093 }
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095 <span class="keywordflow">if</span>(i == TELNETD_CONF_NUMLINES) {
+<a name="l00096"></a>00096 dealloc_line(line);
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 }
+<a name="l00099"></a>00099 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00100"></a>00100 <span class="keywordtype">void</span>
+<a name="l00101"></a>00101 <a name="a214"></a>shell_prompt(<span class="keywordtype">char</span> *str)
+<a name="l00102"></a>00102 {
+<a name="l00103"></a>00103 <span class="keywordtype">char</span> *line;
+<a name="l00104"></a>00104 line = alloc_line();
+<a name="l00105"></a>00105 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00106"></a>00106 strncpy(line, str, TELNETD_CONF_LINELEN);
+<a name="l00107"></a>00107 <span class="comment">/* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00108"></a>00108 sendline(line);
+<a name="l00109"></a>00109 }
+<a name="l00110"></a>00110 }
+<a name="l00111"></a>00111 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00112"></a>00112 <span class="keywordtype">void</span>
+<a name="l00113"></a>00113 <a name="a215"></a>shell_output(<span class="keywordtype">char</span> *str1, <span class="keywordtype">char</span> *str2)
+<a name="l00114"></a>00114 {
+<a name="l00115"></a>00115 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> len;
+<a name="l00116"></a>00116 <span class="keywordtype">char</span> *line;
+<a name="l00117"></a>00117
+<a name="l00118"></a>00118 line = alloc_line();
+<a name="l00119"></a>00119 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00120"></a>00120 len = strlen(str1);
+<a name="l00121"></a>00121 strncpy(line, str1, TELNETD_CONF_LINELEN);
+<a name="l00122"></a>00122 <span class="keywordflow">if</span>(len < TELNETD_CONF_LINELEN) {
+<a name="l00123"></a>00123 strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125 len = strlen(line);
+<a name="l00126"></a>00126 <span class="keywordflow">if</span>(len < TELNETD_CONF_LINELEN - 2) {
+<a name="l00127"></a>00127 line[len] = <a name="a216"></a><a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>;
+<a name="l00128"></a>00128 line[len+1] = <a name="a217"></a><a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>;
+<a name="l00129"></a>00129 line[len+2] = 0;
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 <span class="comment">/* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00132"></a>00132 sendline(line);
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134 }
+<a name="l00135"></a>00135 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00136"></a>00136 <span class="keywordtype">void</span>
+<a name="l00137"></a>00137 telnetd_init(<span class="keywordtype">void</span>)
+<a name="l00138"></a>00138 {
+<a name="l00139"></a>00139 <a name="a218"></a><a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a name="a219"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(23));
+<a name="l00140"></a>00140 <a name="a220"></a><a class="code" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a>(&linemem);
+<a name="l00141"></a>00141 <a name="a221"></a><a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a>();
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00144"></a>00144 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00145"></a>00145 acked(<span class="keywordtype">void</span>)
+<a name="l00146"></a>00146 {
+<a name="l00147"></a>00147 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keywordflow">while</span>(s.<a name="a222"></a><a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> > 0) {
+<a name="l00150"></a>00150 dealloc_line(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[0]);
+<a name="l00151"></a>00151 <span class="keywordflow">for</span>(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00152"></a>00152 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i - 1] = s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i];
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[TELNETD_CONF_NUMLINES - 1] = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00155"></a>00155 --s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>;
+<a name="l00156"></a>00156 }
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00159"></a>00159 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00160"></a>00160 senddata(<span class="keywordtype">void</span>)
+<a name="l00161"></a>00161 {
+<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">char</span> *<a name="a223"></a><a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>, *lineptr;
+<a name="l00163"></a>00163 <span class="keyword">static</span> <span class="keywordtype">int</span> buflen, linelen;
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 bufptr = <a name="a224"></a><a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00166"></a>00166 buflen = 0;
+<a name="l00167"></a>00167 <span class="keywordflow">for</span>(s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> = 0; s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> < TELNETD_CONF_NUMLINES &&
+<a name="l00168"></a>00168 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>] != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ; ++s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>) {
+<a name="l00169"></a>00169 lineptr = s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>];
+<a name="l00170"></a>00170 linelen = strlen(lineptr);
+<a name="l00171"></a>00171 <span class="keywordflow">if</span>(linelen > TELNETD_CONF_LINELEN) {
+<a name="l00172"></a>00172 linelen = TELNETD_CONF_LINELEN;
+<a name="l00173"></a>00173 }
+<a name="l00174"></a>00174 <span class="keywordflow">if</span>(buflen + linelen < <a name="a225"></a><a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00175"></a>00175 memcpy(bufptr, lineptr, linelen);
+<a name="l00176"></a>00176 bufptr += linelen;
+<a name="l00177"></a>00177 buflen += linelen;
+<a name="l00178"></a>00178 } <span class="keywordflow">else</span> {
+<a name="l00179"></a>00179 <span class="keywordflow">break</span>;
+<a name="l00180"></a>00180 }
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 <a name="a226"></a><a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, buflen);
+<a name="l00183"></a>00183 }
+<a name="l00184"></a>00184 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00186"></a>00186 closed(<span class="keywordtype">void</span>)
+<a name="l00187"></a>00187 {
+<a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00191"></a>00191 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00192"></a>00192 dealloc_line(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i]);
+<a name="l00193"></a>00193 }
+<a name="l00194"></a>00194 }
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00197"></a>00197 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00198"></a>00198 get_char(<a name="a227"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c)
+<a name="l00199"></a>00199 {
+<a name="l00200"></a>00200 <span class="keywordflow">if</span>(c == <a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>) {
+<a name="l00201"></a>00201 <span class="keywordflow">return</span>;
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 s.<a name="a228"></a><a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(int)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] = c;
+<a name="l00205"></a>00205 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(<span class="keywordtype">int</span>)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] == <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> ||
+<a name="l00206"></a>00206 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> == <span class="keyword">sizeof</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>) - 1) {
+<a name="l00207"></a>00207 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> > 0) {
+<a name="l00208"></a>00208 s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(int)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] = 0;
+<a name="l00209"></a>00209 <span class="comment">/* petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00210"></a>00210 }
+<a name="l00211"></a>00211 <a name="a229"></a><a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>);
+<a name="l00212"></a>00212 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> = 0;
+<a name="l00213"></a>00213 } <span class="keywordflow">else</span> {
+<a name="l00214"></a>00214 ++s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>;
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216 }
+<a name="l00217"></a>00217 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00218"></a>00218 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00219"></a>00219 sendopt(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> option, <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> value)
+<a name="l00220"></a>00220 {
+<a name="l00221"></a>00221 <span class="keywordtype">char</span> *line;
+<a name="l00222"></a>00222 line = alloc_line();
+<a name="l00223"></a>00223 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00224"></a>00224 line[0] = TELNET_IAC;
+<a name="l00225"></a>00225 line[1] = option;
+<a name="l00226"></a>00226 line[2] = value;
+<a name="l00227"></a>00227 line[3] = 0;
+<a name="l00228"></a>00228 sendline(line);
+<a name="l00229"></a>00229 }
+<a name="l00230"></a>00230 }
+<a name="l00231"></a>00231 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00232"></a>00232 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00233"></a>00233 newdata(<span class="keywordtype">void</span>)
+<a name="l00234"></a>00234 {
+<a name="l00235"></a>00235 <a name="a230"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00236"></a>00236 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c;
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> *dataptr;
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239
+<a name="l00240"></a>00240 len = <a name="a231"></a><a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();
+<a name="l00241"></a>00241 dataptr = (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> < <span class="keyword">sizeof</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>)) {
+<a name="l00244"></a>00244 c = *dataptr;
+<a name="l00245"></a>00245 ++dataptr;
+<a name="l00246"></a>00246 --len;
+<a name="l00247"></a>00247 <span class="keywordflow">switch</span>(s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a>) {
+<a name="l00248"></a>00248 <span class="keywordflow">case</span> STATE_IAC:
+<a name="l00249"></a>00249 <span class="keywordflow">if</span>(c == TELNET_IAC) {
+<a name="l00250"></a>00250 get_char(c);
+<a name="l00251"></a>00251 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00252"></a>00252 } <span class="keywordflow">else</span> {
+<a name="l00253"></a>00253 <span class="keywordflow">switch</span>(c) {
+<a name="l00254"></a>00254 <span class="keywordflow">case</span> TELNET_WILL:
+<a name="l00255"></a>00255 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_WILL;
+<a name="l00256"></a>00256 <span class="keywordflow">break</span>;
+<a name="l00257"></a>00257 <span class="keywordflow">case</span> TELNET_WONT:
+<a name="l00258"></a>00258 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_WONT;
+<a name="l00259"></a>00259 <span class="keywordflow">break</span>;
+<a name="l00260"></a>00260 <span class="keywordflow">case</span> TELNET_DO:
+<a name="l00261"></a>00261 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_DO;
+<a name="l00262"></a>00262 <span class="keywordflow">break</span>;
+<a name="l00263"></a>00263 <span class="keywordflow">case</span> TELNET_DONT:
+<a name="l00264"></a>00264 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_DONT;
+<a name="l00265"></a>00265 <span class="keywordflow">break</span>;
+<a name="l00266"></a>00266 <span class="keywordflow">default</span>:
+<a name="l00267"></a>00267 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00268"></a>00268 <span class="keywordflow">break</span>;
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 }
+<a name="l00271"></a>00271 <span class="keywordflow">break</span>;
+<a name="l00272"></a>00272 <span class="keywordflow">case</span> STATE_WILL:
+<a name="l00273"></a>00273 <span class="comment">/* Reply with a DONT */</span>
+<a name="l00274"></a>00274 sendopt(TELNET_DONT, c);
+<a name="l00275"></a>00275 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00276"></a>00276 <span class="keywordflow">break</span>;
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">case</span> STATE_WONT:
+<a name="l00279"></a>00279 <span class="comment">/* Reply with a DONT */</span>
+<a name="l00280"></a>00280 sendopt(TELNET_DONT, c);
+<a name="l00281"></a>00281 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00282"></a>00282 <span class="keywordflow">break</span>;
+<a name="l00283"></a>00283 <span class="keywordflow">case</span> STATE_DO:
+<a name="l00284"></a>00284 <span class="comment">/* Reply with a WONT */</span>
+<a name="l00285"></a>00285 sendopt(TELNET_WONT, c);
+<a name="l00286"></a>00286 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00287"></a>00287 <span class="keywordflow">break</span>;
+<a name="l00288"></a>00288 <span class="keywordflow">case</span> STATE_DONT:
+<a name="l00289"></a>00289 <span class="comment">/* Reply with a WONT */</span>
+<a name="l00290"></a>00290 sendopt(TELNET_WONT, c);
+<a name="l00291"></a>00291 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00292"></a>00292 <span class="keywordflow">break</span>;
+<a name="l00293"></a>00293 <span class="keywordflow">case</span> STATE_NORMAL:
+<a name="l00294"></a>00294 <span class="keywordflow">if</span>(c == TELNET_IAC) {
+<a name="l00295"></a>00295 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_IAC;
+<a name="l00296"></a>00296 } <span class="keywordflow">else</span> {
+<a name="l00297"></a>00297 get_char(c);
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 <span class="keywordflow">break</span>;
+<a name="l00300"></a>00300 }
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 }
+<a name="l00304"></a>00304
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00307"></a>00307 <span class="keywordtype">void</span>
+<a name="l00308"></a>00308 telnetd_appcall(<span class="keywordtype">void</span>)
+<a name="l00309"></a>00309 {
+<a name="l00310"></a>00310 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00311"></a>00311 <span class="keywordflow">if</span>(<a name="a232"></a><a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00312"></a>00312 <span class="comment">/* tcp_markconn(uip_conn, &s);*/</span>
+<a name="l00313"></a>00313 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00314"></a>00314 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00315"></a>00315 }
+<a name="l00316"></a>00316 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> = 0;
+<a name="l00317"></a>00317 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00318"></a>00318
+<a name="l00319"></a>00319 <a name="a233"></a><a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a>();
+<a name="l00320"></a>00320 }
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> == STATE_CLOSE) {
+<a name="l00323"></a>00323 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00324"></a>00324 <a name="a234"></a><a class="code" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>();
+<a name="l00325"></a>00325 <span class="keywordflow">return</span>;
+<a name="l00326"></a>00326 }
+<a name="l00327"></a>00327
+<a name="l00328"></a>00328 <span class="keywordflow">if</span>(<a name="a235"></a><a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>() ||
+<a name="l00329"></a>00329 <a name="a236"></a><a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>() ||
+<a name="l00330"></a>00330 <a name="a237"></a><a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00331"></a>00331 closed();
+<a name="l00332"></a>00332 }
+<a name="l00333"></a>00333
+<a name="l00334"></a>00334 <span class="keywordflow">if</span>(<a name="a238"></a><a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00335"></a>00335 acked();
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337
+<a name="l00338"></a>00338 <span class="keywordflow">if</span>(<a name="a239"></a><a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00339"></a>00339 newdata();
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341
+<a name="l00342"></a>00342 <span class="keywordflow">if</span>(<a name="a240"></a><a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>() ||
+<a name="l00343"></a>00343 <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() ||
+<a name="l00344"></a>00344 <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>() ||
+<a name="l00345"></a>00345 <a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>() ||
+<a name="l00346"></a>00346 <a name="a241"></a><a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00347"></a>00347 senddata();
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349 }
+<a name="l00350"></a>00350 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00045.html b/third_party/uip-1.0/doc/html/a00045.html new file mode 100644 index 0000000..5f108bf --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00045.html @@ -0,0 +1,83 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: telnetd.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>telnetd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00011"></a>00011 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00012"></a>00012 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00013"></a>00013 <span class="comment"> * with the distribution.</span>
+<a name="l00014"></a>00014 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00015"></a>00015 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00016"></a>00016 <span class="comment"> * written permission.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00019"></a>00019 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00020"></a>00020 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00021"></a>00021 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00022"></a>00022 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00023"></a>00023 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00024"></a>00024 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00025"></a>00025 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00026"></a>00026 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00027"></a>00027 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00028"></a>00028 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#ifndef __TELNETD_H__</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define __TELNETD_H__</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="keywordtype">void</span> telnetd_appcall(<span class="keywordtype">void</span>);
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#ifndef TELNETD_CONF_LINELEN</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define TELNETD_CONF_LINELEN 40</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#ifndef TELNETD_CONF_NUMLINES</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define TELNETD_CONF_NUMLINES 16</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a>00049 <span class="keyword">struct </span><a name="_a242"></a><a class="code" href="a00086.html">telnetd_state</a> {
+<a name="l00050"></a>00050 <span class="keywordtype">char</span> *<a name="a243"></a><a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[TELNETD_CONF_NUMLINES];
+<a name="l00051"></a>00051 <span class="keywordtype">char</span> <a name="a244"></a><a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[TELNETD_CONF_LINELEN];
+<a name="l00052"></a>00052 <span class="keywordtype">char</span> bufptr;
+<a name="l00053"></a>00053 <a name="a245"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a name="a246"></a><a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>;
+<a name="l00054"></a>00054 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a name="a247"></a><a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a>;
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00086.html">telnetd_state</a> <a name="a248"></a><a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL telnetd_appcall</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a>00063 <span class="preprocessor">#endif </span><span class="comment">/* __TELNETD_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00046.html b/third_party/uip-1.0/doc/html/a00046.html new file mode 100644 index 0000000..8299885 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00046.html @@ -0,0 +1,484 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: resolv.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>resolv.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup resolv DNS resolver</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The uIP DNS resolver functions are used to lookup a hostname and</span>
+<a name="l00011"></a>00011 <span class="comment"> * map it to a numerical IP address. It maintains a list of resolved</span>
+<a name="l00012"></a>00012 <span class="comment"> * hostnames that can be queried with the resolv_lookup()</span>
+<a name="l00013"></a>00013 <span class="comment"> * function. New hostnames can be resolved using the resolv_query()</span>
+<a name="l00014"></a>00014 <span class="comment"> * function.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * When a hostname has been resolved (or found to be non-existant),</span>
+<a name="l00017"></a>00017 <span class="comment"> * the resolver code calls a callback function called resolv_found()</span>
+<a name="l00018"></a>00018 <span class="comment"> * that must be implemented by the module that uses the resolver.</span>
+<a name="l00019"></a>00019 <span class="comment"> */</span>
+<a name="l00020"></a>00020 <span class="comment"></span>
+<a name="l00021"></a>00021 <span class="comment">/**</span>
+<a name="l00022"></a>00022 <span class="comment"> * \file</span>
+<a name="l00023"></a>00023 <span class="comment"> * DNS host name to IP address resolver.</span>
+<a name="l00024"></a>00024 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00025"></a>00025 <span class="comment"> *</span>
+<a name="l00026"></a>00026 <span class="comment"> * This file implements a DNS host name to IP address resolver.</span>
+<a name="l00027"></a>00027 <span class="comment"> */</span>
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="comment">/*</span>
+<a name="l00030"></a>00030 <span class="comment"> * Copyright (c) 2002-2003, Adam Dunkels.</span>
+<a name="l00031"></a>00031 <span class="comment"> * All rights reserved.</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00034"></a>00034 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00035"></a>00035 <span class="comment"> * are met:</span>
+<a name="l00036"></a>00036 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00037"></a>00037 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00038"></a>00038 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00039"></a>00039 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00040"></a>00040 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00041"></a>00041 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00042"></a>00042 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00043"></a>00043 <span class="comment"> * written permission.</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00046"></a>00046 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00047"></a>00047 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00048"></a>00048 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00049"></a>00049 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00050"></a>00050 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00051"></a>00051 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00052"></a>00052 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00053"></a>00053 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00054"></a>00054 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00055"></a>00055 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> */</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include "<a class="code" href="a00103.html">resolv.h</a>"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="preprocessor">#include <string.h></span>
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="preprocessor">#ifndef NULL</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define NULL (void *)0</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* NULL */</span>
+<a name="l00071"></a>00071 <span class="comment"></span>
+<a name="l00072"></a>00072 <span class="comment">/** \internal The maximum number of retries when asking for a name. */</span>
+<a name="l00073"></a>00073 <span class="preprocessor">#define MAX_RETRIES 8</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/** \internal The DNS message header. */</span>
+<a name="l00076"></a>00076 <span class="keyword">struct </span>dns_hdr {
+<a name="l00077"></a>00077 <a name="a125"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id;
+<a name="l00078"></a>00078 <a name="a126"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flags1, flags2;
+<a name="l00079"></a>00079 <span class="preprocessor">#define DNS_FLAG1_RESPONSE 0x80</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_STATUS 0x10</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_INVERSE 0x08</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_STANDARD 0x00</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_AUTHORATIVE 0x04</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_TRUNC 0x02</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_RD 0x01</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_RA 0x80</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_MASK 0x0f</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_NONE 0x00</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_NAME 0x03</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numquestions;
+<a name="l00091"></a>00091 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numanswers;
+<a name="l00092"></a>00092 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numauthrr;
+<a name="l00093"></a>00093 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numextrarr;
+<a name="l00094"></a>00094 };
+<a name="l00095"></a>00095 <span class="comment"></span>
+<a name="l00096"></a>00096 <span class="comment">/** \internal The DNS answer message structure. */</span>
+<a name="l00097"></a>00097 <span class="keyword">struct </span>dns_answer {
+<a name="l00098"></a>00098 <span class="comment">/* DNS answer record starts with either a domain name or a pointer</span>
+<a name="l00099"></a>00099 <span class="comment"> to a name already present somewhere in the packet. */</span>
+<a name="l00100"></a>00100 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> type;
+<a name="l00101"></a>00101 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <span class="keyword">class</span>;
+<a name="l00102"></a>00102 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ttl[2];
+<a name="l00103"></a>00103 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00104"></a>00104 <a name="a127"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00105"></a>00105 };
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keyword">struct </span>namemap {
+<a name="l00108"></a>00108 <span class="preprocessor">#define STATE_UNUSED 0</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define STATE_NEW 1</span>
+<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define STATE_ASKING 2</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DONE 3</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define STATE_ERROR 4</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> state;
+<a name="l00114"></a>00114 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> tmr;
+<a name="l00115"></a>00115 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> retries;
+<a name="l00116"></a>00116 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> seqno;
+<a name="l00117"></a>00117 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> err;
+<a name="l00118"></a>00118 <span class="keywordtype">char</span> name[32];
+<a name="l00119"></a>00119 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00120"></a>00120 };
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 <span class="preprocessor">#ifndef UIP_CONF_RESOLV_ENTRIES</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define RESOLV_ENTRIES 4</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_RESOLV_ENTRIES */</span>
+<a name="l00125"></a>00125 <span class="preprocessor">#define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_RESOLV_ENTRIES */</span>
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keyword">struct </span>namemap names[<a name="a128"></a><a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>];
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> seqno;
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keyword">struct </span><a name="_a129"></a><a class="code" href="a00095.html">uip_udp_conn</a> *resolv_conn = <a name="a130"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">/** \internal</span>
+<a name="l00138"></a>00138 <span class="comment"> * Walk through a compact encoded DNS name and return the end of it.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * \return The end of the name.</span>
+<a name="l00141"></a>00141 <span class="comment"> */</span>
+<a name="l00142"></a>00142 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00143"></a>00143 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *
+<a name="l00144"></a>00144 parse_name(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *query)
+<a name="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> n;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 <span class="keywordflow">do</span> {
+<a name="l00149"></a>00149 n = *query++;
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordflow">while</span>(n > 0) {
+<a name="l00152"></a>00152 <span class="comment">/* printf("%c", *query);*/</span>
+<a name="l00153"></a>00153 ++query;
+<a name="l00154"></a>00154 --n;
+<a name="l00155"></a>00155 };
+<a name="l00156"></a>00156 <span class="comment">/* printf(".");*/</span>
+<a name="l00157"></a>00157 } <span class="keywordflow">while</span>(*query != 0);
+<a name="l00158"></a>00158 <span class="comment">/* printf("\n");*/</span>
+<a name="l00159"></a>00159 <span class="keywordflow">return</span> query + 1;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00162"></a>00162 <span class="comment">/** \internal</span>
+<a name="l00163"></a>00163 <span class="comment"> * Runs through the list of names to see if there are any that have</span>
+<a name="l00164"></a>00164 <span class="comment"> * not yet been queried and, if so, sends out a query.</span>
+<a name="l00165"></a>00165 <span class="comment"> */</span>
+<a name="l00166"></a>00166 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00168"></a>00168 check_entries(<span class="keywordtype">void</span>)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <span class="keyword">register</span> <span class="keyword">struct </span>dns_hdr *hdr;
+<a name="l00171"></a>00171 <span class="keywordtype">char</span> *query, *nptr, *nameptr;
+<a name="l00172"></a>00172 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00173"></a>00173 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> n;
+<a name="l00174"></a>00174 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *namemapptr;
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00177"></a>00177 namemapptr = &names[i];
+<a name="l00178"></a>00178 <span class="keywordflow">if</span>(namemapptr->state == <a name="a131"></a><a class="code" href="a00102.html#bf4401501f1389872141a78b63f325a3">STATE_NEW</a> ||
+<a name="l00179"></a>00179 namemapptr->state == <a name="a132"></a><a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00180"></a>00180 <span class="keywordflow">if</span>(namemapptr->state == <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00181"></a>00181 <span class="keywordflow">if</span>(--namemapptr->tmr == 0) {
+<a name="l00182"></a>00182 <span class="keywordflow">if</span>(++namemapptr->retries == <a name="a133"></a><a class="code" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">MAX_RETRIES</a>) {
+<a name="l00183"></a>00183 namemapptr->state = <a name="a134"></a><a class="code" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a>;
+<a name="l00184"></a>00184 <a name="a135"></a><a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
+<a name="l00185"></a>00185 <span class="keywordflow">continue</span>;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187 namemapptr->tmr = namemapptr->retries;
+<a name="l00188"></a>00188 } <span class="keywordflow">else</span> {
+<a name="l00189"></a>00189 <span class="comment">/* printf("Timer %d\n", namemapptr->tmr);*/</span>
+<a name="l00190"></a>00190 <span class="comment">/* Its timer has not run out, so we move on to next</span>
+<a name="l00191"></a>00191 <span class="comment"> entry. */</span>
+<a name="l00192"></a>00192 <span class="keywordflow">continue</span>;
+<a name="l00193"></a>00193 }
+<a name="l00194"></a>00194 } <span class="keywordflow">else</span> {
+<a name="l00195"></a>00195 namemapptr->state = <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>;
+<a name="l00196"></a>00196 namemapptr->tmr = 1;
+<a name="l00197"></a>00197 namemapptr->retries = 0;
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 hdr = (<span class="keyword">struct </span>dns_hdr *)<a name="a136"></a><a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00200"></a>00200 memset(hdr, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> dns_hdr));
+<a name="l00201"></a>00201 hdr->id = <a name="a137"></a><a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(i);
+<a name="l00202"></a>00202 hdr->flags1 = <a name="a138"></a><a class="code" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">DNS_FLAG1_RD</a>;
+<a name="l00203"></a>00203 hdr->numquestions = <a name="a139"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1);
+<a name="l00204"></a>00204 query = (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> + 12;
+<a name="l00205"></a>00205 nameptr = namemapptr->name;
+<a name="l00206"></a>00206 --nameptr;
+<a name="l00207"></a>00207 <span class="comment">/* Convert hostname into suitable query format. */</span>
+<a name="l00208"></a>00208 <span class="keywordflow">do</span> {
+<a name="l00209"></a>00209 ++nameptr;
+<a name="l00210"></a>00210 nptr = query;
+<a name="l00211"></a>00211 ++query;
+<a name="l00212"></a>00212 <span class="keywordflow">for</span>(n = 0; *nameptr != <span class="charliteral">'.'</span> && *nameptr != 0; ++nameptr) {
+<a name="l00213"></a>00213 *query = *nameptr;
+<a name="l00214"></a>00214 ++query;
+<a name="l00215"></a>00215 ++n;
+<a name="l00216"></a>00216 }
+<a name="l00217"></a>00217 *nptr = n;
+<a name="l00218"></a>00218 } <span class="keywordflow">while</span>(*nameptr != 0);
+<a name="l00219"></a>00219 {
+<a name="l00220"></a>00220 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> endquery[] =
+<a name="l00221"></a>00221 {0,0,1,0,1};
+<a name="l00222"></a>00222 memcpy(query, endquery, 5);
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224 <a name="a140"></a><a class="code" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip_udp_send</a>((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(query + 5 - (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>));
+<a name="l00225"></a>00225 <span class="keywordflow">break</span>;
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00230"></a>00230 <span class="comment">/** \internal</span>
+<a name="l00231"></a>00231 <span class="comment"> * Called when new UDP data arrives.</span>
+<a name="l00232"></a>00232 <span class="comment"> */</span>
+<a name="l00233"></a>00233 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00234"></a>00234 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00235"></a>00235 newdata(<span class="keywordtype">void</span>)
+<a name="l00236"></a>00236 {
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> *nameptr;
+<a name="l00238"></a>00238 <span class="keyword">struct </span>dns_answer *ans;
+<a name="l00239"></a>00239 <span class="keyword">struct </span>dns_hdr *hdr;
+<a name="l00240"></a>00240 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> nquestions, nanswers;
+<a name="l00241"></a>00241 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00242"></a>00242 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *namemapptr;
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 hdr = (<span class="keyword">struct </span>dns_hdr *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00245"></a>00245 <span class="comment">/* printf("ID %d\n", htons(hdr->id));</span>
+<a name="l00246"></a>00246 <span class="comment"> printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);</span>
+<a name="l00247"></a>00247 <span class="comment"> printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);</span>
+<a name="l00248"></a>00248 <span class="comment"> printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",</span>
+<a name="l00249"></a>00249 <span class="comment"> htons(hdr->numquestions),</span>
+<a name="l00250"></a>00250 <span class="comment"> htons(hdr->numanswers),</span>
+<a name="l00251"></a>00251 <span class="comment"> htons(hdr->numauthrr),</span>
+<a name="l00252"></a>00252 <span class="comment"> htons(hdr->numextrarr));</span>
+<a name="l00253"></a>00253 <span class="comment"> */</span>
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 <span class="comment">/* The ID in the DNS header should be our entry into the name</span>
+<a name="l00256"></a>00256 <span class="comment"> table. */</span>
+<a name="l00257"></a>00257 i = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->id);
+<a name="l00258"></a>00258 namemapptr = &names[i];
+<a name="l00259"></a>00259 <span class="keywordflow">if</span>(i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a> &&
+<a name="l00260"></a>00260 namemapptr->state == <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 <span class="comment">/* This entry is now finished. */</span>
+<a name="l00263"></a>00263 namemapptr->state = <a name="a141"></a><a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a>;
+<a name="l00264"></a>00264 namemapptr->err = hdr->flags2 & <a name="a142"></a><a class="code" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">DNS_FLAG2_ERR_MASK</a>;
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 <span class="comment">/* Check for error. If so, call callback to inform. */</span>
+<a name="l00267"></a>00267 <span class="keywordflow">if</span>(namemapptr->err != 0) {
+<a name="l00268"></a>00268 namemapptr->state = <a class="code" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a>;
+<a name="l00269"></a>00269 <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
+<a name="l00270"></a>00270 <span class="keywordflow">return</span>;
+<a name="l00271"></a>00271 }
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="comment">/* We only care about the question(s) and the answers. The authrr</span>
+<a name="l00274"></a>00274 <span class="comment"> and the extrarr are simply discarded. */</span>
+<a name="l00275"></a>00275 nquestions = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->numquestions);
+<a name="l00276"></a>00276 nanswers = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->numanswers);
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="comment">/* Skip the name in the question. XXX: This should really be</span>
+<a name="l00279"></a>00279 <span class="comment"> checked agains the name in the question, to be sure that they</span>
+<a name="l00280"></a>00280 <span class="comment"> match. */</span>
+<a name="l00281"></a>00281 nameptr = parse_name((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> + 12) + 4;
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordflow">while</span>(nanswers > 0) {
+<a name="l00284"></a>00284 <span class="comment">/* The first byte in the answer resource record determines if it</span>
+<a name="l00285"></a>00285 <span class="comment"> is a compressed record or a normal one. */</span>
+<a name="l00286"></a>00286 <span class="keywordflow">if</span>(*nameptr & 0xc0) {
+<a name="l00287"></a>00287 <span class="comment">/* Compressed name. */</span>
+<a name="l00288"></a>00288 nameptr +=2;
+<a name="l00289"></a>00289 <span class="comment">/* printf("Compressed anwser\n");*/</span>
+<a name="l00290"></a>00290 } <span class="keywordflow">else</span> {
+<a name="l00291"></a>00291 <span class="comment">/* Not compressed name. */</span>
+<a name="l00292"></a>00292 nameptr = parse_name((<span class="keywordtype">char</span> *)nameptr);
+<a name="l00293"></a>00293 }
+<a name="l00294"></a>00294
+<a name="l00295"></a>00295 ans = (<span class="keyword">struct </span>dns_answer *)nameptr;
+<a name="l00296"></a>00296 <span class="comment">/* printf("Answer: type %x, class %x, ttl %x, length %x\n",</span>
+<a name="l00297"></a>00297 <span class="comment"> htons(ans->type), htons(ans->class), (htons(ans->ttl[0])</span>
+<a name="l00298"></a>00298 <span class="comment"> << 16) | htons(ans->ttl[1]), htons(ans->len));*/</span>
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 <span class="comment">/* Check for IP address type and Internet class. Others are</span>
+<a name="l00301"></a>00301 <span class="comment"> discarded. */</span>
+<a name="l00302"></a>00302 <span class="keywordflow">if</span>(ans->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1) &&
+<a name="l00303"></a>00303 ans->class == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1) &&
+<a name="l00304"></a>00304 ans->len == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(4)) {
+<a name="l00305"></a>00305 <span class="comment">/* printf("IP address %d.%d.%d.%d\n",</span>
+<a name="l00306"></a>00306 <span class="comment"> htons(ans->ipaddr[0]) >> 8,</span>
+<a name="l00307"></a>00307 <span class="comment"> htons(ans->ipaddr[0]) & 0xff,</span>
+<a name="l00308"></a>00308 <span class="comment"> htons(ans->ipaddr[1]) >> 8,</span>
+<a name="l00309"></a>00309 <span class="comment"> htons(ans->ipaddr[1]) & 0xff);*/</span>
+<a name="l00310"></a>00310 <span class="comment">/* XXX: we should really check that this IP address is the one</span>
+<a name="l00311"></a>00311 <span class="comment"> we want. */</span>
+<a name="l00312"></a>00312 namemapptr->ipaddr[0] = ans->ipaddr[0];
+<a name="l00313"></a>00313 namemapptr->ipaddr[1] = ans->ipaddr[1];
+<a name="l00314"></a>00314
+<a name="l00315"></a>00315 <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, namemapptr->ipaddr);
+<a name="l00316"></a>00316 <span class="keywordflow">return</span>;
+<a name="l00317"></a>00317 } <span class="keywordflow">else</span> {
+<a name="l00318"></a>00318 nameptr = nameptr + 10 + <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(ans->len);
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 --nanswers;
+<a name="l00321"></a>00321 }
+<a name="l00322"></a>00322 }
+<a name="l00323"></a>00323
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00326"></a>00326 <span class="comment">/** \internal</span>
+<a name="l00327"></a>00327 <span class="comment"> * The main UDP function.</span>
+<a name="l00328"></a>00328 <span class="comment"> */</span>
+<a name="l00329"></a>00329 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00330"></a>00330 <span class="keywordtype">void</span>
+<a name="l00331"></a>00331 <a name="a143"></a><a class="code" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00332"></a>00332 {
+<a name="l00333"></a>00333 <span class="keywordflow">if</span>(<a class="code" href="a00095.html">uip_udp_conn</a>->rport == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(53)) {
+<a name="l00334"></a>00334 <span class="keywordflow">if</span>(<a name="a144"></a><a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00335"></a>00335 check_entries();
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 <span class="keywordflow">if</span>(<a name="a145"></a><a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00338"></a>00338 newdata();
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341 }
+<a name="l00342"></a>00342 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00343"></a>00343 <span class="comment">/**</span>
+<a name="l00344"></a>00344 <span class="comment"> * Queues a name so that a question for the name will be sent out.</span>
+<a name="l00345"></a>00345 <span class="comment"> *</span>
+<a name="l00346"></a>00346 <span class="comment"> * \param name The hostname that is to be queried.</span>
+<a name="l00347"></a>00347 <span class="comment"> */</span>
+<a name="l00348"></a>00348 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00349"></a>00349 <span class="keywordtype">void</span>
+<a name="l00350"></a>00350 <a name="a146"></a><a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(<span class="keywordtype">char</span> *name)
+<a name="l00351"></a>00351 {
+<a name="l00352"></a>00352 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00353"></a>00353 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> lseq, lseqi;
+<a name="l00354"></a>00354 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *nameptr;
+<a name="l00355"></a>00355
+<a name="l00356"></a>00356 lseq = lseqi = 0;
+<a name="l00357"></a>00357
+<a name="l00358"></a>00358 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00359"></a>00359 nameptr = &names[i];
+<a name="l00360"></a>00360 <span class="keywordflow">if</span>(nameptr->state == <a name="a147"></a><a class="code" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">STATE_UNUSED</a>) {
+<a name="l00361"></a>00361 <span class="keywordflow">break</span>;
+<a name="l00362"></a>00362 }
+<a name="l00363"></a>00363 <span class="keywordflow">if</span>(seqno - nameptr->seqno > lseq) {
+<a name="l00364"></a>00364 lseq = seqno - nameptr->seqno;
+<a name="l00365"></a>00365 lseqi = i;
+<a name="l00366"></a>00366 }
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369 <span class="keywordflow">if</span>(i == <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>) {
+<a name="l00370"></a>00370 i = lseqi;
+<a name="l00371"></a>00371 nameptr = &names[i];
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373
+<a name="l00374"></a>00374 <span class="comment">/* printf("Using entry %d\n", i);*/</span>
+<a name="l00375"></a>00375
+<a name="l00376"></a>00376 strcpy(nameptr->name, name);
+<a name="l00377"></a>00377 nameptr->state = <a class="code" href="a00102.html#bf4401501f1389872141a78b63f325a3">STATE_NEW</a>;
+<a name="l00378"></a>00378 nameptr->seqno = seqno;
+<a name="l00379"></a>00379 ++seqno;
+<a name="l00380"></a>00380 }
+<a name="l00381"></a>00381 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00382"></a>00382 <span class="comment">/**</span>
+<a name="l00383"></a>00383 <span class="comment"> * Look up a hostname in the array of known hostnames.</span>
+<a name="l00384"></a>00384 <span class="comment"> *</span>
+<a name="l00385"></a>00385 <span class="comment"> * \note This function only looks in the internal array of known</span>
+<a name="l00386"></a>00386 <span class="comment"> * hostnames, it does not send out a query for the hostname if none</span>
+<a name="l00387"></a>00387 <span class="comment"> * was found. The function resolv_query() can be used to send a query</span>
+<a name="l00388"></a>00388 <span class="comment"> * for a hostname.</span>
+<a name="l00389"></a>00389 <span class="comment"> *</span>
+<a name="l00390"></a>00390 <span class="comment"> * \return A pointer to a 4-byte representation of the hostname's IP</span>
+<a name="l00391"></a>00391 <span class="comment"> * address, or NULL if the hostname was not found in the array of</span>
+<a name="l00392"></a>00392 <span class="comment"> * hostnames.</span>
+<a name="l00393"></a>00393 <span class="comment"> */</span>
+<a name="l00394"></a>00394 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00395"></a>00395 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *
+<a name="l00396"></a>00396 <a name="a148"></a><a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(<span class="keywordtype">char</span> *name)
+<a name="l00397"></a>00397 {
+<a name="l00398"></a>00398 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00399"></a>00399 <span class="keyword">struct </span>namemap *nameptr;
+<a name="l00400"></a>00400
+<a name="l00401"></a>00401 <span class="comment">/* Walk through the list to see if the name is in there. If it is</span>
+<a name="l00402"></a>00402 <span class="comment"> not, we return NULL. */</span>
+<a name="l00403"></a>00403 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00404"></a>00404 nameptr = &names[i];
+<a name="l00405"></a>00405 <span class="keywordflow">if</span>(nameptr->state == <a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a> &&
+<a name="l00406"></a>00406 strcmp(name, nameptr->name) == 0) {
+<a name="l00407"></a>00407 <span class="keywordflow">return</span> nameptr->ipaddr;
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00411"></a>00411 }
+<a name="l00412"></a>00412 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00413"></a>00413 <span class="comment">/**</span>
+<a name="l00414"></a>00414 <span class="comment"> * Obtain the currently configured DNS server.</span>
+<a name="l00415"></a>00415 <span class="comment"> *</span>
+<a name="l00416"></a>00416 <span class="comment"> * \return A pointer to a 4-byte representation of the IP address of</span>
+<a name="l00417"></a>00417 <span class="comment"> * the currently configured DNS server or NULL if no DNS server has</span>
+<a name="l00418"></a>00418 <span class="comment"> * been configured.</span>
+<a name="l00419"></a>00419 <span class="comment"> */</span>
+<a name="l00420"></a>00420 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00421"></a>00421 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *
+<a name="l00422"></a>00422 <a name="a149"></a><a class="code" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a>(<span class="keywordtype">void</span>)
+<a name="l00423"></a>00423 {
+<a name="l00424"></a>00424 <span class="keywordflow">if</span>(resolv_conn == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00425"></a>00425 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00426"></a>00426 }
+<a name="l00427"></a>00427 <span class="keywordflow">return</span> resolv_conn-><a name="a150"></a><a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>;
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00430"></a>00430 <span class="comment">/**</span>
+<a name="l00431"></a>00431 <span class="comment"> * Configure which DNS server to use for queries.</span>
+<a name="l00432"></a>00432 <span class="comment"> *</span>
+<a name="l00433"></a>00433 <span class="comment"> * \param dnsserver A pointer to a 4-byte representation of the IP</span>
+<a name="l00434"></a>00434 <span class="comment"> * address of the DNS server to be configured.</span>
+<a name="l00435"></a>00435 <span class="comment"> */</span>
+<a name="l00436"></a>00436 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00437"></a>00437 <span class="keywordtype">void</span>
+<a name="l00438"></a>00438 <a name="a151"></a><a class="code" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver)
+<a name="l00439"></a>00439 {
+<a name="l00440"></a>00440 <span class="keywordflow">if</span>(resolv_conn != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00441"></a>00441 <a name="a152"></a><a class="code" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip_udp_remove</a>(resolv_conn);
+<a name="l00442"></a>00442 }
+<a name="l00443"></a>00443
+<a name="l00444"></a>00444 resolv_conn = <a name="a153"></a><a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(dnsserver, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(53));
+<a name="l00445"></a>00445 }
+<a name="l00446"></a>00446 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00447"></a>00447 <span class="comment">/**</span>
+<a name="l00448"></a>00448 <span class="comment"> * Initalize the resolver.</span>
+<a name="l00449"></a>00449 <span class="comment"> */</span>
+<a name="l00450"></a>00450 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00451"></a>00451 <span class="keywordtype">void</span>
+<a name="l00452"></a>00452 <a name="a154"></a><a class="code" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a>(<span class="keywordtype">void</span>)
+<a name="l00453"></a>00453 {
+<a name="l00454"></a>00454 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00455"></a>00455
+<a name="l00456"></a>00456 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00457"></a>00457 names[i].state = <a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a>;
+<a name="l00458"></a>00458 }
+<a name="l00459"></a>00459
+<a name="l00460"></a>00460 }
+<a name="l00461"></a>00461 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00462"></a>00462 <span class="comment"></span>
+<a name="l00463"></a>00463 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00464"></a>00464 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00047.html b/third_party/uip-1.0/doc/html/a00047.html new file mode 100644 index 0000000..b036e83 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00047.html @@ -0,0 +1,95 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: resolv.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>resolv.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup resolv</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span><span class="comment"></span>
+<a name="l00005"></a>00005 <span class="comment">/**</span>
+<a name="l00006"></a>00006 <span class="comment"> * \file</span>
+<a name="l00007"></a>00007 <span class="comment"> * DNS resolver code header file.</span>
+<a name="l00008"></a>00008 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00009"></a>00009 <span class="comment"> */</span>
+<a name="l00010"></a>00010
+<a name="l00011"></a>00011 <span class="comment">/*</span>
+<a name="l00012"></a>00012 <span class="comment"> * Copyright (c) 2002-2003, Adam Dunkels.</span>
+<a name="l00013"></a>00013 <span class="comment"> * All rights reserved.</span>
+<a name="l00014"></a>00014 <span class="comment"> *</span>
+<a name="l00015"></a>00015 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00016"></a>00016 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00017"></a>00017 <span class="comment"> * are met:</span>
+<a name="l00018"></a>00018 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00019"></a>00019 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00020"></a>00020 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00021"></a>00021 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00022"></a>00022 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00023"></a>00023 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00024"></a>00024 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00025"></a>00025 <span class="comment"> * written permission.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00028"></a>00028 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00029"></a>00029 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00030"></a>00030 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00031"></a>00031 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00032"></a>00032 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00033"></a>00033 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00034"></a>00034 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00035"></a>00035 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00036"></a>00036 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00037"></a>00037 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00040"></a>00040 <span class="comment"> *</span>
+<a name="l00041"></a>00041 <span class="comment"> * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> */</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifndef __RESOLV_H__</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define __RESOLV_H__</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a>;
+<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a name="a155"></a><a class="code" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049 <span class="preprocessor">#define UIP_UDP_APPCALL resolv_appcall</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00052"></a>00052 <span class="comment"></span>
+<a name="l00053"></a>00053 <span class="comment">/**</span>
+<a name="l00054"></a>00054 <span class="comment"> * Callback function which is called when a hostname is found.</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * This function must be implemented by the module that uses the DNS</span>
+<a name="l00057"></a>00057 <span class="comment"> * resolver. It is called when a hostname is found, or when a hostname</span>
+<a name="l00058"></a>00058 <span class="comment"> * was not found.</span>
+<a name="l00059"></a>00059 <span class="comment"> *</span>
+<a name="l00060"></a>00060 <span class="comment"> * \param name A pointer to the name that was looked up. \param</span>
+<a name="l00061"></a>00061 <span class="comment"> * ipaddr A pointer to a 4-byte array containing the IP address of the</span>
+<a name="l00062"></a>00062 <span class="comment"> * hostname, or NULL if the hostname could not be found.</span>
+<a name="l00063"></a>00063 <span class="comment"> */</span>
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a name="a156"></a><a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(<span class="keywordtype">char</span> *name, <a name="a157"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *ipaddr);
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="comment">/* Functions. */</span>
+<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a name="a158"></a><a class="code" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver);
+<a name="l00068"></a>00068 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *<a name="a159"></a><a class="code" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a>(<span class="keywordtype">void</span>);
+<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a name="a160"></a><a class="code" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a>(<span class="keywordtype">void</span>);
+<a name="l00070"></a>00070 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *<a name="a161"></a><a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(<span class="keywordtype">char</span> *name);
+<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a name="a162"></a><a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(<span class="keywordtype">char</span> *name);
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 <span class="preprocessor">#endif </span><span class="comment">/* __RESOLV_H__ */</span>
+<a name="l00074"></a>00074 <span class="comment"></span>
+<a name="l00075"></a>00075 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00048.html b/third_party/uip-1.0/doc/html/a00048.html new file mode 100644 index 0000000..7dcba69 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00048.html @@ -0,0 +1,376 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: dhcpc.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>dhcpc.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2005, Swedish Institute of Computer Science</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "dhcpc.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "<a class="code" href="a00128.html">pt.h</a>"</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#define STATE_INITIAL 0</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define STATE_SENDING 1</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define STATE_OFFER_RECEIVED 2</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define STATE_CONFIG_RECEIVED 3</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keyword">struct </span><a name="_a0"></a><a class="code" href="a00077.html">dhcpc_state</a> s;
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="keyword">struct </span>dhcp_msg {
+<a name="l00050"></a>00050 <a name="a1"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> op, htype, hlen, hops;
+<a name="l00051"></a>00051 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> xid[4];
+<a name="l00052"></a>00052 <a name="a2"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> secs, flags;
+<a name="l00053"></a>00053 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> ciaddr[4];
+<a name="l00054"></a>00054 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> yiaddr[4];
+<a name="l00055"></a>00055 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> siaddr[4];
+<a name="l00056"></a>00056 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> giaddr[4];
+<a name="l00057"></a>00057 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> chaddr[16];
+<a name="l00058"></a>00058 <span class="preprocessor">#ifndef UIP_CONF_DHCP_LIGHT</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> sname[64];
+<a name="l00060"></a>00060 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> file[128];
+<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> options[312];
+<a name="l00063"></a>00063 };
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#define BOOTP_BROADCAST 0x8000</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067 <span class="preprocessor">#define DHCP_REQUEST 1</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_REPLY 2</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_HTYPE_ETHERNET 1</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_HLEN_ETHERNET 6</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_MSG_LEN 236</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a>00073 <span class="preprocessor">#define DHCPC_SERVER_PORT 67</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define DHCPC_CLIENT_PORT 68</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a>00076 <span class="preprocessor">#define DHCPDISCOVER 1</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define DHCPOFFER 2</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define DHCPREQUEST 3</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define DHCPDECLINE 4</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define DHCPACK 5</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define DHCPNAK 6</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define DHCPRELEASE 7</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a>00084 <span class="preprocessor">#define DHCP_OPTION_SUBNET_MASK 1</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_ROUTER 3</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_DNS_SERVER 6</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_REQ_IPADDR 50</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_LEASE_TIME 51</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_MSG_TYPE 53</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_SERVER_ID 54</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_REQ_LIST 55</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_END 255</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span>
+<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> xid[4] = {0xad, 0xde, 0x12, 0x23};
+<a name="l00095"></a>00095 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> magic_cookie[4] = {99, 130, 83, 99};
+<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00097"></a>00097 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00098"></a>00098 add_msg_type(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr, <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> type)
+<a name="l00099"></a>00099 {
+<a name="l00100"></a>00100 *optptr++ = DHCP_OPTION_MSG_TYPE;
+<a name="l00101"></a>00101 *optptr++ = 1;
+<a name="l00102"></a>00102 *optptr++ = type;
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> optptr;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00106"></a>00106 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00107"></a>00107 add_server_id(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00108"></a>00108 {
+<a name="l00109"></a>00109 *optptr++ = DHCP_OPTION_SERVER_ID;
+<a name="l00110"></a>00110 *optptr++ = 4;
+<a name="l00111"></a>00111 memcpy(optptr, s.<a name="a3"></a><a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>, 4);
+<a name="l00112"></a>00112 <span class="keywordflow">return</span> optptr + 4;
+<a name="l00113"></a>00113 }
+<a name="l00114"></a>00114 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00115"></a>00115 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00116"></a>00116 add_req_ipaddr(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00117"></a>00117 {
+<a name="l00118"></a>00118 *optptr++ = DHCP_OPTION_REQ_IPADDR;
+<a name="l00119"></a>00119 *optptr++ = 4;
+<a name="l00120"></a>00120 memcpy(optptr, s.<a name="a4"></a><a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>, 4);
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> optptr + 4;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00124"></a>00124 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00125"></a>00125 add_req_options(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00126"></a>00126 {
+<a name="l00127"></a>00127 *optptr++ = DHCP_OPTION_REQ_LIST;
+<a name="l00128"></a>00128 *optptr++ = 3;
+<a name="l00129"></a>00129 *optptr++ = DHCP_OPTION_SUBNET_MASK;
+<a name="l00130"></a>00130 *optptr++ = DHCP_OPTION_ROUTER;
+<a name="l00131"></a>00131 *optptr++ = DHCP_OPTION_DNS_SERVER;
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> optptr;
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00135"></a>00135 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00136"></a>00136 add_end(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00137"></a>00137 {
+<a name="l00138"></a>00138 *optptr++ = DHCP_OPTION_END;
+<a name="l00139"></a>00139 <span class="keywordflow">return</span> optptr;
+<a name="l00140"></a>00140 }
+<a name="l00141"></a>00141 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00142"></a>00142 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00143"></a>00143 create_msg(<span class="keyword">register</span> <span class="keyword">struct</span> dhcp_msg *m)
+<a name="l00144"></a>00144 {
+<a name="l00145"></a>00145 m->op = DHCP_REQUEST;
+<a name="l00146"></a>00146 m->htype = DHCP_HTYPE_ETHERNET;
+<a name="l00147"></a>00147 m->hlen = s.<a name="a5"></a><a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>;
+<a name="l00148"></a>00148 m->hops = 0;
+<a name="l00149"></a>00149 memcpy(m->xid, xid, <span class="keyword">sizeof</span>(m->xid));
+<a name="l00150"></a>00150 m->secs = 0;
+<a name="l00151"></a>00151 m->flags = <a name="a6"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(BOOTP_BROADCAST); <span class="comment">/* Broadcast bit. */</span>
+<a name="l00152"></a>00152 <span class="comment">/* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/</span>
+<a name="l00153"></a>00153 memcpy(m->ciaddr, <a name="a7"></a><a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, <span class="keyword">sizeof</span>(m->ciaddr));
+<a name="l00154"></a>00154 memset(m->yiaddr, 0, <span class="keyword">sizeof</span>(m->yiaddr));
+<a name="l00155"></a>00155 memset(m->siaddr, 0, <span class="keyword">sizeof</span>(m->siaddr));
+<a name="l00156"></a>00156 memset(m->giaddr, 0, <span class="keyword">sizeof</span>(m->giaddr));
+<a name="l00157"></a>00157 memcpy(m->chaddr, s.<a name="a8"></a><a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a>, s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>);
+<a name="l00158"></a>00158 memset(&m->chaddr[s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>], 0, <span class="keyword">sizeof</span>(m->chaddr) - s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>);
+<a name="l00159"></a>00159 <span class="preprocessor">#ifndef UIP_CONF_DHCP_LIGHT</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span> memset(m->sname, 0, <span class="keyword">sizeof</span>(m->sname));
+<a name="l00161"></a>00161 memset(m->file, 0, <span class="keyword">sizeof</span>(m->file));
+<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span>
+<a name="l00164"></a>00164 memcpy(m->options, magic_cookie, <span class="keyword">sizeof</span>(magic_cookie));
+<a name="l00165"></a>00165 }
+<a name="l00166"></a>00166 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00168"></a>00168 send_discover(<span class="keywordtype">void</span>)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end;
+<a name="l00171"></a>00171 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a name="a9"></a><a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 create_msg(m);
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 end = add_msg_type(&m->options[4], DHCPDISCOVER);
+<a name="l00176"></a>00176 end = add_req_options(end);
+<a name="l00177"></a>00177 end = add_end(end);
+<a name="l00178"></a>00178
+<a name="l00179"></a>00179 <a name="a10"></a><a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, end - (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00180"></a>00180 }
+<a name="l00181"></a>00181 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00183"></a>00183 send_request(<span class="keywordtype">void</span>)
+<a name="l00184"></a>00184 {
+<a name="l00185"></a>00185 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end;
+<a name="l00186"></a>00186 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 create_msg(m);
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 end = add_msg_type(&m->options[4], DHCPREQUEST);
+<a name="l00191"></a>00191 end = add_server_id(end);
+<a name="l00192"></a>00192 end = add_req_ipaddr(end);
+<a name="l00193"></a>00193 end = add_end(end);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, end - (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00196"></a>00196 }
+<a name="l00197"></a>00197 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00198"></a>00198 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00199"></a>00199 parse_options(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr, <span class="keywordtype">int</span> len)
+<a name="l00200"></a>00200 {
+<a name="l00201"></a>00201 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end = optptr + len;
+<a name="l00202"></a>00202 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> type = 0;
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 <span class="keywordflow">while</span>(optptr < end) {
+<a name="l00205"></a>00205 <span class="keywordflow">switch</span>(*optptr) {
+<a name="l00206"></a>00206 <span class="keywordflow">case</span> DHCP_OPTION_SUBNET_MASK:
+<a name="l00207"></a>00207 memcpy(s.<a name="a11"></a><a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>, optptr + 2, 4);
+<a name="l00208"></a>00208 <span class="keywordflow">break</span>;
+<a name="l00209"></a>00209 <span class="keywordflow">case</span> DHCP_OPTION_ROUTER:
+<a name="l00210"></a>00210 memcpy(s.<a name="a12"></a><a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>, optptr + 2, 4);
+<a name="l00211"></a>00211 <span class="keywordflow">break</span>;
+<a name="l00212"></a>00212 <span class="keywordflow">case</span> DHCP_OPTION_DNS_SERVER:
+<a name="l00213"></a>00213 memcpy(s.<a name="a13"></a><a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>, optptr + 2, 4);
+<a name="l00214"></a>00214 <span class="keywordflow">break</span>;
+<a name="l00215"></a>00215 <span class="keywordflow">case</span> DHCP_OPTION_MSG_TYPE:
+<a name="l00216"></a>00216 type = *(optptr + 2);
+<a name="l00217"></a>00217 <span class="keywordflow">break</span>;
+<a name="l00218"></a>00218 <span class="keywordflow">case</span> DHCP_OPTION_SERVER_ID:
+<a name="l00219"></a>00219 memcpy(s.<a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>, optptr + 2, 4);
+<a name="l00220"></a>00220 <span class="keywordflow">break</span>;
+<a name="l00221"></a>00221 <span class="keywordflow">case</span> DHCP_OPTION_LEASE_TIME:
+<a name="l00222"></a>00222 memcpy(s.<a name="a14"></a><a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>, optptr + 2, 4);
+<a name="l00223"></a>00223 <span class="keywordflow">break</span>;
+<a name="l00224"></a>00224 <span class="keywordflow">case</span> DHCP_OPTION_END:
+<a name="l00225"></a>00225 <span class="keywordflow">return</span> type;
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 optptr += optptr[1] + 2;
+<a name="l00229"></a>00229 }
+<a name="l00230"></a>00230 <span class="keywordflow">return</span> type;
+<a name="l00231"></a>00231 }
+<a name="l00232"></a>00232 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00233"></a>00233 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00234"></a>00234 parse_msg(<span class="keywordtype">void</span>)
+<a name="l00235"></a>00235 {
+<a name="l00236"></a>00236 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 <span class="keywordflow">if</span>(m->op == DHCP_REPLY &&
+<a name="l00239"></a>00239 memcmp(m->xid, xid, <span class="keyword">sizeof</span>(xid)) == 0 &&
+<a name="l00240"></a>00240 memcmp(m->chaddr, s.<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a>, s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>) == 0) {
+<a name="l00241"></a>00241 memcpy(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>, m->yiaddr, 4);
+<a name="l00242"></a>00242 <span class="keywordflow">return</span> parse_options(&m->options[4], <a name="a15"></a><a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>());
+<a name="l00243"></a>00243 }
+<a name="l00244"></a>00244 <span class="keywordflow">return</span> 0;
+<a name="l00245"></a>00245 }
+<a name="l00246"></a>00246 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00247"></a>00247 <span class="keyword">static</span>
+<a name="l00248"></a>00248 <a name="a16"></a><a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(handle_dhcp(<span class="keywordtype">void</span>))
+<a name="l00249"></a>00249 {
+<a name="l00250"></a>00250 <a name="a17"></a><a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s.<a name="a18"></a><a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="comment">/* try_again:*/</span>
+<a name="l00253"></a>00253 s.<a name="a19"></a><a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_SENDING;
+<a name="l00254"></a>00254 s.<a name="a20"></a><a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> = <a name="a21"></a><a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordflow">do</span> {
+<a name="l00257"></a>00257 send_discover();
+<a name="l00258"></a>00258 <a name="a22"></a><a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&s.<a name="a23"></a><a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>, s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>);
+<a name="l00259"></a>00259 <a name="a24"></a><a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>, <a name="a25"></a><a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() || <a name="a26"></a><a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>));
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() && parse_msg() == DHCPOFFER) {
+<a name="l00262"></a>00262 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_OFFER_RECEIVED;
+<a name="l00263"></a>00263 <span class="keywordflow">break</span>;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> < <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> * 60) {
+<a name="l00267"></a>00267 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> *= 2;
+<a name="l00268"></a>00268 }
+<a name="l00269"></a>00269 } <span class="keywordflow">while</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> != STATE_OFFER_RECEIVED);
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> = <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="keywordflow">do</span> {
+<a name="l00274"></a>00274 send_request();
+<a name="l00275"></a>00275 <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>, s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>);
+<a name="l00276"></a>00276 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>, <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() || <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>));
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() && parse_msg() == DHCPACK) {
+<a name="l00279"></a>00279 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_CONFIG_RECEIVED;
+<a name="l00280"></a>00280 <span class="keywordflow">break</span>;
+<a name="l00281"></a>00281 }
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> <= <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> * 10) {
+<a name="l00284"></a>00284 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> += <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00285"></a>00285 } <span class="keywordflow">else</span> {
+<a name="l00286"></a>00286 <a name="a27"></a><a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00287"></a>00287 }
+<a name="l00288"></a>00288 } <span class="keywordflow">while</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> != STATE_CONFIG_RECEIVED);
+<a name="l00289"></a>00289
+<a name="l00290"></a>00290 <span class="preprocessor">#if 0</span>
+<a name="l00291"></a>00291 <span class="preprocessor"></span> printf(<span class="stringliteral">"Got IP address %d.%d.%d.%d\n"</span>,
+<a name="l00292"></a>00292 <a name="a28"></a><a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>), <a name="a29"></a><a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>),
+<a name="l00293"></a>00293 <a name="a30"></a><a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>), <a name="a31"></a><a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>));
+<a name="l00294"></a>00294 printf(<span class="stringliteral">"Got netmask %d.%d.%d.%d\n"</span>,
+<a name="l00295"></a>00295 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>),
+<a name="l00296"></a>00296 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>));
+<a name="l00297"></a>00297 printf(<span class="stringliteral">"Got DNS server %d.%d.%d.%d\n"</span>,
+<a name="l00298"></a>00298 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>),
+<a name="l00299"></a>00299 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>));
+<a name="l00300"></a>00300 printf(<span class="stringliteral">"Got default router %d.%d.%d.%d\n"</span>,
+<a name="l00301"></a>00301 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>),
+<a name="l00302"></a>00302 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>));
+<a name="l00303"></a>00303 printf(<span class="stringliteral">"Lease expires in %ld seconds\n"</span>,
+<a name="l00304"></a>00304 <a name="a32"></a><a class="code" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a>(s.<a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[0])*65536ul + <a class="code" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a>(s.<a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[1]));
+<a name="l00305"></a>00305 <span class="preprocessor">#endif</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span>
+<a name="l00307"></a>00307 dhcpc_configured(&s);
+<a name="l00308"></a>00308
+<a name="l00309"></a>00309 <span class="comment">/* timer_stop(&s.timer);*/</span>
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 <span class="comment">/*</span>
+<a name="l00312"></a>00312 <span class="comment"> * PT_END restarts the thread so we do this instead. Eventually we</span>
+<a name="l00313"></a>00313 <span class="comment"> * should reacquire expired leases here.</span>
+<a name="l00314"></a>00314 <span class="comment"> */</span>
+<a name="l00315"></a>00315 <span class="keywordflow">while</span>(1) {
+<a name="l00316"></a>00316 <a name="a33"></a><a class="code" href="a00142.html#g155cba6121323726d02c00284428fed6">PT_YIELD</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00317"></a>00317 }
+<a name="l00318"></a>00318
+<a name="l00319"></a>00319 <a name="a34"></a><a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00320"></a>00320 }
+<a name="l00321"></a>00321 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00322"></a>00322 <span class="keywordtype">void</span>
+<a name="l00323"></a>00323 dhcpc_init(<span class="keyword">const</span> <span class="keywordtype">void</span> *mac_addr, <span class="keywordtype">int</span> mac_len)
+<a name="l00324"></a>00324 {
+<a name="l00325"></a>00325 <a name="a35"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 s.<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a> = mac_addr;
+<a name="l00328"></a>00328 s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a> = mac_len;
+<a name="l00329"></a>00329
+<a name="l00330"></a>00330 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_INITIAL;
+<a name="l00331"></a>00331 <a name="a36"></a><a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(addr, 255,255,255,255);
+<a name="l00332"></a>00332 s.<a name="a37"></a><a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a> = <a name="a38"></a><a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(&addr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(DHCPC_SERVER_PORT));
+<a name="l00333"></a>00333 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a> != <a name="a39"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00334"></a>00334 <a name="a40"></a><a class="code" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(s.<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a>, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(DHCPC_CLIENT_PORT));
+<a name="l00335"></a>00335 }
+<a name="l00336"></a>00336 <a name="a41"></a><a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00337"></a>00337 }
+<a name="l00338"></a>00338 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00339"></a>00339 <span class="keywordtype">void</span>
+<a name="l00340"></a>00340 dhcpc_appcall(<span class="keywordtype">void</span>)
+<a name="l00341"></a>00341 {
+<a name="l00342"></a>00342 handle_dhcp();
+<a name="l00343"></a>00343 }
+<a name="l00344"></a>00344 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00345"></a>00345 <span class="keywordtype">void</span>
+<a name="l00346"></a>00346 dhcpc_request(<span class="keywordtype">void</span>)
+<a name="l00347"></a>00347 {
+<a name="l00348"></a>00348 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+<a name="l00349"></a>00349
+<a name="l00350"></a>00350 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> == STATE_INITIAL) {
+<a name="l00351"></a>00351 <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 0,0,0,0);
+<a name="l00352"></a>00352 <a name="a42"></a><a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(ipaddr);
+<a name="l00353"></a>00353 <span class="comment">/* handle_dhcp(PROCESS_EVENT_NONE, NULL);*/</span>
+<a name="l00354"></a>00354 }
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00049.html b/third_party/uip-1.0/doc/html/a00049.html new file mode 100644 index 0000000..481e47d --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00049.html @@ -0,0 +1,88 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: dhcpc.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>dhcpc.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2005, Swedish Institute of Computer Science</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#ifndef __DHCPC_H__</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define __DHCPC_H__</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00128.html">pt.h</a>"</span>
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039 <span class="keyword">struct </span><a name="_a43"></a><a class="code" href="a00077.html">dhcpc_state</a> {
+<a name="l00040"></a>00040 <span class="keyword">struct </span><a name="_a44"></a><a class="code" href="a00084.html">pt</a> <a name="a45"></a><a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>;
+<a name="l00041"></a>00041 <span class="keywordtype">char</span> <a name="a46"></a><a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a>;
+<a name="l00042"></a>00042 <span class="keyword">struct </span><a name="_a47"></a><a class="code" href="a00095.html">uip_udp_conn</a> *<a name="a48"></a><a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a>;
+<a name="l00043"></a>00043 <span class="keyword">struct </span><a name="_a49"></a><a class="code" href="a00087.html">timer</a> <a name="a50"></a><a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>;
+<a name="l00044"></a>00044 <a name="a51"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a52"></a><a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>;
+<a name="l00045"></a>00045 <span class="keyword">const</span> <span class="keywordtype">void</span> *mac_addr;
+<a name="l00046"></a>00046 <span class="keywordtype">int</span> mac_len;
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <a name="a53"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a name="a54"></a><a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>[4];
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a55"></a><a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[2];
+<a name="l00051"></a>00051 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+<a name="l00052"></a>00052 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a56"></a><a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>[2];
+<a name="l00053"></a>00053 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a57"></a><a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>[2];
+<a name="l00054"></a>00054 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a name="a58"></a><a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>[2];
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keywordtype">void</span> dhcpc_init(<span class="keyword">const</span> <span class="keywordtype">void</span> *mac_addr, <span class="keywordtype">int</span> mac_len);
+<a name="l00058"></a>00058 <span class="keywordtype">void</span> dhcpc_request(<span class="keywordtype">void</span>);
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="keywordtype">void</span> dhcpc_appcall(<span class="keywordtype">void</span>);
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="keywordtype">void</span> dhcpc_configured(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="a00077.html">dhcpc_state</a> *s);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00077.html">dhcpc_state</a> <a name="a59"></a><a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a>;
+<a name="l00065"></a>00065 <span class="preprocessor">#define UIP_UDP_APPCALL dhcpc_appcall</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="preprocessor">#endif </span><span class="comment">/* __DHCPC_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00050.html b/third_party/uip-1.0/doc/html/a00050.html new file mode 100644 index 0000000..e5f483f --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00050.html @@ -0,0 +1,177 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip-conf.h</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uip-conf.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uipopt</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \name Project-specific configuration options</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * uIP has a number of configuration options that can be overridden</span>
+<a name="l00011"></a>00011 <span class="comment"> * for each project. These are kept in a project-specific uip-conf.h</span>
+<a name="l00012"></a>00012 <span class="comment"> * file and all configuration names have the prefix UIP_CONF.</span>
+<a name="l00013"></a>00013 <span class="comment"> */</span>
+<a name="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="comment">/*</span>
+<a name="l00016"></a>00016 <span class="comment"> * Copyright (c) 2006, Swedish Institute of Computer Science.</span>
+<a name="l00017"></a>00017 <span class="comment"> * All rights reserved.</span>
+<a name="l00018"></a>00018 <span class="comment"> *</span>
+<a name="l00019"></a>00019 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00020"></a>00020 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00021"></a>00021 <span class="comment"> * are met:</span>
+<a name="l00022"></a>00022 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00023"></a>00023 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00024"></a>00024 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00025"></a>00025 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00026"></a>00026 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00027"></a>00027 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00028"></a>00028 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00029"></a>00029 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00032"></a>00032 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00033"></a>00033 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00034"></a>00034 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00035"></a>00035 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00036"></a>00036 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00037"></a>00037 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00038"></a>00038 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00039"></a>00039 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00040"></a>00040 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00041"></a>00041 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047 <span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">/**</span>
+<a name="l00049"></a>00049 <span class="comment"> * \file</span>
+<a name="l00050"></a>00050 <span class="comment"> * An example uIP configuration file</span>
+<a name="l00051"></a>00051 <span class="comment"> * \author</span>
+<a name="l00052"></a>00052 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef __UIP_CONF_H__</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_CONF_H__</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="preprocessor">#include <inttypes.h></span>
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00060"></a>00060 <span class="comment">/**</span>
+<a name="l00061"></a>00061 <span class="comment"> * 8 bit datatype</span>
+<a name="l00062"></a>00062 <span class="comment"> *</span>
+<a name="l00063"></a>00063 <span class="comment"> * This typedef defines the 8-bit type used throughout uIP.</span>
+<a name="l00064"></a>00064 <span class="comment"> *</span>
+<a name="l00065"></a>00065 <span class="comment"> * \hideinitializer</span>
+<a name="l00066"></a>00066 <span class="comment"> */</span>
+<a name="l00067"></a>00067 <span class="keyword">typedef</span> uint8_t <a name="a249"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>;
+<a name="l00068"></a>00068 <span class="comment"></span>
+<a name="l00069"></a>00069 <span class="comment">/**</span>
+<a name="l00070"></a>00070 <span class="comment"> * 16 bit datatype</span>
+<a name="l00071"></a>00071 <span class="comment"> *</span>
+<a name="l00072"></a>00072 <span class="comment"> * This typedef defines the 16-bit type used throughout uIP.</span>
+<a name="l00073"></a>00073 <span class="comment"> *</span>
+<a name="l00074"></a>00074 <span class="comment"> * \hideinitializer</span>
+<a name="l00075"></a>00075 <span class="comment"> */</span>
+<a name="l00076"></a>00076 <span class="keyword">typedef</span> uint16_t <a name="a250"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>;
+<a name="l00077"></a>00077 <span class="comment"></span>
+<a name="l00078"></a>00078 <span class="comment">/**</span>
+<a name="l00079"></a>00079 <span class="comment"> * Statistics datatype</span>
+<a name="l00080"></a>00080 <span class="comment"> *</span>
+<a name="l00081"></a>00081 <span class="comment"> * This typedef defines the dataype used for keeping statistics in</span>
+<a name="l00082"></a>00082 <span class="comment"> * uIP.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * \hideinitializer</span>
+<a name="l00085"></a>00085 <span class="comment"> */</span>
+<a name="l00086"></a>00086 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a>;
+<a name="l00087"></a>00087 <span class="comment"></span>
+<a name="l00088"></a>00088 <span class="comment">/**</span>
+<a name="l00089"></a>00089 <span class="comment"> * Maximum number of TCP connections.</span>
+<a name="l00090"></a>00090 <span class="comment"> *</span>
+<a name="l00091"></a>00091 <span class="comment"> * \hideinitializer</span>
+<a name="l00092"></a>00092 <span class="comment"> */</span>
+<a name="l00093"></a>00093 <span class="preprocessor">#define UIP_CONF_MAX_CONNECTIONS 40</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00095"></a>00095 <span class="comment">/**</span>
+<a name="l00096"></a>00096 <span class="comment"> * Maximum number of listening TCP ports.</span>
+<a name="l00097"></a>00097 <span class="comment"> *</span>
+<a name="l00098"></a>00098 <span class="comment"> * \hideinitializer</span>
+<a name="l00099"></a>00099 <span class="comment"> */</span>
+<a name="l00100"></a>00100 <span class="preprocessor">#define UIP_CONF_MAX_LISTENPORTS 40</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00102"></a>00102 <span class="comment">/**</span>
+<a name="l00103"></a>00103 <span class="comment"> * uIP buffer size.</span>
+<a name="l00104"></a>00104 <span class="comment"> *</span>
+<a name="l00105"></a>00105 <span class="comment"> * \hideinitializer</span>
+<a name="l00106"></a>00106 <span class="comment"> */</span>
+<a name="l00107"></a>00107 <span class="preprocessor">#define UIP_CONF_BUFFER_SIZE 420</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00109"></a>00109 <span class="comment">/**</span>
+<a name="l00110"></a>00110 <span class="comment"> * CPU byte order.</span>
+<a name="l00111"></a>00111 <span class="comment"> *</span>
+<a name="l00112"></a>00112 <span class="comment"> * \hideinitializer</span>
+<a name="l00113"></a>00113 <span class="comment"> */</span>
+<a name="l00114"></a>00114 <span class="preprocessor">#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00116"></a>00116 <span class="comment">/**</span>
+<a name="l00117"></a>00117 <span class="comment"> * Logging on or off</span>
+<a name="l00118"></a>00118 <span class="comment"> *</span>
+<a name="l00119"></a>00119 <span class="comment"> * \hideinitializer</span>
+<a name="l00120"></a>00120 <span class="comment"> */</span>
+<a name="l00121"></a>00121 <span class="preprocessor">#define UIP_CONF_LOGGING 1</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00123"></a>00123 <span class="comment">/**</span>
+<a name="l00124"></a>00124 <span class="comment"> * UDP support on or off</span>
+<a name="l00125"></a>00125 <span class="comment"> *</span>
+<a name="l00126"></a>00126 <span class="comment"> * \hideinitializer</span>
+<a name="l00127"></a>00127 <span class="comment"> */</span>
+<a name="l00128"></a>00128 <span class="preprocessor">#define UIP_CONF_UDP 0</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00130"></a>00130 <span class="comment">/**</span>
+<a name="l00131"></a>00131 <span class="comment"> * UDP checksums on or off</span>
+<a name="l00132"></a>00132 <span class="comment"> *</span>
+<a name="l00133"></a>00133 <span class="comment"> * \hideinitializer</span>
+<a name="l00134"></a>00134 <span class="comment"> */</span>
+<a name="l00135"></a>00135 <span class="preprocessor">#define UIP_CONF_UDP_CHECKSUMS 1</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">/**</span>
+<a name="l00138"></a>00138 <span class="comment"> * uIP statistics on or off</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * \hideinitializer</span>
+<a name="l00141"></a>00141 <span class="comment"> */</span>
+<a name="l00142"></a>00142 <span class="preprocessor">#define UIP_CONF_STATISTICS 1</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00144"></a>00144 <span class="comment">/* Here we include the header file for the application(s) we use in</span>
+<a name="l00145"></a>00145 <span class="comment"> our project. */</span>
+<a name="l00146"></a>00146 <span class="comment">/*#include "smtp.h"*/</span>
+<a name="l00147"></a>00147 <span class="comment">/*#include "hello-world.h"*/</span>
+<a name="l00148"></a>00148 <span class="comment">/*#include "telnetd.h"*/</span>
+<a name="l00149"></a>00149 <span class="preprocessor">#include "webserver.h"</span>
+<a name="l00150"></a>00150 <span class="comment">/*#include "dhcpc.h"*/</span>
+<a name="l00151"></a>00151 <span class="comment">/*#include "resolv.h"*/</span>
+<a name="l00152"></a>00152 <span class="comment">/*#include "webclient.h"*/</span>
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_CONF_H__ */</span>
+<a name="l00155"></a>00155 <span class="comment"></span>
+<a name="l00156"></a>00156 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00157"></a>00157 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00051.html b/third_party/uip-1.0/doc/html/a00051.html new file mode 100644 index 0000000..ba8fe52 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00051.html @@ -0,0 +1,138 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip-code-style.c</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uip-code-style.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* This is the official code style of uIP. */</span>
+<a name="l00002"></a>00002 <span class="comment"></span>
+<a name="l00003"></a>00003 <span class="comment">/**</span>
+<a name="l00004"></a>00004 <span class="comment"> * \defgroup codestyle Coding style</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * This is how a Doxygen module is documented - start with a \defgroup</span>
+<a name="l00007"></a>00007 <span class="comment"> * Doxygen keyword at the beginning of the file to define a module,</span>
+<a name="l00008"></a>00008 <span class="comment"> * and use the \addtogroup Doxygen keyword in all other files that</span>
+<a name="l00009"></a>00009 <span class="comment"> * belong to the same module. Typically, the \defgroup is placed in</span>
+<a name="l00010"></a>00010 <span class="comment"> * the .h file and \addtogroup in the .c file.</span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> * @{</span>
+<a name="l00013"></a>00013 <span class="comment"> */</span>
+<a name="l00014"></a>00014 <span class="comment"></span>
+<a name="l00015"></a>00015 <span class="comment">/**</span>
+<a name="l00016"></a>00016 <span class="comment"> * \file</span>
+<a name="l00017"></a>00017 <span class="comment"> * A brief description of what this file is.</span>
+<a name="l00018"></a>00018 <span class="comment"> * \author</span>
+<a name="l00019"></a>00019 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00020"></a>00020 <span class="comment"> *</span>
+<a name="l00021"></a>00021 <span class="comment"> * Every file that is part of a documented module has to have</span>
+<a name="l00022"></a>00022 <span class="comment"> * a \file block, else it will not show up in the Doxygen</span>
+<a name="l00023"></a>00023 <span class="comment"> * "Modules" * section.</span>
+<a name="l00024"></a>00024 <span class="comment"> */</span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="comment">/* Single line comments look like this. */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Multi-line comments look like this. Comments should prefferably be</span>
+<a name="l00030"></a>00030 <span class="comment"> * full sentences, filled to look like real paragraphs.</span>
+<a name="l00031"></a>00031 <span class="comment"> */</span>
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="comment">/*</span>
+<a name="l00036"></a>00036 <span class="comment"> * Make sure that non-global variables are all maked with the static</span>
+<a name="l00037"></a>00037 <span class="comment"> * keyword. This keeps the size of the symbol table down.</span>
+<a name="l00038"></a>00038 <span class="comment"> */</span>
+<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keywordtype">int</span> flag;
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 <span class="comment">/*</span>
+<a name="l00042"></a>00042 <span class="comment"> * All variables and functions that are visible outside of the file</span>
+<a name="l00043"></a>00043 <span class="comment"> * should have the module name prepended to them. This makes it easy</span>
+<a name="l00044"></a>00044 <span class="comment"> * to know where to look for function and variable definitions.</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * Put dividers (a single-line comment consisting only of dashes)</span>
+<a name="l00047"></a>00047 <span class="comment"> * between functions.</span>
+<a name="l00048"></a>00048 <span class="comment"> */</span>
+<a name="l00049"></a>00049 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00050"></a>00050 <span class="comment">/**</span>
+<a name="l00051"></a>00051 <span class="comment"> * \brief Use Doxygen documentation for functions.</span>
+<a name="l00052"></a>00052 <span class="comment"> * \param c Briefly describe all parameters.</span>
+<a name="l00053"></a>00053 <span class="comment"> * \return Briefly describe the return value.</span>
+<a name="l00054"></a>00054 <span class="comment"> * \retval 0 Functions that return a few specified values</span>
+<a name="l00055"></a>00055 <span class="comment"> * \retval 1 can use the \retval keyword instead of \return.</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * Put a longer description of what the function does</span>
+<a name="l00058"></a>00058 <span class="comment"> * after the preamble of Doxygen keywords.</span>
+<a name="l00059"></a>00059 <span class="comment"> *</span>
+<a name="l00060"></a>00060 <span class="comment"> * This template should always be used to document</span>
+<a name="l00061"></a>00061 <span class="comment"> * functions. The text following the introduction is used</span>
+<a name="l00062"></a>00062 <span class="comment"> * as the function's documentation.</span>
+<a name="l00063"></a>00063 <span class="comment"> *</span>
+<a name="l00064"></a>00064 <span class="comment"> * Function prototypes have the return type on one line,</span>
+<a name="l00065"></a>00065 <span class="comment"> * the name and arguments on one line (with no space</span>
+<a name="l00066"></a>00066 <span class="comment"> * between the name and the first parenthesis), followed</span>
+<a name="l00067"></a>00067 <span class="comment"> * by a single curly bracket on its own line.</span>
+<a name="l00068"></a>00068 <span class="comment"> */</span>
+<a name="l00069"></a>00069 <span class="keywordtype">void</span>
+<a name="l00070"></a>00070 code_style_example_function(<span class="keywordtype">void</span>)
+<a name="l00071"></a>00071 {
+<a name="l00072"></a>00072 <span class="comment">/*</span>
+<a name="l00073"></a>00073 <span class="comment"> * Local variables should always be declared at the start of the</span>
+<a name="l00074"></a>00074 <span class="comment"> * function.</span>
+<a name="l00075"></a>00075 <span class="comment"> */</span>
+<a name="l00076"></a>00076 <span class="keywordtype">int</span> i; <span class="comment">/* Use short variable names for loop</span>
+<a name="l00077"></a>00077 <span class="comment"> counters. */</span>
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="comment">/*</span>
+<a name="l00080"></a>00080 <span class="comment"> * There should be no space between keywords and the first</span>
+<a name="l00081"></a>00081 <span class="comment"> * parenthesis. There should be spaces around binary operators, no</span>
+<a name="l00082"></a>00082 <span class="comment"> * spaces between a unary operator and its operand.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * Curly brackets following for(), if(), do, and case() statements</span>
+<a name="l00085"></a>00085 <span class="comment"> * should follow the statement on the same line.</span>
+<a name="l00086"></a>00086 <span class="comment"> */</span>
+<a name="l00087"></a>00087 <span class="keywordflow">for</span>(i = 0; i < 10; ++i) {
+<a name="l00088"></a>00088 <span class="comment">/*</span>
+<a name="l00089"></a>00089 <span class="comment"> * Always use full blocks (curly brackets) after if(), for(), and</span>
+<a name="l00090"></a>00090 <span class="comment"> * while() statements, even though the statement is a single line</span>
+<a name="l00091"></a>00091 <span class="comment"> * of code. This makes the code easier to read and modifications</span>
+<a name="l00092"></a>00092 <span class="comment"> * are less error prone.</span>
+<a name="l00093"></a>00093 <span class="comment"> */</span>
+<a name="l00094"></a>00094 <span class="keywordflow">if</span>(i == c) {
+<a name="l00095"></a>00095 <span class="keywordflow">return</span> c; <span class="comment">/* No parentesis around return values. */</span>
+<a name="l00096"></a>00096 } <span class="keywordflow">else</span> { <span class="comment">/* The else keyword is placed inbetween</span>
+<a name="l00097"></a>00097 <span class="comment"> curly brackers, always on its own line. */</span>
+<a name="l00098"></a>00098 c++;
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00103"></a>00103 <span class="comment">/*</span>
+<a name="l00104"></a>00104 <span class="comment"> * Static (non-global) functions do not need Doxygen comments. The</span>
+<a name="l00105"></a>00105 <span class="comment"> * name should not be prepended with the module name - doing so would</span>
+<a name="l00106"></a>00106 <span class="comment"> * create confusion.</span>
+<a name="l00107"></a>00107 <span class="comment"> */</span>
+<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00109"></a>00109 an_example_function(<span class="keywordtype">void</span>)
+<a name="l00110"></a>00110 {
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 }
+<a name="l00113"></a>00113 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00114"></a>00114
+<a name="l00115"></a>00115 <span class="comment">/* The following stuff ends the \defgroup block at the beginning of</span>
+<a name="l00116"></a>00116 <span class="comment"> the file: */</span>
+<a name="l00117"></a>00117 <span class="comment"></span>
+<a name="l00118"></a>00118 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00077.html b/third_party/uip-1.0/doc/html/a00077.html new file mode 100644 index 0000000..ce3bdf8 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00077.html @@ -0,0 +1,78 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: dhcpc_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>dhcpc_state Struct Reference</h1><!-- doxytag: class="dhcpc_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00048.html#_a0">dhcpc.c</a>, and <a class="el" href="a00049.html#_a43">dhcpc.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00169.html#l00039">39</a> of file <a class="el" href="a00169.html">dhcpc.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31471b5e27bda51832d0fa49bd6d9b54"></a><!-- doxytag: member="dhcpc_state::pt" ref="31471b5e27bda51832d0fa49bd6d9b54" args="" -->
+<a class="el" href="a00084.html">pt</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0b137a3875ad12a99e5e3e0e177fd12"></a><!-- doxytag: member="dhcpc_state::state" ref="e0b137a3875ad12a99e5e3e0e177fd12" args="" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cfd36e02c7498d766ff802575e981612"></a><!-- doxytag: member="dhcpc_state::conn" ref="cfd36e02c7498d766ff802575e981612" args="" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e80af46ceef63eab3c786525370ae720"></a><!-- doxytag: member="dhcpc_state::timer" ref="e80af46ceef63eab3c786525370ae720" args="" -->
+<a class="el" href="a00087.html">timer</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e707c39412e09d3a47f0b3c5dad33725"></a><!-- doxytag: member="dhcpc_state::ticks" ref="e707c39412e09d3a47f0b3c5dad33725" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2391bb18db5f620e0e9fb848ae5ba5e9"></a><!-- doxytag: member="dhcpc_state::mac_addr" ref="2391bb18db5f620e0e9fb848ae5ba5e9" args="" -->
+const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5361ef75bfbdb469b5cc31f0060a2670"></a><!-- doxytag: member="dhcpc_state::mac_len" ref="5361ef75bfbdb469b5cc31f0060a2670" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="564bab93ef6a268a5de2fab885c1d32a"></a><!-- doxytag: member="dhcpc_state::serverid" ref="564bab93ef6a268a5de2fab885c1d32a" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a520a57d7d0541524f34a7685635597"></a><!-- doxytag: member="dhcpc_state::lease_time" ref="7a520a57d7d0541524f34a7685635597" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d2f2751b0865045486c9aa59d0d0971"></a><!-- doxytag: member="dhcpc_state::ipaddr" ref="1d2f2751b0865045486c9aa59d0d0971" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="20541305548441e5dcb2e1e7e6f300eb"></a><!-- doxytag: member="dhcpc_state::netmask" ref="20541305548441e5dcb2e1e7e6f300eb" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27df2817055bc099821d96eb60a40b34"></a><!-- doxytag: member="dhcpc_state::dnsaddr" ref="27df2817055bc099821d96eb60a40b34" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e16ca335dfd7394527f602da879fca2"></a><!-- doxytag: member="dhcpc_state::default_router" ref="5e16ca335dfd7394527f602da879fca2" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a> [2]</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00078.html b/third_party/uip-1.0/doc/html/a00078.html new file mode 100644 index 0000000..3b71d67 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00078.html @@ -0,0 +1,51 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: hello_world_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>hello_world_state Struct Reference<br>
+<small>
+[<a class="el" href="a00162.html">Hello, world</a>]</small>
+</h1><!-- doxytag: class="hello_world_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00036.html#_a100">hello-world.c</a>, and <a class="el" href="a00037.html#_a117">hello-world.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00171.html#l00036">36</a> of file <a class="el" href="a00171.html">hello-world.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9825b5977b2d4dec66e6bd09e6ae6ea"></a><!-- doxytag: member="hello_world_state::p" ref="a9825b5977b2d4dec66e6bd09e6ae6ea" args="" -->
+<a class="el" href="a00082.html">psock</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b1b1436b50ed7638aece35f41421196"></a><!-- doxytag: member="hello_world_state::inputbuffer" ref="4b1b1436b50ed7638aece35f41421196" args="[10]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a> [10]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4da86e9feb5e5835eb15163c2cb61116"></a><!-- doxytag: member="hello_world_state::name" ref="4da86e9feb5e5835eb15163c2cb61116" args="[40]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a> [40]</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00079.html b/third_party/uip-1.0/doc/html/a00079.html new file mode 100644 index 0000000..36e884e --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00079.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: httpd_cgi_call Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>httpd_cgi_call Struct Reference<br>
+<small>
+[<a class="el" href="a00164.html">Web server</a>]</small>
+</h1><!-- doxytag: class="httpd_cgi_call" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00183.html#l00060">60</a> of file <a class="el" href="a00183.html">httpd-cgi.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9a84c69ec5a4705ccb1ca99fcd120add"></a><!-- doxytag: member="httpd_cgi_call::name" ref="9a84c69ec5a4705ccb1ca99fcd120add" args="" -->
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">name</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1513a9e88921750d2a611b518f6fc207"></a><!-- doxytag: member="httpd_cgi_call::function" ref="1513a9e88921750d2a611b518f6fc207" args="" -->
+const httpd_cgifunction </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html#1513a9e88921750d2a611b518f6fc207">function</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00080.html b/third_party/uip-1.0/doc/html/a00080.html new file mode 100644 index 0000000..3531046 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00080.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: httpd_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>httpd_state Struct Reference</h1><!-- doxytag: class="httpd_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00185.html#l00041">41</a> of file <a class="el" href="a00185.html">httpd.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c39694ece9526b84012f90f2bb00af9f"></a><!-- doxytag: member="httpd_state::timer" ref="c39694ece9526b84012f90f2bb00af9f" args="" -->
+unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">timer</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9dd8edeece221c853a4c4516bf1b01c2"></a><!-- doxytag: member="httpd_state::sout" ref="9dd8edeece221c853a4c4516bf1b01c2" args="" -->
+<a class="el" href="a00082.html">psock</a> sin </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e261f08e1556287d241764fb2e99fc26"></a><!-- doxytag: member="httpd_state::scriptpt" ref="e261f08e1556287d241764fb2e99fc26" args="" -->
+<a class="el" href="a00084.html">pt</a> outputpt </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c6f843219271d25766ee5969e435d1a"></a><!-- doxytag: member="httpd_state::inputbuf" ref="4c6f843219271d25766ee5969e435d1a" args="[50]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a> [50]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="447eb700ea7a185e0f155934995d49e5"></a><!-- doxytag: member="httpd_state::filename" ref="447eb700ea7a185e0f155934995d49e5" args="[20]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a> [20]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="94fcc9f5c47f419040d849ce58beae35"></a><!-- doxytag: member="httpd_state::state" ref="94fcc9f5c47f419040d849ce58beae35" args="" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e274a8f8b5fb2b3999c54fe27c76e46"></a><!-- doxytag: member="httpd_state::file" ref="5e274a8f8b5fb2b3999c54fe27c76e46" args="" -->
+httpd_fs_file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="468c04fff28e784f93ebc3f0849211dd"></a><!-- doxytag: member="httpd_state::len" ref="468c04fff28e784f93ebc3f0849211dd" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78f82878f3fd0e7401c7d7d3b3fefbef"></a><!-- doxytag: member="httpd_state::scriptptr" ref="78f82878f3fd0e7401c7d7d3b3fefbef" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="16a3a3056f44b7245ce085b937a269dd"></a><!-- doxytag: member="httpd_state::scriptlen" ref="16a3a3056f44b7245ce085b937a269dd" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">scriptlen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6df929b448ea98bc44d41f5e96237bda"></a><!-- doxytag: member="httpd_state::count" ref="6df929b448ea98bc44d41f5e96237bda" args="" -->
+unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00081.html b/third_party/uip-1.0/doc/html/a00081.html new file mode 100644 index 0000000..abe0701 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00081.html @@ -0,0 +1,51 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: memb_blocks Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>memb_blocks Struct Reference<br>
+<small>
+[<a class="el" href="a00159.html">Memory block management functions</a>]</small>
+</h1><!-- doxytag: class="memb_blocks" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00187.html#l00105">105</a> of file <a class="el" href="a00187.html">memb.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b42c7af6114fde5d21206a2e18a7d3ee"></a><!-- doxytag: member="memb_blocks::size" ref="b42c7af6114fde5d21206a2e18a7d3ee" args="" -->
+unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">size</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="164124d48fe85bc98d9a300382a5245d"></a><!-- doxytag: member="memb_blocks::num" ref="164124d48fe85bc98d9a300382a5245d" args="" -->
+unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5595902fd42d874e35a70206fad8f6d0"></a><!-- doxytag: member="memb_blocks::count" ref="5595902fd42d874e35a70206fad8f6d0" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5801722740492e69bcc73687476009f"></a><!-- doxytag: member="memb_blocks::mem" ref="b5801722740492e69bcc73687476009f" args="" -->
+void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#b5801722740492e69bcc73687476009f">mem</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00082.html b/third_party/uip-1.0/doc/html/a00082.html new file mode 100644 index 0000000..adc9082 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00082.html @@ -0,0 +1,73 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: psock Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>psock Struct Reference<br>
+<small>
+[<a class="el" href="a00158.html">Protosockets library</a>]</small>
+</h1><!-- doxytag: class="psock" --><code>#include <<a class="el" href="a00193.html">psock.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The representation of a protosocket.
+<p>
+The protosocket structrure is an opaque structure with no user-visible elements. <dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00037.html#_a118">hello-world.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00106">106</a> of file <a class="el" href="a00193.html">psock.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17aacf7c5e2046c1f3ab50faa1b2f7eb"></a><!-- doxytag: member="psock::psockpt" ref="17aacf7c5e2046c1f3ab50faa1b2f7eb" args="" -->
+<a class="el" href="a00084.html">pt</a> <a class="el" href="a00084.html">pt</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#17aacf7c5e2046c1f3ab50faa1b2f7eb">psockpt</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31f25efccba9fd043047133d0d0ba5ab"></a><!-- doxytag: member="psock::sendptr" ref="31f25efccba9fd043047133d0d0ba5ab" args="" -->
+const <a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#31f25efccba9fd043047133d0d0ba5ab">sendptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b973f2e16c2883a8a0164d716cce5a31"></a><!-- doxytag: member="psock::readptr" ref="b973f2e16c2883a8a0164d716cce5a31" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#b973f2e16c2883a8a0164d716cce5a31">readptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3d1bfbb1abde31973c015de97ce2f84"></a><!-- doxytag: member="psock::bufptr" ref="c3d1bfbb1abde31973c015de97ce2f84" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#c3d1bfbb1abde31973c015de97ce2f84">bufptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="19b82696bd84a803250cbf9812f2f125"></a><!-- doxytag: member="psock::sendlen" ref="19b82696bd84a803250cbf9812f2f125" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#19b82696bd84a803250cbf9812f2f125">sendlen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a408ca8630154ebd039f37a828399f7b"></a><!-- doxytag: member="psock::readlen" ref="a408ca8630154ebd039f37a828399f7b" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a408ca8630154ebd039f37a828399f7b">readlen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d6bd03239291629676e4c0286ebb650f"></a><!-- doxytag: member="psock::buf" ref="d6bd03239291629676e4c0286ebb650f" args="" -->
+<a class="el" href="a00083.html">psock_buf</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#d6bd03239291629676e4c0286ebb650f">buf</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6bfaf327ce839ba70accd71014398d0"></a><!-- doxytag: member="psock::bufsize" ref="a6bfaf327ce839ba70accd71014398d0" args="" -->
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">bufsize</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fda184638130452f3570966acc5b97f9"></a><!-- doxytag: member="psock::state" ref="fda184638130452f3570966acc5b97f9" args="" -->
+unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#fda184638130452f3570966acc5b97f9">state</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00083.html b/third_party/uip-1.0/doc/html/a00083.html new file mode 100644 index 0000000..081035f --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00083.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: psock_buf Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>psock_buf Struct Reference<br>
+<small>
+[<a class="el" href="a00158.html">Protosockets library</a>]</small>
+</h1><!-- doxytag: class="psock_buf" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00095">95</a> of file <a class="el" href="a00193.html">psock.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e8637b1514d03eb3eb12dc9a502e27e"></a><!-- doxytag: member="psock_buf::ptr" ref="5e8637b1514d03eb3eb12dc9a502e27e" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="20fae11b540a561c622a0d74cb4b9f97"></a><!-- doxytag: member="psock_buf::left" ref="20fae11b540a561c622a0d74cb4b9f97" args="" -->
+unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00084.html b/third_party/uip-1.0/doc/html/a00084.html new file mode 100644 index 0000000..a53f6c7 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00084.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: pt Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>pt Struct Reference<br>
+<small>
+[<a class="el" href="a00142.html">Protothreads</a>]</small>
+</h1><!-- doxytag: class="pt" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00049.html#_a44">dhcpc.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00054">54</a> of file <a class="el" href="a00194.html">pt.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3fa0fa86689e3e7c039a16c16861dbe"></a><!-- doxytag: member="pt::lc" ref="c3fa0fa86689e3e7c039a16c16861dbe" args="" -->
+<a class="el" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html#c3fa0fa86689e3e7c039a16c16861dbe">lc</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00085.html b/third_party/uip-1.0/doc/html/a00085.html new file mode 100644 index 0000000..c058765 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00085.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: smtp_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>smtp_state Struct Reference<br>
+<small>
+[<a class="el" href="a00161.html">SMTP E-mail sender</a>]</small>
+</h1><!-- doxytag: class="smtp_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00037.html#_a122">hello-world.h</a>, <a class="el" href="a00038.html#_a163">smtp.c</a>, and <a class="el" href="a00039.html#_a199">smtp.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00175.html#l00081">81</a> of file <a class="el" href="a00175.html">smtp.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0bb4f34164e7207c2db26b77f23ccfff"></a><!-- doxytag: member="smtp_state::state" ref="0bb4f34164e7207c2db26b77f23ccfff" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">state</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3592a1f5ae100db2ed9c0810b41c7bc7"></a><!-- doxytag: member="smtp_state::to" ref="3592a1f5ae100db2ed9c0810b41c7bc7" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="668cab7d54ff0a2fc2a2179ca06b0798"></a><!-- doxytag: member="smtp_state::from" ref="668cab7d54ff0a2fc2a2179ca06b0798" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="503c2994a4e52300516e2b820f0fc65b"></a><!-- doxytag: member="smtp_state::subject" ref="503c2994a4e52300516e2b820f0fc65b" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="04833004cec509a41c502429df308e35"></a><!-- doxytag: member="smtp_state::msg" ref="04833004cec509a41c502429df308e35" args="" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#04833004cec509a41c502429df308e35">msg</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a312da7b5f6441140721ec7e55f345a8"></a><!-- doxytag: member="smtp_state::msglen" ref="a312da7b5f6441140721ec7e55f345a8" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="68204df6bde3e3c27271ebde10579a57"></a><!-- doxytag: member="smtp_state::sentlen" ref="68204df6bde3e3c27271ebde10579a57" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#68204df6bde3e3c27271ebde10579a57">sentlen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0560495c60c68d62617ff1f3d0c424a4"></a><!-- doxytag: member="smtp_state::textlen" ref="0560495c60c68d62617ff1f3d0c424a4" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">textlen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5ed2615cec9e633d90ac5968771976eb"></a><!-- doxytag: member="smtp_state::sendptr" ref="5ed2615cec9e633d90ac5968771976eb" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">sendptr</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00086.html b/third_party/uip-1.0/doc/html/a00086.html new file mode 100644 index 0000000..746368a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00086.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: telnetd_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>telnetd_state Struct Reference</h1><!-- doxytag: class="telnetd_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00044.html#_a207">telnetd.c</a>, and <a class="el" href="a00045.html#_a242">telnetd.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00179.html#l00049">49</a> of file <a class="el" href="a00179.html">telnetd.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cca775e46d4405b7775b328f7694f7e7"></a><!-- doxytag: member="telnetd_state::lines" ref="cca775e46d4405b7775b328f7694f7e7" args="[TELNETD_CONF_NUMLINES]" -->
+char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a> [TELNETD_CONF_NUMLINES]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="54a466311575a727830a92a6c3621cb2"></a><!-- doxytag: member="telnetd_state::buf" ref="54a466311575a727830a92a6c3621cb2" args="[TELNETD_CONF_LINELEN]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a> [TELNETD_CONF_LINELEN]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5eced097547fd3fac4ba2a255493d921"></a><!-- doxytag: member="telnetd_state::bufptr" ref="5eced097547fd3fac4ba2a255493d921" args="" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d85fc90c30d1fc37c63c4844be5fe09d"></a><!-- doxytag: member="telnetd_state::numsent" ref="d85fc90c30d1fc37c63c4844be5fe09d" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41bf109b6a45328d5744c0a76563fb6c"></a><!-- doxytag: member="telnetd_state::state" ref="41bf109b6a45328d5744c0a76563fb6c" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00087.html b/third_party/uip-1.0/doc/html/a00087.html new file mode 100644 index 0000000..dcdc578 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00087.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: timer Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>timer Struct Reference<br>
+<small>
+[<a class="el" href="a00156.html">Timer library</a>]</small>
+</h1><!-- doxytag: class="timer" --><code>#include <<a class="el" href="a00196.html">timer.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A timer.
+<p>
+This structure is used for declaring a timer. The timer must be set with <a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set()</a> before it can be used. <dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00049.html#_a49">dhcpc.h</a>, <a class="el" href="a00042.html#_a61">example-mainloop-with-arp.c</a>, <a class="el" href="a00043.html#_a85">example-mainloop-without-arp.c</a>, and <a class="el" href="a00041.html#_a308">webclient.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00196.html#l00074">74</a> of file <a class="el" href="a00196.html">timer.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8eb428c05bc1dee022246a3063d277c"></a><!-- doxytag: member="timer::start" ref="e8eb428c05bc1dee022246a3063d277c" args="" -->
+clock_time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fe557d333c06cf65f52023f45f5b0a3a"></a><!-- doxytag: member="timer::interval" ref="fe557d333c06cf65f52023f45f5b0a3a" args="" -->
+clock_time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">interval</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00088.html b/third_party/uip-1.0/doc/html/a00088.html new file mode 100644 index 0000000..250eb98 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00088.html @@ -0,0 +1,103 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_conn Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_conn Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_conn" --><code>#include <<a class="el" href="a00202.html">uip.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Representation of a uIP TCP connection.
+<p>
+The <a class="el" href="a00088.html">uip_conn</a> structure is used for identifying a connection. All but one field in the structure are to be considered read-only by an application. The only exception is the appstate field whos purpose is to let the application store application-specific state (e.g., file pointers) for the connection. The type of this field is configured in the "uipopt.h" header file.
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01153">1153</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79510aa86d3fa0a0fc6cfc49b1da7279"></a><!-- doxytag: member="uip_conn::ripaddr" ref="79510aa86d3fa0a0fc6cfc49b1da7279" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The IP address of the remote host. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0cd09beee671e7e9efb0b4aced10249e"></a><!-- doxytag: member="uip_conn::lport" ref="0cd09beee671e7e9efb0b4aced10249e" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The local TCP port, in network byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1df6aa054ef2fa634ac4c6f418228285"></a><!-- doxytag: member="uip_conn::rport" ref="1df6aa054ef2fa634ac4c6f418228285" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The local remote TCP port, in network byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="70297b3e6d4eaae7bd828cb50bd1efe3"></a><!-- doxytag: member="uip_conn::rcv_nxt" ref="70297b3e6d4eaae7bd828cb50bd1efe3" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#70297b3e6d4eaae7bd828cb50bd1efe3">rcv_nxt</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The sequence number that we expect to receive next. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f6b08a5ba2a8d75ca7279e2056aa8c6"></a><!-- doxytag: member="uip_conn::snd_nxt" ref="8f6b08a5ba2a8d75ca7279e2056aa8c6" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#8f6b08a5ba2a8d75ca7279e2056aa8c6">snd_nxt</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The sequence number that was last sent by us. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ef3ae2764714bf90620075c374c262e"></a><!-- doxytag: member="uip_conn::len" ref="0ef3ae2764714bf90620075c374c262e" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Length of the data that was previously sent. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3347ef1b6e8581402445d1a0280c7a14"></a><!-- doxytag: member="uip_conn::mss" ref="3347ef1b6e8581402445d1a0280c7a14" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#3347ef1b6e8581402445d1a0280c7a14">mss</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Current maximum segment size for the connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db7a3fadb68df5fdd37e8b91a2c751ea"></a><!-- doxytag: member="uip_conn::initialmss" ref="db7a3fadb68df5fdd37e8b91a2c751ea" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#db7a3fadb68df5fdd37e8b91a2c751ea">initialmss</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial maximum segment size for the connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ef661afb3aa82f0437d2ed8d3c20be76"></a><!-- doxytag: member="uip_conn::sa" ref="ef661afb3aa82f0437d2ed8d3c20be76" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#ef661afb3aa82f0437d2ed8d3c20be76">sa</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Retransmission time-out calculation state variable. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eb9fcbd3c9b0a795dcd63f33c323d65c"></a><!-- doxytag: member="uip_conn::sv" ref="eb9fcbd3c9b0a795dcd63f33c323d65c" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#eb9fcbd3c9b0a795dcd63f33c323d65c">sv</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Retransmission time-out calculation state variable. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3aa9cc25e45b663e6aabc54c013019e"></a><!-- doxytag: member="uip_conn::rto" ref="e3aa9cc25e45b663e6aabc54c013019e" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#e3aa9cc25e45b663e6aabc54c013019e">rto</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Retransmission time-out. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5f58074435cdc180f17de69651beebd"></a><!-- doxytag: member="uip_conn::tcpstateflags" ref="a5f58074435cdc180f17de69651beebd" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">TCP state and flags. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d9732cf5752d30bd11cb25dc7d0c8d3"></a><!-- doxytag: member="uip_conn::timer" ref="2d9732cf5752d30bd11cb25dc7d0c8d3" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">timer</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The retransmission timer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4289c59840b128f2f6526e9da2711d47"></a><!-- doxytag: member="uip_conn::nrtx" ref="4289c59840b128f2f6526e9da2711d47" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#4289c59840b128f2f6526e9da2711d47">nrtx</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The number of retransmissions for the last segment sent. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="97f9e1fda815bfb8b1f4577c355ade20"></a><!-- doxytag: member="uip_conn::appstate" ref="97f9e1fda815bfb8b1f4577c355ade20" args="" -->
+<a class="el" href="a00085.html">uip_tcp_appstate_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The application state. <br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00089.html b/third_party/uip-1.0/doc/html/a00089.html new file mode 100644 index 0000000..7ab1aad --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00089.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_eth_addr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_eth_addr Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_eth_addr" --><code>#include <<a class="el" href="a00202.html">uip.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Representation of a 48-bit Ethernet address.
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01542">1542</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aacd5fa1806e0f0dd0bc96dd36507ad8"></a><!-- doxytag: member="uip_eth_addr::addr" ref="aacd5fa1806e0f0dd0bc96dd36507ad8" args="[6]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a> [6]</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00090.html b/third_party/uip-1.0/doc/html/a00090.html new file mode 100644 index 0000000..46027a6 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00090.html @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_eth_hdr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_eth_hdr Struct Reference<br>
+<small>
+[<a class="el" href="a00152.html">uIP Address Resolution Protocol</a>]</small>
+</h1><!-- doxytag: class="uip_eth_hdr" --><code>#include <<a class="el" href="a00205.html">uip_arp.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The Ethernet header.
+<p>
+
+<p>
+Definition at line <a class="el" href="a00205.html#l00063">63</a> of file <a class="el" href="a00205.html">uip_arp.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b684c17bf48c8e3b3fcf97b06b4c6ee1"></a><!-- doxytag: member="uip_eth_hdr::dest" ref="b684c17bf48c8e3b3fcf97b06b4c6ee1" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">dest</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1abbbe7bc5d7d033c727691528b85b8d"></a><!-- doxytag: member="uip_eth_hdr::src" ref="1abbbe7bc5d7d033c727691528b85b8d" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">src</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c9273cc1fcdaeeddc523ca9f34977e06"></a><!-- doxytag: member="uip_eth_hdr::type" ref="c9273cc1fcdaeeddc523ca9f34977e06" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">type</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00091.html b/third_party/uip-1.0/doc/html/a00091.html new file mode 100644 index 0000000..048f9a3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00091.html @@ -0,0 +1,84 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_icmpip_hdr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_icmpip_hdr Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_icmpip_hdr" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01423">1423</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7d472d8b3c41618d39c93c4ca92fb3f4"></a><!-- doxytag: member="uip_icmpip_hdr::vhl" ref="7d472d8b3c41618d39c93c4ca92fb3f4" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#7d472d8b3c41618d39c93c4ca92fb3f4">vhl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3f2d9cb20290019b2743e8df31a2f8b"></a><!-- doxytag: member="uip_icmpip_hdr::tos" ref="a3f2d9cb20290019b2743e8df31a2f8b" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#a3f2d9cb20290019b2743e8df31a2f8b">tos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b15853725b233d526b291db0347d4ecd"></a><!-- doxytag: member="uip_icmpip_hdr::len" ref="b15853725b233d526b291db0347d4ecd" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#b15853725b233d526b291db0347d4ecd">len</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="308463cc7b3d45d2dbcdcedd4cde9bb9"></a><!-- doxytag: member="uip_icmpip_hdr::ipid" ref="308463cc7b3d45d2dbcdcedd4cde9bb9" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#308463cc7b3d45d2dbcdcedd4cde9bb9">ipid</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4619e69ec86a47f6abe945b39ec7f63a"></a><!-- doxytag: member="uip_icmpip_hdr::ipoffset" ref="4619e69ec86a47f6abe945b39ec7f63a" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#4619e69ec86a47f6abe945b39ec7f63a">ipoffset</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55be3d5413ce49c5c4f5576def12d7ec"></a><!-- doxytag: member="uip_icmpip_hdr::ttl" ref="55be3d5413ce49c5c4f5576def12d7ec" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#55be3d5413ce49c5c4f5576def12d7ec">ttl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55e7764a9f6ed05aaa98076b9f6770a5"></a><!-- doxytag: member="uip_icmpip_hdr::proto" ref="55e7764a9f6ed05aaa98076b9f6770a5" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#55e7764a9f6ed05aaa98076b9f6770a5">proto</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="babb9c2be394477af97f79507bcb4c86"></a><!-- doxytag: member="uip_icmpip_hdr::ipchksum" ref="babb9c2be394477af97f79507bcb4c86" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#babb9c2be394477af97f79507bcb4c86">ipchksum</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ec6a6cbcbfd191d393738c16d54e5e1"></a><!-- doxytag: member="uip_icmpip_hdr::srcipaddr" ref="0ec6a6cbcbfd191d393738c16d54e5e1" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">srcipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e27f4949613fe3c1de5a839af01d99dd"></a><!-- doxytag: member="uip_icmpip_hdr::destipaddr" ref="e27f4949613fe3c1de5a839af01d99dd" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#e27f4949613fe3c1de5a839af01d99dd">destipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa0fe6ca88f692d22af70ff007411252"></a><!-- doxytag: member="uip_icmpip_hdr::type" ref="fa0fe6ca88f692d22af70ff007411252" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#fa0fe6ca88f692d22af70ff007411252">type</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="266ea23d75c83f15b915ce54100e51c5"></a><!-- doxytag: member="uip_icmpip_hdr::icode" ref="266ea23d75c83f15b915ce54100e51c5" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#266ea23d75c83f15b915ce54100e51c5">icode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="805f8fd5533a6d4b6793e0645005da4c"></a><!-- doxytag: member="uip_icmpip_hdr::icmpchksum" ref="805f8fd5533a6d4b6793e0645005da4c" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#805f8fd5533a6d4b6793e0645005da4c">icmpchksum</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6d51f3fa5da9b7f9cd37ae69600c04a"></a><!-- doxytag: member="uip_icmpip_hdr::id" ref="a6d51f3fa5da9b7f9cd37ae69600c04a" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#a6d51f3fa5da9b7f9cd37ae69600c04a">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="967def494c68cfc8a08d5a6c4dbbc25d"></a><!-- doxytag: member="uip_icmpip_hdr::seqno" ref="967def494c68cfc8a08d5a6c4dbbc25d" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#967def494c68cfc8a08d5a6c4dbbc25d">seqno</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00092.html b/third_party/uip-1.0/doc/html/a00092.html new file mode 100644 index 0000000..f5ccaca --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00092.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_neighbor_addr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_neighbor_addr Struct Reference</h1><!-- doxytag: class="uip_neighbor_addr" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00198.html#l00047">47</a> of file <a class="el" href="a00198.html">uip-neighbor.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4dc3294d67d705f7248ef57e4259424f"></a><!-- doxytag: member="uip_neighbor_addr::addr" ref="4dc3294d67d705f7248ef57e4259424f" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00093.html b/third_party/uip-1.0/doc/html/a00093.html new file mode 100644 index 0000000..40bb9d1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00093.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_stats Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_stats Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_stats" --><code>#include <<a class="el" href="a00202.html">uip.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1.
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01232">1232</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap><a class="anchor" name="1deb2899508216804823498a69378118"></a><!-- doxytag: member="uip_stats::ip" ref="1deb2899508216804823498a69378118" args="" -->
+struct {</td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of dropped packets at the IP layer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of received packets at the IP layer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of sent packets at the IP layer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">vhlerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped due to wrong IP version or header length. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#0c816f34c0187f2154c91a18d3ad87c8">hblenerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped due to wrong IP length, high byte. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#6157452bdc9921f44b2e22e4b5969258">lblenerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped due to wrong IP length, low byte. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">fragerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped since they were IP fragments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped due to IP checksum errors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#b4622e2599ff3a592db09219b2641682">protoerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of packets dropped since they were neither ICMP, UDP nor TCP. <br></td></tr>
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#1deb2899508216804823498a69378118">ip</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">IP statistics. <br></td></tr>
+<tr><td class="memItemLeft" nowrap><a class="anchor" name="3983b45977630418d3038231aa8b68ed"></a><!-- doxytag: member="uip_stats::icmp" ref="3983b45977630418d3038231aa8b68ed" args="" -->
+struct {</td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of dropped ICMP packets. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of received ICMP packets. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of sent ICMP packets. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#8da121d6e50992ec55778f9b2141552d">typeerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of ICMP packets with a wrong type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">ICMP statistics. <br></td></tr>
+<tr><td class="memItemLeft" nowrap><a class="anchor" name="e292b8977f6b81265bf14e1676face3e"></a><!-- doxytag: member="uip_stats::tcp" ref="e292b8977f6b81265bf14e1676face3e" args="" -->
+struct {</td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of dropped TCP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of recived TCP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of sent TCP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of TCP segments with a bad checksum. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7a58d95f7f7827789ff52500e3d16c34">ackerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of TCP segments with a bad ACK number. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">rst</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of recevied TCP RST (reset) segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">rexmit</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of retransmitted TCP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">syndrop</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of dropped SYNs due to too few connections was avaliable. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">synrst</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of SYNs for closed ports, triggering a RST. <br></td></tr>
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">TCP statistics. <br></td></tr>
+<tr><td class="memItemLeft" nowrap><a class="anchor" name="4f39f0fe6a820d260fe6cddf9ccaa832"></a><!-- doxytag: member="uip_stats::udp" ref="4f39f0fe6a820d260fe6cddf9ccaa832" args="" -->
+struct {</td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of dropped UDP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of recived UDP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of sent UDP segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap> <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="el" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of UDP segments with a bad checksum. <br></td></tr>
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">udp</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">UDP statistics. <br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00094.html b/third_party/uip-1.0/doc/html/a00094.html new file mode 100644 index 0000000..d7415bc --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00094.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_tcpip_hdr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_tcpip_hdr Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_tcpip_hdr" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01386">1386</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1e60d56ea87dfa09230e25ca5ecf2fc"></a><!-- doxytag: member="uip_tcpip_hdr::vhl" ref="e1e60d56ea87dfa09230e25ca5ecf2fc" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#e1e60d56ea87dfa09230e25ca5ecf2fc">vhl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8cf0ca17b115ff2e3071b3fabcc43b53"></a><!-- doxytag: member="uip_tcpip_hdr::tos" ref="8cf0ca17b115ff2e3071b3fabcc43b53" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#8cf0ca17b115ff2e3071b3fabcc43b53">tos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e57281f5bef284bc9545834ef8ed4a96"></a><!-- doxytag: member="uip_tcpip_hdr::len" ref="e57281f5bef284bc9545834ef8ed4a96" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#e57281f5bef284bc9545834ef8ed4a96">len</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a59f0dad059786238d8ab604630e7f3"></a><!-- doxytag: member="uip_tcpip_hdr::ipid" ref="7a59f0dad059786238d8ab604630e7f3" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#7a59f0dad059786238d8ab604630e7f3">ipid</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85d7f35662f7be20cd84e789a290dd4b"></a><!-- doxytag: member="uip_tcpip_hdr::ipoffset" ref="85d7f35662f7be20cd84e789a290dd4b" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#85d7f35662f7be20cd84e789a290dd4b">ipoffset</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f27e16ddcf7199d514968204966f559"></a><!-- doxytag: member="uip_tcpip_hdr::ttl" ref="0f27e16ddcf7199d514968204966f559" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#0f27e16ddcf7199d514968204966f559">ttl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e45b31a0a277dd5325ad2a332358b21b"></a><!-- doxytag: member="uip_tcpip_hdr::proto" ref="e45b31a0a277dd5325ad2a332358b21b" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#e45b31a0a277dd5325ad2a332358b21b">proto</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af7a8a5310ad945de38f5b3ac755ae7d"></a><!-- doxytag: member="uip_tcpip_hdr::ipchksum" ref="af7a8a5310ad945de38f5b3ac755ae7d" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#af7a8a5310ad945de38f5b3ac755ae7d">ipchksum</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c8f124419a231f38bb6cdf5041757a27"></a><!-- doxytag: member="uip_tcpip_hdr::srcipaddr" ref="c8f124419a231f38bb6cdf5041757a27" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">srcipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8d4e08d051b35b1c710c3be5b8bbfa05"></a><!-- doxytag: member="uip_tcpip_hdr::destipaddr" ref="8d4e08d051b35b1c710c3be5b8bbfa05" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#8d4e08d051b35b1c710c3be5b8bbfa05">destipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a81fff4836049cb3c018304d77337554"></a><!-- doxytag: member="uip_tcpip_hdr::srcport" ref="a81fff4836049cb3c018304d77337554" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#a81fff4836049cb3c018304d77337554">srcport</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="025ffa46b799fa6952719c499a3ae17c"></a><!-- doxytag: member="uip_tcpip_hdr::destport" ref="025ffa46b799fa6952719c499a3ae17c" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#025ffa46b799fa6952719c499a3ae17c">destport</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2541fae506eb111ff1be2372e0919839"></a><!-- doxytag: member="uip_tcpip_hdr::seqno" ref="2541fae506eb111ff1be2372e0919839" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#2541fae506eb111ff1be2372e0919839">seqno</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="71721395f1c7c42b8bcc111b339bea7c"></a><!-- doxytag: member="uip_tcpip_hdr::ackno" ref="71721395f1c7c42b8bcc111b339bea7c" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#71721395f1c7c42b8bcc111b339bea7c">ackno</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6af8a59d0ab8967aacea749d6e59ac90"></a><!-- doxytag: member="uip_tcpip_hdr::tcpoffset" ref="6af8a59d0ab8967aacea749d6e59ac90" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#6af8a59d0ab8967aacea749d6e59ac90">tcpoffset</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="619d9755a5d4aaabdb2e5e6ea4c1e0bf"></a><!-- doxytag: member="uip_tcpip_hdr::flags" ref="619d9755a5d4aaabdb2e5e6ea4c1e0bf" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#619d9755a5d4aaabdb2e5e6ea4c1e0bf">flags</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f0ab3fe3bcf1e3ed9f5950cb4474ec1"></a><!-- doxytag: member="uip_tcpip_hdr::wnd" ref="7f0ab3fe3bcf1e3ed9f5950cb4474ec1" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#7f0ab3fe3bcf1e3ed9f5950cb4474ec1">wnd</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f4a1d8cfbe270393a2de02b0c743e474"></a><!-- doxytag: member="uip_tcpip_hdr::tcpchksum" ref="f4a1d8cfbe270393a2de02b0c743e474" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#f4a1d8cfbe270393a2de02b0c743e474">tcpchksum</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dc7001682017599549f57771f4cd1b9a"></a><!-- doxytag: member="uip_tcpip_hdr::urgp" ref="dc7001682017599549f57771f4cd1b9a" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#dc7001682017599549f57771f4cd1b9a">urgp</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dde3cf9a57445814d01b3c67da08afdb"></a><!-- doxytag: member="uip_tcpip_hdr::optdata" ref="dde3cf9a57445814d01b3c67da08afdb" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html#dde3cf9a57445814d01b3c67da08afdb">optdata</a> [4]</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00095.html b/third_party/uip-1.0/doc/html/a00095.html new file mode 100644 index 0000000..0ef01d5 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00095.html @@ -0,0 +1,64 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_udp_conn Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_udp_conn Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_udp_conn" --><code>#include <<a class="el" href="a00202.html">uip.h</a>></code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Representation of a uIP UDP connection. <dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00049.html#_a47">dhcpc.h</a>, and <a class="el" href="a00046.html#_a129">resolv.c</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01210">1210</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a661a2d544100b82d0d14a1985083d5"></a><!-- doxytag: member="uip_udp_conn::ripaddr" ref="8a661a2d544100b82d0d14a1985083d5" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The IP address of the remote peer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="981392e295db4d024eea95805c51c371"></a><!-- doxytag: member="uip_udp_conn::lport" ref="981392e295db4d024eea95805c51c371" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html#981392e295db4d024eea95805c51c371">lport</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The local port number in network byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="280a0c2a93544e597f92bbacf36ee1dc"></a><!-- doxytag: member="uip_udp_conn::rport" ref="280a0c2a93544e597f92bbacf36ee1dc" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">rport</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The remote port number in network byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4da1d7815516cd2b5bda3a66fdf05198"></a><!-- doxytag: member="uip_udp_conn::ttl" ref="4da1d7815516cd2b5bda3a66fdf05198" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html#4da1d7815516cd2b5bda3a66fdf05198">ttl</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default time-to-live. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c8afa29e0aa5e789d6929b366d98ba56"></a><!-- doxytag: member="uip_udp_conn::appstate" ref="c8afa29e0aa5e789d6929b366d98ba56" args="" -->
+<a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html#c8afa29e0aa5e789d6929b366d98ba56">appstate</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The application state. <br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00096.html b/third_party/uip-1.0/doc/html/a00096.html new file mode 100644 index 0000000..2f5acb4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00096.html @@ -0,0 +1,81 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip_udpip_hdr Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uip_udpip_hdr Struct Reference<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><!-- doxytag: class="uip_udpip_hdr" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l01460">1460</a> of file <a class="el" href="a00202.html">uip.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f1684ad96b8acf54154688df3883b801"></a><!-- doxytag: member="uip_udpip_hdr::vhl" ref="f1684ad96b8acf54154688df3883b801" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#f1684ad96b8acf54154688df3883b801">vhl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed119a030ebd3bf7c30a12071c27d441"></a><!-- doxytag: member="uip_udpip_hdr::tos" ref="ed119a030ebd3bf7c30a12071c27d441" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#ed119a030ebd3bf7c30a12071c27d441">tos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47140aa52cb9e6a2de38fdfc5da08df1"></a><!-- doxytag: member="uip_udpip_hdr::len" ref="47140aa52cb9e6a2de38fdfc5da08df1" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#47140aa52cb9e6a2de38fdfc5da08df1">len</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="569382bc53aa64c227e57efe88fe13ac"></a><!-- doxytag: member="uip_udpip_hdr::ipid" ref="569382bc53aa64c227e57efe88fe13ac" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#569382bc53aa64c227e57efe88fe13ac">ipid</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8587178a29882482be20c2822b402b96"></a><!-- doxytag: member="uip_udpip_hdr::ipoffset" ref="8587178a29882482be20c2822b402b96" args="[2]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#8587178a29882482be20c2822b402b96">ipoffset</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f8c65cfc8242197bcc3cb5b4735b16f"></a><!-- doxytag: member="uip_udpip_hdr::ttl" ref="6f8c65cfc8242197bcc3cb5b4735b16f" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#6f8c65cfc8242197bcc3cb5b4735b16f">ttl</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="51bbbe3099c10ef26119ddc2aa51e35e"></a><!-- doxytag: member="uip_udpip_hdr::proto" ref="51bbbe3099c10ef26119ddc2aa51e35e" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#51bbbe3099c10ef26119ddc2aa51e35e">proto</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f20186ef441ef5b600e8544a0f2d8d81"></a><!-- doxytag: member="uip_udpip_hdr::ipchksum" ref="f20186ef441ef5b600e8544a0f2d8d81" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#f20186ef441ef5b600e8544a0f2d8d81">ipchksum</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a80e8d0fc768525fa3bfb3d4e4cf260d"></a><!-- doxytag: member="uip_udpip_hdr::srcipaddr" ref="a80e8d0fc768525fa3bfb3d4e4cf260d" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">srcipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="be2c98748e180c1747823cd2fb8ecf0e"></a><!-- doxytag: member="uip_udpip_hdr::destipaddr" ref="be2c98748e180c1747823cd2fb8ecf0e" args="[2]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#be2c98748e180c1747823cd2fb8ecf0e">destipaddr</a> [2]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b20096ae4953caaa42f6bb2373c4494c"></a><!-- doxytag: member="uip_udpip_hdr::srcport" ref="b20096ae4953caaa42f6bb2373c4494c" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#b20096ae4953caaa42f6bb2373c4494c">srcport</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e82f68cb91d8688a619d55d2a8572979"></a><!-- doxytag: member="uip_udpip_hdr::destport" ref="e82f68cb91d8688a619d55d2a8572979" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#e82f68cb91d8688a619d55d2a8572979">destport</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c92d2f194f096e84791f95d7e8f0ba92"></a><!-- doxytag: member="uip_udpip_hdr::udplen" ref="c92d2f194f096e84791f95d7e8f0ba92" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#c92d2f194f096e84791f95d7e8f0ba92">udplen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="858f970feb7462871c814953697a8ad7"></a><!-- doxytag: member="uip_udpip_hdr::udpchksum" ref="858f970feb7462871c814953697a8ad7" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html#858f970feb7462871c814953697a8ad7">udpchksum</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00097.html b/third_party/uip-1.0/doc/html/a00097.html new file mode 100644 index 0000000..a74d8ef --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00097.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: webclient_state Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>webclient_state Struct Reference<br>
+<small>
+[<a class="el" href="a00163.html">Web client</a>]</small>
+</h1><!-- doxytag: class="webclient_state" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+<dl compact><dt><b>Examples: </b></dt><dd>
+
+<p>
+<a class="el" href="a00040.html#_a251">webclient.c</a>, and <a class="el" href="a00041.html#_a307">webclient.h</a>.</dl>
+<p>
+
+<p>
+Definition at line <a class="el" href="a00181.html#l00055">55</a> of file <a class="el" href="a00181.html">webclient.h</a>.<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5960d82e7aca2986b8509a0d87d6cbc8"></a><!-- doxytag: member="webclient_state::timer" ref="5960d82e7aca2986b8509a0d87d6cbc8" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8ae6395641b7752dce47881e20cee970"></a><!-- doxytag: member="webclient_state::state" ref="8ae6395641b7752dce47881e20cee970" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6925d46b2819adb474a5f0036f02dd7d"></a><!-- doxytag: member="webclient_state::httpflag" ref="6925d46b2819adb474a5f0036f02dd7d" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7092781c50dcad50f473888585c85b83"></a><!-- doxytag: member="webclient_state::port" ref="7092781c50dcad50f473888585c85b83" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6487b9c1c773b32656065d0e19bf142"></a><!-- doxytag: member="webclient_state::host" ref="a6487b9c1c773b32656065d0e19bf142" args="[40]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a> [40]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e87913860c6b05c6e6b060639b950098"></a><!-- doxytag: member="webclient_state::file" ref="e87913860c6b05c6e6b060639b950098" args="[WEBCLIENT_CONF_MAX_URLLEN]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a> [WEBCLIENT_CONF_MAX_URLLEN]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="134ec55c3d5abaebfed4ff8edfedf1ea"></a><!-- doxytag: member="webclient_state::getrequestptr" ref="134ec55c3d5abaebfed4ff8edfedf1ea" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a3116623c6a7da7c82db6c301ae0da3"></a><!-- doxytag: member="webclient_state::getrequestleft" ref="5a3116623c6a7da7c82db6c301ae0da3" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="606d2729bf411ade69044828403a72af"></a><!-- doxytag: member="webclient_state::httpheaderline" ref="606d2729bf411ade69044828403a72af" args="[200]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a> [200]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2fca02673894f222b01ad2d3a4d7dd79"></a><!-- doxytag: member="webclient_state::httpheaderlineptr" ref="2fca02673894f222b01ad2d3a4d7dd79" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fb60f42593d305ea36d9b4303722696e"></a><!-- doxytag: member="webclient_state::mimetype" ref="fb60f42593d305ea36d9b4303722696e" args="[32]" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a> [32]</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00100.html b/third_party/uip-1.0/doc/html/a00100.html new file mode 100644 index 0000000..2bcd6ea --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00100.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/hello-world/hello-world.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/hello-world/hello-world.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+An example of how to write uIP applications with protosockets.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00170.html">hello-world.c</a>.
+<p>
+<code>#include "<a class="el" href="a00171.html">hello-world.h</a>"</code><br>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00170.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb97849f0d3ea858eee790b69591e6427"></a><!-- doxytag: member="hello-world.c::hello_world_init" ref="gb97849f0d3ea858eee790b69591e6427" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03070adbf8faab0f34f87c1270964306"></a><!-- doxytag: member="hello-world.c::hello_world_appcall" ref="g03070adbf8faab0f34f87c1270964306" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00101.html b/third_party/uip-1.0/doc/html/a00101.html new file mode 100644 index 0000000..fc408be --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00101.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/hello-world/hello-world.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/hello-world/hello-world.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Header file for an example of how to write uIP applications with protosockets.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00171.html">hello-world.h</a>.
+<p>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+<code>#include "<a class="el" href="a00193.html">psock.h</a>"</code><br>
+
+<p>
+<a href="a00171.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">hello_world_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge28f6cb60e86088d8886d0f804b4f37c"></a><!-- doxytag: member="hello-world.h::UIP_APPCALL" ref="ge28f6cb60e86088d8886d0f804b4f37c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#ge28f6cb60e86088d8886d0f804b4f37c">UIP_APPCALL</a> hello_world_appcall</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03070adbf8faab0f34f87c1270964306"></a><!-- doxytag: member="hello-world.h::hello_world_appcall" ref="g03070adbf8faab0f34f87c1270964306" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb97849f0d3ea858eee790b69591e6427"></a><!-- doxytag: member="hello-world.h::hello_world_init" ref="gb97849f0d3ea858eee790b69591e6427" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00102.html b/third_party/uip-1.0/doc/html/a00102.html new file mode 100644 index 0000000..eed00f0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00102.html @@ -0,0 +1,119 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/resolv/resolv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/resolv/resolv.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+DNS host name to IP address resolver.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>></dd></dl>
+This file implements a DNS host name to IP address resolver.
+<p>
+Definition in file <a class="el" href="a00172.html">resolv.c</a>.
+<p>
+<code>#include "<a class="el" href="a00173.html">resolv.h</a>"</code><br>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00172.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g070d2ce7b6bb7e5c05602aa8c308d0c4"></a><!-- doxytag: member="resolv.c::NULL" ref="g070d2ce7b6bb7e5c05602aa8c308d0c4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> (void *)0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gecf13b8dc783db2202ca5c34fe117fc3"></a><!-- doxytag: member="resolv.c::MAX_RETRIES" ref="gecf13b8dc783db2202ca5c34fe117fc3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">MAX_RETRIES</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96eb4534b574ece96ed36806039f73d3"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_RESPONSE" ref="96eb4534b574ece96ed36806039f73d3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#96eb4534b574ece96ed36806039f73d3">DNS_FLAG1_RESPONSE</a> 0x80</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4350350ce0d4595876743d4c0a720bcc"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_OPCODE_STATUS" ref="4350350ce0d4595876743d4c0a720bcc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#4350350ce0d4595876743d4c0a720bcc">DNS_FLAG1_OPCODE_STATUS</a> 0x10</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e7250008b68d1909d54040515eef8ebb"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_OPCODE_INVERSE" ref="e7250008b68d1909d54040515eef8ebb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#e7250008b68d1909d54040515eef8ebb">DNS_FLAG1_OPCODE_INVERSE</a> 0x08</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6a327c0ffd40f69fbcd5f01f12e5745c"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_OPCODE_STANDARD" ref="6a327c0ffd40f69fbcd5f01f12e5745c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#6a327c0ffd40f69fbcd5f01f12e5745c">DNS_FLAG1_OPCODE_STANDARD</a> 0x00</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd685a0f8b5e76a2687cc0f306813bfb"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_AUTHORATIVE" ref="dd685a0f8b5e76a2687cc0f306813bfb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#dd685a0f8b5e76a2687cc0f306813bfb">DNS_FLAG1_AUTHORATIVE</a> 0x04</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e52037249bb98d7bbecf42e275beb07"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_TRUNC" ref="2e52037249bb98d7bbecf42e275beb07" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#2e52037249bb98d7bbecf42e275beb07">DNS_FLAG1_TRUNC</a> 0x02</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72d99b1623afa14bd58c667b748c2ddc"></a><!-- doxytag: member="resolv.c::DNS_FLAG1_RD" ref="72d99b1623afa14bd58c667b748c2ddc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">DNS_FLAG1_RD</a> 0x01</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c72f8777ccc45ae274449ea7a9f3de04"></a><!-- doxytag: member="resolv.c::DNS_FLAG2_RA" ref="c72f8777ccc45ae274449ea7a9f3de04" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#c72f8777ccc45ae274449ea7a9f3de04">DNS_FLAG2_RA</a> 0x80</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f6c329c04baba17fe0f5b2a6597d713"></a><!-- doxytag: member="resolv.c::DNS_FLAG2_ERR_MASK" ref="9f6c329c04baba17fe0f5b2a6597d713" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">DNS_FLAG2_ERR_MASK</a> 0x0f</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6aaa9da3d0f8d4c0799516d46d939942"></a><!-- doxytag: member="resolv.c::DNS_FLAG2_ERR_NONE" ref="6aaa9da3d0f8d4c0799516d46d939942" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#6aaa9da3d0f8d4c0799516d46d939942">DNS_FLAG2_ERR_NONE</a> 0x00</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8ee5e2c8e517d6e4f2198057f81e93c6"></a><!-- doxytag: member="resolv.c::DNS_FLAG2_ERR_NAME" ref="8ee5e2c8e517d6e4f2198057f81e93c6" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#8ee5e2c8e517d6e4f2198057f81e93c6">DNS_FLAG2_ERR_NAME</a> 0x03</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ee60b8757bacab269b0ccd7c240bf01d"></a><!-- doxytag: member="resolv.c::STATE_UNUSED" ref="ee60b8757bacab269b0ccd7c240bf01d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">STATE_UNUSED</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf4401501f1389872141a78b63f325a3"></a><!-- doxytag: member="resolv.c::STATE_NEW" ref="bf4401501f1389872141a78b63f325a3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#bf4401501f1389872141a78b63f325a3">STATE_NEW</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55735650f879293d9b7b5fda6753d147"></a><!-- doxytag: member="resolv.c::STATE_ASKING" ref="55735650f879293d9b7b5fda6753d147" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="876c82c946543cd70c141e41417138e0"></a><!-- doxytag: member="resolv.c::STATE_DONE" ref="876c82c946543cd70c141e41417138e0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bf0c086c7c41c12cc63324327932d91"></a><!-- doxytag: member="resolv.c::STATE_ERROR" ref="7bf0c086c7c41c12cc63324327932d91" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g221d37ccde7e3fd0dd2c2eb0a6b15493"></a><!-- doxytag: member="resolv.c::RESOLV_ENTRIES" ref="g221d37ccde7e3fd0dd2c2eb0a6b15493" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a> 4</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7c5359305008e9183b18d6ab75f568bf"></a><!-- doxytag: member="resolv.c::resolv_appcall" ref="g7c5359305008e9183b18d6ab75f568bf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queues a name so that a question for the name will be sent out. <a href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Look up a hostname in the array of known hostnames. <a href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the currently configured DNS server. <a href="a00160.html#g3191066cf8f76bd00b6843b77c37068f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Configure which DNS server to use for queries. <a href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb50f78bbf36d912d69f6c1685d0b40e3"></a><!-- doxytag: member="resolv.c::resolv_init" ref="gb50f78bbf36d912d69f6c1685d0b40e3" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initalize the resolver. <br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00103.html b/third_party/uip-1.0/doc/html/a00103.html new file mode 100644 index 0000000..28a0fe4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00103.html @@ -0,0 +1,84 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/resolv/resolv.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/resolv/resolv.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+DNS resolver code header file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00173.html">resolv.h</a>.
+<p>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+
+<p>
+<a href="a00173.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Appication specific configurations</h2></td></tr>
+<tr><td colspan="2">An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.<p>
+uIP applications can store the application state within the <a class="el" href="a00088.html">uip_conn</a> structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.<p>
+The file containing the definitions must be included in the <a class="el" href="a00140.html">uipopt.h</a> file.<p>
+The following example illustrates how this can look. <div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> <a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a>(<span class="keywordtype">void</span>);
+<span class="preprocessor">#define UIP_APPCALL httpd_appcall</span>
+<span class="preprocessor"></span>
+<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> {
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a>;
+ <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>;
+ <span class="keywordtype">char</span> *dataptr;
+ <span class="keywordtype">char</span> *script;
+};
+<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>
+</pre></div> <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure. <a href="a00153.html#ga92afb113e122f860392bfbd385f842e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3d768e989e308144190ae1a5ddfa9726"></a><!-- doxytag: member="resolv.h::UIP_UDP_APPCALL" ref="g3d768e989e308144190ae1a5ddfa9726" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">UIP_UDP_APPCALL</a> resolv_appcall</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7c5359305008e9183b18d6ab75f568bf"></a><!-- doxytag: member="resolv.h::resolv_appcall" ref="g7c5359305008e9183b18d6ab75f568bf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a> (char *name, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *ipaddr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function which is called when a hostname is found. <a href="a00160.html#g6d9751d534453425c7a5a215d1d4414c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Configure which DNS server to use for queries. <a href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the currently configured DNS server. <a href="a00160.html#g3191066cf8f76bd00b6843b77c37068f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb50f78bbf36d912d69f6c1685d0b40e3"></a><!-- doxytag: member="resolv.h::resolv_init" ref="gb50f78bbf36d912d69f6c1685d0b40e3" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initalize the resolver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Look up a hostname in the array of known hostnames. <a href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queues a name so that a question for the name will be sent out. <a href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00104.html b/third_party/uip-1.0/doc/html/a00104.html new file mode 100644 index 0000000..1e0cac0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00104.html @@ -0,0 +1,78 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/smtp/smtp.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/smtp/smtp.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+SMTP example implementation.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00174.html">smtp.c</a>.
+<p>
+<code>#include "<a class="el" href="a00175.html">smtp.h</a>"</code><br>
+<code>#include "smtp-strings.h"</code><br>
+<code>#include "<a class="el" href="a00193.html">psock.h</a>"</code><br>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00174.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="smtp.c::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6cda47c85ce1b58b501b44ac9cccc50e"></a><!-- doxytag: member="smtp.c::ISO_cr" ref="g6cda47c85ce1b58b501b44ac9cccc50e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a> 0x0d</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf7dd2757d1e766f65b01ba7c91c660a0"></a><!-- doxytag: member="smtp.c::ISO_period" ref="gf7dd2757d1e766f65b01ba7c91c660a0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a> 0x2e</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g34b924954ba5707d536df28d71a80d39"></a><!-- doxytag: member="smtp.c::ISO_2" ref="g34b924954ba5707d536df28d71a80d39" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a> 0x32</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9e97c58fe35f750ad192774be9408ac8"></a><!-- doxytag: member="smtp.c::ISO_3" ref="g9e97c58fe35f750ad192774be9408ac8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">ISO_3</a> 0x33</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28cf9765e4b57451af559ab988ad7160"></a><!-- doxytag: member="smtp.c::ISO_4" ref="g28cf9765e4b57451af559ab988ad7160" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g28cf9765e4b57451af559ab988ad7160">ISO_4</a> 0x34</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g17ccd786400fd08b941e11046df1668f"></a><!-- doxytag: member="smtp.c::ISO_5" ref="g17ccd786400fd08b941e11046df1668f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g17ccd786400fd08b941e11046df1668f">ISO_5</a> 0x35</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbc331f73107958428bf1c392ba19b6f4"></a><!-- doxytag: member="smtp.c::smtp_appcall" ref="gbc331f73107958428bf1c392ba19b6f4" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g37e3103b9591790d484a450525739661">smtp_configure</a> (char *lhostname, void *server)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specificy an SMTP server and hostname. <a href="a00161.html#g37e3103b9591790d484a450525739661"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gf0349a8481565e80f55a751e2b408d6d">smtp_send</a> (char *to, char *cc, char *from, char *subject, char *msg, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> msglen)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send an e-mail. <a href="a00161.html#gf0349a8481565e80f55a751e2b408d6d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64807ba7c221ddf735572d05021539f2"></a><!-- doxytag: member="smtp.c::smtp_init" ref="g64807ba7c221ddf735572d05021539f2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00105.html b/third_party/uip-1.0/doc/html/a00105.html new file mode 100644 index 0000000..a774ba0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00105.html @@ -0,0 +1,82 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/smtp/smtp.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/smtp/smtp.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+SMTP header file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00175.html">smtp.h</a>.
+<p>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+
+<p>
+<a href="a00175.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">smtp_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Appication specific configurations</h2></td></tr>
+<tr><td colspan="2">An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.<p>
+uIP applications can store the application state within the <a class="el" href="a00088.html">uip_conn</a> structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.<p>
+The file containing the definitions must be included in the <a class="el" href="a00140.html">uipopt.h</a> file.<p>
+The following example illustrates how this can look. <div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> <a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a>(<span class="keywordtype">void</span>);
+<span class="preprocessor">#define UIP_APPCALL httpd_appcall</span>
+<span class="preprocessor"></span>
+<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> {
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a>;
+ <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>;
+ <span class="keywordtype">char</span> *dataptr;
+ <span class="keywordtype">char</span> *script;
+};
+<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>
+</pre></div> <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g41aa744caa46913b3b3aedb2a4e78546"></a><!-- doxytag: member="smtp.h::UIP_APPCALL" ref="g41aa744caa46913b3b3aedb2a4e78546" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a> smtp_appcall</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The name of the application function that uIP should call in response to TCP/IP events. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00085.html">smtp_state</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure. <a href="a00153.html#g69646a81a922033c5281445a71f8ffed"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g029256bc17a12e1e86781887e11c0c7d"></a><!-- doxytag: member="smtp.h::SMTP_ERR_OK" ref="g029256bc17a12e1e86781887e11c0c7d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">SMTP_ERR_OK</a> 0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Error number that signifies a non-error condition. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcff75c8c930abd6ff168e85373a4eb92"></a><!-- doxytag: member="smtp.h::SMTP_SEND" ref="gcff75c8c930abd6ff168e85373a4eb92" args="(to, cc, from, subject, msg)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gcff75c8c930abd6ff168e85373a4eb92">SMTP_SEND</a>(to, cc, from, subject, msg) smtp_send(to, cc, from, subject, msg, strlen(msg))</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a> (unsigned char error)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called when an e-mail transmission is done. <a href="a00161.html#gb1fc692a2700b7a51517724364683f67"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64807ba7c221ddf735572d05021539f2"></a><!-- doxytag: member="smtp.h::smtp_init" ref="g64807ba7c221ddf735572d05021539f2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbc331f73107958428bf1c392ba19b6f4"></a><!-- doxytag: member="smtp.h::smtp_appcall" ref="gbc331f73107958428bf1c392ba19b6f4" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00107.html b/third_party/uip-1.0/doc/html/a00107.html new file mode 100644 index 0000000..067bb4b --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00107.html @@ -0,0 +1,268 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/telnetd/shell.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/telnetd/shell.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Interface for the Contiki shell.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>></dd></dl>
+Some of the functions declared in this file must be implemented as a shell back-end in the architecture specific files of a Contiki port.
+<p>
+Definition in file <a class="el" href="a00177.html">shell.h</a>.
+<p>
+
+<p>
+<a href="a00177.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the shell. <a href="#69b075ef7e4d7bcf5a903d3d75baac02"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start the shell back-end. <a href="#d1f18f739da7703628c3663209463a0d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a> (char *command)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Process a shell command. <a href="#86beee1f69d05b16022dfb430470e9ce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="984c4a8b65a3cb35460b073a40568c25"></a><!-- doxytag: member="shell.h::shell_quit" ref="984c4a8b65a3cb35460b073a40568c25" args="(char *)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#984c4a8b65a3cb35460b073a40568c25">shell_quit</a> (char *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Quit the shell. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f">shell_output</a> (char *str1, char *str2)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a string to the shell window. <a href="#f11c966b0e4f4ecaa73deb14bfb6830f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#123c95a7bb55143cabba92446ce8f513">shell_prompt</a> (char *prompt)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a prompt to the shell window. <a href="#123c95a7bb55143cabba92446ce8f513"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="69b075ef7e4d7bcf5a903d3d75baac02"></a><!-- doxytag: member="shell.h::shell_init" ref="69b075ef7e4d7bcf5a903d3d75baac02" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void shell_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize the shell.
+<p>
+Called when the shell front-end process starts. This function may be used to start listening for signals. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a221">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00176.html#l00105">105</a> of file <a class="el" href="a00176.html">shell.c</a>.
+<p>
+References <a class="el" href="a00176.html#l00105">shell_init()</a>.
+<p>
+Referenced by <a class="el" href="a00176.html#l00105">shell_init()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="86beee1f69d05b16022dfb430470e9ce"></a><!-- doxytag: member="shell.h::shell_input" ref="86beee1f69d05b16022dfb430470e9ce" args="(char *command)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void shell_input </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>command</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Process a shell command.
+<p>
+This function will be called by the shell GUI / telnet server whan a command has been entered that should be processed by the shell back-end.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>command</em> </td><td>The command to be processed. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a229">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00176.html#l00118">118</a> of file <a class="el" href="a00176.html">shell.c</a>.
+<p>
+References <a class="el" href="a00176.html#l00118">shell_input()</a>.
+<p>
+Referenced by <a class="el" href="a00176.html#l00118">shell_input()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="f11c966b0e4f4ecaa73deb14bfb6830f"></a><!-- doxytag: member="shell.h::shell_output" ref="f11c966b0e4f4ecaa73deb14bfb6830f" args="(char *str1, char *str2)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void shell_output </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>str1</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>str2</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Print a string to the shell window.
+<p>
+This function is implemented by the shell GUI / telnet server and can be called by the shell back-end to output a string in the shell window. The string is automatically appended with a linebreak.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>str1</em> </td><td>The first half of the string to be output. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str2</em> </td><td>The second half of the string to be output. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a215">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00178.html#l00113">113</a> of file <a class="el" href="a00178.html">telnetd.c</a>.
+<p>
+References <a class="el" href="a00174.html#l00071">ISO_cr</a>, <a class="el" href="a00174.html#l00070">ISO_nl</a>, and <a class="el" href="a00172.html#l00069">NULL</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="123c95a7bb55143cabba92446ce8f513"></a><!-- doxytag: member="shell.h::shell_prompt" ref="123c95a7bb55143cabba92446ce8f513" args="(char *prompt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void shell_prompt </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>prompt</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Print a prompt to the shell window.
+<p>
+This function can be used by the shell back-end to print out a prompt to the shell window.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>prompt</em> </td><td>The prompt to be printed. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a214">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00178.html#l00101">101</a> of file <a class="el" href="a00178.html">telnetd.c</a>.
+<p>
+References <a class="el" href="a00172.html#l00069">NULL</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="d1f18f739da7703628c3663209463a0d"></a><!-- doxytag: member="shell.h::shell_start" ref="d1f18f739da7703628c3663209463a0d" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void shell_start </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Start the shell back-end.
+<p>
+Called by the front-end when a new shell is started. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a233">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00176.html#l00110">110</a> of file <a class="el" href="a00176.html">shell.c</a>.
+<p>
+References <a class="el" href="a00176.html#l00110">shell_start()</a>.
+<p>
+Referenced by <a class="el" href="a00176.html#l00110">shell_start()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00110.html b/third_party/uip-1.0/doc/html/a00110.html new file mode 100644 index 0000000..66cd8e4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00110.html @@ -0,0 +1,107 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webclient/webclient.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webclient/webclient.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Implementation of the HTTP client.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include "uiplib.h"</code><br>
+<code>#include "<a class="el" href="a00181.html">webclient.h</a>"</code><br>
+<code>#include "<a class="el" href="a00173.html">resolv.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00180.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g31be289fd8ec3fe09b0088165d13976d"></a><!-- doxytag: member="webclient.c::WEBCLIENT_TIMEOUT" ref="g31be289fd8ec3fe09b0088165d13976d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">WEBCLIENT_TIMEOUT</a> 100</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8714af98a550f10dc814db92b08d1b0d"></a><!-- doxytag: member="webclient.c::WEBCLIENT_STATE_STATUSLINE" ref="g8714af98a550f10dc814db92b08d1b0d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc4357cec23abca29d2bb885803625a6a"></a><!-- doxytag: member="webclient.c::WEBCLIENT_STATE_HEADERS" ref="gc4357cec23abca29d2bb885803625a6a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4d457c50e6f2cef57167c3804ce8bf7c"></a><!-- doxytag: member="webclient.c::WEBCLIENT_STATE_DATA" ref="g4d457c50e6f2cef57167c3804ce8bf7c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g863c94b0ed4a76997e53a3ccd5d0b6c3"></a><!-- doxytag: member="webclient.c::WEBCLIENT_STATE_CLOSE" ref="g863c94b0ed4a76997e53a3ccd5d0b6c3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g40fb1fb2d990ce04ae9bbee275627c03"></a><!-- doxytag: member="webclient.c::HTTPFLAG_NONE" ref="g40fb1fb2d990ce04ae9bbee275627c03" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">HTTPFLAG_NONE</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gda99954e0f6905091885934e86c278cc"></a><!-- doxytag: member="webclient.c::HTTPFLAG_OK" ref="gda99954e0f6905091885934e86c278cc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gda99954e0f6905091885934e86c278cc">HTTPFLAG_OK</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd895686859ae7d178d31be04eb0a1a97"></a><!-- doxytag: member="webclient.c::HTTPFLAG_MOVED" ref="gd895686859ae7d178d31be04eb0a1a97" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g38af81a4c9884ce89803fc3e52383112"></a><!-- doxytag: member="webclient.c::HTTPFLAG_ERROR" ref="g38af81a4c9884ce89803fc3e52383112" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g38af81a4c9884ce89803fc3e52383112">HTTPFLAG_ERROR</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="webclient.c::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6cda47c85ce1b58b501b44ac9cccc50e"></a><!-- doxytag: member="webclient.c::ISO_cr" ref="g6cda47c85ce1b58b501b44ac9cccc50e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a> 0x0d</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g71e1b022f7b7fa3a154f19372b239935"></a><!-- doxytag: member="webclient.c::ISO_space" ref="g71e1b022f7b7fa3a154f19372b239935" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a> 0x20</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the MIME type of the current HTTP data stream. <a href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the filename of the current HTTP data stream. <a href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the hostname of the current HTTP data stream. <a href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the port number of the current HTTP data stream. <a href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3caacabb2fe1c71921e1a471719ccbd2"></a><!-- doxytag: member="webclient.c::webclient_init" ref="g3caacabb2fe1c71921e1a471719ccbd2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the webclient module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1d34be506a61db90dd7829117efdf8cf"></a><!-- doxytag: member="webclient.c::webclient_close" ref="g1d34be506a61db90dd7829117efdf8cf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close the currently open HTTP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a> (char *host, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port, char *file)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Open an HTTP connection to a web server and ask for a file using the GET method. <a href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9e6d2864f390a4ba1ac60dc65e2b9815"></a><!-- doxytag: member="webclient.c::webclient_appcall" ref="g9e6d2864f390a4ba1ac60dc65e2b9815" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00111.html b/third_party/uip-1.0/doc/html/a00111.html new file mode 100644 index 0000000..d210afa --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00111.html @@ -0,0 +1,96 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webclient/webclient.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webclient/webclient.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Header file for the HTTP client.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00181.html">webclient.h</a>.
+<p>
+<code>#include "webclient-strings.h"</code><br>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+
+<p>
+<a href="a00181.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html">webclient_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5a5bfd7e9060903893481db90645187b"></a><!-- doxytag: member="webclient.h::WEBCLIENT_CONF_MAX_URLLEN" ref="g5a5bfd7e9060903893481db90645187b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g5a5bfd7e9060903893481db90645187b">WEBCLIENT_CONF_MAX_URLLEN</a> 100</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge28f6cb60e86088d8886d0f804b4f37c"></a><!-- doxytag: member="webclient.h::UIP_APPCALL" ref="ge28f6cb60e86088d8886d0f804b4f37c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#ge28f6cb60e86088d8886d0f804b4f37c">UIP_APPCALL</a> webclient_appcall</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdc5aec3587b2c55b714a6c2f37b56cba"></a><!-- doxytag: member="webclient.h::uip_tcp_appstate_t" ref="gdc5aec3587b2c55b714a6c2f37b56cba" args="" -->
+typedef <a class="el" href="a00097.html">webclient_state</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gdc5aec3587b2c55b714a6c2f37b56cba">uip_tcp_appstate_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a> (char *data, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when HTTP data has been received. <a href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when the HTTP connection has been connected to the web server. <a href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code if the HTTP connection to the web server has timed out. <a href="a00163.html#g23705efb9077187881f094fc9be13bde"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server. <a href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when the HTTP connection to the web server has been closed. <a href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3caacabb2fe1c71921e1a471719ccbd2"></a><!-- doxytag: member="webclient.h::webclient_init" ref="g3caacabb2fe1c71921e1a471719ccbd2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the webclient module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a> (char *host, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port, char *file)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Open an HTTP connection to a web server and ask for a file using the GET method. <a href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1d34be506a61db90dd7829117efdf8cf"></a><!-- doxytag: member="webclient.h::webclient_close" ref="g1d34be506a61db90dd7829117efdf8cf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close the currently open HTTP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9e6d2864f390a4ba1ac60dc65e2b9815"></a><!-- doxytag: member="webclient.h::webclient_appcall" ref="g9e6d2864f390a4ba1ac60dc65e2b9815" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the MIME type of the current HTTP data stream. <a href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the filename of the current HTTP data stream. <a href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the hostname of the current HTTP data stream. <a href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the port number of the current HTTP data stream. <a href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00112.html b/third_party/uip-1.0/doc/html/a00112.html new file mode 100644 index 0000000..f1c3e98 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00112.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd-cgi.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd-cgi.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Web server script interface.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00182.html">httpd-cgi.c</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include "<a class="el" href="a00193.html">psock.h</a>"</code><br>
+<code>#include "httpd.h"</code><br>
+<code>#include "<a class="el" href="a00183.html">httpd-cgi.h</a>"</code><br>
+<code>#include "httpd-fs.h"</code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00182.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge6f849e94cf6e214be8ffa9a548ecfcd"></a><!-- doxytag: member="httpd-cgi.c::httpd_cgi" ref="ge6f849e94cf6e214be8ffa9a548ecfcd" args="(char *name)" -->
+httpd_cgifunction </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a> (char *name)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00113.html b/third_party/uip-1.0/doc/html/a00113.html new file mode 100644 index 0000000..6e7d8f4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00113.html @@ -0,0 +1,51 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd-cgi.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd-cgi.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Web server script interface header file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00183.html">httpd-cgi.h</a>.
+<p>
+<code>#include "<a class="el" href="a00193.html">psock.h</a>"</code><br>
+<code>#include "httpd.h"</code><br>
+
+<p>
+<a href="a00183.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">httpd_cgi_call</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">HTTPD_CGI_CALL</a>(name, str, function)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">HTTPD CGI function declaration. <a href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge6f849e94cf6e214be8ffa9a548ecfcd"></a><!-- doxytag: member="httpd-cgi.h::httpd_cgi" ref="ge6f849e94cf6e214be8ffa9a548ecfcd" args="(char *name)" -->
+httpd_cgifunction </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a> (char *name)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00114.html b/third_party/uip-1.0/doc/html/a00114.html new file mode 100644 index 0000000..24a3e84 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00114.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Web server.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00184.html">httpd.c</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include "httpd.h"</code><br>
+<code>#include "httpd-fs.h"</code><br>
+<code>#include "<a class="el" href="a00183.html">httpd-cgi.h</a>"</code><br>
+<code>#include "http-strings.h"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00184.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d7920c1e51cc4eef80206ebd6fee3f4"></a><!-- doxytag: member="httpd.c::STATE_WAITING" ref="g7d7920c1e51cc4eef80206ebd6fee3f4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">STATE_WAITING</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8a645f8831837320c4e0c704e871abcf"></a><!-- doxytag: member="httpd.c::STATE_OUTPUT" ref="g8a645f8831837320c4e0c704e871abcf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">STATE_OUTPUT</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="httpd.c::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g71e1b022f7b7fa3a154f19372b239935"></a><!-- doxytag: member="httpd.c::ISO_space" ref="g71e1b022f7b7fa3a154f19372b239935" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a> 0x20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge3f8f7deae69854853b0c8ebb82c380d"></a><!-- doxytag: member="httpd.c::ISO_bang" ref="ge3f8f7deae69854853b0c8ebb82c380d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">ISO_bang</a> 0x21</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g79f9a50c2cccb967d38a2eeb45d2fd75"></a><!-- doxytag: member="httpd.c::ISO_percent" ref="g79f9a50c2cccb967d38a2eeb45d2fd75" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a> 0x25</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf7dd2757d1e766f65b01ba7c91c660a0"></a><!-- doxytag: member="httpd.c::ISO_period" ref="gf7dd2757d1e766f65b01ba7c91c660a0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a> 0x2e</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g820fb27c50e7bb4ac6d9eae1b06630a5"></a><!-- doxytag: member="httpd.c::ISO_slash" ref="g820fb27c50e7bb4ac6d9eae1b06630a5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">ISO_slash</a> 0x2f</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g14e276fa8e765f774f4162619f1c8fc1"></a><!-- doxytag: member="httpd.c::ISO_colon" ref="g14e276fa8e765f774f4162619f1c8fc1" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">ISO_colon</a> 0x3a</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g648ddfb2dde2cc55034e4e0ea41cb6d1"></a><!-- doxytag: member="httpd.c::httpd_appcall" ref="g648ddfb2dde2cc55034e4e0ea41cb6d1" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the web server. <a href="a00164.html#gc364305cee969a0be43c071722b136e6"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00120.html b/third_party/uip-1.0/doc/html/a00120.html new file mode 100644 index 0000000..3cdb238 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00120.html @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: lib/memb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>lib/memb.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Memory block allocation routines.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00186.html">memb.c</a>.
+<p>
+<code>#include <string.h></code><br>
+<code>#include "<a class="el" href="a00187.html">memb.h</a>"</code><br>
+
+<p>
+<a href="a00186.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a memory block that was declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a memory block from a block of memory declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gfe5e93119035e14cc485760a176249ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m, void *ptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate a memory block from a memory block previously declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gceb952d27de8125d5146ac0bee325b8f"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00121.html b/third_party/uip-1.0/doc/html/a00121.html new file mode 100644 index 0000000..eaae7fb --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00121.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: lib/memb.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>lib/memb.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Memory block allocation routines.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00187.html">memb.h</a>.
+<p>
+
+<p>
+<a href="a00187.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html">memb_blocks</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga680bc3f3a1a8a6aec20fe729d138cb8"></a><!-- doxytag: member="memb.h::MEMB_CONCAT2" ref="ga680bc3f3a1a8a6aec20fe729d138cb8" args="(s1, s2)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#ga680bc3f3a1a8a6aec20fe729d138cb8">MEMB_CONCAT2</a>(s1, s2) s1##s2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g720ac440c7b24bdd07c53ba146e36fb2"></a><!-- doxytag: member="memb.h::MEMB_CONCAT" ref="g720ac440c7b24bdd07c53ba146e36fb2" args="(s1, s2)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(s1, s2) MEMB_CONCAT2(s1, s2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB</a>(name, structure, num)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare a memory block. <a href="a00159.html#gf31774d02a69fd3f1c2b282454438cba"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a memory block that was declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a memory block from a block of memory declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gfe5e93119035e14cc485760a176249ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m, void *ptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate a memory block from a memory block previously declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="a00159.html#gceb952d27de8125d5146ac0bee325b8f"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00123.html b/third_party/uip-1.0/doc/html/a00123.html new file mode 100644 index 0000000..4a9ff16 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00123.html @@ -0,0 +1,57 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc-addrlabels.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc-addrlabels.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Implementation of local continuations based on the "Labels as values" feature of gcc.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>></dd></dl>
+This implementation of local continuations is based on a special feature of the GCC C compiler called "labels as values". This feature allows assigning pointers with the address of the code corresponding to a particular C label.<p>
+For more information, see the GCC documentation: <a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html">http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html</a><p>
+Thanks to dividuum for finding the nice local scope label implementation.
+<p>
+Definition in file <a class="el" href="a00189.html">lc-addrlabels.h</a>.
+<p>
+
+<p>
+<a href="a00189.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2c1bb4fa6d7a6ff951a41c73fc721109"></a><!-- doxytag: member="lc-addrlabels.h::LC_INIT" ref="g2c1bb4fa6d7a6ff951a41c73fc721109" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">LC_INIT</a>(s) s = NULL</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ec8b8f4710dce1fa7fb87d3a31541ae"></a><!-- doxytag: member="lc-addrlabels.h::LC_RESUME" ref="g1ec8b8f4710dce1fa7fb87d3a31541ae" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">LC_RESUME</a>(s)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd8eec328a4868d767f0c00c8d1c6cfc1"></a><!-- doxytag: member="lc-addrlabels.h::LC_SET" ref="gd8eec328a4868d767f0c00c8d1c6cfc1" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">LC_SET</a>(s) do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca51ceb2f5d855dfde55bcedf8d3b92d"></a><!-- doxytag: member="lc-addrlabels.h::LC_END" ref="gca51ceb2f5d855dfde55bcedf8d3b92d" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">LC_END</a>(s)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2bdc4b7b4038454a79f1b2a94a6d2a98"></a><!-- doxytag: member="lc-addrlabels.h::lc_t" ref="g2bdc4b7b4038454a79f1b2a94a6d2a98" args="" -->
+typedef void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2bdc4b7b4038454a79f1b2a94a6d2a98">lc_t</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00124.html b/third_party/uip-1.0/doc/html/a00124.html new file mode 100644 index 0000000..fe0d6bb --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00124.html @@ -0,0 +1,59 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc-switch.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc-switch.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Implementation of local continuations based on switch() statment.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>></dd></dl>
+This implementation of local continuations uses the C switch() statement to resume execution of a function somewhere inside the function's body. The implementation is based on the fact that switch() statements are able to jump directly into the bodies of control structures such as if() or while() statmenets.<p>
+This implementation borrows heavily from Simon Tatham's coroutines implementation in C: <a href="http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html">http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html</a>
+<p>
+Definition in file <a class="el" href="a00190.html">lc-switch.h</a>.
+<p>
+
+<p>
+<a href="a00190.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44311ecc30759ca38b4069182247bdae"></a><!-- doxytag: member="lc-switch.h::__LC_SWTICH_H__" ref="g44311ecc30759ca38b4069182247bdae" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g44311ecc30759ca38b4069182247bdae">__LC_SWTICH_H__</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2c1bb4fa6d7a6ff951a41c73fc721109"></a><!-- doxytag: member="lc-switch.h::LC_INIT" ref="g2c1bb4fa6d7a6ff951a41c73fc721109" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">LC_INIT</a>(s) s = 0;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ec8b8f4710dce1fa7fb87d3a31541ae"></a><!-- doxytag: member="lc-switch.h::LC_RESUME" ref="g1ec8b8f4710dce1fa7fb87d3a31541ae" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">LC_RESUME</a>(s) switch(s) { case 0:</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd8eec328a4868d767f0c00c8d1c6cfc1"></a><!-- doxytag: member="lc-switch.h::LC_SET" ref="gd8eec328a4868d767f0c00c8d1c6cfc1" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">LC_SET</a>(s) s = __LINE__; case __LINE__:</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca51ceb2f5d855dfde55bcedf8d3b92d"></a><!-- doxytag: member="lc-switch.h::LC_END" ref="gca51ceb2f5d855dfde55bcedf8d3b92d" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">LC_END</a>(s) }</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3983e0c026396d5c4506779d770007ba"></a><!-- doxytag: member="lc-switch.h::lc_t" ref="g3983e0c026396d5c4506779d770007ba" args="" -->
+typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00125.html b/third_party/uip-1.0/doc/html/a00125.html new file mode 100644 index 0000000..c1ce259 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00125.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Local continuations.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00191.html">lc.h</a>.
+<p>
+<code>#include "<a class="el" href="a00190.html">lc-switch.h</a>"</code><br>
+
+<p>
+<a href="a00191.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00127.html b/third_party/uip-1.0/doc/html/a00127.html new file mode 100644 index 0000000..a0bd3f4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00127.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/psock.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/psock.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Protosocket library header file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00193.html">psock.h</a>.
+<p>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+<code>#include "<a class="el" href="a00194.html">pt.h</a>"</code><br>
+
+<p>
+<a href="a00193.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">psock_buf</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">psock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The representation of a protosocket. <a href="a00082.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(<a class="el" href="a00082.html">psock</a>, buffer, buffersize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a protosocket. <a href="a00158.html#g26ae707402e494f3895a9f012a93ea29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start the protosocket protothread in a function. <a href="a00158.html#g84901a5aa60040e96d272a69977edd22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">PSOCK_SEND</a>(<a class="el" href="a00082.html">psock</a>, data, datalen)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data. <a href="a00158.html#g70d236d1cf34b4e21836edda60247b70"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(<a class="el" href="a00082.html">psock</a>, str)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send a null-terminated string. <a href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(<a class="el" href="a00082.html">psock</a>, generator, arg)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate data with a function and send it. <a href="a00158.html#g10d9a9201cba1a6db623284c475c6cea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close a protosocket. <a href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gd895ab98c54d9966ff554aa873151751">PSOCK_READBUF</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read data until the buffer is full. <a href="a00158.html#gd895ab98c54d9966ff554aa873151751"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(<a class="el" href="a00082.html">psock</a>, c)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read data up to a specified character. <a href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">PSOCK_DATALEN</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the data that was previously read. <a href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exit the protosocket's protothread. <a href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">PSOCK_CLOSE_EXIT</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close a protosocket and exit the protosocket's protothread. <a href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the end of a protosocket's protothread. <a href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">PSOCK_NEWDATA</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if new data has arrived on a protosocket. <a href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">PSOCK_WAIT_UNTIL</a>(<a class="el" href="a00082.html">psock</a>, condition)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait until a condition is true. <a href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga87ff36af81990e6ffe20d76d5e4606f"></a><!-- doxytag: member="psock.h::PSOCK_WAIT_THREAD" ref="ga87ff36af81990e6ffe20d76d5e4606f" args="(psock, condition)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">PSOCK_WAIT_THREAD</a>(<a class="el" href="a00082.html">psock</a>, condition) PT_WAIT_THREAD(&((<a class="el" href="a00082.html">psock</a>)-><a class="el" href="a00084.html">pt</a>), (condition))</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3178402dd725776415bf9745e7bf92ba"></a><!-- doxytag: member="psock.h::psock_datalen" ref="g3178402dd725776415bf9745e7bf92ba" args="(struct psock *psock)" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a> (struct <a class="el" href="a00082.html">psock</a> *<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3b19f65e48079d8105be2a99b5b4b2ae"></a><!-- doxytag: member="psock.h::psock_newdata" ref="g3b19f65e48079d8105be2a99b5b4b2ae" args="(struct psock *s)" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a> (struct <a class="el" href="a00082.html">psock</a> *s)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00128.html b/third_party/uip-1.0/doc/html/a00128.html new file mode 100644 index 0000000..18790f0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00128.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/pt.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/pt.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Protothreads implementation.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00194.html">pt.h</a>.
+<p>
+<code>#include "<a class="el" href="a00191.html">lc.h</a>"</code><br>
+
+<p>
+<a href="a00194.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">pt</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Initialization</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a protothread. <a href="a00142.html#ge6bae7dc0225468c8a5ac269df549892"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Declaration and definition</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(name_args)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declaration of a protothread. <a href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the start of a protothread inside the C function implementing the protothread. <a href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the end of a protothread. <a href="a00142.html#g7b04a0035bef29d905496c23bae066d2"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Blocked wait</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(<a class="el" href="a00084.html">pt</a>, condition)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait until condition is true. <a href="a00142.html#g99e43010ec61327164466aa2d902de45"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">PT_WAIT_WHILE</a>(<a class="el" href="a00084.html">pt</a>, cond)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait while condition is true. <a href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Hierarchical protothreads</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(<a class="el" href="a00084.html">pt</a>, thread)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait until a child protothread completes. <a href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">PT_SPAWN</a>(<a class="el" href="a00084.html">pt</a>, child, thread)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn a child protothread and wait until it exits. <a href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Exiting and restarting</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the protothread. <a href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">PT_EXIT</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exit the protothread. <a href="a00142.html#g905451249dca72ce0385bf2a9ff178ee"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Calling a protothread</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gfa82b860a64b67d25ab3abc21811896f">PT_SCHEDULE</a>(f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule a protothread. <a href="a00142.html#gfa82b860a64b67d25ab3abc21811896f"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Yielding from a protothread</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g155cba6121323726d02c00284428fed6">PT_YIELD</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Yield from the current protothread. <a href="a00142.html#g155cba6121323726d02c00284428fed6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge3c821e3a388615528efda9d23c7d115">PT_YIELD_UNTIL</a>(<a class="el" href="a00084.html">pt</a>, cond)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Yield from the protothread until a condition occurs. <a href="a00142.html#ge3c821e3a388615528efda9d23c7d115"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7b5319b5b65761a845fcd1500fde4cdc"></a><!-- doxytag: member="pt.h::PT_WAITING" ref="g7b5319b5b65761a845fcd1500fde4cdc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g7b5319b5b65761a845fcd1500fde4cdc">PT_WAITING</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcfae9053e5c107a1aed6b228c917d2ea"></a><!-- doxytag: member="pt.h::PT_EXITED" ref="gcfae9053e5c107a1aed6b228c917d2ea" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gcfae9053e5c107a1aed6b228c917d2ea">PT_EXITED</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ff1e8936a8a26bff54c05f8a989b93b"></a><!-- doxytag: member="pt.h::PT_ENDED" ref="g9ff1e8936a8a26bff54c05f8a989b93b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g9ff1e8936a8a26bff54c05f8a989b93b">PT_ENDED</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge469332907e0617d72d5e2dd4297119d"></a><!-- doxytag: member="pt.h::PT_YIELDED" ref="ge469332907e0617d72d5e2dd4297119d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge469332907e0617d72d5e2dd4297119d">PT_YIELDED</a> 3</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00129.html b/third_party/uip-1.0/doc/html/a00129.html new file mode 100644 index 0000000..f12ac2d --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00129.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/timer.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/timer.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Timer library implementation.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00195.html">timer.c</a>.
+<p>
+<code>#include "clock.h"</code><br>
+<code>#include "<a class="el" href="a00196.html">timer.h</a>"</code><br>
+
+<p>
+<a href="a00195.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a> (struct <a class="el" href="a00087.html">timer</a> *t, clock_time_t interval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set a timer. <a href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset the timer with the same interval. <a href="a00156.html#gedaf3e48c2b04229b85455fb948468d6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the timer from the current point in time. <a href="a00156.html#gcb807bd57e5489b386b876af5c1f163a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if a timer has expired. <a href="a00156.html#g6d71dececfce707c668e6257aad5906e"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00130.html b/third_party/uip-1.0/doc/html/a00130.html new file mode 100644 index 0000000..d2f11cd --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00130.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/timer.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/timer.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Timer library header file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00196.html">timer.h</a>.
+<p>
+<code>#include "clock.h"</code><br>
+
+<p>
+<a href="a00196.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html">timer</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A timer. <a href="a00087.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a> (struct <a class="el" href="a00087.html">timer</a> *t, clock_time_t interval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set a timer. <a href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset the timer with the same interval. <a href="a00156.html#gedaf3e48c2b04229b85455fb948468d6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the timer from the current point in time. <a href="a00156.html#gcb807bd57e5489b386b876af5c1f163a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if a timer has expired. <a href="a00156.html#g6d71dececfce707c668e6257aad5906e"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00131.html b/third_party/uip-1.0/doc/html/a00131.html new file mode 100644 index 0000000..e19e50c --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00131.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-neighbor.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-neighbor.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00197.html">uip-neighbor.c</a>.
+<p>
+<code>#include "<a class="el" href="a00198.html">uip-neighbor.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00197.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5320d4457a472d8888ec1905bc0e0a1c"></a><!-- doxytag: member="uip-neighbor.c::MAX_TIME" ref="5320d4457a472d8888ec1905bc0e0a1c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">MAX_TIME</a> 128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f2e1fcf0055d20ce17664b1027bb9eb"></a><!-- doxytag: member="uip-neighbor.c::ENTRIES" ref="5f2e1fcf0055d20ce17664b1027bb9eb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a> 8</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1273664aba3e6a2a46e87dcb1a5f19ad"></a><!-- doxytag: member="uip-neighbor.c::uip_neighbor_init" ref="1273664aba3e6a2a46e87dcb1a5f19ad" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip_neighbor_init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="890e822616a6839dfbf51dcb591b8e99"></a><!-- doxytag: member="uip-neighbor.c::uip_neighbor_periodic" ref="890e822616a6839dfbf51dcb591b8e99" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#890e822616a6839dfbf51dcb591b8e99">uip_neighbor_periodic</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="88460bea09a462d0e22511cb567eee14"></a><!-- doxytag: member="uip-neighbor.c::uip_neighbor_add" ref="88460bea09a462d0e22511cb567eee14" args="(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#88460bea09a462d0e22511cb567eee14">uip_neighbor_add</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr, struct <a class="el" href="a00092.html">uip_neighbor_addr</a> *addr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d5ce7047650f3ecee0814dbc8714099"></a><!-- doxytag: member="uip-neighbor.c::uip_neighbor_update" ref="1d5ce7047650f3ecee0814dbc8714099" args="(uip_ipaddr_t ipaddr)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#1d5ce7047650f3ecee0814dbc8714099">uip_neighbor_update</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="692d80636342d564422ccd9296ad568d"></a><!-- doxytag: member="uip-neighbor.c::uip_neighbor_lookup" ref="692d80636342d564422ccd9296ad568d" args="(uip_ipaddr_t ipaddr)" -->
+<a class="el" href="a00092.html">uip_neighbor_addr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#692d80636342d564422ccd9296ad568d">uip_neighbor_lookup</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00132.html b/third_party/uip-1.0/doc/html/a00132.html new file mode 100644 index 0000000..a1e5f02 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00132.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-neighbor.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-neighbor.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00198.html">uip-neighbor.h</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+
+<p>
+<a href="a00198.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html">uip_neighbor_addr</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1273664aba3e6a2a46e87dcb1a5f19ad"></a><!-- doxytag: member="uip-neighbor.h::uip_neighbor_init" ref="1273664aba3e6a2a46e87dcb1a5f19ad" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip_neighbor_init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="88460bea09a462d0e22511cb567eee14"></a><!-- doxytag: member="uip-neighbor.h::uip_neighbor_add" ref="88460bea09a462d0e22511cb567eee14" args="(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip_neighbor_add</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr, struct <a class="el" href="a00092.html">uip_neighbor_addr</a> *addr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d5ce7047650f3ecee0814dbc8714099"></a><!-- doxytag: member="uip-neighbor.h::uip_neighbor_update" ref="1d5ce7047650f3ecee0814dbc8714099" args="(uip_ipaddr_t ipaddr)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#1d5ce7047650f3ecee0814dbc8714099">uip_neighbor_update</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="692d80636342d564422ccd9296ad568d"></a><!-- doxytag: member="uip-neighbor.h::uip_neighbor_lookup" ref="692d80636342d564422ccd9296ad568d" args="(uip_ipaddr_t ipaddr)" -->
+<a class="el" href="a00092.html">uip_neighbor_addr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#692d80636342d564422ccd9296ad568d">uip_neighbor_lookup</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="890e822616a6839dfbf51dcb591b8e99"></a><!-- doxytag: member="uip-neighbor.h::uip_neighbor_periodic" ref="890e822616a6839dfbf51dcb591b8e99" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#890e822616a6839dfbf51dcb591b8e99">uip_neighbor_periodic</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00134.html b/third_party/uip-1.0/doc/html/a00134.html new file mode 100644 index 0000000..161fdd3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00134.html @@ -0,0 +1,42 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-split.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-split.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00200.html">uip-split.h</a>.
+<p>
+
+<p>
+<a href="a00200.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Handle outgoing packets. <a href="a00154.html#gb4b17aaf20d630f30919b19937b966a3"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00135.html b/third_party/uip-1.0/doc/html/a00135.html new file mode 100644 index 0000000..a561a9a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00135.html @@ -0,0 +1,215 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP TCP/IP stack code.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+<code>#include "<a class="el" href="a00203.html">uip_arch.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00201.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="534d9e416324fb8ecca6b9cb4b1f6a6a"></a><!-- doxytag: member="uip.c::DEBUG_PRINTF" ref="534d9e416324fb8ecca6b9cb4b1f6a6a" args="()" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g88e60aa2cf23e1c65d630701db08c743"></a><!-- doxytag: member="uip.c::TCP_FIN" ref="g88e60aa2cf23e1c65d630701db08c743" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a> 0x01</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6020613f5062417d9811cfa837215c83"></a><!-- doxytag: member="uip.c::TCP_SYN" ref="g6020613f5062417d9811cfa837215c83" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> 0x02</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5ca559def464ef20d8b1f7d32f2f160d"></a><!-- doxytag: member="uip.c::TCP_RST" ref="g5ca559def464ef20d8b1f7d32f2f160d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a> 0x04</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1320fd0006a2f70138bc2d0018dda829"></a><!-- doxytag: member="uip.c::TCP_PSH" ref="g1320fd0006a2f70138bc2d0018dda829" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">TCP_PSH</a> 0x08</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44b3b1ab31a403ba28ec135adfcbefef"></a><!-- doxytag: member="uip.c::TCP_ACK" ref="g44b3b1ab31a403ba28ec135adfcbefef" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a> 0x10</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc84f499cba8a02fc0e306c10b2acabf0"></a><!-- doxytag: member="uip.c::TCP_URG" ref="gc84f499cba8a02fc0e306c10b2acabf0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">TCP_URG</a> 0x20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1425d4a0c2760adb653a04c0fb137a8d"></a><!-- doxytag: member="uip.c::TCP_CTL" ref="g1425d4a0c2760adb653a04c0fb137a8d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">TCP_CTL</a> 0x3f</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1215163245304bad20d6c5608ad75ab7"></a><!-- doxytag: member="uip.c::TCP_OPT_END" ref="g1215163245304bad20d6c5608ad75ab7" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">TCP_OPT_END</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f1822e1d231235edacad691f3cb7bbb"></a><!-- doxytag: member="uip.c::TCP_OPT_NOOP" ref="g9f1822e1d231235edacad691f3cb7bbb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">TCP_OPT_NOOP</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g691688604655ea8943d15f14c60027d8"></a><!-- doxytag: member="uip.c::TCP_OPT_MSS" ref="g691688604655ea8943d15f14c60027d8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g691688604655ea8943d15f14c60027d8">TCP_OPT_MSS</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g12f3bf821224b8e7b48a57ed3cea15cf"></a><!-- doxytag: member="uip.c::TCP_OPT_MSS_LEN" ref="g12f3bf821224b8e7b48a57ed3cea15cf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">TCP_OPT_MSS_LEN</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5c5b1834e497f53ad0ef947bbe9777fa"></a><!-- doxytag: member="uip.c::ICMP_ECHO_REPLY" ref="g5c5b1834e497f53ad0ef947bbe9777fa" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">ICMP_ECHO_REPLY</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd58231410d58e34b455328b888a9e73c"></a><!-- doxytag: member="uip.c::ICMP_ECHO" ref="gd58231410d58e34b455328b888a9e73c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g207d17b633cd095120a74bc1f2257b17"></a><!-- doxytag: member="uip.c::ICMP6_ECHO_REPLY" ref="g207d17b633cd095120a74bc1f2257b17" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">ICMP6_ECHO_REPLY</a> 129</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4cc3e223b63f27b546d62e9a258dba5a"></a><!-- doxytag: member="uip.c::ICMP6_ECHO" ref="g4cc3e223b63f27b546d62e9a258dba5a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">ICMP6_ECHO</a> 128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1cea57e3ea526f210b1068e6dcf7b4f4"></a><!-- doxytag: member="uip.c::ICMP6_NEIGHBOR_SOLICITATION" ref="g1cea57e3ea526f210b1068e6dcf7b4f4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">ICMP6_NEIGHBOR_SOLICITATION</a> 135</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g62c03e0a308cc23929a80fe8d8f9dc1e"></a><!-- doxytag: member="uip.c::ICMP6_NEIGHBOR_ADVERTISEMENT" ref="g62c03e0a308cc23929a80fe8d8f9dc1e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">ICMP6_NEIGHBOR_ADVERTISEMENT</a> 136</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1d3211dbbdfb22d6a47b60dddcf945e8"></a><!-- doxytag: member="uip.c::ICMP6_FLAG_S" ref="g1d3211dbbdfb22d6a47b60dddcf945e8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">ICMP6_FLAG_S</a> (1 << 6)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g42288d5c3cf4b10becefec657f441e54"></a><!-- doxytag: member="uip.c::ICMP6_OPTION_SOURCE_LINK_ADDRESS" ref="g42288d5c3cf4b10becefec657f441e54" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">ICMP6_OPTION_SOURCE_LINK_ADDRESS</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8387881de3a8bfd3c0d57b9d04ac9b7e"></a><!-- doxytag: member="uip.c::ICMP6_OPTION_TARGET_LINK_ADDRESS" ref="g8387881de3a8bfd3c0d57b9d04ac9b7e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">ICMP6_OPTION_TARGET_LINK_ADDRESS</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24f52ac52d6e714cb04a5aa01be3bdd0"></a><!-- doxytag: member="uip.c::BUF" ref="g24f52ac52d6e714cb04a5aa01be3bdd0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a> ((struct <a class="el" href="a00094.html">uip_tcpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g96544dedc1cdc71ad2ad54bf1d5e5433"></a><!-- doxytag: member="uip.c::FBUF" ref="g96544dedc1cdc71ad2ad54bf1d5e5433" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a> ((struct <a class="el" href="a00094.html">uip_tcpip_hdr</a> *)&uip_reassbuf[0])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4309376690872fa4beb4f025f5cc199b"></a><!-- doxytag: member="uip.c::ICMPBUF" ref="g4309376690872fa4beb4f025f5cc199b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a> ((struct <a class="el" href="a00091.html">uip_icmpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb9435261753469accec0c9bf8a5a2686"></a><!-- doxytag: member="uip.c::UDPBUF" ref="gb9435261753469accec0c9bf8a5a2686" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a> ((struct <a class="el" href="a00096.html">uip_udpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9c0814ed491fa452ec97910c0728d410"></a><!-- doxytag: member="uip.c::UIP_STAT" ref="g9c0814ed491fa452ec97910c0728d410" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(s)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g013c3a06a8b58589a77f4a3442f89c2a"></a><!-- doxytag: member="uip.c::UIP_LOG" ref="g013c3a06a8b58589a77f4a3442f89c2a" args="(m)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(m)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Carry out a 32-bit addition. <a href="a00150.html#g6832e4d2d046536b6472f7ac92340f68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the Internet checksum over a buffer. <a href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf. <a href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata. <a href="a00150.html#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">uip_connect</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Connect to a remote host using TCP. <a href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up a new UDP connection. <a href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop listening to the specified port. <a href="a00150.html#gaa585784b0914cac1d37f07f85457008"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start listening to the specified port. <a href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g266263ac78a1361a2b1d15741d3b0675"></a><!-- doxytag: member="uip.c::uip_process" ref="g266263ac78a1361a2b1d15741d3b0675" args="(u8_t flag)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip_process</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flag)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga22b04cac8cf283ca12f028578bebc06">htons</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="a00150.html#ga22b04cac8cf283ca12f028578bebc06"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g04b053a623aac7cd4195157d470661b3">uip_send</a> (const void *data, int len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data on the current connection. <a href="a00150.html#g04b053a623aac7cd4195157d470661b3"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d3673f52f5846b6961d23b150decd54"></a><!-- doxytag: member="uip.c::uip_hostaddr" ref="g7d3673f52f5846b6961d23b150decd54" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20df5c82f2a15a508c19e505b5d9de2b"></a><!-- doxytag: member="uip.c::uip_draddr" ref="g20df5c82f2a15a508c19e505b5d9de2b" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3237be0d9ec457de0177689ee23c0d5c"></a><!-- doxytag: member="uip.c::uip_netmask" ref="g3237be0d9ec457de0177689ee23c0d5c" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g499bb98a0b4ae9a98553ede81317606d"></a><!-- doxytag: member="uip.c::uip_ethaddr" ref="g499bb98a0b4ae9a98553ede81317606d" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a> = {{0,0,0,0,0,0}}</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> [UIP_BUFSIZE+2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP packet buffer. <a href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the application data in the packet buffer. <a href="a00150.html#g561b8eda32e059d4e7397f776268cc63"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga05a3dde2048480fa3ab2a5961898d18"></a><!-- doxytag: member="uip.c::uip_sappdata" ref="ga05a3dde2048480fa3ab2a5961898d18" args="" -->
+void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the packet in the uip_buf buffer. <a href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5b5615dc240daed20949c0fded2b4679"></a><!-- doxytag: member="uip.c::uip_slen" ref="g5b5615dc240daed20949c0fded2b4679" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4ef6b00924990e7a293f66715b6d1d1"></a><!-- doxytag: member="uip.c::uip_flags" ref="gb4ef6b00924990e7a293f66715b6d1d1" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the current TCP connection. <a href="a00150.html#g788ffac72342f6172343d7f8099cbe1a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf703683056d2bfa5c81fa157dcb20fe2"></a><!-- doxytag: member="uip.c::uip_conns" ref="gf703683056d2bfa5c81fa157dcb20fe2" args="[UIP_CONNS]" -->
+<a class="el" href="a00088.html">uip_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a> [UIP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g236d5c7872f59c8fe7b701c7252b976e"></a><!-- doxytag: member="uip.c::uip_listenports" ref="g236d5c7872f59c8fe7b701c7252b976e" args="[UIP_LISTENPORTS]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip_listenports</a> [UIP_LISTENPORTS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g210f227119fc972e6222c9cb452e15a9"></a><!-- doxytag: member="uip.c::uip_udp_conn" ref="g210f227119fc972e6222c9cb452e15a9" args="" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The current UDP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="geb533744817cf6695d75293369c2248b"></a><!-- doxytag: member="uip.c::uip_udp_conns" ref="geb533744817cf6695d75293369c2248b" args="[UIP_UDP_CONNS]" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a> [UIP_UDP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a0cf5d86c58fab216414ce59bf1fea1"></a><!-- doxytag: member="uip.c::uip_acc32" ref="g2a0cf5d86c58fab216414ce59bf1fea1" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4-byte array used for the 32-bit sequence number calculations. <br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00136.html b/third_party/uip-1.0/doc/html/a00136.html new file mode 100644 index 0000000..afc4d0e --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00136.html @@ -0,0 +1,400 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Header file for the uIP TCP/IP stack.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>></dd></dl>
+The uIP TCP/IP stack header file contains definitions for a number of C macros that are used by uIP programs as well as internal uIP structures, TCP/IP header structures and function declarations.
+<p>
+Definition in file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+<code>#include "<a class="el" href="a00206.html">uipopt.h</a>"</code><br>
+
+<p>
+<a href="a00202.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a uIP TCP connection. <a href="a00088.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a uIP UDP connection. <a href="a00095.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html">uip_stats</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. <a href="a00093.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html">uip_tcpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html">uip_icmpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html">uip_udpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00089.html">uip_eth_addr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a 48-bit Ethernet address. <a href="a00089.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the IP address of this host. <a href="a00144.html#g12b467f314489259dd718228d0827a51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">uip_gethostaddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the IP address of this host. <a href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">uip_setdraddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default router's IP address. <a href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">uip_setnetmask</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the netmask. <a href="a00144.html#geb79c914cf137e6d27fd7583e5a66679"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c">uip_getdraddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the default router's IP address. <a href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g5323320b7316647042016f17c4e881be">uip_getnetmask</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the netmask. <a href="a00144.html#g5323320b7316647042016f17c4e881be"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Process an incoming packet. <a href="a00146.html#ga4360412ee9350fba725f98a137169fe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a connection identified by its number. <a href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfd5ebb56a1bd1da9878aa886a2075e80"></a><!-- doxytag: member="uip.h::uip_conn_active" ref="gfd5ebb56a1bd1da9878aa886a2075e80" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">uip_conn_active</a>(conn) (<a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[conn].tcpstateflags != UIP_CLOSED)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip_periodic_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Perform periodic processing for a connection identified by a pointer to its structure. <a href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">uip_poll_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reuqest that a particular connection should be polled. <a href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by its number. <a href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">uip_udp_periodic_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by a pointer to its structure. <a href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gef14e83c046e19ab9fe9d1bbcca276c2"></a><!-- doxytag: member="uip.h::uip_outstanding" ref="gef14e83c046e19ab9fe9d1bbcca276c2" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(conn) ((conn)->len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer. <a href="a00147.html#g1a1bc437c09ddef238abab41d77c3177"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537">uip_urgdatalen</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of any out-of-band data (urgent data) that has arrived on the connection. <a href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close the current connection. <a href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Abort the current connection. <a href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tell the sending host to stop sending data. <a href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64a238a5c02640a7a4aef004163aeb47"></a><!-- doxytag: member="uip.h::uip_stopped" ref="g64a238a5c02640a7a4aef004163aeb47" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip_stopped</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Find out if the current connection has been previously stopped with <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip_restart</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the current connection, if is has previously been stopped with <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>. <a href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2">uip_udpconnection</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is the current connection a UDP connection? <a href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is new incoming data available? <a href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has previously sent data been acknowledged? <a href="a00147.html#gde6634974418e3240c212b9b16864368"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection just been connected? <a href="a00147.html#gdb971fb1525d0c5002f52125b05f3218"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection been closed by the other end? <a href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection been aborted by the other end? <a href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection timed out? <a href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Do we need to retransmit previously data? <a href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is the connection being polled by uIP? <a href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga87feebc7cffd4d8300e776cf64e4fec"></a><!-- doxytag: member="uip.h::uip_initialmss" ref="ga87feebc7cffd4d8300e776cf64e4fec" args="()" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">uip_initialmss</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the initial maxium segment size (MSS) of the current connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the current maxium segment size that can be sent on the current connection. <a href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip_udp_remove</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removed a UDP connection. <a href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(conn, port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bind a UDP connection to a local port. <a href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip_udp_send</a>(len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send a UDP datagram of length len on the current connection. <a href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(addr, addr0, addr1, addr2, addr3)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an IP address from four bytes. <a href="a00148.html#g87f0b54ade0d159fba495089128a4932"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487">uip_ip6addr</a>(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an IPv6 address from eight 16-bit words. <a href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(dest, src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy an IP address to another IP address. <a href="a00148.html#g769512993b7b27271909d6daa4748b60"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(addr1, addr2)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compare two IP addresses. <a href="a00148.html#g210e629f7252e4bc8458cbdf260b3318"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip_ipaddr_maskcmp</a>(addr1, addr2, mask)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compare two IP addresses with netmasks. <a href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">uip_ipaddr_mask</a>(dest, src, mask)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mask out the network part of an IP address. <a href="a00148.html#g969d7fff37a979737da045e0d538a9bd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the first octet of an IP address. <a href="a00148.html#g22fa0681cd463191d7a01fe85d86996f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the second octet of an IP address. <a href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the third octet of an IP address. <a href="a00148.html#ge23534479ead15af8ff08ace26a47fb5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the fourth octet of an IP address. <a href="a00148.html#g165b603ec150e26efec7be199c9c2901"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="a00148.html#g69a7a4951ff21b302267532c21ee78fc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g118e9d76568ab81ad97f138d4ea1ddd2"></a><!-- doxytag: member="uip.h::ntohs" ref="g118e9d76568ab81ad97f138d4ea1ddd2" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a> htons</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6bfa488f87f68a6f7f4a3efb9e45eaf8"></a><!-- doxytag: member="uip.h::UIP_ACKDATA" ref="g6bfa488f87f68a6f7f4a3efb9e45eaf8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">UIP_ACKDATA</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g39ce739bd352d7e348e37395ce903e43"></a><!-- doxytag: member="uip.h::UIP_NEWDATA" ref="g39ce739bd352d7e348e37395ce903e43" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf848ce44c810492e7a35c2d23a429f45"></a><!-- doxytag: member="uip.h::UIP_REXMIT" ref="gf848ce44c810492e7a35c2d23a429f45" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">UIP_REXMIT</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0ed78fd2be24d849cdd5af75e3b2674"></a><!-- doxytag: member="uip.h::UIP_POLL" ref="gf0ed78fd2be24d849cdd5af75e3b2674" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">UIP_POLL</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g57e6dc1d58a36d0ed53a3dd29ccc5798"></a><!-- doxytag: member="uip.h::UIP_CLOSE" ref="g57e6dc1d58a36d0ed53a3dd29ccc5798" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">UIP_CLOSE</a> 16</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga4c4310e54f18541b09e1e251fe7b22d"></a><!-- doxytag: member="uip.h::UIP_ABORT" ref="ga4c4310e54f18541b09e1e251fe7b22d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">UIP_ABORT</a> 32</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf84316f469ce0726985c0702db49a989"></a><!-- doxytag: member="uip.h::UIP_CONNECTED" ref="gf84316f469ce0726985c0702db49a989" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf84316f469ce0726985c0702db49a989">UIP_CONNECTED</a> 64</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2d3ba4b14d6d2f6576f9b547800b7945"></a><!-- doxytag: member="uip.h::UIP_TIMEDOUT" ref="g2d3ba4b14d6d2f6576f9b547800b7945" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">UIP_TIMEDOUT</a> 128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gabc40c09f49d15acb1b1a7f02bb3a807"></a><!-- doxytag: member="uip.h::UIP_DATA" ref="gabc40c09f49d15acb1b1a7f02bb3a807" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gabc40c09f49d15acb1b1a7f02bb3a807">UIP_DATA</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g041aea91aa6ef84dcc6cac3c51db9b2f"></a><!-- doxytag: member="uip.h::UIP_TIMER" ref="g041aea91aa6ef84dcc6cac3c51db9b2f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">UIP_TIMER</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd605357e29affb0d3104294c90f09905"></a><!-- doxytag: member="uip.h::UIP_POLL_REQUEST" ref="gd605357e29affb0d3104294c90f09905" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd605357e29affb0d3104294c90f09905">UIP_POLL_REQUEST</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5c97ae587595b5444be80f5ecc1d3382"></a><!-- doxytag: member="uip.h::UIP_UDP_SEND_CONN" ref="g5c97ae587595b5444be80f5ecc1d3382" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">UIP_UDP_SEND_CONN</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0ccbc3bb2a3ba1ebc255c7b3fcedd24"></a><!-- doxytag: member="uip.h::UIP_UDP_TIMER" ref="gf0ccbc3bb2a3ba1ebc255c7b3fcedd24" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">UIP_UDP_TIMER</a> 5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28eda870cff3d8e3cf2949e6f57a502b"></a><!-- doxytag: member="uip.h::UIP_CLOSED" ref="g28eda870cff3d8e3cf2949e6f57a502b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga5e3c856b86725125d19fccc34cd9eb5"></a><!-- doxytag: member="uip.h::UIP_SYN_RCVD" ref="ga5e3c856b86725125d19fccc34cd9eb5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8af482dec973db57d8b3bd3f69461488"></a><!-- doxytag: member="uip.h::UIP_SYN_SENT" ref="g8af482dec973db57d8b3bd3f69461488" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gae59b70658f28ee6e998eaaab05e423f"></a><!-- doxytag: member="uip.h::UIP_ESTABLISHED" ref="gae59b70658f28ee6e998eaaab05e423f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga533c394b1fa0030205534befa31c525"></a><!-- doxytag: member="uip.h::UIP_FIN_WAIT_1" ref="ga533c394b1fa0030205534befa31c525" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga533c394b1fa0030205534befa31c525">UIP_FIN_WAIT_1</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g160128ab5d2ea3cc497b91ee4eb4ef99"></a><!-- doxytag: member="uip.h::UIP_FIN_WAIT_2" ref="g160128ab5d2ea3cc497b91ee4eb4ef99" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">UIP_FIN_WAIT_2</a> 5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64d9affc680a445d708234e70450477b"></a><!-- doxytag: member="uip.h::UIP_CLOSING" ref="g64d9affc680a445d708234e70450477b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g64d9affc680a445d708234e70450477b">UIP_CLOSING</a> 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfff0ed43201bf1e2020de1a0d6cac070"></a><!-- doxytag: member="uip.h::UIP_TIME_WAIT" ref="gfff0ed43201bf1e2020de1a0d6cac070" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a> 7</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd135fb0cfdfb2c212f0f51865a3640e4"></a><!-- doxytag: member="uip.h::UIP_LAST_ACK" ref="gd135fb0cfdfb2c212f0f51865a3640e4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">UIP_LAST_ACK</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g13dfcb4a5f920e108253ade527a66cc2"></a><!-- doxytag: member="uip.h::UIP_TS_MASK" ref="g13dfcb4a5f920e108253ade527a66cc2" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a> 15</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gde29ec025e6754afd8cc24c954a8dec8"></a><!-- doxytag: member="uip.h::UIP_STOPPED" ref="gde29ec025e6754afd8cc24c954a8dec8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">UIP_STOPPED</a> 16</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The buffer size available for user data in the <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> buffer. <a href="a00150.html#ge0825474feee11b4e038bfe71757875f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g359951eecd80541c2101f628a9da9146"></a><!-- doxytag: member="uip.h::UIP_PROTO_ICMP" ref="g359951eecd80541c2101f628a9da9146" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g359951eecd80541c2101f628a9da9146">UIP_PROTO_ICMP</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g517c770991459cc62dc009c0d3875c6a"></a><!-- doxytag: member="uip.h::UIP_PROTO_TCP" ref="g517c770991459cc62dc009c0d3875c6a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a> 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf72d7b9a737707dcfb2c41fec2b6792e"></a><!-- doxytag: member="uip.h::UIP_PROTO_UDP" ref="gf72d7b9a737707dcfb2c41fec2b6792e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a> 17</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gad0321f4c570f9983c6de81ece3ddc20"></a><!-- doxytag: member="uip.h::UIP_PROTO_ICMP6" ref="gad0321f4c570f9983c6de81ece3ddc20" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">UIP_PROTO_ICMP6</a> 58</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6bc12c6c7b56f73ce5d57abfdcdc6eb5"></a><!-- doxytag: member="uip.h::UIP_IPH_LEN" ref="g6bc12c6c7b56f73ce5d57abfdcdc6eb5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a> 20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb948296aea6b6b3aa1f156799c4d479c"></a><!-- doxytag: member="uip.h::UIP_UDPH_LEN" ref="gb948296aea6b6b3aa1f156799c4d479c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">UIP_UDPH_LEN</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g17d111686f98e4c09db73a770ac3f1a4"></a><!-- doxytag: member="uip.h::UIP_TCPH_LEN" ref="g17d111686f98e4c09db73a770ac3f1a4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">UIP_TCPH_LEN</a> 20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f2b90c597ec23f39ec716ccec11233c"></a><!-- doxytag: member="uip.h::UIP_IPUDPH_LEN" ref="g6f2b90c597ec23f39ec716ccec11233c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a> (UIP_UDPH_LEN + UIP_IPH_LEN)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g15f2617f7dc1713f9d10282125c6027b"></a><!-- doxytag: member="uip.h::UIP_IPTCPH_LEN" ref="g15f2617f7dc1713f9d10282125c6027b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> (UIP_TCPH_LEN + UIP_IPH_LEN)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gee37386b2ab828787c05227eb109def7"></a><!-- doxytag: member="uip.h::UIP_TCPIP_HLEN" ref="gee37386b2ab828787c05227eb109def7" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> UIP_IPTCPH_LEN</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20ceef9d0868d391c2f33041b02cb1f1"></a><!-- doxytag: member="uip.h::uip_ip4addr_t" ref="g20ceef9d0868d391c2f33041b02cb1f1" args="[2]" -->
+typedef <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a> [2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Repressentation of an IP address. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ebb4dac683163840eab9c6c41ad61f7"></a><!-- doxytag: member="uip.h::uip_ip6addr_t" ref="g9ebb4dac683163840eab9c6c41ad61f7" args="[8]" -->
+typedef <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> [8]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ef35301f43a5bbb9f89f07b5a36b9a0"></a><!-- doxytag: member="uip.h::uip_ipaddr_t" ref="g1ef35301f43a5bbb9f89f07b5a36b9a0" args="" -->
+typedef <a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start listening to the specified port. <a href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop listening to the specified port. <a href="a00147.html#gaa585784b0914cac1d37f07f85457008"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Connect to a remote host using TCP. <a href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a> (const void *data, int len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data on the current connection. <a href="a00147.html#g04b053a623aac7cd4195157d470661b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up a new UDP connection. <a href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="a00148.html#ga22b04cac8cf283ca12f028578bebc06"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g266263ac78a1361a2b1d15741d3b0675"></a><!-- doxytag: member="uip.h::uip_process" ref="g266263ac78a1361a2b1d15741d3b0675" args="(u8_t flag)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip_process</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flag)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the Internet checksum over a buffer. <a href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf. <a href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata. <a href="a00150.html#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the UDP checksum of the packet in uip_buf and uip_appdata. <a href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> [UIP_BUFSIZE+2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP packet buffer. <a href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the application data in the packet buffer. <a href="a00150.html#g561b8eda32e059d4e7397f776268cc63"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the packet in the uip_buf buffer. <a href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the current TCP connection. <a href="a00150.html#g788ffac72342f6172343d7f8099cbe1a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf703683056d2bfa5c81fa157dcb20fe2"></a><!-- doxytag: member="uip.h::uip_conns" ref="gf703683056d2bfa5c81fa157dcb20fe2" args="[UIP_CONNS]" -->
+<a class="el" href="a00088.html">uip_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a> [UIP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a0cf5d86c58fab216414ce59bf1fea1"></a><!-- doxytag: member="uip.h::uip_acc32" ref="g2a0cf5d86c58fab216414ce59bf1fea1" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4-byte array used for the 32-bit sequence number calculations. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g210f227119fc972e6222c9cb452e15a9"></a><!-- doxytag: member="uip.h::uip_udp_conn" ref="g210f227119fc972e6222c9cb452e15a9" args="" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The current UDP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="geb533744817cf6695d75293369c2248b"></a><!-- doxytag: member="uip.h::uip_udp_conns" ref="geb533744817cf6695d75293369c2248b" args="[UIP_UDP_CONNS]" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a> [UIP_UDP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00093.html">uip_stats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP TCP/IP statistics. <a href="a00150.html#g9ee50a40597e67fce96541ab56c3b712"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4ef6b00924990e7a293f66715b6d1d1"></a><!-- doxytag: member="uip.h::uip_flags" ref="gb4ef6b00924990e7a293f66715b6d1d1" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d3673f52f5846b6961d23b150decd54"></a><!-- doxytag: member="uip.h::uip_hostaddr" ref="g7d3673f52f5846b6961d23b150decd54" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3237be0d9ec457de0177689ee23c0d5c"></a><!-- doxytag: member="uip.h::uip_netmask" ref="g3237be0d9ec457de0177689ee23c0d5c" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20df5c82f2a15a508c19e505b5d9de2b"></a><!-- doxytag: member="uip.h::uip_draddr" ref="g20df5c82f2a15a508c19e505b5d9de2b" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00137.html b/third_party/uip-1.0/doc/html/a00137.html new file mode 100644 index 0000000..a79d776 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00137.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arch.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arch.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Declarations of architecture specific functions.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00203.html">uip_arch.h</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+
+<p>
+<a href="a00203.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Carry out a 32-bit addition. <a href="a00151.html#g6832e4d2d046536b6472f7ac92340f68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the Internet checksum over a buffer. <a href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf. <a href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata. <a href="a00151.html#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00138.html b/third_party/uip-1.0/doc/html/a00138.html new file mode 100644 index 0000000..9de50d1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00138.html @@ -0,0 +1,70 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arp.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arp.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Implementation of the ARP Address Resolution Protocol.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00204.html">uip_arp.c</a>.
+<p>
+<code>#include "<a class="el" href="a00205.html">uip_arp.h</a>"</code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<a href="a00204.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a7c46ffaba30477b8c9e3e61bd2e106"></a><!-- doxytag: member="uip_arp.c::ARP_REQUEST" ref="g7a7c46ffaba30477b8c9e3e61bd2e106" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">ARP_REQUEST</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g06ba7b414e718081998f2814090debf1"></a><!-- doxytag: member="uip_arp.c::ARP_REPLY" ref="g06ba7b414e718081998f2814090debf1" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g06ba7b414e718081998f2814090debf1">ARP_REPLY</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbb56b549f7ab4d86e1cc39b8afc70d1e"></a><!-- doxytag: member="uip_arp.c::ARP_HWTYPE_ETH" ref="gbb56b549f7ab4d86e1cc39b8afc70d1e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">ARP_HWTYPE_ETH</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24f52ac52d6e714cb04a5aa01be3bdd0"></a><!-- doxytag: member="uip_arp.c::BUF" ref="g24f52ac52d6e714cb04a5aa01be3bdd0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a> ((struct arp_hdr *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f2196e2705036869611962425e404bf"></a><!-- doxytag: member="uip_arp.c::IPBUF" ref="g9f2196e2705036869611962425e404bf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a> ((struct ethip_hdr *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0])</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2d9d28afa353f662b9bb5234fc419f72"></a><!-- doxytag: member="uip_arp.c::uip_arp_init" ref="g2d9d28afa353f662b9bb5234fc419f72" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the ARP module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic ARP processing function. <a href="a00152.html#g058a8e6025f67b021862281f1911fcef"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">ARP processing for incoming ARP packets. <a href="a00152.html#g902c4a360134096224bc2655f623aa5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request. <a href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00139.html b/third_party/uip-1.0/doc/html/a00139.html new file mode 100644 index 0000000..7f1603e --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00139.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arp.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arp.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Macros and definitions for the ARP module.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00205.html">uip_arp.h</a>.
+<p>
+<code>#include "<a class="el" href="a00202.html">uip.h</a>"</code><br>
+
+<p>
+<a href="a00205.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html">uip_eth_hdr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The Ethernet header. <a href="a00090.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3e1562e8a6de32268e5df92a52152f91"></a><!-- doxytag: member="uip_arp.h::UIP_ETHTYPE_ARP" ref="g3e1562e8a6de32268e5df92a52152f91" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a> 0x0806</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03d140db75de3d3cdfbbab1c4fed8d8d"></a><!-- doxytag: member="uip_arp.h::UIP_ETHTYPE_IP" ref="g03d140db75de3d3cdfbbab1c4fed8d8d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a> 0x0800</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbb558f3a9b1ec015e83c314aba694e35"></a><!-- doxytag: member="uip_arp.h::UIP_ETHTYPE_IP6" ref="gbb558f3a9b1ec015e83c314aba694e35" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">UIP_ETHTYPE_IP6</a> 0x86dd</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g737337d6a51e31b236c8233d024138a8"></a><!-- doxytag: member="uip_arp.h::uip_arp_ipin" ref="g737337d6a51e31b236c8233d024138a8" args="()" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">uip_setethaddr</a>(eaddr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifiy the Ethernet MAC address. <a href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2d9d28afa353f662b9bb5234fc419f72"></a><!-- doxytag: member="uip_arp.h::uip_arp_init" ref="g2d9d28afa353f662b9bb5234fc419f72" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the ARP module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">ARP processing for incoming ARP packets. <a href="a00152.html#g902c4a360134096224bc2655f623aa5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request. <a href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic ARP processing function. <a href="a00152.html#g058a8e6025f67b021862281f1911fcef"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g499bb98a0b4ae9a98553ede81317606d"></a><!-- doxytag: member="uip_arp.h::uip_ethaddr" ref="g499bb98a0b4ae9a98553ede81317606d" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00140.html b/third_party/uip-1.0/doc/html/a00140.html new file mode 100644 index 0000000..faf55a8 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00140.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uipopt.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uipopt.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Configuration options for uIP.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@dunkels.com">adam@dunkels.com</a>></dd></dl>
+This file is used for tweaking various configuration options for uIP. You should make a copy of this file into one of your project's directories instead of editing this example "uipopt.h" file that comes with the uIP distribution.
+<p>
+Definition in file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+<code>#include "<a class="el" href="a00207.html">uip-conf.h</a>"</code><br>
+
+<p>
+<a href="a00206.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static configuration options</h2></td></tr>
+<tr><td colspan="2">These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.<p>
+All of these should be changed to suit your project. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62">UIP_FIXEDADDR</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if uIP should use a fixed IP address or not. <a href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g9069474ea570fd78c481aa164317dbaf">UIP_PINGADDRCONF</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Ping IP address asignment. <a href="a00153.html#g9069474ea570fd78c481aa164317dbaf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893">UIP_FIXEDETHADDR</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not. <a href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>IP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb61381673de27f31848c5396bf0b338e">UIP_TTL</a> 64</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The IP TTL (time to live) of IP packets sent by uIP. <a href="a00153.html#gb61381673de27f31848c5396bf0b338e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee">UIP_REASSEMBLY</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Turn on support for IP packet reassembly. <a href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc3882366feda1cb759ccbfe98327a7db"></a><!-- doxytag: member="uipopt.h::UIP_REASS_MAXAGE" ref="gc3882366feda1cb759ccbfe98327a7db" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">UIP_REASS_MAXAGE</a> 40</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum time an IP fragment should wait in the reassembly buffer before it is dropped. <br></td></tr>
+<tr><td colspan="2"><br><h2>UDP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdcf372ff9748996f7c05e9822a615384"></a><!-- doxytag: member="uipopt.h::UIP_UDP" ref="gdcf372ff9748996f7c05e9822a615384" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gdcf372ff9748996f7c05e9822a615384">UIP_UDP</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Toggles wether UDP support should be compiled in or not. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g92f3344ec8ca46893163399c89fafed5">UIP_UDP_CHECKSUMS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Toggles if UDP checksums should be used or not. <a href="a00153.html#g92f3344ec8ca46893163399c89fafed5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g196379ceb1219a99f4495e41ccc9bbfb"></a><!-- doxytag: member="uipopt.h::UIP_UDP_CONNS" ref="g196379ceb1219a99f4495e41ccc9bbfb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum amount of concurrent UDP connections. <br></td></tr>
+<tr><td colspan="2"><br><h2>TCP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gac0de06236b02659460445de30776e00">UIP_ACTIVE_OPEN</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if support for opening connections from uIP should be compiled in. <a href="a00153.html#gac0de06236b02659460445de30776e00"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of simultaneously open TCP connections. <a href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of simultaneously listening TCP ports. <a href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g51c1cd531ff0afb81620151f2248cd21">UIP_URGDATA</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if support for TCP urgent data notification should be compiled in. <a href="a00153.html#g51c1cd531ff0afb81620151f2248cd21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a> 3</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The initial retransmission timeout counted in timer pulses. <a href="a00153.html#g15de27b044603284f68db05a378235a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">UIP_MAXRTX</a> 8</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of times a segment should be retransmitted before the connection should be aborted. <a href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">UIP_MAXSYNRTX</a> 5</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful. <a href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a> (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The TCP maximum segment size. <a href="a00153.html#g4910467b83a639f06739c82cd362037e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">UIP_RECEIVE_WINDOW</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the advertised receiver's window. <a href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g2bc3b489923793759526a3181eb667fa">UIP_TIME_WAIT_TIMEOUT</a> 120</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">How long a connection should stay in the TIME_WAIT state. <a href="a00153.html#g2bc3b489923793759526a3181eb667fa"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>ARP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the ARP table. <a href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">UIP_ARP_MAXAGE</a> 120</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maxium age of ARP table entries measured in 10ths of seconds. <a href="a00153.html#g3090117ef3ff5775b77cb1960e442d07"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>General configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">UIP_BUFSIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the uIP packet buffer. <a href="a00153.html#g3589822ecb9d9c4145209756396b8a6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6">UIP_STATISTICS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if statistics support should be compiled in. <a href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g21664b7441cfa37d280228d23316d609">UIP_LOGGING</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if logging of certain events should be compiled in. <a href="a00153.html#g21664b7441cfa37d280228d23316d609"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf">UIP_BROADCAST</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Broadcast support. <a href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The link level header length. <a href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uip_log</a> (char *msg)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print out a uIP log message. <a href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>CPU architecture configuration</h2></td></tr>
+<tr><td colspan="2">The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g285a80366aed9428f64282b8d13c918b">UIP_BYTE_ORDER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The byte order of the CPU architecture on which uIP is to be run. <a href="a00153.html#g285a80366aed9428f64282b8d13c918b"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb6e04358481bd2057524fb874cfa472b"></a><!-- doxytag: member="uipopt.h::UIP_LITTLE_ENDIAN" ref="gb6e04358481bd2057524fb874cfa472b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb6e04358481bd2057524fb874cfa472b">UIP_LITTLE_ENDIAN</a> 3412</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6836f92f3692f3a4429eb599db40cbae"></a><!-- doxytag: member="uipopt.h::UIP_BIG_ENDIAN" ref="g6836f92f3692f3a4429eb599db40cbae" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g6836f92f3692f3a4429eb599db40cbae">UIP_BIG_ENDIAN</a> 1234</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00141.html b/third_party/uip-1.0/doc/html/a00141.html new file mode 100644 index 0000000..313b7f1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00141.html @@ -0,0 +1,83 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: unix/uip-conf.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>unix/uip-conf.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+An example uIP configuration file.
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> </dd></dl>
+
+<p>
+Definition in file <a class="el" href="a00207.html">uip-conf.h</a>.
+<p>
+<code>#include <inttypes.h></code><br>
+<code>#include "webserver.h"</code><br>
+
+<p>
+<a href="a00207.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Project-specific configuration options</h2></td></tr>
+<tr><td colspan="2">uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3f6f1f6f98431f2d33ed30a30d2ccc35"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_MAX_CONNECTIONS" ref="g3f6f1f6f98431f2d33ed30a30d2ccc35" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3f6f1f6f98431f2d33ed30a30d2ccc35">UIP_CONF_MAX_CONNECTIONS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of TCP connections. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g974c9b4bbe6b07cc1d64ac4fad278030"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_MAX_LISTENPORTS" ref="g974c9b4bbe6b07cc1d64ac4fad278030" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g974c9b4bbe6b07cc1d64ac4fad278030">UIP_CONF_MAX_LISTENPORTS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of listening TCP ports. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcacc406c3bf7d0e00412e4c946252739"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_BUFFER_SIZE" ref="gcacc406c3bf7d0e00412e4c946252739" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gcacc406c3bf7d0e00412e4c946252739">UIP_CONF_BUFFER_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP buffer size. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca1240bba5dd57f8c7c27123c84a1f6d"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_BYTE_ORDER" ref="gca1240bba5dd57f8c7c27123c84a1f6d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gca1240bba5dd57f8c7c27123c84a1f6d">UIP_CONF_BYTE_ORDER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">CPU byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3001114ddadc1f2ada5cc9a780e866fc"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_LOGGING" ref="g3001114ddadc1f2ada5cc9a780e866fc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3001114ddadc1f2ada5cc9a780e866fc">UIP_CONF_LOGGING</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Logging on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g763f12007aad8cc0e483bf50f8a8d9b4"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_UDP" ref="g763f12007aad8cc0e483bf50f8a8d9b4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g763f12007aad8cc0e483bf50f8a8d9b4">UIP_CONF_UDP</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">UDP support on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9dd44616d41cef74d3beb51d8be5ecec"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_UDP_CHECKSUMS" ref="g9dd44616d41cef74d3beb51d8be5ecec" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g9dd44616d41cef74d3beb51d8be5ecec">UIP_CONF_UDP_CHECKSUMS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">UDP checksums on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g529648ad3b0b327a43689b0f1779ff55"></a><!-- doxytag: member="uip-conf.h::UIP_CONF_STATISTICS" ref="g529648ad3b0b327a43689b0f1779ff55" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g529648ad3b0b327a43689b0f1779ff55">UIP_CONF_STATISTICS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP statistics on or off <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">8 bit datatype <a href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">16 bit datatype <a href="a00153.html#g77570ac4fcab86864fa1916e55676da2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Statistics datatype. <a href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c"></a><br></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00142.html b/third_party/uip-1.0/doc/html/a00142.html new file mode 100644 index 0000000..5178da4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00142.html @@ -0,0 +1,690 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Protothreads</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Protothreads</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Protothreads are a type of lightweight stackless threads designed for severly memory constrained systems such as deeply embedded systems or sensor network nodes.
+<p>
+Protothreads provides linear code execution for event-driven systems implemented in C. Protothreads can be used with or without an RTOS.<p>
+Protothreads are a extremely lightweight, stackless type of threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without complex state machines or full multi-threading. Protothreads provides conditional blocking inside C functions.<p>
+The advantage of protothreads over a purely event-driven approach is that protothreads provides a sequential code structure that allows for blocking functions. In purely event-driven systems, blocking must be implemented by manually breaking the function into two pieces - one for the piece of code before the blocking call and one for the code after the blocking call. This makes it hard to use control structures such as if() conditionals and while() loops.<p>
+The advantage of protothreads over ordinary threads is that a protothread do not require a separate stack. In memory constrained systems, the overhead of allocating multiple stacks can consume large amounts of the available memory. In contrast, each protothread only requires between two and twelve bytes of state, depending on the architecture.<p>
+<dl compact><dt><b>Note:</b></dt><dd>Because protothreads do not save the stack context across a blocking call, <b>local variables are not preserved when the protothread blocks</b>. This means that local variables should be used with utmost care - <b>if in doubt, do not use local variables inside a protothread!</b></dd></dl>
+Main features:<p>
+<ul>
+<li>No machine specific code - the protothreads library is pure C</li></ul>
+<p>
+<ul>
+<li>Does not use error-prone functions such as longjmp()</li></ul>
+<p>
+<ul>
+<li>Very small RAM overhead - only two bytes per protothread</li></ul>
+<p>
+<ul>
+<li>Can be used with or without an OS</li></ul>
+<p>
+<ul>
+<li>Provides blocking wait without full multi-threading or stack-switching</li></ul>
+<p>
+Examples applications:<p>
+<ul>
+<li>Memory constrained systems</li></ul>
+<p>
+<ul>
+<li>Event-driven protocol stacks</li></ul>
+<p>
+<ul>
+<li>Deeply embedded systems</li></ul>
+<p>
+<ul>
+<li>Sensor network nodes</li></ul>
+<p>
+The protothreads API consists of four basic operations: initialization: <a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT()</a>, execution: <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN()</a>, conditional blocking: <a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL()</a> and exit: <a class="el" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END()</a>. On top of these, two convenience functions are built: reversed condition blocking: <a class="el" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">PT_WAIT_WHILE()</a> and protothread blocking: <a class="el" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD()</a>.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00142.html">Protothreads API documentation</a></dd></dl>
+The protothreads library is released under a BSD-style license that allows for both non-commercial and commercial usage. The only requirement is that credit is given.<h2><a class="anchor" name="authors">
+Authors</a></h2>
+The protothreads library was written by Adam Dunkels <<a href="mailto:adam@sics.se">adam@sics.se</a>> with support from Oliver Schmidt <<a href="mailto:ol.sc@web.de">ol.sc@web.de</a>>.<h2><a class="anchor" name="pt-desc">
+Protothreads</a></h2>
+Protothreads are a extremely lightweight, stackless threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without using complex state machines or full multi-threading. Protothreads provides conditional blocking inside a C function.<p>
+In memory constrained systems, such as deeply embedded systems, traditional multi-threading may have a too large memory overhead. In traditional multi-threading, each thread requires its own stack, that typically is over-provisioned. The stacks may use large parts of the available memory.<p>
+The main advantage of protothreads over ordinary threads is that protothreads are very lightweight: a protothread does not require its own stack. Rather, all protothreads run on the same stack and context switching is done by stack rewinding. This is advantageous in memory constrained systems, where a stack for a thread might use a large part of the available memory. A protothread only requires only two bytes of memory per protothread. Moreover, protothreads are implemented in pure C and do not require any machine-specific assembler code.<p>
+A protothread runs within a single C function and cannot span over other functions. A protothread may call normal C functions, but cannot block inside a called function. Blocking inside nested function calls is instead made by spawning a separate protothread for each potentially blocking function. The advantage of this approach is that blocking is explicit: the programmer knows exactly which functions that block that which functions the never blocks.<p>
+Protothreads are similar to asymmetric co-routines. The main difference is that co-routines uses a separate stack for each co-routine, whereas protothreads are stackless. The most similar mechanism to protothreads are Python generators. These are also stackless constructs, but have a different purpose. Protothreads provides blocking contexts inside a C function, whereas Python generators provide multiple exit points from a generator function.<h2><a class="anchor" name="pt-autovars">
+Local variables</a></h2>
+<dl compact><dt><b>Note:</b></dt><dd>Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!</dd></dl>
+<h2><a class="anchor" name="pt-scheduling">
+Scheduling</a></h2>
+A protothread is driven by repeated calls to the function in which the protothread is running. Each time the function is called, the protothread will run until it blocks or exits. Thus the scheduling of protothreads is done by the application that uses protothreads.<h2><a class="anchor" name="pt-impl">
+Implementation</a></h2>
+Protothreads are implemented using <a class="el" href="a00155.html">local continuations</a>. A local continuation represents the current state of execution at a particular place in the program, but does not provide any call history or local variables. A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set.<p>
+Local continuations can be implemented in a variety of ways:<p>
+<ol type=1>
+<li>by using machine specific assembler code,</li><li>by using standard C constructs, or</li><li>by using compiler extensions.</li></ol>
+<p>
+The first way works by saving and restoring the processor state, except for stack pointers, and requires between 16 and 32 bytes of memory per protothread. The exact amount of memory required depends on the architecture.<p>
+The standard C implementation requires only two bytes of state per protothread and utilizes the C switch() statement in a non-obvious way that is similar to Duff's device. This implementation does, however, impose a slight restriction to the code that uses protothreads in that the code cannot use switch() statements itself.<p>
+Certain compilers has C extensions that can be used to implement protothreads. GCC supports label pointers that can be used for this purpose. With this implementation, protothreads require 4 bytes of RAM per protothread.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">pt.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Protothreads implementation. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Modules</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html">Local continuations</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Local continuations form the basis for implementing protothreads. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">pt</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Initialization</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a protothread. <a href="#ge6bae7dc0225468c8a5ac269df549892"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Declaration and definition</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(name_args)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declaration of a protothread. <a href="#g3d4c8bd4aada659eb34f5d2ffd3e7901"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the start of a protothread inside the C function implementing the protothread. <a href="#g2ffbb9e554e08a343ae2f9de4bedfdfc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the end of a protothread. <a href="#g7b04a0035bef29d905496c23bae066d2"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Blocked wait</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(<a class="el" href="a00084.html">pt</a>, condition)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait until condition is true. <a href="#g99e43010ec61327164466aa2d902de45"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">PT_WAIT_WHILE</a>(<a class="el" href="a00084.html">pt</a>, cond)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait while condition is true. <a href="#gad14bbbf092b90aa0a5a4f9169504a8d"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Hierarchical protothreads</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(<a class="el" href="a00084.html">pt</a>, thread)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block and wait until a child protothread completes. <a href="#g2f8f70c30b9ee08a103fbd69a4365c4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">PT_SPAWN</a>(<a class="el" href="a00084.html">pt</a>, child, thread)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn a child protothread and wait until it exits. <a href="#g9e97a0b4d5cc7764d8e19758f5da53ae"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Exiting and restarting</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the protothread. <a href="#gcd3ac045f0a4ae63412e3b3d8780e8ab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">PT_EXIT</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exit the protothread. <a href="#g905451249dca72ce0385bf2a9ff178ee"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Calling a protothread</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gfa82b860a64b67d25ab3abc21811896f">PT_SCHEDULE</a>(f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule a protothread. <a href="#gfa82b860a64b67d25ab3abc21811896f"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Yielding from a protothread</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g155cba6121323726d02c00284428fed6">PT_YIELD</a>(<a class="el" href="a00084.html">pt</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Yield from the current protothread. <a href="#g155cba6121323726d02c00284428fed6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge3c821e3a388615528efda9d23c7d115">PT_YIELD_UNTIL</a>(<a class="el" href="a00084.html">pt</a>, cond)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Yield from the protothread until a condition occurs. <a href="#ge3c821e3a388615528efda9d23c7d115"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7b5319b5b65761a845fcd1500fde4cdc"></a><!-- doxytag: member="pt::PT_WAITING" ref="g7b5319b5b65761a845fcd1500fde4cdc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g7b5319b5b65761a845fcd1500fde4cdc">PT_WAITING</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcfae9053e5c107a1aed6b228c917d2ea"></a><!-- doxytag: member="pt::PT_EXITED" ref="gcfae9053e5c107a1aed6b228c917d2ea" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#gcfae9053e5c107a1aed6b228c917d2ea">PT_EXITED</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ff1e8936a8a26bff54c05f8a989b93b"></a><!-- doxytag: member="pt::PT_ENDED" ref="g9ff1e8936a8a26bff54c05f8a989b93b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#g9ff1e8936a8a26bff54c05f8a989b93b">PT_ENDED</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge469332907e0617d72d5e2dd4297119d"></a><!-- doxytag: member="pt::PT_YIELDED" ref="ge469332907e0617d72d5e2dd4297119d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ge469332907e0617d72d5e2dd4297119d">PT_YIELDED</a> 3</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g2ffbb9e554e08a343ae2f9de4bedfdfc"></a><!-- doxytag: member="pt.h::PT_BEGIN" ref="g2ffbb9e554e08a343ae2f9de4bedfdfc" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_BEGIN </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Declare the start of a protothread inside the C function implementing the protothread.
+<p>
+This macro is used to declare the starting point of a protothread. It should be placed at the start of the function in which the protothread runs. All C statements above the <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN()</a> invokation will be executed each time the protothread is scheduled.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a17">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00115">115</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g7b04a0035bef29d905496c23bae066d2"></a><!-- doxytag: member="pt.h::PT_END" ref="g7b04a0035bef29d905496c23bae066d2" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_END </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Declare the end of a protothread.
+<p>
+This macro is used for declaring that a protothread ends. It must always be used together with a matching <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN()</a> macro.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a34">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00127">127</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g905451249dca72ce0385bf2a9ff178ee"></a><!-- doxytag: member="pt.h::PT_EXIT" ref="g905451249dca72ce0385bf2a9ff178ee" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_EXIT </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Exit the protothread.
+<p>
+This macro causes the protothread to exit. If the protothread was spawned by another protothread, the parent protothread will become unblocked and can continue to run.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00246">246</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge6bae7dc0225468c8a5ac269df549892"></a><!-- doxytag: member="pt.h::PT_INIT" ref="ge6bae7dc0225468c8a5ac269df549892" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_INIT </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize a protothread.
+<p>
+Initializes a protothread. Initialization must be done prior to starting to execute the protothread.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">PT_SPAWN()</a> </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a41">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00080">80</a> of file <a class="el" href="a00194.html">pt.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gcd3ac045f0a4ae63412e3b3d8780e8ab"></a><!-- doxytag: member="pt.h::PT_RESTART" ref="gcd3ac045f0a4ae63412e3b3d8780e8ab" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_RESTART </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Restart the protothread.
+<p>
+This macro will block and cause the running protothread to restart its execution at the place of the <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN()</a> call.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a27">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00229">229</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gfa82b860a64b67d25ab3abc21811896f"></a><!-- doxytag: member="pt.h::PT_SCHEDULE" ref="gfa82b860a64b67d25ab3abc21811896f" args="(f)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_SCHEDULE </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">f </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Schedule a protothread.
+<p>
+This function shedules a protothread. The return value of the function is non-zero if the protothread is running or zero if the protothread has exited.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>The call to the C function implementing the protothread to be scheduled </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00271">271</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g9e97a0b4d5cc7764d8e19758f5da53ae"></a><!-- doxytag: member="pt.h::PT_SPAWN" ref="g9e97a0b4d5cc7764d8e19758f5da53ae" args="(pt, child, thread)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_SPAWN </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>child, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>thread </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Spawn a child protothread and wait until it exits.
+<p>
+This macro spawns a child protothread and waits until it exits. The macro can only be used within a protothread.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>child</em> </td><td>A pointer to the child protothread's control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>thread</em> </td><td>The child protothread with arguments </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00206">206</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g3d4c8bd4aada659eb34f5d2ffd3e7901"></a><!-- doxytag: member="pt.h::PT_THREAD" ref="g3d4c8bd4aada659eb34f5d2ffd3e7901" args="(name_args)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_THREAD </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">name_args </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Declaration of a protothread.
+<p>
+This macro is used to declare a protothread. All protothreads must be declared with this macro.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name_args</em> </td><td>The name and arguments of the C function implementing the protothread. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a16">dhcpc.c</a>, and <a class="el" href="a00038.html#a165">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00100">100</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2f8f70c30b9ee08a103fbd69a4365c4c"></a><!-- doxytag: member="pt.h::PT_WAIT_THREAD" ref="g2f8f70c30b9ee08a103fbd69a4365c4c" args="(pt, thread)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_WAIT_THREAD </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>thread </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Block and wait until a child protothread completes.
+<p>
+This macro schedules a child protothread. The current protothread will block until the child protothread completes.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The child protothread must be manually initialized with the <a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT()</a> function before this function is used.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>thread</em> </td><td>The child protothread with arguments</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">PT_SPAWN()</a> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00192">192</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g99e43010ec61327164466aa2d902de45"></a><!-- doxytag: member="pt.h::PT_WAIT_UNTIL" ref="g99e43010ec61327164466aa2d902de45" args="(pt, condition)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_WAIT_UNTIL </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>condition </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Block and wait until condition is true.
+<p>
+This macro blocks the protothread until the specified condition is true.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>condition</em> </td><td>The condition. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a24">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00148">148</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gad14bbbf092b90aa0a5a4f9169504a8d"></a><!-- doxytag: member="pt.h::PT_WAIT_WHILE" ref="gad14bbbf092b90aa0a5a4f9169504a8d" args="(pt, cond)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_WAIT_WHILE </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>cond </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Block and wait while condition is true.
+<p>
+This function blocks and waits while condition is true. See <a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL()</a>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cond</em> </td><td>The condition. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00194.html#l00167">167</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g155cba6121323726d02c00284428fed6"></a><!-- doxytag: member="pt.h::PT_YIELD" ref="g155cba6121323726d02c00284428fed6" args="(pt)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_YIELD </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Yield from the current protothread.
+<p>
+This function will yield the protothread, thereby allowing other processing to take place in the system.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a33">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00194.html#l00290">290</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge3c821e3a388615528efda9d23c7d115"></a><!-- doxytag: member="pt.h::PT_YIELD_UNTIL" ref="ge3c821e3a388615528efda9d23c7d115" args="(pt, cond)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PT_YIELD_UNTIL </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00084.html">pt</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>cond </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Yield from the protothread until a condition occurs.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>pt</em> </td><td>A pointer to the protothread control structure. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cond</em> </td><td>The condition.</td></tr>
+ </table>
+</dl>
+This function will yield the protothread, until the specified condition evaluates to true.
+<p>
+Definition at line <a class="el" href="a00194.html#l00310">310</a> of file <a class="el" href="a00194.html">pt.h</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00143.html b/third_party/uip-1.0/doc/html/a00143.html new file mode 100644 index 0000000..1744c72 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00143.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Applications</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Applications</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP distribution contains a number of example applications that can be either used directory or studied when learning to develop applications for uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Modules</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">DNS resolver</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">SMTP E-mail sender</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">Hello, world</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A small example showing how to write applications with <a class="el" href="a00158.html">protosockets</a>. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">Web client</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">This example shows a HTTP client that is able to download web pages and files from web servers. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">Web server</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP web server is a very simplistic implementation of an HTTP server. <br></td></tr>
+
+<p>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00144.html b/third_party/uip-1.0/doc/html/a00144.html new file mode 100644 index 0000000..126ce15 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00144.html @@ -0,0 +1,328 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP configuration functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP configuration functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the IP address of this host. <a href="#g12b467f314489259dd718228d0827a51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">uip_gethostaddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the IP address of this host. <a href="#g20bc87e5c063c3f4b01547be6e5a0148"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">uip_setdraddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default router's IP address. <a href="#g41d37ea1e3bd24f7b51e9409aceaaa80"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">uip_setnetmask</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the netmask. <a href="#geb79c914cf137e6d27fd7583e5a66679"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c">uip_getdraddr</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the default router's IP address. <a href="#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g5323320b7316647042016f17c4e881be">uip_getnetmask</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the netmask. <a href="#g5323320b7316647042016f17c4e881be"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">uip_setethaddr</a>(eaddr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifiy the Ethernet MAC address. <a href="#g30e827f33eacff55ecb4d8fb5a11d5d1"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c"></a><!-- doxytag: member="uip.h::uip_getdraddr" ref="gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_getdraddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get the default router's IP address.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable that will be filled in with the IP address of the default router. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00161">161</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g20bc87e5c063c3f4b01547be6e5a0148"></a><!-- doxytag: member="uip.h::uip_gethostaddr" ref="g20bc87e5c063c3f4b01547be6e5a0148" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_gethostaddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get the IP address of this host.
+<p>
+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> hostaddr;
+
+ <a class="code" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">uip_gethostaddr</a>(&hostaddr);
+</pre></div> <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable that will be filled in with the currently configured IP address. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00126">126</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g5323320b7316647042016f17c4e881be"></a><!-- doxytag: member="uip.h::uip_getnetmask" ref="g5323320b7316647042016f17c4e881be" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_getnetmask </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get the netmask.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable that will be filled in with the value of the netmask. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00171">171</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g41d37ea1e3bd24f7b51e9409aceaaa80"></a><!-- doxytag: member="uip.h::uip_setdraddr" ref="g41d37ea1e3bd24f7b51e9409aceaaa80" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_setdraddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set the default router's IP address.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable containing the IP address of the default router.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr()</a> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00138">138</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g30e827f33eacff55ecb4d8fb5a11d5d1"></a><!-- doxytag: member="uip_arp.h::uip_setethaddr" ref="g30e827f33eacff55ecb4d8fb5a11d5d1" args="(eaddr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_setethaddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">eaddr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Specifiy the Ethernet MAC address.
+<p>
+The ARP code needs to know the MAC address of the Ethernet card in order to be able to respond to ARP queries and to generate working Ethernet headers.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This macro only specifies the Ethernet MAC address to the ARP code. It cannot be used to change the MAC address of the Ethernet card.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>eaddr</em> </td><td>A pointer to a struct <a class="el" href="a00089.html">uip_eth_addr</a> containing the Ethernet MAC address of the Ethernet card. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00205.html#l00134">134</a> of file <a class="el" href="a00205.html">uip_arp.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g12b467f314489259dd718228d0827a51"></a><!-- doxytag: member="uip.h::uip_sethostaddr" ref="g12b467f314489259dd718228d0827a51" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_sethostaddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set the IP address of this host.
+<p>
+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&addr, 192,168,1,2);
+ <a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(&addr);
+</pre></div> <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to an IP address of type uip_ipaddr_t;</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr()</a> </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a42">dhcpc.c</a>, <a class="el" href="a00042.html#a66">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a90">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00106">106</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="geb79c914cf137e6d27fd7583e5a66679"></a><!-- doxytag: member="uip.h::uip_setnetmask" ref="geb79c914cf137e6d27fd7583e5a66679" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_setnetmask </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set the netmask.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable containing the IP address of the netmask.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr()</a> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00150">150</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00145.html b/third_party/uip-1.0/doc/html/a00145.html new file mode 100644 index 0000000..b396117 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00145.html @@ -0,0 +1,106 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP initialization functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP initialization functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP initialization functions are used for booting uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="#gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="#g22f140b02c354dfebcc7ad481c3bcd68"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><!-- doxytag: member="uip.h::uip_init" ref="gc48ed5f0d27721ef62a3ed02a5ad8d2e" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+uIP initialization function.
+<p>
+This function should be called at boot up to initilize the uIP TCP/IP stack. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a64">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a88">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00379">379</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g22f140b02c354dfebcc7ad481c3bcd68"></a><!-- doxytag: member="uip.h::uip_setipid" ref="g22f140b02c354dfebcc7ad481c3bcd68" args="(u16_t id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_setipid </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+uIP initialization function.
+<p>
+This function may be used at boot time to set the initial ip_id.
+<p>
+Definition at line <a class="el" href="a00201.html#l00181">181</a> of file <a class="el" href="a00201.html">uip.c</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00146.html b/third_party/uip-1.0/doc/html/a00146.html new file mode 100644 index 0000000..d0a0093 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00146.html @@ -0,0 +1,383 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP device driver functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP device driver functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+These functions are used by a network device driver for interacting with uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Process an incoming packet. <a href="#ga4360412ee9350fba725f98a137169fe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a connection identified by its number. <a href="#g1024f8a5fa65e82bf848b2e6590d9628"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfd5ebb56a1bd1da9878aa886a2075e80"></a><!-- doxytag: member="uipdevfunc::uip_conn_active" ref="gfd5ebb56a1bd1da9878aa886a2075e80" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">uip_conn_active</a>(conn) (<a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[conn].tcpstateflags != UIP_CLOSED)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip_periodic_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Perform periodic processing for a connection identified by a pointer to its structure. <a href="#gbaf0bb2b6a4424b4eb69e45e457c2583"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">uip_poll_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reuqest that a particular connection should be polled. <a href="#gf20aaf4292cb0d2a1b10bc0a568b51fa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by its number. <a href="#g2c64c8c36bc84f9336f6a2184ea51883"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">uip_udp_periodic_conn</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by a pointer to its structure. <a href="#gf5c2ad5acf3cc23b8262e9ba6a15136b"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> [UIP_BUFSIZE+2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP packet buffer. <a href="#gb81e78f890dbbee50c533a9734b74fd9"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="ga4360412ee9350fba725f98a137169fe"></a><!-- doxytag: member="uip.h::uip_input" ref="ga4360412ee9350fba725f98a137169fe" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_input </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Process an incoming packet.
+<p>
+This function should be called when the device driver has received a packet from the network. The packet from the device driver must be present in the uip_buf buffer, and the length of the packet should be placed in the uip_len variable.<p>
+When the function returns, there may be an outbound packet placed in the uip_buf packet buffer. If so, the uip_len variable is set to the length of the packet. If no packet is to be sent out, the uip_len variable is set to 0.<p>
+The usual way of calling the function is presented by the source code below. <div class="fragment"><pre class="fragment"> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = devicedriver_poll();
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ <a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>();
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ devicedriver_send();
+ }
+ }
+</pre></div><p>
+<dl compact><dt><b>Note:</b></dt><dd>If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uIP ARP code before calling this function: <div class="fragment"><pre class="fragment"><span class="preprocessor"> #define BUF ((struct uip_eth_hdr *)&uip_buf[0])</span>
+<span class="preprocessor"></span> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = ethernet_devicedrver_poll();
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a>)) {
+ <a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>();
+ <a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>();
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+ ethernet_devicedriver_send();
+ }
+ } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a>)) {
+ <a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>();
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ ethernet_devicedriver_send();
+ }
+ }
+</pre></div> </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a73">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a93">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00257">257</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g1024f8a5fa65e82bf848b2e6590d9628"></a><!-- doxytag: member="uip.h::uip_periodic" ref="g1024f8a5fa65e82bf848b2e6590d9628" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_periodic </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Periodic processing for a connection identified by its number.
+<p>
+This function does the necessary periodic processing (timers, polling) for a uIP TCP conneciton, and should be called when the periodic uIP timer goes off. It should be called for every connection, regardless of whether they are open of closed.<p>
+When the function returns, it may have an outbound packet waiting for service in the uIP packet buffer, and if so the uip_len variable is set to a value larger than zero. The device driver should be called to send out the packet.<p>
+The ususal way of calling the function is through a for() loop like this: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++i) {
+ <a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ devicedriver_send();
+ }
+ }
+</pre></div><p>
+<dl compact><dt><b>Note:</b></dt><dd>If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the <a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out()</a> function before calling the device driver: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < UIP_CONNS; ++i) {
+ <a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+ ethernet_devicedriver_send();
+ }
+ }
+</pre></div></dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>The number of the connection which is to be periodically polled. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a80">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a97">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00301">301</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gbaf0bb2b6a4424b4eb69e45e457c2583"></a><!-- doxytag: member="uip.h::uip_periodic_conn" ref="gbaf0bb2b6a4424b4eb69e45e457c2583" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_periodic_conn </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Perform periodic processing for a connection identified by a pointer to its structure.
+<p>
+Same as <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> but takes a pointer to the actual <a class="el" href="a00088.html">uip_conn</a> struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00088.html">uip_conn</a> struct for the connection to be processed. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00323">323</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf20aaf4292cb0d2a1b10bc0a568b51fa"></a><!-- doxytag: member="uip.h::uip_poll_conn" ref="gf20aaf4292cb0d2a1b10bc0a568b51fa" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_poll_conn </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Reuqest that a particular connection should be polled.
+<p>
+Similar to <a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip_periodic_conn()</a> but does not perform any timer processing. The application is polled for new data.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00088.html">uip_conn</a> struct for the connection to be processed. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00337">337</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2c64c8c36bc84f9336f6a2184ea51883"></a><!-- doxytag: member="uip.h::uip_udp_periodic" ref="g2c64c8c36bc84f9336f6a2184ea51883" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udp_periodic </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Periodic processing for a UDP connection identified by its number.
+<p>
+This function is essentially the same as <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a>, but for UDP connections. It is called in a similar fashion as the <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> function: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; i++) {
+ <a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ devicedriver_send();
+ }
+ }
+</pre></div><p>
+<dl compact><dt><b>Note:</b></dt><dd>As for the <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> function, special care has to be taken when using uIP together with ARP and Ethernet: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < UIP_UDP_CONNS; i++) {
+ <a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+ <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>();
+ ethernet_devicedriver_send();
+ }
+ }
+</pre></div></dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>The number of the UDP connection to be processed. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a82">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a99">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00373">373</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf5c2ad5acf3cc23b8262e9ba6a15136b"></a><!-- doxytag: member="uip.h::uip_udp_periodic_conn" ref="gf5c2ad5acf3cc23b8262e9ba6a15136b" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udp_periodic_conn </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Periodic processing for a UDP connection identified by a pointer to its structure.
+<p>
+Same as <a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic()</a> but takes a pointer to the actual <a class="el" href="a00088.html">uip_conn</a> struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00095.html">uip_udp_conn</a> struct for the connection to be processed. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00390">390</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="gb81e78f890dbbee50c533a9734b74fd9"></a><!-- doxytag: member="uip.h::uip_buf" ref="gb81e78f890dbbee50c533a9734b74fd9" args="[UIP_BUFSIZE+2]" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_BUFSIZE+2] </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The uIP packet buffer.
+<p>
+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example: <div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span>
+ devicedriver_send(<span class="keywordtype">void</span>)
+ {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0], <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> <= <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>) {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_LLH_LEN);
+ } <span class="keywordflow">else</span> {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>);
+ hwsend(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> - <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>);
+ }
+ }
+</pre></div> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00139">139</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00147.html b/third_party/uip-1.0/doc/html/a00147.html new file mode 100644 index 0000000..d6a6213 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00147.html @@ -0,0 +1,1046 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP application functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP application functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions used by an application running of top of uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gef14e83c046e19ab9fe9d1bbcca276c2"></a><!-- doxytag: member="uipappfunc::uip_outstanding" ref="gef14e83c046e19ab9fe9d1bbcca276c2" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(conn) ((conn)->len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer. <a href="#g1a1bc437c09ddef238abab41d77c3177"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537">uip_urgdatalen</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of any out-of-band data (urgent data) that has arrived on the connection. <a href="#g8411c95a4d89367ad2d9d6bde1a3d537"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close the current connection. <a href="#g61db1dcb7c760e4dd5d60bf4e5576dca"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Abort the current connection. <a href="#g88d2ccf7cd821f89d9a8df7e3948b56c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tell the sending host to stop sending data. <a href="#g0a8bb9d6d0f1f56852ccfccbbad6c5d8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64a238a5c02640a7a4aef004163aeb47"></a><!-- doxytag: member="uipappfunc::uip_stopped" ref="g64a238a5c02640a7a4aef004163aeb47" args="(conn)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip_stopped</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Find out if the current connection has been previously stopped with <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip_restart</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the current connection, if is has previously been stopped with <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>. <a href="#g81ac47cee1c18f6aa479044069db7ca3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2">uip_udpconnection</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is the current connection a UDP connection? <a href="#ga9de254b8aa308eb4aab17efdde622d2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is new incoming data available? <a href="#g26a14b8dae3f861830af9e7cf1e03725"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has previously sent data been acknowledged? <a href="#gde6634974418e3240c212b9b16864368"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection just been connected? <a href="#gdb971fb1525d0c5002f52125b05f3218"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection been closed by the other end? <a href="#gef6c4140c632b6a406779342cf3b6eb6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection been aborted by the other end? <a href="#gfbd5fc486dfdf6bf6fc9db52b1f418c4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Has the connection timed out? <a href="#g7b2ac4b18bd2ac3912fe67b3b17158c3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Do we need to retransmit previously data? <a href="#ga8933ad15a2e2947dae4a5cff50e6007"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Is the connection being polled by uIP? <a href="#g58bb90796c1cdad3aac2ecf44d87b20e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga87feebc7cffd4d8300e776cf64e4fec"></a><!-- doxytag: member="uipappfunc::uip_initialmss" ref="ga87feebc7cffd4d8300e776cf64e4fec" args="()" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">uip_initialmss</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the initial maxium segment size (MSS) of the current connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the current maxium segment size that can be sent on the current connection. <a href="#gb5fecbc62edd128012cea0f47b57ab9f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip_udp_remove</a>(conn)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removed a UDP connection. <a href="#gf2dbaceb10c67783a115075b5b6d66df"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(conn, port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bind a UDP connection to a local port. <a href="#ga20812098a4663c8a9fc4ce8e95391b6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip_udp_send</a>(len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send a UDP datagram of length len on the current connection. <a href="#ge5ab69d40013e6cf86ef1763c95d920e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start listening to the specified port. <a href="#gdd1ab3704ecd4900eec61a6897d32dc8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop listening to the specified port. <a href="#gaa585784b0914cac1d37f07f85457008"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Connect to a remote host using TCP. <a href="#g8096b0c4b543dc408f4dd031ddae7240"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a> (const void *data, int len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data on the current connection. <a href="#g04b053a623aac7cd4195157d470661b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up a new UDP connection. <a href="#g79c4110211247df3fb30b8cf1c4c02af"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g88d2ccf7cd821f89d9a8df7e3948b56c"></a><!-- doxytag: member="uip.h::uip_abort" ref="g88d2ccf7cd821f89d9a8df7e3948b56c" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_abort </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Abort the current connection.
+<p>
+This function will abort (reset) the current connection, and is usually used when an error has occured that prevents using the <a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close()</a> function. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a285">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00581">581</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gfbd5fc486dfdf6bf6fc9db52b1f418c4"></a><!-- doxytag: member="uip.h::uip_aborted" ref="gfbd5fc486dfdf6bf6fc9db52b1f418c4" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_aborted </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Has the connection been aborted by the other end?
+<p>
+Non-zero if the current connection has been aborted (reset) by the remote host. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a185">smtp.c</a>, <a class="el" href="a00044.html#a236">telnetd.c</a>, and <a class="el" href="a00040.html#a297">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00680">680</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, <a class="el" href="a00174.html#l00190">smtp_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gde6634974418e3240c212b9b16864368"></a><!-- doxytag: member="uip.h::uip_acked" ref="gde6634974418e3240c212b9b16864368" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_acked </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Has previously sent data been acknowledged?
+<p>
+Will reduce to non-zero if the previously sent data has been acknowledged by the remote host. This means that the application can send new data. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a238">telnetd.c</a>, and <a class="el" href="a00040.html#a300">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00648">648</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g61db1dcb7c760e4dd5d60bf4e5576dca"></a><!-- doxytag: member="uip.h::uip_close" ref="g61db1dcb7c760e4dd5d60bf4e5576dca" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_close </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Close the current connection.
+<p>
+This function will close the current connection in a nice way. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a234">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00570">570</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gef6c4140c632b6a406779342cf3b6eb6"></a><!-- doxytag: member="uip.h::uip_closed" ref="gef6c4140c632b6a406779342cf3b6eb6" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_closed </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Has the connection been closed by the other end?
+<p>
+Is non-zero if the connection has been closed by the remote host. The application may then do the necessary clean-ups. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a184">smtp.c</a>, <a class="el" href="a00044.html#a235">telnetd.c</a>, and <a class="el" href="a00040.html#a305">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00670">670</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, <a class="el" href="a00174.html#l00190">smtp_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gdb971fb1525d0c5002f52125b05f3218"></a><!-- doxytag: member="uip.h::uip_connected" ref="gdb971fb1525d0c5002f52125b05f3218" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_connected </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Has the connection just been connected?
+<p>
+Reduces to non-zero if the current connection has been connected to a remote host. This will happen both if the connection has been actively opened (with <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a>) or passively opened (with <a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen()</a>). <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a107">hello-world.c</a>, <a class="el" href="a00044.html#a232">telnetd.c</a>, and <a class="el" href="a00040.html#a293">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00660">660</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00170.html#l00055">hello_world_appcall()</a>, <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g1a1bc437c09ddef238abab41d77c3177"></a><!-- doxytag: member="uip.h::uip_datalen" ref="g1a1bc437c09ddef238abab41d77c3177" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_datalen </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer.
+<p>
+The test function uip_data() must first be used to check if there is any data available at all. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a15">dhcpc.c</a>, <a class="el" href="a00044.html#a231">telnetd.c</a>, and <a class="el" href="a00040.html#a290">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00550">550</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb5fecbc62edd128012cea0f47b57ab9f"></a><!-- doxytag: member="uip.h::uip_mss" ref="gb5fecbc62edd128012cea0f47b57ab9f" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_mss </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get the current maxium segment size that can be sent on the current connection.
+<p>
+The current maxiumum segment size that can be sent on the connection is computed from the receiver's window and the MSS of the connection (which also is available by calling <a class="el" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">uip_initialmss()</a>). <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a225">telnetd.c</a>, and <a class="el" href="a00040.html#a277">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00737">737</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g26a14b8dae3f861830af9e7cf1e03725"></a><!-- doxytag: member="uip.h::uip_newdata" ref="g26a14b8dae3f861830af9e7cf1e03725" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_newdata </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Is new incoming data available?
+<p>
+Will reduce to non-zero if there is new data for the application present at the uip_appdata pointer. The size of the data is avaliable through the uip_len variable. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a25">dhcpc.c</a>, <a class="el" href="a00046.html#a145">resolv.c</a>, <a class="el" href="a00044.html#a239">telnetd.c</a>, and <a class="el" href="a00040.html#a301">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00637">637</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00192.html#l00253">psock_newdata()</a>, <a class="el" href="a00172.html#l00331">resolv_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g58bb90796c1cdad3aac2ecf44d87b20e"></a><!-- doxytag: member="uip.h::uip_poll" ref="g58bb90796c1cdad3aac2ecf44d87b20e" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_poll </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Is the connection being polled by uIP?
+<p>
+Is non-zero if the reason the application is invoked is that the current connection has been idle for a while and should be polled.<p>
+The polling event can be used for sending data without having to wait for the remote host to send data. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a144">resolv.c</a>, <a class="el" href="a00044.html#a241">telnetd.c</a>, and <a class="el" href="a00040.html#a303">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00716">716</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, <a class="el" href="a00172.html#l00331">resolv_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g81ac47cee1c18f6aa479044069db7ca3"></a><!-- doxytag: member="uip.h::uip_restart" ref="g81ac47cee1c18f6aa479044069db7ca3" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_restart </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Restart the current connection, if is has previously been stopped with <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>.
+<p>
+This function will open the receiver's window again so that we start receiving data for the current connection.
+<p>
+Definition at line <a class="el" href="a00202.html#l00610">610</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ga8933ad15a2e2947dae4a5cff50e6007"></a><!-- doxytag: member="uip.h::uip_rexmit" ref="ga8933ad15a2e2947dae4a5cff50e6007" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_rexmit </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Do we need to retransmit previously data?
+<p>
+Reduces to non-zero if the previously sent data has been lost in the network, and the application should retransmit it. The application should send the exact same data as it did the last time, using the <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a> function. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a240">telnetd.c</a>, and <a class="el" href="a00040.html#a302">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00702">702</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g0a8bb9d6d0f1f56852ccfccbbad6c5d8"></a><!-- doxytag: member="uip.h::uip_stop" ref="g0a8bb9d6d0f1f56852ccfccbbad6c5d8" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_stop </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Tell the sending host to stop sending data.
+<p>
+This function will close our receiver's window so that we stop receiving data for the current connection.
+<p>
+Definition at line <a class="el" href="a00202.html#l00591">591</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g7b2ac4b18bd2ac3912fe67b3b17158c3"></a><!-- doxytag: member="uip.h::uip_timedout" ref="g7b2ac4b18bd2ac3912fe67b3b17158c3" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_timedout </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Has the connection timed out?
+<p>
+Non-zero if the current connection has been aborted due to too many retransmissions. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a186">smtp.c</a>, <a class="el" href="a00044.html#a237">telnetd.c</a>, and <a class="el" href="a00040.html#a298">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00690">690</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, <a class="el" href="a00174.html#l00190">smtp_appcall()</a>, and <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ga20812098a4663c8a9fc4ce8e95391b6"></a><!-- doxytag: member="uip.h::uip_udp_bind" ref="ga20812098a4663c8a9fc4ce8e95391b6" args="(conn, port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udp_bind </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>port </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Bind a UDP connection to a local port.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00095.html">uip_udp_conn</a> structure for the connection.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>The local port number, in network byte order. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a40">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00787">787</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf2dbaceb10c67783a115075b5b6d66df"></a><!-- doxytag: member="uip.h::uip_udp_remove" ref="gf2dbaceb10c67783a115075b5b6d66df" args="(conn)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udp_remove </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">conn </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Removed a UDP connection.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00095.html">uip_udp_conn</a> structure for the connection. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a152">resolv.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00775">775</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00172.html#l00438">resolv_conf()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge5ab69d40013e6cf86ef1763c95d920e"></a><!-- doxytag: member="uip.h::uip_udp_send" ref="ge5ab69d40013e6cf86ef1763c95d920e" args="(len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udp_send </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">len </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send a UDP datagram of length len on the current connection.
+<p>
+This function can only be called in response to a UDP event (poll or newdata). The data must be present in the uip_buf buffer, at the place pointed to by the uip_appdata pointer.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The length of the data in the uip_buf buffer. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a140">resolv.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00800">800</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ga9de254b8aa308eb4aab17efdde622d2"></a><!-- doxytag: member="uip.h::uip_udpconnection" ref="ga9de254b8aa308eb4aab17efdde622d2" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_udpconnection </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Is the current connection a UDP connection?
+<p>
+This function checks whether the current connection is a UDP connection.
+<p>
+Definition at line <a class="el" href="a00202.html#l00626">626</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g8411c95a4d89367ad2d9d6bde1a3d537"></a><!-- doxytag: member="uip.h::uip_urgdatalen" ref="g8411c95a4d89367ad2d9d6bde1a3d537" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_urgdatalen </td>
+ <td class="md" valign="top">( </td>
+ </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The length of any out-of-band data (urgent data) that has arrived on the connection.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>The configuration parameter UIP_URGDATA must be set for this function to be enabled. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00561">561</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g8096b0c4b543dc408f4dd031ddae7240"></a><!-- doxytag: member="uip.h::uip_connect" ref="g8096b0c4b543dc408f4dd031ddae7240" args="(uip_ipaddr_t *ripaddr, u16_t port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00088.html">uip_conn</a>* uip_connect </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> * </td>
+ <td class="mdname" nowrap> <em>ripaddr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>port</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Connect to a remote host using TCP.
+<p>
+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a>.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in <a class="el" href="a00140.html">uipopt.h</a>.<p>
+Since this function requires the port number to be in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 192,168,1,2);
+ <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(&ipaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ripaddr</em> </td><td>The IP address of the remote hot.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a190">smtp.c</a>, and <a class="el" href="a00040.html#a273">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00407">407</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00202.html#l01156">uip_conn::lport</a>, <a class="el" href="a00202.html#l01174">uip_conn::tcpstateflags</a>, <a class="el" href="a00202.html#l01372">UIP_CLOSED</a>, <a class="el" href="a00201.html#l00163">uip_conn</a>, <a class="el" href="a00206.html#l00245">UIP_CONNS</a>, and <a class="el" href="a00201.html#l00166">uip_conns</a>.
+<p>
+Referenced by <a class="el" href="a00174.html#l00233">smtp_send()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gdd1ab3704ecd4900eec61a6897d32dc8"></a><!-- doxytag: member="uip.h::uip_listen" ref="gdd1ab3704ecd4900eec61a6897d32dc8" args="(u16_t port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_listen </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>port</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Start listening to the specified port.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>Since this function expects the port number in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a102">hello-world.c</a>, and <a class="el" href="a00044.html#a218">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00529">529</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>.
+<p>
+Referenced by <a class="el" href="a00170.html#l00041">hello_world_init()</a>, and <a class="el" href="a00184.html#l00333">httpd_init()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g04b053a623aac7cd4195157d470661b3"></a><!-- doxytag: member="uip.h::uip_send" ref="g04b053a623aac7cd4195157d470661b3" args="(const void *data, int len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_send </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const void * </td>
+ <td class="mdname" nowrap> <em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>int </td>
+ <td class="mdname" nowrap> <em>len</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send data on the current connection.
+<p>
+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.<p>
+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function <a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss()</a> can be used to query uIP for the amount of data that actually will be sent.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit()</a> event being set. The application will then have to resend the data using this function.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>A pointer to the data which is to be sent.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The maximum amount of data bytes to be sent. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a10">dhcpc.c</a>, <a class="el" href="a00044.html#a226">telnetd.c</a>, and <a class="el" href="a00040.html#a278">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l01888">1888</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l00145">uip_sappdata</a>, and <a class="el" href="a00201.html#l00155">uip_slen</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g79c4110211247df3fb30b8cf1c4c02af"></a><!-- doxytag: member="uip.h::uip_udp_new" ref="g79c4110211247df3fb30b8cf1c4c02af" args="(uip_ipaddr_t *ripaddr, u16_t rport)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00095.html">uip_udp_conn</a>* uip_udp_new </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> * </td>
+ <td class="mdname" nowrap> <em>ripaddr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>rport</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set up a new UDP connection.
+<p>
+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the <a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind()</a> call, after the <a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new()</a> function has been called.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+ <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *c;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&addr, 192,168,2,1);
+ c = <a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(&addr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(12345));
+ <span class="keywordflow">if</span>(c != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+ <a class="code" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(c, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(12344));
+ }
+</pre></div> <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ripaddr</em> </td><td>The IP address of the remote host.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>rport</em> </td><td>The remote port number in network byte order.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The <a class="el" href="a00095.html">uip_udp_conn</a> structure for the new connection or NULL if no connection could be allocated. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a38">dhcpc.c</a>, and <a class="el" href="a00046.html#a153">resolv.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00473">473</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00202.html#l01212">uip_udp_conn::lport</a>, <a class="el" href="a00201.html#l00173">uip_udp_conn</a>, <a class="el" href="a00206.html#l00206">UIP_UDP_CONNS</a>, and <a class="el" href="a00201.html#l00174">uip_udp_conns</a>.
+<p>
+Referenced by <a class="el" href="a00172.html#l00438">resolv_conf()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gaa585784b0914cac1d37f07f85457008"></a><!-- doxytag: member="uip.h::uip_unlisten" ref="gaa585784b0914cac1d37f07f85457008" args="(u16_t port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_unlisten </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>port</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Stop listening to the specified port.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>Since this function expects the port number in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00518">518</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00148.html b/third_party/uip-1.0/doc/html/a00148.html new file mode 100644 index 0000000..1e26ef7 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00148.html @@ -0,0 +1,634 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP conversion functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP conversion functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+These functions can be used for converting between different data formats used by uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(addr, addr0, addr1, addr2, addr3)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an IP address from four bytes. <a href="#g87f0b54ade0d159fba495089128a4932"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487">uip_ip6addr</a>(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an IPv6 address from eight 16-bit words. <a href="#g53fbda0e8c31d4882294c8dc3cb5f487"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(dest, src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy an IP address to another IP address. <a href="#g769512993b7b27271909d6daa4748b60"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(addr1, addr2)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compare two IP addresses. <a href="#g210e629f7252e4bc8458cbdf260b3318"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip_ipaddr_maskcmp</a>(addr1, addr2, mask)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compare two IP addresses with netmasks. <a href="#g6b16e0bac41821c1fbe0c267071642f0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">uip_ipaddr_mask</a>(dest, src, mask)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mask out the network part of an IP address. <a href="#g969d7fff37a979737da045e0d538a9bd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the first octet of an IP address. <a href="#g22fa0681cd463191d7a01fe85d86996f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the second octet of an IP address. <a href="#gffcd2fbe181e2aaefbf970551c302af5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the third octet of an IP address. <a href="#ge23534479ead15af8ff08ace26a47fb5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(addr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pick the fourth octet of an IP address. <a href="#g165b603ec150e26efec7be199c9c2901"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="#g69a7a4951ff21b302267532c21ee78fc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g118e9d76568ab81ad97f138d4ea1ddd2"></a><!-- doxytag: member="uipconvfunc::ntohs" ref="g118e9d76568ab81ad97f138d4ea1ddd2" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a> htons</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="#ga22b04cac8cf283ca12f028578bebc06"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g69a7a4951ff21b302267532c21ee78fc"></a><!-- doxytag: member="uip.h::HTONS" ref="g69a7a4951ff21b302267532c21ee78fc" args="(n)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define HTONS </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">n </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Convert 16-bit quantity from host byte order to network byte order.
+<p>
+This macro is primarily used for converting constants from host byte order to network byte order. For converting variables to network byte order, use the <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> function instead. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a6">dhcpc.c</a>, <a class="el" href="a00036.html#a103">hello-world.c</a>, <a class="el" href="a00046.html#a139">resolv.c</a>, <a class="el" href="a00038.html#a191">smtp.c</a>, and <a class="el" href="a00044.html#a219">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l01070">1070</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00170.html#l00041">hello_world_init()</a>, <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00184.html#l00333">httpd_init()</a>, <a class="el" href="a00172.html#l00331">resolv_appcall()</a>, <a class="el" href="a00172.html#l00438">resolv_conf()</a>, <a class="el" href="a00174.html#l00233">smtp_send()</a>, <a class="el" href="a00204.html#l00278">uip_arp_arpin()</a>, and <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g53fbda0e8c31d4882294c8dc3cb5f487"></a><!-- doxytag: member="uip.h::uip_ip6addr" ref="g53fbda0e8c31d4882294c8dc3cb5f487" args="(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ip6addr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr0, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr1, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr2, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr3, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr4, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr5, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr6, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr7 </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Construct an IPv6 address from eight 16-bit words.
+<p>
+This function constructs an IPv6 address.
+<p>
+Definition at line <a class="el" href="a00202.html#l00852">852</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g87f0b54ade0d159fba495089128a4932"></a><!-- doxytag: member="uip.h::uip_ipaddr" ref="g87f0b54ade0d159fba495089128a4932" args="(addr, addr0, addr1, addr2, addr3)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr0, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr1, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr2, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr3 </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Construct an IP address from four bytes.
+<p>
+This function constructs an IP address of the type that uIP handles internally from four bytes. The function is handy for specifying IP addresses to use with e.g. the <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a> function.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+ <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *c;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 192,168,1,2);
+ c = <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(&ipaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr</em> </td><td>A pointer to a uip_ipaddr_t variable that will be filled in with the IP address.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr0</em> </td><td>The first octet of the IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr1</em> </td><td>The second octet of the IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr2</em> </td><td>The third octet of the IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr3</em> </td><td>The forth octet of the IP address. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a36">dhcpc.c</a>, <a class="el" href="a00042.html#a65">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a89">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00840">840</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g22fa0681cd463191d7a01fe85d86996f"></a><!-- doxytag: member="uip.h::uip_ipaddr1" ref="g22fa0681cd463191d7a01fe85d86996f" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr1 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pick the first octet of an IP address.
+<p>
+Picks out the first octet of an IP address.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> octet;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 1,2,3,4);
+ octet = <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(&ipaddr);
+</pre></div><p>
+In the example above, the variable "octet" will contain the value 1. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a28">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00995">995</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gffcd2fbe181e2aaefbf970551c302af5"></a><!-- doxytag: member="uip.h::uip_ipaddr2" ref="gffcd2fbe181e2aaefbf970551c302af5" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr2 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pick the second octet of an IP address.
+<p>
+Picks out the second octet of an IP address.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> octet;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 1,2,3,4);
+ octet = <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(&ipaddr);
+</pre></div><p>
+In the example above, the variable "octet" will contain the value 2. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a29">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l01015">1015</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge23534479ead15af8ff08ace26a47fb5"></a><!-- doxytag: member="uip.h::uip_ipaddr3" ref="ge23534479ead15af8ff08ace26a47fb5" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr3 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pick the third octet of an IP address.
+<p>
+Picks out the third octet of an IP address.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> octet;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 1,2,3,4);
+ octet = <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(&ipaddr);
+</pre></div><p>
+In the example above, the variable "octet" will contain the value 3. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a30">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l01035">1035</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g165b603ec150e26efec7be199c9c2901"></a><!-- doxytag: member="uip.h::uip_ipaddr4" ref="g165b603ec150e26efec7be199c9c2901" args="(addr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr4 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pick the fourth octet of an IP address.
+<p>
+Picks out the fourth octet of an IP address.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> octet;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 1,2,3,4);
+ octet = <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(&ipaddr);
+</pre></div><p>
+In the example above, the variable "octet" will contain the value 4. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a31">dhcpc.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l01055">1055</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g210e629f7252e4bc8458cbdf260b3318"></a><!-- doxytag: member="uip.h::uip_ipaddr_cmp" ref="g210e629f7252e4bc8458cbdf260b3318" args="(addr1, addr2)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr_cmp </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr1, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr2 </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Compare two IP addresses.
+<p>
+Compares two IP addresses.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr1, ipaddr2;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr1, 192,16,1,2);
+ <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(&ipaddr2, &ipaddr1)) {
+ printf(<span class="stringliteral">"They are the same"</span>);
+ }
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr1</em> </td><td>The first IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr2</em> </td><td>The second IP address. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00911">911</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00278">uip_arp_arpin()</a>, <a class="el" href="a00204.html#l00354">uip_arp_out()</a>, and <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g769512993b7b27271909d6daa4748b60"></a><!-- doxytag: member="uip.h::uip_ipaddr_copy" ref="g769512993b7b27271909d6daa4748b60" args="(dest, src)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr_copy </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">dest, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>src </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Copy an IP address to another IP address.
+<p>
+Copies an IP address from one place to another.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr1, ipaddr2;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr1, 192,16,1,2);
+ <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(&ipaddr2, &ipaddr1);
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>The destination for the copy. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>src</em> </td><td>The source from where to copy. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a187">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00202.html#l00882">882</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00174.html#l00216">smtp_configure()</a>, <a class="el" href="a00204.html#l00354">uip_arp_out()</a>, and <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g969d7fff37a979737da045e0d538a9bd"></a><!-- doxytag: member="uip.h::uip_ipaddr_mask" ref="g969d7fff37a979737da045e0d538a9bd" args="(dest, src, mask)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr_mask </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">dest, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>src, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>mask </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Mask out the network part of an IP address.
+<p>
+Masks out the network part of an IP address, given the address and the netmask.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr1, ipaddr2, netmask;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr1, 192,16,1,2);
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&netmask, 255,255,255,0);
+ <a class="code" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">uip_ipaddr_mask</a>(&ipaddr2, &ipaddr1, &netmask);
+</pre></div><p>
+In the example above, the variable "ipaddr2" will contain the IP address 192.168.1.0.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>Where the result is to be placed. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>src</em> </td><td>The IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>mask</em> </td><td>The netmask. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00972">972</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g6b16e0bac41821c1fbe0c267071642f0"></a><!-- doxytag: member="uip.h::uip_ipaddr_maskcmp" ref="g6b16e0bac41821c1fbe0c267071642f0" args="(addr1, addr2, mask)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define uip_ipaddr_maskcmp </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">addr1, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>addr2, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>mask </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Compare two IP addresses with netmasks.
+<p>
+Compares two IP addresses with netmasks. The masks are used to mask out the bits that are to be compared.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr1, ipaddr2, mask;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&mask, 255,255,255,0);
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr1, 192,16,1,2);
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr2, 192,16,1,3);
+ <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip_ipaddr_maskcmp</a>(&ipaddr1, &ipaddr2, &mask)) {
+ printf(<span class="stringliteral">"They are the same"</span>);
+ }
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>addr1</em> </td><td>The first IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>addr2</em> </td><td>The second IP address. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>mask</em> </td><td>The netmask. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00202.html#l00941">941</a> of file <a class="el" href="a00202.html">uip.h</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00354">uip_arp_out()</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ga22b04cac8cf283ca12f028578bebc06"></a><!-- doxytag: member="uip.h::htons" ref="ga22b04cac8cf283ca12f028578bebc06" args="(u16_t val)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> htons </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>val</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Convert 16-bit quantity from host byte order to network byte order.
+<p>
+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> macro instead. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a70">example-mainloop-with-arp.c</a>, <a class="el" href="a00046.html#a137">resolv.c</a>, and <a class="el" href="a00040.html#a274">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l01882">1882</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01070">HTONS</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00311">uip_chksum()</a>, <a class="el" href="a00201.html#l00407">uip_connect()</a>, <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00201.html#l00473">uip_udp_new()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00149.html b/third_party/uip-1.0/doc/html/a00149.html new file mode 100644 index 0000000..4921075 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00149.html @@ -0,0 +1,68 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Variables used in uIP device drivers</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Variables used in uIP device drivers<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+uIP has a few global variables that are used in device drivers for uIP.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the packet in the uip_buf buffer. <a href="#g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><br></td></tr>
+</table>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><!-- doxytag: member="uip.h::uip_len" ref="g12a33f0c09711167bdf3dd7d7cf8c5a1" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The length of the packet in the uip_buf buffer.
+<p>
+The global variable uip_len holds the length of the packet in the uip_buf buffer.<p>
+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.<p>
+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a68">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a92">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00155">155</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00278">uip_arp_arpin()</a>, <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00150.html b/third_party/uip-1.0/doc/html/a00150.html new file mode 100644 index 0000000..928e13e --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00150.html @@ -0,0 +1,1248 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: The uIP TCP/IP stack</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>The uIP TCP/IP stack</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+uIP is an implementation of the TCP/IP protocol stack intended for small 8-bit and 16-bit microcontrollers.
+<p>
+uIP provides the necessary protocols for Internet communication, with a very small code footprint and RAM requirements - the uIP code size is on the order of a few kilobytes and RAM usage is on the order of a few hundred bytes.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">uip.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Header file for the uIP TCP/IP stack. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">uip.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP TCP/IP stack code. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Modules</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">uIP configuration functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">uIP initialization functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP initialization functions are used for booting uIP. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">uIP device driver functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">These functions are used by a network device driver for interacting with uIP. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">uIP application functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Functions used by an application running of top of uIP. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">uIP conversion functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">These functions can be used for converting between different data formats used by uIP. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">Variables used in uIP device drivers</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP has a few global variables that are used in device drivers for uIP. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">uIP Address Resolution Protocol</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">uIP TCP throughput booster hack</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html">Architecture specific uIP functions</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The functions in the architecture specific module implement the IP check sum and 32-bit additions. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a uIP TCP connection. <a href="a00088.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a uIP UDP connection. <a href="a00095.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html">uip_stats</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. <a href="a00093.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html">uip_tcpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html">uip_icmpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html">uip_udpip_hdr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00089.html">uip_eth_addr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Representation of a 48-bit Ethernet address. <a href="a00089.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6bfa488f87f68a6f7f4a3efb9e45eaf8"></a><!-- doxytag: member="uip::UIP_ACKDATA" ref="g6bfa488f87f68a6f7f4a3efb9e45eaf8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">UIP_ACKDATA</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g39ce739bd352d7e348e37395ce903e43"></a><!-- doxytag: member="uip::UIP_NEWDATA" ref="g39ce739bd352d7e348e37395ce903e43" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf848ce44c810492e7a35c2d23a429f45"></a><!-- doxytag: member="uip::UIP_REXMIT" ref="gf848ce44c810492e7a35c2d23a429f45" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">UIP_REXMIT</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0ed78fd2be24d849cdd5af75e3b2674"></a><!-- doxytag: member="uip::UIP_POLL" ref="gf0ed78fd2be24d849cdd5af75e3b2674" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">UIP_POLL</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g57e6dc1d58a36d0ed53a3dd29ccc5798"></a><!-- doxytag: member="uip::UIP_CLOSE" ref="g57e6dc1d58a36d0ed53a3dd29ccc5798" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">UIP_CLOSE</a> 16</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga4c4310e54f18541b09e1e251fe7b22d"></a><!-- doxytag: member="uip::UIP_ABORT" ref="ga4c4310e54f18541b09e1e251fe7b22d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">UIP_ABORT</a> 32</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf84316f469ce0726985c0702db49a989"></a><!-- doxytag: member="uip::UIP_CONNECTED" ref="gf84316f469ce0726985c0702db49a989" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf84316f469ce0726985c0702db49a989">UIP_CONNECTED</a> 64</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2d3ba4b14d6d2f6576f9b547800b7945"></a><!-- doxytag: member="uip::UIP_TIMEDOUT" ref="g2d3ba4b14d6d2f6576f9b547800b7945" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">UIP_TIMEDOUT</a> 128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gabc40c09f49d15acb1b1a7f02bb3a807"></a><!-- doxytag: member="uip::UIP_DATA" ref="gabc40c09f49d15acb1b1a7f02bb3a807" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gabc40c09f49d15acb1b1a7f02bb3a807">UIP_DATA</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g041aea91aa6ef84dcc6cac3c51db9b2f"></a><!-- doxytag: member="uip::UIP_TIMER" ref="g041aea91aa6ef84dcc6cac3c51db9b2f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">UIP_TIMER</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd605357e29affb0d3104294c90f09905"></a><!-- doxytag: member="uip::UIP_POLL_REQUEST" ref="gd605357e29affb0d3104294c90f09905" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd605357e29affb0d3104294c90f09905">UIP_POLL_REQUEST</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5c97ae587595b5444be80f5ecc1d3382"></a><!-- doxytag: member="uip::UIP_UDP_SEND_CONN" ref="g5c97ae587595b5444be80f5ecc1d3382" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">UIP_UDP_SEND_CONN</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0ccbc3bb2a3ba1ebc255c7b3fcedd24"></a><!-- doxytag: member="uip::UIP_UDP_TIMER" ref="gf0ccbc3bb2a3ba1ebc255c7b3fcedd24" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">UIP_UDP_TIMER</a> 5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28eda870cff3d8e3cf2949e6f57a502b"></a><!-- doxytag: member="uip::UIP_CLOSED" ref="g28eda870cff3d8e3cf2949e6f57a502b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga5e3c856b86725125d19fccc34cd9eb5"></a><!-- doxytag: member="uip::UIP_SYN_RCVD" ref="ga5e3c856b86725125d19fccc34cd9eb5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8af482dec973db57d8b3bd3f69461488"></a><!-- doxytag: member="uip::UIP_SYN_SENT" ref="g8af482dec973db57d8b3bd3f69461488" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gae59b70658f28ee6e998eaaab05e423f"></a><!-- doxytag: member="uip::UIP_ESTABLISHED" ref="gae59b70658f28ee6e998eaaab05e423f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga533c394b1fa0030205534befa31c525"></a><!-- doxytag: member="uip::UIP_FIN_WAIT_1" ref="ga533c394b1fa0030205534befa31c525" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga533c394b1fa0030205534befa31c525">UIP_FIN_WAIT_1</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g160128ab5d2ea3cc497b91ee4eb4ef99"></a><!-- doxytag: member="uip::UIP_FIN_WAIT_2" ref="g160128ab5d2ea3cc497b91ee4eb4ef99" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">UIP_FIN_WAIT_2</a> 5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64d9affc680a445d708234e70450477b"></a><!-- doxytag: member="uip::UIP_CLOSING" ref="g64d9affc680a445d708234e70450477b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g64d9affc680a445d708234e70450477b">UIP_CLOSING</a> 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfff0ed43201bf1e2020de1a0d6cac070"></a><!-- doxytag: member="uip::UIP_TIME_WAIT" ref="gfff0ed43201bf1e2020de1a0d6cac070" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a> 7</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd135fb0cfdfb2c212f0f51865a3640e4"></a><!-- doxytag: member="uip::UIP_LAST_ACK" ref="gd135fb0cfdfb2c212f0f51865a3640e4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">UIP_LAST_ACK</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g13dfcb4a5f920e108253ade527a66cc2"></a><!-- doxytag: member="uip::UIP_TS_MASK" ref="g13dfcb4a5f920e108253ade527a66cc2" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a> 15</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gde29ec025e6754afd8cc24c954a8dec8"></a><!-- doxytag: member="uip::UIP_STOPPED" ref="gde29ec025e6754afd8cc24c954a8dec8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">UIP_STOPPED</a> 16</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The buffer size available for user data in the <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> buffer. <a href="#ge0825474feee11b4e038bfe71757875f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g359951eecd80541c2101f628a9da9146"></a><!-- doxytag: member="uip::UIP_PROTO_ICMP" ref="g359951eecd80541c2101f628a9da9146" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g359951eecd80541c2101f628a9da9146">UIP_PROTO_ICMP</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g517c770991459cc62dc009c0d3875c6a"></a><!-- doxytag: member="uip::UIP_PROTO_TCP" ref="g517c770991459cc62dc009c0d3875c6a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a> 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf72d7b9a737707dcfb2c41fec2b6792e"></a><!-- doxytag: member="uip::UIP_PROTO_UDP" ref="gf72d7b9a737707dcfb2c41fec2b6792e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a> 17</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gad0321f4c570f9983c6de81ece3ddc20"></a><!-- doxytag: member="uip::UIP_PROTO_ICMP6" ref="gad0321f4c570f9983c6de81ece3ddc20" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">UIP_PROTO_ICMP6</a> 58</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6bc12c6c7b56f73ce5d57abfdcdc6eb5"></a><!-- doxytag: member="uip::UIP_IPH_LEN" ref="g6bc12c6c7b56f73ce5d57abfdcdc6eb5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a> 20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb948296aea6b6b3aa1f156799c4d479c"></a><!-- doxytag: member="uip::UIP_UDPH_LEN" ref="gb948296aea6b6b3aa1f156799c4d479c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">UIP_UDPH_LEN</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g17d111686f98e4c09db73a770ac3f1a4"></a><!-- doxytag: member="uip::UIP_TCPH_LEN" ref="g17d111686f98e4c09db73a770ac3f1a4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">UIP_TCPH_LEN</a> 20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f2b90c597ec23f39ec716ccec11233c"></a><!-- doxytag: member="uip::UIP_IPUDPH_LEN" ref="g6f2b90c597ec23f39ec716ccec11233c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a> (UIP_UDPH_LEN + UIP_IPH_LEN)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g15f2617f7dc1713f9d10282125c6027b"></a><!-- doxytag: member="uip::UIP_IPTCPH_LEN" ref="g15f2617f7dc1713f9d10282125c6027b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> (UIP_TCPH_LEN + UIP_IPH_LEN)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gee37386b2ab828787c05227eb109def7"></a><!-- doxytag: member="uip::UIP_TCPIP_HLEN" ref="gee37386b2ab828787c05227eb109def7" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> UIP_IPTCPH_LEN</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g88e60aa2cf23e1c65d630701db08c743"></a><!-- doxytag: member="uip::TCP_FIN" ref="g88e60aa2cf23e1c65d630701db08c743" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a> 0x01</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6020613f5062417d9811cfa837215c83"></a><!-- doxytag: member="uip::TCP_SYN" ref="g6020613f5062417d9811cfa837215c83" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> 0x02</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5ca559def464ef20d8b1f7d32f2f160d"></a><!-- doxytag: member="uip::TCP_RST" ref="g5ca559def464ef20d8b1f7d32f2f160d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a> 0x04</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1320fd0006a2f70138bc2d0018dda829"></a><!-- doxytag: member="uip::TCP_PSH" ref="g1320fd0006a2f70138bc2d0018dda829" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">TCP_PSH</a> 0x08</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44b3b1ab31a403ba28ec135adfcbefef"></a><!-- doxytag: member="uip::TCP_ACK" ref="g44b3b1ab31a403ba28ec135adfcbefef" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a> 0x10</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc84f499cba8a02fc0e306c10b2acabf0"></a><!-- doxytag: member="uip::TCP_URG" ref="gc84f499cba8a02fc0e306c10b2acabf0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">TCP_URG</a> 0x20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1425d4a0c2760adb653a04c0fb137a8d"></a><!-- doxytag: member="uip::TCP_CTL" ref="g1425d4a0c2760adb653a04c0fb137a8d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">TCP_CTL</a> 0x3f</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1215163245304bad20d6c5608ad75ab7"></a><!-- doxytag: member="uip::TCP_OPT_END" ref="g1215163245304bad20d6c5608ad75ab7" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">TCP_OPT_END</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f1822e1d231235edacad691f3cb7bbb"></a><!-- doxytag: member="uip::TCP_OPT_NOOP" ref="g9f1822e1d231235edacad691f3cb7bbb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">TCP_OPT_NOOP</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g691688604655ea8943d15f14c60027d8"></a><!-- doxytag: member="uip::TCP_OPT_MSS" ref="g691688604655ea8943d15f14c60027d8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g691688604655ea8943d15f14c60027d8">TCP_OPT_MSS</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g12f3bf821224b8e7b48a57ed3cea15cf"></a><!-- doxytag: member="uip::TCP_OPT_MSS_LEN" ref="g12f3bf821224b8e7b48a57ed3cea15cf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">TCP_OPT_MSS_LEN</a> 4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5c5b1834e497f53ad0ef947bbe9777fa"></a><!-- doxytag: member="uip::ICMP_ECHO_REPLY" ref="g5c5b1834e497f53ad0ef947bbe9777fa" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">ICMP_ECHO_REPLY</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd58231410d58e34b455328b888a9e73c"></a><!-- doxytag: member="uip::ICMP_ECHO" ref="gd58231410d58e34b455328b888a9e73c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g207d17b633cd095120a74bc1f2257b17"></a><!-- doxytag: member="uip::ICMP6_ECHO_REPLY" ref="g207d17b633cd095120a74bc1f2257b17" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">ICMP6_ECHO_REPLY</a> 129</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4cc3e223b63f27b546d62e9a258dba5a"></a><!-- doxytag: member="uip::ICMP6_ECHO" ref="g4cc3e223b63f27b546d62e9a258dba5a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">ICMP6_ECHO</a> 128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1cea57e3ea526f210b1068e6dcf7b4f4"></a><!-- doxytag: member="uip::ICMP6_NEIGHBOR_SOLICITATION" ref="g1cea57e3ea526f210b1068e6dcf7b4f4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">ICMP6_NEIGHBOR_SOLICITATION</a> 135</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g62c03e0a308cc23929a80fe8d8f9dc1e"></a><!-- doxytag: member="uip::ICMP6_NEIGHBOR_ADVERTISEMENT" ref="g62c03e0a308cc23929a80fe8d8f9dc1e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">ICMP6_NEIGHBOR_ADVERTISEMENT</a> 136</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1d3211dbbdfb22d6a47b60dddcf945e8"></a><!-- doxytag: member="uip::ICMP6_FLAG_S" ref="g1d3211dbbdfb22d6a47b60dddcf945e8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">ICMP6_FLAG_S</a> (1 << 6)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g42288d5c3cf4b10becefec657f441e54"></a><!-- doxytag: member="uip::ICMP6_OPTION_SOURCE_LINK_ADDRESS" ref="g42288d5c3cf4b10becefec657f441e54" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">ICMP6_OPTION_SOURCE_LINK_ADDRESS</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8387881de3a8bfd3c0d57b9d04ac9b7e"></a><!-- doxytag: member="uip::ICMP6_OPTION_TARGET_LINK_ADDRESS" ref="g8387881de3a8bfd3c0d57b9d04ac9b7e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">ICMP6_OPTION_TARGET_LINK_ADDRESS</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24f52ac52d6e714cb04a5aa01be3bdd0"></a><!-- doxytag: member="uip::BUF" ref="g24f52ac52d6e714cb04a5aa01be3bdd0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a> ((struct <a class="el" href="a00094.html">uip_tcpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g96544dedc1cdc71ad2ad54bf1d5e5433"></a><!-- doxytag: member="uip::FBUF" ref="g96544dedc1cdc71ad2ad54bf1d5e5433" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a> ((struct <a class="el" href="a00094.html">uip_tcpip_hdr</a> *)&uip_reassbuf[0])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4309376690872fa4beb4f025f5cc199b"></a><!-- doxytag: member="uip::ICMPBUF" ref="g4309376690872fa4beb4f025f5cc199b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a> ((struct <a class="el" href="a00091.html">uip_icmpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb9435261753469accec0c9bf8a5a2686"></a><!-- doxytag: member="uip::UDPBUF" ref="gb9435261753469accec0c9bf8a5a2686" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a> ((struct <a class="el" href="a00096.html">uip_udpip_hdr</a> *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_LLH_LEN])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9c0814ed491fa452ec97910c0728d410"></a><!-- doxytag: member="uip::UIP_STAT" ref="g9c0814ed491fa452ec97910c0728d410" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(s)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g013c3a06a8b58589a77f4a3442f89c2a"></a><!-- doxytag: member="uip::UIP_LOG" ref="g013c3a06a8b58589a77f4a3442f89c2a" args="(m)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(m)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20ceef9d0868d391c2f33041b02cb1f1"></a><!-- doxytag: member="uip::uip_ip4addr_t" ref="g20ceef9d0868d391c2f33041b02cb1f1" args="[2]" -->
+typedef <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a> [2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Repressentation of an IP address. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ebb4dac683163840eab9c6c41ad61f7"></a><!-- doxytag: member="uip::uip_ip6addr_t" ref="g9ebb4dac683163840eab9c6c41ad61f7" args="[8]" -->
+typedef <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> [8]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ef35301f43a5bbb9f89f07b5a36b9a0"></a><!-- doxytag: member="uip::uip_ipaddr_t" ref="g1ef35301f43a5bbb9f89f07b5a36b9a0" args="" -->
+typedef <a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g266263ac78a1361a2b1d15741d3b0675"></a><!-- doxytag: member="uip::uip_process" ref="g266263ac78a1361a2b1d15741d3b0675" args="(u8_t flag)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip_process</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flag)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the Internet checksum over a buffer. <a href="#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf. <a href="#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata. <a href="#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the UDP checksum of the packet in uip_buf and uip_appdata. <a href="#g7023a34ba9e9d03b5fbedbcb32924453"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="#g22f140b02c354dfebcc7ad481c3bcd68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Carry out a 32-bit addition. <a href="#g6832e4d2d046536b6472f7ac92340f68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP initialization function. <a href="#gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">uip_connect</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Connect to a remote host using TCP. <a href="#g9c24fba2cd8f7f62accb0a0d5bbe4dad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a> (<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ripaddr, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> rport)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up a new UDP connection. <a href="#g79c4110211247df3fb30b8cf1c4c02af"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop listening to the specified port. <a href="#gaa585784b0914cac1d37f07f85457008"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start listening to the specified port. <a href="#gdd1ab3704ecd4900eec61a6897d32dc8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga22b04cac8cf283ca12f028578bebc06">htons</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert 16-bit quantity from host byte order to network byte order. <a href="#ga22b04cac8cf283ca12f028578bebc06"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g04b053a623aac7cd4195157d470661b3">uip_send</a> (const void *data, int len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data on the current connection. <a href="#g04b053a623aac7cd4195157d470661b3"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the application data in the packet buffer. <a href="#g561b8eda32e059d4e7397f776268cc63"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the current TCP connection. <a href="#g788ffac72342f6172343d7f8099cbe1a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf703683056d2bfa5c81fa157dcb20fe2"></a><!-- doxytag: member="uip::uip_conns" ref="gf703683056d2bfa5c81fa157dcb20fe2" args="[UIP_CONNS]" -->
+<a class="el" href="a00088.html">uip_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a> [UIP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g210f227119fc972e6222c9cb452e15a9"></a><!-- doxytag: member="uip::uip_udp_conn" ref="g210f227119fc972e6222c9cb452e15a9" args="" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The current UDP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="geb533744817cf6695d75293369c2248b"></a><!-- doxytag: member="uip::uip_udp_conns" ref="geb533744817cf6695d75293369c2248b" args="[UIP_UDP_CONNS]" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a> [UIP_UDP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00093.html">uip_stats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP TCP/IP statistics. <a href="#g9ee50a40597e67fce96541ab56c3b712"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4ef6b00924990e7a293f66715b6d1d1"></a><!-- doxytag: member="uip::uip_flags" ref="gb4ef6b00924990e7a293f66715b6d1d1" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d3673f52f5846b6961d23b150decd54"></a><!-- doxytag: member="uip::uip_hostaddr" ref="g7d3673f52f5846b6961d23b150decd54" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3237be0d9ec457de0177689ee23c0d5c"></a><!-- doxytag: member="uip::uip_netmask" ref="g3237be0d9ec457de0177689ee23c0d5c" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20df5c82f2a15a508c19e505b5d9de2b"></a><!-- doxytag: member="uip::uip_draddr" ref="g20df5c82f2a15a508c19e505b5d9de2b" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d3673f52f5846b6961d23b150decd54"></a><!-- doxytag: member="uip::uip_hostaddr" ref="g7d3673f52f5846b6961d23b150decd54" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20df5c82f2a15a508c19e505b5d9de2b"></a><!-- doxytag: member="uip::uip_draddr" ref="g20df5c82f2a15a508c19e505b5d9de2b" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3237be0d9ec457de0177689ee23c0d5c"></a><!-- doxytag: member="uip::uip_netmask" ref="g3237be0d9ec457de0177689ee23c0d5c" args="" -->
+<a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g499bb98a0b4ae9a98553ede81317606d"></a><!-- doxytag: member="uip::uip_ethaddr" ref="g499bb98a0b4ae9a98553ede81317606d" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a> = {{0,0,0,0,0,0}}</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> [UIP_BUFSIZE+2]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP packet buffer. <a href="#gb81e78f890dbbee50c533a9734b74fd9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the application data in the packet buffer. <a href="#g561b8eda32e059d4e7397f776268cc63"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga05a3dde2048480fa3ab2a5961898d18"></a><!-- doxytag: member="uip::uip_sappdata" ref="ga05a3dde2048480fa3ab2a5961898d18" args="" -->
+void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the packet in the uip_buf buffer. <a href="#g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5b5615dc240daed20949c0fded2b4679"></a><!-- doxytag: member="uip::uip_slen" ref="g5b5615dc240daed20949c0fded2b4679" args="" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4ef6b00924990e7a293f66715b6d1d1"></a><!-- doxytag: member="uip::uip_flags" ref="gb4ef6b00924990e7a293f66715b6d1d1" args="" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00088.html">uip_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the current TCP connection. <a href="#g788ffac72342f6172343d7f8099cbe1a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf703683056d2bfa5c81fa157dcb20fe2"></a><!-- doxytag: member="uip::uip_conns" ref="gf703683056d2bfa5c81fa157dcb20fe2" args="[UIP_CONNS]" -->
+<a class="el" href="a00088.html">uip_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a> [UIP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g236d5c7872f59c8fe7b701c7252b976e"></a><!-- doxytag: member="uip::uip_listenports" ref="g236d5c7872f59c8fe7b701c7252b976e" args="[UIP_LISTENPORTS]" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip_listenports</a> [UIP_LISTENPORTS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g210f227119fc972e6222c9cb452e15a9"></a><!-- doxytag: member="uip::uip_udp_conn" ref="g210f227119fc972e6222c9cb452e15a9" args="" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The current UDP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="geb533744817cf6695d75293369c2248b"></a><!-- doxytag: member="uip::uip_udp_conns" ref="geb533744817cf6695d75293369c2248b" args="[UIP_UDP_CONNS]" -->
+<a class="el" href="a00095.html">uip_udp_conn</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a> [UIP_UDP_CONNS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a0cf5d86c58fab216414ce59bf1fea1"></a><!-- doxytag: member="uip::uip_acc32" ref="g2a0cf5d86c58fab216414ce59bf1fea1" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4-byte array used for the 32-bit sequence number calculations. <br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="ge0825474feee11b4e038bfe71757875f"></a><!-- doxytag: member="uip.h::UIP_APPDATA_SIZE" ref="ge0825474feee11b4e038bfe71757875f" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_APPDATA_SIZE </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The buffer size available for user data in the <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> buffer.
+<p>
+This macro holds the available size for user data in the <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> buffer. The macro is intended to be used for checking bounds of available user data.<p>
+Example: <div class="fragment"><pre class="fragment"> snprintf(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a>, <span class="stringliteral">"%u\n"</span>, i);
+</pre></div>
+<p>
+Definition at line <a class="el" href="a00202.html#l01506">1506</a> of file <a class="el" href="a00202.html">uip.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ga22b04cac8cf283ca12f028578bebc06"></a><!-- doxytag: member="uip.c::htons" ref="ga22b04cac8cf283ca12f028578bebc06" args="(u16_t val)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> htons </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>val</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Convert 16-bit quantity from host byte order to network byte order.
+<p>
+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> macro instead.
+<p>
+Definition at line <a class="el" href="a00201.html#l01882">1882</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01070">HTONS</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00311">uip_chksum()</a>, <a class="el" href="a00201.html#l00407">uip_connect()</a>, <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00201.html#l00473">uip_udp_new()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g6832e4d2d046536b6472f7ac92340f68"></a><!-- doxytag: member="uip.c::uip_add32" ref="g6832e4d2d046536b6472f7ac92340f68" args="(u8_t *op32, u16_t op16)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_add32 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> * </td>
+ <td class="mdname" nowrap> <em>op32</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>op16</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Carry out a 32-bit addition.
+<p>
+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>op32</em> </td><td>A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>op16</em> </td><td>A 16-bit integer in host byte order. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00249">249</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb6683dd83fe1c8de9a24086d4b69e907"></a><!-- doxytag: member="uip.h::uip_chksum" ref="gb6683dd83fe1c8de9a24086d4b69e907" args="(u16_t *buf, u16_t len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_chksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td>
+ <td class="mdname" nowrap> <em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>len</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the Internet checksum over a buffer.
+<p>
+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.<p>
+See RFC1071.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>A pointer to the buffer over which the checksum is to be computed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The length of the buffer over which the checksum is to be computed.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The Internet checksum of the buffer. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00311">311</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l01882">htons()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g9c24fba2cd8f7f62accb0a0d5bbe4dad"></a><!-- doxytag: member="uip.c::uip_connect" ref="g9c24fba2cd8f7f62accb0a0d5bbe4dad" args="(uip_ipaddr_t *ripaddr, u16_t rport)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00088.html">uip_conn</a>* uip_connect </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> * </td>
+ <td class="mdname" nowrap> <em>ripaddr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>port</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Connect to a remote host using TCP.
+<p>
+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a>.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in <a class="el" href="a00140.html">uipopt.h</a>.<p>
+Since this function requires the port number to be in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&ipaddr, 192,168,1,2);
+ <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(&ipaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ripaddr</em> </td><td>The IP address of the remote hot.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00407">407</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00202.html#l01156">uip_conn::lport</a>, <a class="el" href="a00202.html#l01174">uip_conn::tcpstateflags</a>, <a class="el" href="a00202.html#l01372">UIP_CLOSED</a>, <a class="el" href="a00201.html#l00163">uip_conn</a>, <a class="el" href="a00201.html#l00166">uip_conns</a>, and <a class="el" href="a00206.html#l00245">UIP_CONNS</a>.
+<p>
+Referenced by <a class="el" href="a00174.html#l00233">smtp_send()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gc48ed5f0d27721ef62a3ed02a5ad8d2e"></a><!-- doxytag: member="uip.c::uip_init" ref="gc48ed5f0d27721ef62a3ed02a5ad8d2e" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+uIP initialization function.
+<p>
+This function should be called at boot up to initilize the uIP TCP/IP stack.
+<p>
+Definition at line <a class="el" href="a00201.html#l00379">379</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2addf34c7d457c1a7899a7e2171ef1e9"></a><!-- doxytag: member="uip.h::uip_ipchksum" ref="g2addf34c7d457c1a7899a7e2171ef1e9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_ipchksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the IP header checksum of the packet header in uip_buf.
+<p>
+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The IP header checksum of the IP header in the uip_buf buffer. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00318">318</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l00001">DEBUG_PRINTF</a>, <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00202.html#l01518">UIP_IPH_LEN</a>, and <a class="el" href="a00206.html#l00448">UIP_LLH_LEN</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gdd1ab3704ecd4900eec61a6897d32dc8"></a><!-- doxytag: member="uip.c::uip_listen" ref="gdd1ab3704ecd4900eec61a6897d32dc8" args="(u16_t port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_listen </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>port</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Start listening to the specified port.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>Since this function expects the port number in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00529">529</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>.
+<p>
+Referenced by <a class="el" href="a00170.html#l00041">hello_world_init()</a>, and <a class="el" href="a00184.html#l00333">httpd_init()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g04b053a623aac7cd4195157d470661b3"></a><!-- doxytag: member="uip.c::uip_send" ref="g04b053a623aac7cd4195157d470661b3" args="(const void *data, int len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_send </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const void * </td>
+ <td class="mdname" nowrap> <em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>int </td>
+ <td class="mdname" nowrap> <em>len</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send data on the current connection.
+<p>
+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.<p>
+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function <a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss()</a> can be used to query uIP for the amount of data that actually will be sent.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit()</a> event being set. The application will then have to resend the data using this function.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>A pointer to the data which is to be sent.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The maximum amount of data bytes to be sent. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l01888">1888</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l00145">uip_sappdata</a>, and <a class="el" href="a00201.html#l00155">uip_slen</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g22f140b02c354dfebcc7ad481c3bcd68"></a><!-- doxytag: member="uip.c::uip_setipid" ref="g22f140b02c354dfebcc7ad481c3bcd68" args="(u16_t id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_setipid </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+uIP initialization function.
+<p>
+This function may be used at boot time to set the initial ip_id.
+<p>
+Definition at line <a class="el" href="a00201.html#l00181">181</a> of file <a class="el" href="a00201.html">uip.c</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g85b65e38aa74eba18979156f97a94a87"></a><!-- doxytag: member="uip.h::uip_tcpchksum" ref="g85b65e38aa74eba18979156f97a94a87" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_tcpchksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+<p>
+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00364">364</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01510">UIP_PROTO_TCP</a>.
+<p>
+Referenced by <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g79c4110211247df3fb30b8cf1c4c02af"></a><!-- doxytag: member="uip.c::uip_udp_new" ref="g79c4110211247df3fb30b8cf1c4c02af" args="(uip_ipaddr_t *ripaddr, u16_t rport)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00095.html">uip_udp_conn</a>* uip_udp_new </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> * </td>
+ <td class="mdname" nowrap> <em>ripaddr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>rport</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set up a new UDP connection.
+<p>
+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the <a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind()</a> call, after the <a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new()</a> function has been called.<p>
+Example: <div class="fragment"><pre class="fragment"> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+ <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *c;
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(&addr, 192,168,2,1);
+ c = <a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(&addr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(12345));
+ <span class="keywordflow">if</span>(c != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+ <a class="code" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(c, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(12344));
+ }
+</pre></div> <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ripaddr</em> </td><td>The IP address of the remote host.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>rport</em> </td><td>The remote port number in network byte order.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The <a class="el" href="a00095.html">uip_udp_conn</a> structure for the new connection or NULL if no connection could be allocated. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00473">473</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00202.html#l01212">uip_udp_conn::lport</a>, <a class="el" href="a00201.html#l00173">uip_udp_conn</a>, <a class="el" href="a00201.html#l00174">uip_udp_conns</a>, and <a class="el" href="a00206.html#l00206">UIP_UDP_CONNS</a>.
+<p>
+Referenced by <a class="el" href="a00172.html#l00438">resolv_conf()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g7023a34ba9e9d03b5fbedbcb32924453"></a><!-- doxytag: member="uip.h::uip_udpchksum" ref="g7023a34ba9e9d03b5fbedbcb32924453" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_udpchksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
+<p>
+The UDP checksum is the Internet checksum of data contents of the UDP segment, and a pseudo-header as defined in RFC768.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The UDP checksum of the UDP segment in uip_buf and pointed to by uip_appdata. </dd></dl>
+
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gaa585784b0914cac1d37f07f85457008"></a><!-- doxytag: member="uip.c::uip_unlisten" ref="gaa585784b0914cac1d37f07f85457008" args="(u16_t port)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_unlisten </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>port</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Stop listening to the specified port.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>Since this function expects the port number in network byte order, a conversion using <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS()</a> or <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons()</a> is necessary.</dd></dl>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>A 16-bit port number in network byte order. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00518">518</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00259">UIP_LISTENPORTS</a>. </td>
+ </tr>
+</table>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="g561b8eda32e059d4e7397f776268cc63"></a><!-- doxytag: member="uip.c::uip_appdata" ref="g561b8eda32e059d4e7397f776268cc63" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pointer to the application data in the packet buffer.
+<p>
+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a>.
+<p>
+Definition at line <a class="el" href="a00201.html#l00143">143</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g561b8eda32e059d4e7397f776268cc63"></a><!-- doxytag: member="uip.h::uip_appdata" ref="g561b8eda32e059d4e7397f776268cc63" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pointer to the application data in the packet buffer.
+<p>
+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a>. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a9">dhcpc.c</a>, <a class="el" href="a00046.html#a136">resolv.c</a>, <a class="el" href="a00044.html#a224">telnetd.c</a>, and <a class="el" href="a00040.html#a275">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00143">143</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb81e78f890dbbee50c533a9734b74fd9"></a><!-- doxytag: member="uip.c::uip_buf" ref="gb81e78f890dbbee50c533a9734b74fd9" args="[UIP_BUFSIZE+2]" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_BUFSIZE+2] </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The uIP packet buffer.
+<p>
+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example: <div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span>
+ devicedriver_send(<span class="keywordtype">void</span>)
+ {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0], <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>);
+ <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> <= <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>) {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_LLH_LEN);
+ } <span class="keywordflow">else</span> {
+ hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>);
+ hwsend(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> - <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>);
+ }
+ }
+</pre></div> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00139">139</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g788ffac72342f6172343d7f8099cbe1a"></a><!-- doxytag: member="uip.c::uip_conn" ref="g788ffac72342f6172343d7f8099cbe1a" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00088.html">uip_conn</a>* <a class="el" href="a00088.html">uip_conn</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pointer to the current TCP connection.
+<p>
+The <a class="el" href="a00088.html">uip_conn</a> pointer can be used to access the current TCP connection.
+<p>
+Definition at line <a class="el" href="a00201.html#l00163">163</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00407">uip_connect()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g788ffac72342f6172343d7f8099cbe1a"></a><!-- doxytag: member="uip.h::uip_conn" ref="g788ffac72342f6172343d7f8099cbe1a" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00088.html">uip_conn</a>* <a class="el" href="a00088.html">uip_conn</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Pointer to the current TCP connection.
+<p>
+The <a class="el" href="a00088.html">uip_conn</a> pointer can be used to access the current TCP connection. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a105">hello-world.c</a>, <a class="el" href="a00038.html#a189">smtp.c</a>, and <a class="el" href="a00040.html#a269">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00201.html#l00163">163</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00407">uip_connect()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g12a33f0c09711167bdf3dd7d7cf8c5a1"></a><!-- doxytag: member="uip.c::uip_len" ref="g12a33f0c09711167bdf3dd7d7cf8c5a1" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The length of the packet in the uip_buf buffer.
+<p>
+The global variable uip_len holds the length of the packet in the uip_buf buffer.<p>
+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.<p>
+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet.
+<p>
+Definition at line <a class="el" href="a00201.html#l00155">155</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00278">uip_arp_arpin()</a>, <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g9ee50a40597e67fce96541ab56c3b712"></a><!-- doxytag: member="uip.h::uip_stat" ref="g9ee50a40597e67fce96541ab56c3b712" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00093.html">uip_stats</a> <a class="el" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The uIP TCP/IP statistics.
+<p>
+This is the variable in which the uIP TCP/IP statistics are gathered.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00151.html b/third_party/uip-1.0/doc/html/a00151.html new file mode 100644 index 0000000..356a06d --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00151.html @@ -0,0 +1,221 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Architecture specific uIP functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Architecture specific uIP functions<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The functions in the architecture specific module implement the IP check sum and 32-bit additions.
+<p>
+The IP checksum calculation is the most computationally expensive operation in the TCP/IP stack and it therefore pays off to implement this in efficient assembler. The purpose of the uip-arch module is to let the checksum functions to be implemented in architecture specific assembler.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">uip_arch.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declarations of architecture specific functions. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Carry out a 32-bit addition. <a href="#g6832e4d2d046536b6472f7ac92340f68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the Internet checksum over a buffer. <a href="#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf. <a href="#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata. <a href="#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a0cf5d86c58fab216414ce59bf1fea1"></a><!-- doxytag: member="uiparch::uip_acc32" ref="g2a0cf5d86c58fab216414ce59bf1fea1" args="[4]" -->
+<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a> [4]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4-byte array used for the 32-bit sequence number calculations. <br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g6832e4d2d046536b6472f7ac92340f68"></a><!-- doxytag: member="uip_arch.h::uip_add32" ref="g6832e4d2d046536b6472f7ac92340f68" args="(u8_t *op32, u16_t op16)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_add32 </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> * </td>
+ <td class="mdname" nowrap> <em>op32</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>op16</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Carry out a 32-bit addition.
+<p>
+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>op32</em> </td><td>A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>op16</em> </td><td>A 16-bit integer in host byte order. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00201.html#l00249">249</a> of file <a class="el" href="a00201.html">uip.c</a>.
+<p>
+Referenced by <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb6683dd83fe1c8de9a24086d4b69e907"></a><!-- doxytag: member="uip_arch.h::uip_chksum" ref="gb6683dd83fe1c8de9a24086d4b69e907" args="(u16_t *buf, u16_t len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_chksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td>
+ <td class="mdname" nowrap> <em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>len</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the Internet checksum over a buffer.
+<p>
+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.<p>
+See RFC1071.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function is not called in the current version of uIP, but future versions might make use of it.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>A pointer to the buffer over which the checksum is to be computed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The length of the buffer over which the checksum is to be computed.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The Internet checksum of the buffer. </dd></dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="g2addf34c7d457c1a7899a7e2171ef1e9"></a><!-- doxytag: member="uip_arch.h::uip_ipchksum" ref="g2addf34c7d457c1a7899a7e2171ef1e9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_ipchksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the IP header checksum of the packet header in uip_buf.
+<p>
+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The IP header checksum of the IP header in the uip_buf buffer. </dd></dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="g85b65e38aa74eba18979156f97a94a87"></a><!-- doxytag: member="uip_arch.h::uip_tcpchksum" ref="g85b65e38aa74eba18979156f97a94a87" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_tcpchksum </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+<p>
+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The uip_appdata pointer that points to the packet data may point anywhere in memory, so it is not possible to simply calculate the Internet checksum of the contents of the uip_buf buffer.</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata. </dd></dl>
+ </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00152.html b/third_party/uip-1.0/doc/html/a00152.html new file mode 100644 index 0000000..8163a92 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00152.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP Address Resolution Protocol</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP Address Resolution Protocol<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses.
+<p>
+ARP uses broadcast queries to ask for the link level address of a known IP address and the host which is configured with the IP address for which the query was meant, will respond with its link level address.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This ARP implementation only supports Ethernet. </dd></dl>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">uip_arp.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Macros and definitions for the ARP module. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">uip_arp.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implementation of the ARP Address Resolution Protocol. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html">uip_eth_hdr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The Ethernet header. <a href="a00090.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3e1562e8a6de32268e5df92a52152f91"></a><!-- doxytag: member="uiparp::UIP_ETHTYPE_ARP" ref="g3e1562e8a6de32268e5df92a52152f91" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a> 0x0806</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03d140db75de3d3cdfbbab1c4fed8d8d"></a><!-- doxytag: member="uiparp::UIP_ETHTYPE_IP" ref="g03d140db75de3d3cdfbbab1c4fed8d8d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a> 0x0800</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbb558f3a9b1ec015e83c314aba694e35"></a><!-- doxytag: member="uiparp::UIP_ETHTYPE_IP6" ref="gbb558f3a9b1ec015e83c314aba694e35" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">UIP_ETHTYPE_IP6</a> 0x86dd</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g737337d6a51e31b236c8233d024138a8"></a><!-- doxytag: member="uiparp::uip_arp_ipin" ref="g737337d6a51e31b236c8233d024138a8" args="()" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a7c46ffaba30477b8c9e3e61bd2e106"></a><!-- doxytag: member="uiparp::ARP_REQUEST" ref="g7a7c46ffaba30477b8c9e3e61bd2e106" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">ARP_REQUEST</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g06ba7b414e718081998f2814090debf1"></a><!-- doxytag: member="uiparp::ARP_REPLY" ref="g06ba7b414e718081998f2814090debf1" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g06ba7b414e718081998f2814090debf1">ARP_REPLY</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbb56b549f7ab4d86e1cc39b8afc70d1e"></a><!-- doxytag: member="uiparp::ARP_HWTYPE_ETH" ref="gbb56b549f7ab4d86e1cc39b8afc70d1e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">ARP_HWTYPE_ETH</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24f52ac52d6e714cb04a5aa01be3bdd0"></a><!-- doxytag: member="uiparp::BUF" ref="g24f52ac52d6e714cb04a5aa01be3bdd0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a> ((struct arp_hdr *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f2196e2705036869611962425e404bf"></a><!-- doxytag: member="uiparp::IPBUF" ref="g9f2196e2705036869611962425e404bf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a> ((struct ethip_hdr *)&<a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0])</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2d9d28afa353f662b9bb5234fc419f72"></a><!-- doxytag: member="uiparp::uip_arp_init" ref="g2d9d28afa353f662b9bb5234fc419f72" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the ARP module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">ARP processing for incoming ARP packets. <a href="#g902c4a360134096224bc2655f623aa5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request. <a href="#g54b27e45df15e10a0eb1a3e3a91417d2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic ARP processing function. <a href="#g058a8e6025f67b021862281f1911fcef"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g499bb98a0b4ae9a98553ede81317606d"></a><!-- doxytag: member="uiparp::uip_ethaddr" ref="g499bb98a0b4ae9a98553ede81317606d" args="" -->
+<a class="el" href="a00089.html">uip_eth_addr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a></td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g902c4a360134096224bc2655f623aa5f"></a><!-- doxytag: member="uip_arp.h::uip_arp_arpin" ref="g902c4a360134096224bc2655f623aa5f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_arp_arpin </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+ARP processing for incoming ARP packets.
+<p>
+This function should be called by the device driver when an ARP packet has been received. The function will act differently depending on the ARP packet type: if it is a reply for a request that we previously sent out, the ARP cache will be filled in with the values from the ARP reply. If the incoming ARP packet is an ARP request for our IP address, an ARP reply packet is created and put into the uip_buf[] buffer.<p>
+When the function returns, the value of the global variable uip_len indicates whether the device driver should send out a packet or not. If uip_len is zero, no packet should be sent. If uip_len is non-zero, it contains the length of the outbound packet that is present in the uip_buf[] buffer.<p>
+This function expects an ARP packet with a prepended Ethernet header in the uip_buf[] buffer, and the length of the packet in the global variable uip_len. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a76">example-mainloop-with-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00204.html#l00278">278</a> of file <a class="el" href="a00204.html">uip_arp.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01543">uip_eth_addr::addr</a>, <a class="el" href="a00204.html#l00095">ARP_REPLY</a>, <a class="el" href="a00204.html#l00094">ARP_REQUEST</a>, <a class="el" href="a00201.html#l00226">BUF</a>, <a class="el" href="a00202.html#l01070">HTONS</a>, <a class="el" href="a00201.html#l00135">uip_ethaddr</a>, <a class="el" href="a00205.html#l00069">UIP_ETHTYPE_ARP</a>, <a class="el" href="a00201.html#l00110">uip_hostaddr</a>, <a class="el" href="a00202.html#l00911">uip_ipaddr_cmp</a>, and <a class="el" href="a00201.html#l00155">uip_len</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g54b27e45df15e10a0eb1a3e3a91417d2"></a><!-- doxytag: member="uip_arp.h::uip_arp_out" ref="g54b27e45df15e10a0eb1a3e3a91417d2" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_arp_out </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
+<p>
+This function should be called before sending out an IP packet. The function checks the destination IP address of the IP packet to see what Ethernet MAC address that should be used as a destination MAC address on the Ethernet.<p>
+If the destination IP address is in the local network (determined by logical ANDing of netmask and our IP address), the function checks the ARP cache to see if an entry for the destination IP address is found. If so, an Ethernet header is prepended and the function returns. If no ARP cache entry is found for the destination IP address, the packet in the uip_buf[] is replaced by an ARP request packet for the IP address. The IP packet is dropped and it is assumed that they higher level protocols (e.g., TCP) eventually will retransmit the dropped packet.<p>
+If the destination IP address is not on the local network, the IP address of the default router is used instead.<p>
+When the function returns, a packet is present in the uip_buf[] buffer, and the length of the packet is in the global variable uip_len. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a74">example-mainloop-with-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00204.html#l00354">354</a> of file <a class="el" href="a00204.html">uip_arp.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01543">uip_eth_addr::addr</a>, <a class="el" href="a00204.html#l00117">IPBUF</a>, <a class="el" href="a00206.html#l00349">UIP_ARPTAB_SIZE</a>, <a class="el" href="a00201.html#l00110">uip_draddr</a>, <a class="el" href="a00201.html#l00110">uip_hostaddr</a>, <a class="el" href="a00202.html#l00911">uip_ipaddr_cmp</a>, <a class="el" href="a00202.html#l00882">uip_ipaddr_copy</a>, and <a class="el" href="a00202.html#l00941">uip_ipaddr_maskcmp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g058a8e6025f67b021862281f1911fcef"></a><!-- doxytag: member="uip_arp.h::uip_arp_timer" ref="g058a8e6025f67b021862281f1911fcef" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_arp_timer </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Periodic ARP processing function.
+<p>
+This function performs periodic timer processing in the ARP module and should be called at regular intervals. The recommended interval is 10 seconds between the calls. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a83">example-mainloop-with-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00204.html#l00142">142</a> of file <a class="el" href="a00204.html">uip_arp.c</a>.
+<p>
+References <a class="el" href="a00206.html#l00358">UIP_ARP_MAXAGE</a>, and <a class="el" href="a00206.html#l00349">UIP_ARPTAB_SIZE</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00153.html b/third_party/uip-1.0/doc/html/a00153.html new file mode 100644 index 0000000..089f5ec --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00153.html @@ -0,0 +1,1059 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Configuration options for uIP</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Configuration options for uIP</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+uIP is configured using the per-project configuration file <a class="el" href="a00140.html">uipopt.h</a>.
+<p>
+This file contains all compile-time options for uIP and should be tweaked to match each specific project. The uIP distribution contains a documented example "uipopt.h" that can be copied and modified for each project.<p>
+<dl compact><dt><b>Note:</b></dt><dd>Most of the configuration options in the <a class="el" href="a00140.html">uipopt.h</a> should not be changed, but rather the per-project uip-conf.h file. </dd></dl>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">uip-conf.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An example uIP configuration file. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">uipopt.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Configuration options for uIP. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Project-specific configuration options</h2></td></tr>
+<tr><td colspan="2">uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3f6f1f6f98431f2d33ed30a30d2ccc35"></a><!-- doxytag: member="uipopt::UIP_CONF_MAX_CONNECTIONS" ref="g3f6f1f6f98431f2d33ed30a30d2ccc35" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3f6f1f6f98431f2d33ed30a30d2ccc35">UIP_CONF_MAX_CONNECTIONS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of TCP connections. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g974c9b4bbe6b07cc1d64ac4fad278030"></a><!-- doxytag: member="uipopt::UIP_CONF_MAX_LISTENPORTS" ref="g974c9b4bbe6b07cc1d64ac4fad278030" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g974c9b4bbe6b07cc1d64ac4fad278030">UIP_CONF_MAX_LISTENPORTS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of listening TCP ports. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcacc406c3bf7d0e00412e4c946252739"></a><!-- doxytag: member="uipopt::UIP_CONF_BUFFER_SIZE" ref="gcacc406c3bf7d0e00412e4c946252739" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gcacc406c3bf7d0e00412e4c946252739">UIP_CONF_BUFFER_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP buffer size. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca1240bba5dd57f8c7c27123c84a1f6d"></a><!-- doxytag: member="uipopt::UIP_CONF_BYTE_ORDER" ref="gca1240bba5dd57f8c7c27123c84a1f6d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gca1240bba5dd57f8c7c27123c84a1f6d">UIP_CONF_BYTE_ORDER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">CPU byte order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3001114ddadc1f2ada5cc9a780e866fc"></a><!-- doxytag: member="uipopt::UIP_CONF_LOGGING" ref="g3001114ddadc1f2ada5cc9a780e866fc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3001114ddadc1f2ada5cc9a780e866fc">UIP_CONF_LOGGING</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Logging on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g763f12007aad8cc0e483bf50f8a8d9b4"></a><!-- doxytag: member="uipopt::UIP_CONF_UDP" ref="g763f12007aad8cc0e483bf50f8a8d9b4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g763f12007aad8cc0e483bf50f8a8d9b4">UIP_CONF_UDP</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">UDP support on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9dd44616d41cef74d3beb51d8be5ecec"></a><!-- doxytag: member="uipopt::UIP_CONF_UDP_CHECKSUMS" ref="g9dd44616d41cef74d3beb51d8be5ecec" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g9dd44616d41cef74d3beb51d8be5ecec">UIP_CONF_UDP_CHECKSUMS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">UDP checksums on or off. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g529648ad3b0b327a43689b0f1779ff55"></a><!-- doxytag: member="uipopt::UIP_CONF_STATISTICS" ref="g529648ad3b0b327a43689b0f1779ff55" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g529648ad3b0b327a43689b0f1779ff55">UIP_CONF_STATISTICS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">uIP statistics on or off <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">8 bit datatype <a href="#g4caecabca98b43919dd11be1c0d4cd8e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">16 bit datatype <a href="#g77570ac4fcab86864fa1916e55676da2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Statistics datatype. <a href="#g727459e5c4f777543c81ffffa3df3f0c"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static configuration options</h2></td></tr>
+<tr><td colspan="2">These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.<p>
+All of these should be changed to suit your project. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62">UIP_FIXEDADDR</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if uIP should use a fixed IP address or not. <a href="#g51195ea7cd5aa387a87f9d3b23905b62"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g9069474ea570fd78c481aa164317dbaf">UIP_PINGADDRCONF</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Ping IP address asignment. <a href="#g9069474ea570fd78c481aa164317dbaf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893">UIP_FIXEDETHADDR</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not. <a href="#ge0f8cbeca9731af2171ffd37e79de893"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>IP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb61381673de27f31848c5396bf0b338e">UIP_TTL</a> 64</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The IP TTL (time to live) of IP packets sent by uIP. <a href="#gb61381673de27f31848c5396bf0b338e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee">UIP_REASSEMBLY</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Turn on support for IP packet reassembly. <a href="#gf963fdea2b75d27ef31e92d1d01359ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc3882366feda1cb759ccbfe98327a7db"></a><!-- doxytag: member="uipopt::UIP_REASS_MAXAGE" ref="gc3882366feda1cb759ccbfe98327a7db" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">UIP_REASS_MAXAGE</a> 40</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum time an IP fragment should wait in the reassembly buffer before it is dropped. <br></td></tr>
+<tr><td colspan="2"><br><h2>UDP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdcf372ff9748996f7c05e9822a615384"></a><!-- doxytag: member="uipopt::UIP_UDP" ref="gdcf372ff9748996f7c05e9822a615384" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gdcf372ff9748996f7c05e9822a615384">UIP_UDP</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Toggles wether UDP support should be compiled in or not. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g92f3344ec8ca46893163399c89fafed5">UIP_UDP_CHECKSUMS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Toggles if UDP checksums should be used or not. <a href="#g92f3344ec8ca46893163399c89fafed5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g196379ceb1219a99f4495e41ccc9bbfb"></a><!-- doxytag: member="uipopt::UIP_UDP_CONNS" ref="g196379ceb1219a99f4495e41ccc9bbfb" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum amount of concurrent UDP connections. <br></td></tr>
+<tr><td colspan="2"><br><h2>TCP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gac0de06236b02659460445de30776e00">UIP_ACTIVE_OPEN</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if support for opening connections from uIP should be compiled in. <a href="#gac0de06236b02659460445de30776e00"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of simultaneously open TCP connections. <a href="#gf5fe83be78b78b9e7d9e7f1e34ab1cc5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of simultaneously listening TCP ports. <a href="#g8f4ebd8ef6c0ea665ed351d87fec09fd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g51c1cd531ff0afb81620151f2248cd21">UIP_URGDATA</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if support for TCP urgent data notification should be compiled in. <a href="#g51c1cd531ff0afb81620151f2248cd21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a> 3</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The initial retransmission timeout counted in timer pulses. <a href="#g15de27b044603284f68db05a378235a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">UIP_MAXRTX</a> 8</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of times a segment should be retransmitted before the connection should be aborted. <a href="#g67cf1e0d2324c93f332c1f020c0fe8b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">UIP_MAXSYNRTX</a> 5</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful. <a href="#g24aa5bc36939cc9a0833e1df01478a7e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a> (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The TCP maximum segment size. <a href="#g4910467b83a639f06739c82cd362037e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">UIP_RECEIVE_WINDOW</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the advertised receiver's window. <a href="#g5b9dba2123705bce1ce95c3deca0bdad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g2bc3b489923793759526a3181eb667fa">UIP_TIME_WAIT_TIMEOUT</a> 120</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">How long a connection should stay in the TIME_WAIT state. <a href="#g2bc3b489923793759526a3181eb667fa"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>ARP configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the ARP table. <a href="#gb1455b27c06532a399cf06d2c1d6d08d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">UIP_ARP_MAXAGE</a> 120</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The maxium age of ARP table entries measured in 10ths of seconds. <a href="#g3090117ef3ff5775b77cb1960e442d07"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>General configuration options</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">UIP_BUFSIZE</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The size of the uIP packet buffer. <a href="#g3589822ecb9d9c4145209756396b8a6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6">UIP_STATISTICS</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if statistics support should be compiled in. <a href="#g5726142fec34f35fb9ea19e5a45975c6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g21664b7441cfa37d280228d23316d609">UIP_LOGGING</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determines if logging of certain events should be compiled in. <a href="#g21664b7441cfa37d280228d23316d609"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf">UIP_BROADCAST</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Broadcast support. <a href="#g156dd2891a57035e4afdc4c2bc0b0ebf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The link level header length. <a href="#ge6f4a2453dbd8bc60e6a82774552366a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uip_log</a> (char *msg)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print out a uIP log message. <a href="#gb58e1ceb7cb73ca2bcd73146b6c1b4e7"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>CPU architecture configuration</h2></td></tr>
+<tr><td colspan="2">The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run. <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g285a80366aed9428f64282b8d13c918b">UIP_BYTE_ORDER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The byte order of the CPU architecture on which uIP is to be run. <a href="#g285a80366aed9428f64282b8d13c918b"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Appication specific configurations</h2></td></tr>
+<tr><td colspan="2">An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.<p>
+uIP applications can store the application state within the <a class="el" href="a00088.html">uip_conn</a> structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.<p>
+The file containing the definitions must be included in the <a class="el" href="a00140.html">uipopt.h</a> file.<p>
+The following example illustrates how this can look. <div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> <a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a>(<span class="keywordtype">void</span>);
+<span class="preprocessor">#define UIP_APPCALL httpd_appcall</span>
+<span class="preprocessor"></span>
+<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> {
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a>;
+ <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>;
+ <span class="keywordtype">char</span> *dataptr;
+ <span class="keywordtype">char</span> *script;
+};
+<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>
+</pre></div> <br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g41aa744caa46913b3b3aedb2a4e78546"></a><!-- doxytag: member="uipopt::UIP_APPCALL" ref="g41aa744caa46913b3b3aedb2a4e78546" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a> smtp_appcall</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The name of the application function that uIP should call in response to TCP/IP events. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00085.html">smtp_state</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure. <a href="#g69646a81a922033c5281445a71f8ffed"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure. <a href="#ga92afb113e122f860392bfbd385f842e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb6e04358481bd2057524fb874cfa472b"></a><!-- doxytag: member="uipopt::UIP_LITTLE_ENDIAN" ref="gb6e04358481bd2057524fb874cfa472b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#gb6e04358481bd2057524fb874cfa472b">UIP_LITTLE_ENDIAN</a> 3412</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6836f92f3692f3a4429eb599db40cbae"></a><!-- doxytag: member="uipopt::UIP_BIG_ENDIAN" ref="g6836f92f3692f3a4429eb599db40cbae" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#g6836f92f3692f3a4429eb599db40cbae">UIP_BIG_ENDIAN</a> 1234</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="gac0de06236b02659460445de30776e00"></a><!-- doxytag: member="uipopt.h::UIP_ACTIVE_OPEN" ref="gac0de06236b02659460445de30776e00" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_ACTIVE_OPEN </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Determines if support for opening connections from uIP should be compiled in.
+<p>
+If the applications that are running on top of uIP for this project do not need to open outgoing TCP connections, this configration option can be turned off to reduce the code size of uIP.
+<p>
+Definition at line <a class="el" href="a00206.html#l00233">233</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g3090117ef3ff5775b77cb1960e442d07"></a><!-- doxytag: member="uipopt.h::UIP_ARP_MAXAGE" ref="g3090117ef3ff5775b77cb1960e442d07" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_ARP_MAXAGE 120 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The maxium age of ARP table entries measured in 10ths of seconds.
+<p>
+An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD default).
+<p>
+Definition at line <a class="el" href="a00206.html#l00358">358</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00142">uip_arp_timer()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb1455b27c06532a399cf06d2c1d6d08d"></a><!-- doxytag: member="uipopt.h::UIP_ARPTAB_SIZE" ref="gb1455b27c06532a399cf06d2c1d6d08d" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_ARPTAB_SIZE </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The size of the ARP table.
+<p>
+This option should be set to a larger value if this uIP node will have many connections from the local network.
+<p>
+Definition at line <a class="el" href="a00206.html#l00349">349</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00204.html#l00125">uip_arp_init()</a>, <a class="el" href="a00204.html#l00354">uip_arp_out()</a>, and <a class="el" href="a00204.html#l00142">uip_arp_timer()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g156dd2891a57035e4afdc4c2bc0b0ebf"></a><!-- doxytag: member="uipopt.h::UIP_BROADCAST" ref="g156dd2891a57035e4afdc4c2bc0b0ebf" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_BROADCAST </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Broadcast support.
+<p>
+This flag configures IP broadcast support. This is useful only together with UDP.
+<p>
+Definition at line <a class="el" href="a00206.html#l00423">423</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g3589822ecb9d9c4145209756396b8a6b"></a><!-- doxytag: member="uipopt.h::UIP_BUFSIZE" ref="g3589822ecb9d9c4145209756396b8a6b" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_BUFSIZE </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The size of the uIP packet buffer.
+<p>
+The uIP packet buffer should not be smaller than 60 bytes, and does not need to be larger than 1500 bytes. Lower size results in lower TCP throughput, larger size results in higher TCP throughput.
+<p>
+Definition at line <a class="el" href="a00206.html#l00379">379</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g285a80366aed9428f64282b8d13c918b"></a><!-- doxytag: member="uipopt.h::UIP_BYTE_ORDER" ref="g285a80366aed9428f64282b8d13c918b" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_BYTE_ORDER </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The byte order of the CPU architecture on which uIP is to be run.
+<p>
+This option can be either BIG_ENDIAN (Motorola byte order) or LITTLE_ENDIAN (Intel byte order).
+<p>
+Definition at line <a class="el" href="a00206.html#l00475">475</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf5fe83be78b78b9e7d9e7f1e34ab1cc5"></a><!-- doxytag: member="uipopt.h::UIP_CONNS" ref="gf5fe83be78b78b9e7d9e7f1e34ab1cc5" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_CONNS </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The maximum number of simultaneously open TCP connections.
+<p>
+Since the TCP connections are statically allocated, turning this configuration knob down results in less RAM used. Each TCP connection requires approximatly 30 bytes of memory. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a79">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a96">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00206.html#l00245">245</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00407">uip_connect()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g51195ea7cd5aa387a87f9d3b23905b62"></a><!-- doxytag: member="uipopt.h::UIP_FIXEDADDR" ref="g51195ea7cd5aa387a87f9d3b23905b62" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_FIXEDADDR </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Determines if uIP should use a fixed IP address or not.
+<p>
+If uIP should use a fixed IP address, the settings are set in the <a class="el" href="a00140.html">uipopt.h</a> file. If not, the macros <a class="el" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr()</a>, <a class="el" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">uip_setdraddr()</a> and <a class="el" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">uip_setnetmask()</a> should be used instead.
+<p>
+Definition at line <a class="el" href="a00206.html#l00097">97</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge0f8cbeca9731af2171ffd37e79de893"></a><!-- doxytag: member="uipopt.h::UIP_FIXEDETHADDR" ref="ge0f8cbeca9731af2171ffd37e79de893" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_FIXEDETHADDR </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not.
+<p>
+If this configuration option is 0, the macro <a class="el" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">uip_setethaddr()</a> can be used to specify the Ethernet address at run-time.
+<p>
+Definition at line <a class="el" href="a00206.html#l00127">127</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g8f4ebd8ef6c0ea665ed351d87fec09fd"></a><!-- doxytag: member="uipopt.h::UIP_LISTENPORTS" ref="g8f4ebd8ef6c0ea665ed351d87fec09fd" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_LISTENPORTS </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The maximum number of simultaneously listening TCP ports.
+<p>
+Each listening TCP port requires 2 bytes of memory.
+<p>
+Definition at line <a class="el" href="a00206.html#l00259">259</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00379">uip_init()</a>, <a class="el" href="a00201.html#l00529">uip_listen()</a>, and <a class="el" href="a00201.html#l00518">uip_unlisten()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge6f4a2453dbd8bc60e6a82774552366a"></a><!-- doxytag: member="uipopt.h::UIP_LLH_LEN" ref="ge6f4a2453dbd8bc60e6a82774552366a" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_LLH_LEN </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The link level header length.
+<p>
+This is the offset into the uip_buf where the IP header can be found. For Ethernet, this should be set to 14. For SLIP, this should be set to 0.
+<p>
+Definition at line <a class="el" href="a00206.html#l00448">448</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00201.html#l00682">uip_process()</a>, and <a class="el" href="a00199.html#l00049">uip_split_output()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g21664b7441cfa37d280228d23316d609"></a><!-- doxytag: member="uipopt.h::UIP_LOGGING" ref="g21664b7441cfa37d280228d23316d609" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_LOGGING </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Determines if logging of certain events should be compiled in.
+<p>
+This is useful mostly for debugging. The function <a class="el" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uip_log()</a> must be implemented to suit the architecture of the project, if logging is turned on.
+<p>
+Definition at line <a class="el" href="a00206.html#l00408">408</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g67cf1e0d2324c93f332c1f020c0fe8b3"></a><!-- doxytag: member="uipopt.h::UIP_MAXRTX" ref="g67cf1e0d2324c93f332c1f020c0fe8b3" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_MAXRTX 8 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The maximum number of times a segment should be retransmitted before the connection should be aborted.
+<p>
+This should not be changed.
+<p>
+Definition at line <a class="el" href="a00206.html#l00288">288</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g24aa5bc36939cc9a0833e1df01478a7e"></a><!-- doxytag: member="uipopt.h::UIP_MAXSYNRTX" ref="g24aa5bc36939cc9a0833e1df01478a7e" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_MAXSYNRTX 5 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
+<p>
+This should not need to be changed.
+<p>
+Definition at line <a class="el" href="a00206.html#l00297">297</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g9069474ea570fd78c481aa164317dbaf"></a><!-- doxytag: member="uipopt.h::UIP_PINGADDRCONF" ref="g9069474ea570fd78c481aa164317dbaf" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_PINGADDRCONF </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Ping IP address asignment.
+<p>
+uIP uses a "ping" packets for setting its own IP address if this option is set. If so, uIP will start with an empty IP address and the destination IP address of the first incoming "ping" (ICMP echo) packet will be used for setting the hosts IP address.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This works only if UIP_FIXEDADDR is 0. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00206.html#l00114">114</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf963fdea2b75d27ef31e92d1d01359ee"></a><!-- doxytag: member="uipopt.h::UIP_REASSEMBLY" ref="gf963fdea2b75d27ef31e92d1d01359ee" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_REASSEMBLY </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Turn on support for IP packet reassembly.
+<p>
+uIP supports reassembly of fragmented IP packets. This features requires an additonal amount of RAM to hold the reassembly buffer and the reassembly code size is approximately 700 bytes. The reassembly buffer is of the same size as the uip_buf buffer (configured by UIP_BUFSIZE).<p>
+<dl compact><dt><b>Note:</b></dt><dd>IP packet reassembly is not heavily tested. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00206.html#l00156">156</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g5b9dba2123705bce1ce95c3deca0bdad"></a><!-- doxytag: member="uipopt.h::UIP_RECEIVE_WINDOW" ref="g5b9dba2123705bce1ce95c3deca0bdad" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_RECEIVE_WINDOW </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The size of the advertised receiver's window.
+<p>
+Should be set low (i.e., to the size of the uip_buf buffer) is the application is slow to process incoming data, or high (32768 bytes) if the application processes data quickly.
+<p>
+Definition at line <a class="el" href="a00206.html#l00317">317</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g15de27b044603284f68db05a378235a7"></a><!-- doxytag: member="uipopt.h::UIP_RTO" ref="g15de27b044603284f68db05a378235a7" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_RTO 3 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The initial retransmission timeout counted in timer pulses.
+<p>
+This should not be changed.
+<p>
+Definition at line <a class="el" href="a00206.html#l00280">280</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g5726142fec34f35fb9ea19e5a45975c6"></a><!-- doxytag: member="uipopt.h::UIP_STATISTICS" ref="g5726142fec34f35fb9ea19e5a45975c6" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_STATISTICS </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Determines if statistics support should be compiled in.
+<p>
+The statistics is useful for debugging and to show the user.
+<p>
+Definition at line <a class="el" href="a00206.html#l00393">393</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g4910467b83a639f06739c82cd362037e"></a><!-- doxytag: member="uipopt.h::UIP_TCP_MSS" ref="g4910467b83a639f06739c82cd362037e" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The TCP maximum segment size.
+<p>
+This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.
+<p>
+Definition at line <a class="el" href="a00206.html#l00305">305</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2bc3b489923793759526a3181eb667fa"></a><!-- doxytag: member="uipopt.h::UIP_TIME_WAIT_TIMEOUT" ref="g2bc3b489923793759526a3181eb667fa" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_TIME_WAIT_TIMEOUT 120 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+How long a connection should stay in the TIME_WAIT state.
+<p>
+This configiration option has no real implication, and it should be left untouched.
+<p>
+Definition at line <a class="el" href="a00206.html#l00328">328</a> of file <a class="el" href="a00206.html">uipopt.h</a>.
+<p>
+Referenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb61381673de27f31848c5396bf0b338e"></a><!-- doxytag: member="uipopt.h::UIP_TTL" ref="gb61381673de27f31848c5396bf0b338e" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_TTL 64 </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The IP TTL (time to live) of IP packets sent by uIP.
+<p>
+This should normally not be changed.
+<p>
+Definition at line <a class="el" href="a00206.html#l00141">141</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g92f3344ec8ca46893163399c89fafed5"></a><!-- doxytag: member="uipopt.h::UIP_UDP_CHECKSUMS" ref="g92f3344ec8ca46893163399c89fafed5" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_UDP_CHECKSUMS </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Toggles if UDP checksums should be used or not.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>Support for UDP checksums is currently not included in uIP, so this option has no function. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00206.html#l00195">195</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g51c1cd531ff0afb81620151f2248cd21"></a><!-- doxytag: member="uipopt.h::UIP_URGDATA" ref="g51c1cd531ff0afb81620151f2248cd21" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define UIP_URGDATA </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Determines if support for TCP urgent data notification should be compiled in.
+<p>
+Urgent data (out-of-band data) is a rarely used TCP feature that very seldom would be required.
+<p>
+Definition at line <a class="el" href="a00206.html#l00273">273</a> of file <a class="el" href="a00206.html">uipopt.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g77570ac4fcab86864fa1916e55676da2"></a><!-- doxytag: member="uip-conf.h::u16_t" ref="g77570ac4fcab86864fa1916e55676da2" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">typedef uint16_t <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+16 bit datatype
+<p>
+This typedef defines the 16-bit type used throughout uIP. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a2">dhcpc.c</a>, <a class="el" href="a00049.html#a51">dhcpc.h</a>, <a class="el" href="a00046.html#a125">resolv.c</a>, <a class="el" href="a00047.html#a157">resolv.h</a>, <a class="el" href="a00038.html#a188">smtp.c</a>, <a class="el" href="a00039.html#a197">smtp.h</a>, <a class="el" href="a00044.html#a230">telnetd.c</a>, and <a class="el" href="a00050.html#a250">uip-conf.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00207.html#l00076">76</a> of file <a class="el" href="a00207.html">uip-conf.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g4caecabca98b43919dd11be1c0d4cd8e"></a><!-- doxytag: member="uip-conf.h::u8_t" ref="g4caecabca98b43919dd11be1c0d4cd8e" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">typedef uint8_t <a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+8 bit datatype
+<p>
+This typedef defines the 8-bit type used throughout uIP. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a1">dhcpc.c</a>, <a class="el" href="a00049.html#a53">dhcpc.h</a>, <a class="el" href="a00046.html#a126">resolv.c</a>, <a class="el" href="a00039.html#a200">smtp.h</a>, <a class="el" href="a00044.html#a227">telnetd.c</a>, <a class="el" href="a00045.html#a245">telnetd.h</a>, and <a class="el" href="a00050.html#a249">uip-conf.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00207.html#l00067">67</a> of file <a class="el" href="a00207.html">uip-conf.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g727459e5c4f777543c81ffffa3df3f0c"></a><!-- doxytag: member="uip-conf.h::uip_stats_t" ref="g727459e5c4f777543c81ffffa3df3f0c" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">typedef unsigned short <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Statistics datatype.
+<p>
+This typedef defines the dataype used for keeping statistics in uIP.
+<p>
+Definition at line <a class="el" href="a00207.html#l00086">86</a> of file <a class="el" href="a00207.html">uip-conf.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g69646a81a922033c5281445a71f8ffed"></a><!-- doxytag: member="smtp.h::uip_tcp_appstate_t" ref="g69646a81a922033c5281445a71f8ffed" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">typedef <a class="el" href="a00085.html">uip_tcp_appstate_t</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure.
+<p>
+This usually is typedef:ed to a struct holding application state information. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00039.html#a205">smtp.h</a>, <a class="el" href="a00045.html#a248">telnetd.h</a>, and <a class="el" href="a00041.html#a317">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00175.html#l00098">98</a> of file <a class="el" href="a00175.html">smtp.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ga92afb113e122f860392bfbd385f842e"></a><!-- doxytag: member="resolv.h::uip_udp_appstate_t" ref="ga92afb113e122f860392bfbd385f842e" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">typedef <a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The type of the application state that is to be stored in the <a class="el" href="a00088.html">uip_conn</a> structure.
+<p>
+This usually is typedef:ed to a struct holding application state information. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00049.html#a59">dhcpc.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00173.html#l00047">47</a> of file <a class="el" href="a00173.html">resolv.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gb58e1ceb7cb73ca2bcd73146b6c1b4e7"></a><!-- doxytag: member="uipopt.h::uip_log" ref="gb58e1ceb7cb73ca2bcd73146b6c1b4e7" args="(char *msg)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_log </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Print out a uIP log message.
+<p>
+This function must be implemented by the module that uses uIP, and is called by uIP whenever a log message is generated. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00154.html b/third_party/uip-1.0/doc/html/a00154.html new file mode 100644 index 0000000..3f54291 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00154.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uIP TCP throughput booster hack</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP TCP throughput booster hack<br>
+<small>
+[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time.
+<p>
+Because of the delayed ACK algorithm employed by most TCP receivers, uIP's limit on the amount of in-flight TCP segments seriously reduces the maximum achievable throughput for sending data from uIP.<p>
+The uip-split module is a hack which tries to remedy this situation. By splitting maximum sized outgoing TCP segments into two, the delayed ACK algorithm is not invoked at TCP receivers. This improves the throughput when sending data from uIP by orders of magnitude.<p>
+The uip-split module uses the uip-fw module (uIP IP packet forwarding) for sending packets. Therefore, the uip-fw module must be set up with the appropriate network interfaces for this module to work.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">uip-split.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Handle outgoing packets. <a href="#gb4b17aaf20d630f30919b19937b966a3"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gb4b17aaf20d630f30919b19937b966a3"></a><!-- doxytag: member="uip-split.h::uip_split_output" ref="gb4b17aaf20d630f30919b19937b966a3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void uip_split_output </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Handle outgoing packets.
+<p>
+This function inspects an outgoing packet in the uip_buf buffer and sends it out using the uip_fw_output() function. If the packet is a full-sized TCP segment it will be split into two segments and transmitted separately. This function should be called instead of the actual device driver output function, or the uip_fw_output() function.<p>
+The headers of the outgoing packet is assumed to be in the uip_buf buffer and the payload is assumed to be wherever uip_appdata points. The length of the outgoing packet is assumed to be in the uip_len variable.
+<p>
+Definition at line <a class="el" href="a00199.html#l00049">49</a> of file <a class="el" href="a00199.html">uip-split.c</a>.
+<p>
+References <a class="el" href="a00201.html#l00226">BUF</a>, <a class="el" href="a00201.html#l00192">uip_acc32</a>, <a class="el" href="a00201.html#l00249">uip_add32()</a>, <a class="el" href="a00201.html#l00143">uip_appdata</a>, <a class="el" href="a00206.html#l00379">UIP_BUFSIZE</a>, <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00202.html#l01518">UIP_IPH_LEN</a>, <a class="el" href="a00201.html#l00155">uip_len</a>, <a class="el" href="a00206.html#l00448">UIP_LLH_LEN</a>, <a class="el" href="a00202.html#l01510">UIP_PROTO_TCP</a>, <a class="el" href="a00201.html#l00364">uip_tcpchksum()</a>, and <a class="el" href="a00202.html#l01528">UIP_TCPIP_HLEN</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00155.html b/third_party/uip-1.0/doc/html/a00155.html new file mode 100644 index 0000000..cd75873 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00155.html @@ -0,0 +1,82 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Local continuations</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Local continuations<br>
+<small>
+[<a class="el" href="a00142.html">Protothreads</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+Local continuations form the basis for implementing protothreads.
+<p>
+A local continuation can be <em>set</em> in a specific function to capture the state of the function. After a local continuation has been set can be <em>resumed</em> in order to restore the state of the function at the point where the local continuation was set.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">lc.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Local continuations. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">lc-switch.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implementation of local continuations based on switch() statment. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">lc-addrlabels.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implementation of local continuations based on the "Labels as values" feature of gcc. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44311ecc30759ca38b4069182247bdae"></a><!-- doxytag: member="lc::__LC_SWTICH_H__" ref="g44311ecc30759ca38b4069182247bdae" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g44311ecc30759ca38b4069182247bdae">__LC_SWTICH_H__</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2c1bb4fa6d7a6ff951a41c73fc721109"></a><!-- doxytag: member="lc::LC_INIT" ref="g2c1bb4fa6d7a6ff951a41c73fc721109" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">LC_INIT</a>(s) s = 0;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ec8b8f4710dce1fa7fb87d3a31541ae"></a><!-- doxytag: member="lc::LC_RESUME" ref="g1ec8b8f4710dce1fa7fb87d3a31541ae" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">LC_RESUME</a>(s) switch(s) { case 0:</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd8eec328a4868d767f0c00c8d1c6cfc1"></a><!-- doxytag: member="lc::LC_SET" ref="gd8eec328a4868d767f0c00c8d1c6cfc1" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">LC_SET</a>(s) s = __LINE__; case __LINE__:</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca51ceb2f5d855dfde55bcedf8d3b92d"></a><!-- doxytag: member="lc::LC_END" ref="gca51ceb2f5d855dfde55bcedf8d3b92d" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">LC_END</a>(s) }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2c1bb4fa6d7a6ff951a41c73fc721109"></a><!-- doxytag: member="lc::LC_INIT" ref="g2c1bb4fa6d7a6ff951a41c73fc721109" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">LC_INIT</a>(s) s = NULL</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ec8b8f4710dce1fa7fb87d3a31541ae"></a><!-- doxytag: member="lc::LC_RESUME" ref="g1ec8b8f4710dce1fa7fb87d3a31541ae" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">LC_RESUME</a>(s)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd8eec328a4868d767f0c00c8d1c6cfc1"></a><!-- doxytag: member="lc::LC_SET" ref="gd8eec328a4868d767f0c00c8d1c6cfc1" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">LC_SET</a>(s) do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gca51ceb2f5d855dfde55bcedf8d3b92d"></a><!-- doxytag: member="lc::LC_END" ref="gca51ceb2f5d855dfde55bcedf8d3b92d" args="(s)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">LC_END</a>(s)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3983e0c026396d5c4506779d770007ba"></a><!-- doxytag: member="lc::lc_t" ref="g3983e0c026396d5c4506779d770007ba" args="" -->
+typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2bdc4b7b4038454a79f1b2a94a6d2a98"></a><!-- doxytag: member="lc::lc_t" ref="g2bdc4b7b4038454a79f1b2a94a6d2a98" args="" -->
+typedef void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#g2bdc4b7b4038454a79f1b2a94a6d2a98">lc_t</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00156.html b/third_party/uip-1.0/doc/html/a00156.html new file mode 100644 index 0000000..2eaafce --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00156.html @@ -0,0 +1,237 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Timer library</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Timer library</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The timer library provides functions for setting, resetting and restarting timers, and for checking if a timer has expired.
+<p>
+An application must "manually" check if its timers have expired; this is not done automatically.<p>
+A timer is declared as a <code>struct</code> <code>timer</code> and all access to the timer is made by a pointer to the declared timer.<p>
+<dl compact><dt><b>Note:</b></dt><dd>The timer library uses the <a class="el" href="a00157.html">Clock library</a> to measure time. Intervals should be specified in the format used by the clock library. </dd></dl>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">timer.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Timer library header file. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">timer.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Timer library implementation. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html">timer</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A timer. <a href="a00087.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a> (struct <a class="el" href="a00087.html">timer</a> *t, clock_time_t interval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set a timer. <a href="#g6614d96fdfcd95c95ec6e6f63071ff51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset the timer with the same interval. <a href="#gedaf3e48c2b04229b85455fb948468d6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Restart the timer from the current point in time. <a href="#gcb807bd57e5489b386b876af5c1f163a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a> (struct <a class="el" href="a00087.html">timer</a> *t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if a timer has expired. <a href="#g6d71dececfce707c668e6257aad5906e"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g6d71dececfce707c668e6257aad5906e"></a><!-- doxytag: member="timer.h::timer_expired" ref="g6d71dececfce707c668e6257aad5906e" args="(struct timer *t)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">int timer_expired </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00087.html">timer</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>t</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Check if a timer has expired.
+<p>
+This function tests if a timer has expired and returns true or false depending on its status.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>t</em> </td><td>A pointer to the timer</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Non-zero if the timer has expired, zero otherwise. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a26">dhcpc.c</a>, <a class="el" href="a00042.html#a77">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a94">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00195.html#l00121">121</a> of file <a class="el" href="a00195.html">timer.c</a>.
+<p>
+References <a class="el" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time()</a>, <a class="el" href="a00196.html#l00076">interval</a>, and <a class="el" href="a00196.html#l00075">start</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gedaf3e48c2b04229b85455fb948468d6"></a><!-- doxytag: member="timer.h::timer_reset" ref="gedaf3e48c2b04229b85455fb948468d6" args="(struct timer *t)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void timer_reset </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00087.html">timer</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>t</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Reset the timer with the same interval.
+<p>
+This function resets the timer with the same interval that was given to the <a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set()</a> function. The start point of the interval is the exact time that the timer last expired. Therefore, this function will cause the timer to be stable over time, unlike the timer_rester() function.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>t</em> </td><td>A pointer to the timer.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart()</a> </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00042.html#a78">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a95">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00195.html#l00084">84</a> of file <a class="el" href="a00195.html">timer.c</a>.
+<p>
+References <a class="el" href="a00196.html#l00076">interval</a>, and <a class="el" href="a00196.html#l00075">start</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gcb807bd57e5489b386b876af5c1f163a"></a><!-- doxytag: member="timer.h::timer_restart" ref="gcb807bd57e5489b386b876af5c1f163a" args="(struct timer *t)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void timer_restart </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00087.html">timer</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>t</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Restart the timer from the current point in time.
+<p>
+This function restarts a timer with the same interval that was given to the <a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set()</a> function. The timer will start at the current time.<p>
+<dl compact><dt><b>Note:</b></dt><dd>A periodic timer will drift if this function is used to reset it. For preioric timers, use the <a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset()</a> function instead.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>t</em> </td><td>A pointer to the timer.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset()</a> </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a00195.html#l00104">104</a> of file <a class="el" href="a00195.html">timer.c</a>.
+<p>
+References <a class="el" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time()</a>, and <a class="el" href="a00196.html#l00075">start</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g6614d96fdfcd95c95ec6e6f63071ff51"></a><!-- doxytag: member="timer.h::timer_set" ref="g6614d96fdfcd95c95ec6e6f63071ff51" args="(struct timer *t, clock_time_t interval)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void timer_set </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00087.html">timer</a> * </td>
+ <td class="mdname" nowrap> <em>t</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>clock_time_t </td>
+ <td class="mdname" nowrap> <em>interval</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set a timer.
+<p>
+This function is used to set a timer for a time sometime in the future. The function <a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired()</a> will evaluate to true after the timer has expired.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>t</em> </td><td>A pointer to the timer </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>interval</em> </td><td>The interval before the timer expires. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00048.html#a22">dhcpc.c</a>, <a class="el" href="a00042.html#a62">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a86">example-mainloop-without-arp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00195.html#l00064">64</a> of file <a class="el" href="a00195.html">timer.c</a>.
+<p>
+References <a class="el" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time()</a>, <a class="el" href="a00196.html#l00076">interval</a>, and <a class="el" href="a00196.html#l00075">start</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00157.html b/third_party/uip-1.0/doc/html/a00157.html new file mode 100644 index 0000000..ec1fb7c --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00157.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Clock interface</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Clock interface</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The clock interface is the interface between the <a class="el" href="a00156.html">timer library</a> and the platform specific clock functionality.
+<p>
+The clock interface must be implemented for each platform that uses the <a class="el" href="a00156.html">timer library</a>.<p>
+The clock interface does only one this: it measures time. The clock interface provides a macro, CLOCK_SECOND, which corresponds to one second of system time.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00156.html">Timer library</a> </dd></dl>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge3ced0551b26c9b99cb45a86f34d100a"></a><!-- doxytag: member="clock::CLOCK_SECOND" ref="ge3ced0551b26c9b99cb45a86f34d100a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A second, measured in system clock time. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#g78ab77b57cf2e00089f0a3a22508524c">clock_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the clock library. <a href="#g78ab77b57cf2e00089f0a3a22508524c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">clock_time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the current clock time. <a href="#ge5b7160f2e653725ba5e2024c3cb7bff"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g78ab77b57cf2e00089f0a3a22508524c"></a><!-- doxytag: member="clock.h::clock_init" ref="g78ab77b57cf2e00089f0a3a22508524c" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void clock_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize the clock library.
+<p>
+This function initializes the clock library and should be called from the main() function of the system. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge5b7160f2e653725ba5e2024c3cb7bff"></a><!-- doxytag: member="clock.h::clock_time" ref="ge5b7160f2e653725ba5e2024c3cb7bff" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">clock_time_t clock_time </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get the current clock time.
+<p>
+This function returns the current system clock time.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The current clock time, measured in system ticks. </dd></dl>
+
+<p>
+Referenced by <a class="el" href="a00195.html#l00121">timer_expired()</a>, <a class="el" href="a00195.html#l00104">timer_restart()</a>, and <a class="el" href="a00195.html#l00064">timer_set()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00158.html b/third_party/uip-1.0/doc/html/a00158.html new file mode 100644 index 0000000..9b415f2 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00158.html @@ -0,0 +1,693 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Protosockets library</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Protosockets library</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The protosocket library provides an interface to the uIP stack that is similar to the traditional BSD socket interface.
+<p>
+Unlike programs written for the ordinary uIP event-driven interface, programs written with the protosocket library are executed in a sequential fashion and does not have to be implemented as explicit state machines.<p>
+Protosockets only work with TCP connections.<p>
+The protosocket library uses <a class="el" href="a00142.html">Protothreads</a> protothreads to provide sequential control flow. This makes the protosockets lightweight in terms of memory, but also means that protosockets inherits the functional limitations of protothreads. Each protosocket lives only within a single function. Automatic variables (stack variables) are not retained across a protosocket library function call.<p>
+<dl compact><dt><b>Note:</b></dt><dd>Because the protosocket library uses protothreads, local variables will not always be saved across a call to a protosocket library function. It is therefore advised that local variables are used with extreme care.</dd></dl>
+The protosocket library provides functions for sending data without having to deal with retransmissions and acknowledgements, as well as functions for reading data without having to deal with data being split across more than one TCP segment.<p>
+Because each protosocket runs as a protothread, the protosocket has to be started with a call to <a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN()</a> at the start of the function in which the protosocket is used. Similarly, the protosocket protothread can be terminated by a call to <a class="el" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT()</a>.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">psock.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Protosocket library header file. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">psock_buf</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">psock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The representation of a protosocket. <a href="a00082.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(<a class="el" href="a00082.html">psock</a>, buffer, buffersize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a protosocket. <a href="#g26ae707402e494f3895a9f012a93ea29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Start the protosocket protothread in a function. <a href="#g84901a5aa60040e96d272a69977edd22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">PSOCK_SEND</a>(<a class="el" href="a00082.html">psock</a>, data, datalen)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send data. <a href="#g70d236d1cf34b4e21836edda60247b70"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(<a class="el" href="a00082.html">psock</a>, str)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send a null-terminated string. <a href="#gb0ad55aa96dd1d200cd0fc5a99f6a4f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(<a class="el" href="a00082.html">psock</a>, generator, arg)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate data with a function and send it. <a href="#g10d9a9201cba1a6db623284c475c6cea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close a protosocket. <a href="#g5d56800f82bfc7bbf53bb4a659589812"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gd895ab98c54d9966ff554aa873151751">PSOCK_READBUF</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read data until the buffer is full. <a href="#gd895ab98c54d9966ff554aa873151751"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(<a class="el" href="a00082.html">psock</a>, c)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read data up to a specified character. <a href="#gb5d9c0becf7cb32d0aaef466839dd92e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">PSOCK_DATALEN</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The length of the data that was previously read. <a href="#g4ab2de595d36e9e55dd61f6ecd139162"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exit the protosocket's protothread. <a href="#gfa11b2a1faf395ae2a6626e01c482d5d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">PSOCK_CLOSE_EXIT</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close a protosocket and exit the protosocket's protothread. <a href="#gc7cc1dba1819f7fcdaa9ff9eed5a08f4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare the end of a protosocket's protothread. <a href="#g4a264bb64ae706d53f572b1d9e4037a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">PSOCK_NEWDATA</a>(<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if new data has arrived on a protosocket. <a href="#g55ce98ea4d6f22e9d5068b904d4d2447"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">PSOCK_WAIT_UNTIL</a>(<a class="el" href="a00082.html">psock</a>, condition)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait until a condition is true. <a href="#g2ebfe5c8a7f3173714efdf2df74fc392"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga87ff36af81990e6ffe20d76d5e4606f"></a><!-- doxytag: member="psock::PSOCK_WAIT_THREAD" ref="ga87ff36af81990e6ffe20d76d5e4606f" args="(psock, condition)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">PSOCK_WAIT_THREAD</a>(<a class="el" href="a00082.html">psock</a>, condition) PT_WAIT_THREAD(&((<a class="el" href="a00082.html">psock</a>)-><a class="el" href="a00084.html">pt</a>), (condition))</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3178402dd725776415bf9745e7bf92ba"></a><!-- doxytag: member="psock::psock_datalen" ref="g3178402dd725776415bf9745e7bf92ba" args="(struct psock *psock)" -->
+<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a> (struct <a class="el" href="a00082.html">psock</a> *<a class="el" href="a00082.html">psock</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3b19f65e48079d8105be2a99b5b4b2ae"></a><!-- doxytag: member="psock::psock_newdata" ref="g3b19f65e48079d8105be2a99b5b4b2ae" args="(struct psock *s)" -->
+char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a> (struct <a class="el" href="a00082.html">psock</a> *s)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g84901a5aa60040e96d272a69977edd22"></a><!-- doxytag: member="psock.h::PSOCK_BEGIN" ref="g84901a5aa60040e96d272a69977edd22" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_BEGIN </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Start the protosocket protothread in a function.
+<p>
+This macro starts the protothread associated with the protosocket and must come before other protosocket calls in the function it is used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket to be started. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a111">hello-world.c</a>, and <a class="el" href="a00038.html#a166">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00158">158</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g5d56800f82bfc7bbf53bb4a659589812"></a><!-- doxytag: member="psock.h::PSOCK_CLOSE" ref="g5d56800f82bfc7bbf53bb4a659589812" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_CLOSE </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Close a protosocket.
+<p>
+This macro closes a protosocket and can only be called from within the protothread in which the protosocket lives.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket that is to be closed. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a115">hello-world.c</a>, and <a class="el" href="a00038.html#a169">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00235">235</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gc7cc1dba1819f7fcdaa9ff9eed5a08f4"></a><!-- doxytag: member="psock.h::PSOCK_CLOSE_EXIT" ref="gc7cc1dba1819f7fcdaa9ff9eed5a08f4" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_CLOSE_EXIT </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Close a protosocket and exit the protosocket's protothread.
+<p>
+This macro closes a protosocket and exits the protosocket's protothread.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00308">308</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g4ab2de595d36e9e55dd61f6ecd139162"></a><!-- doxytag: member="psock.h::PSOCK_DATALEN" ref="g4ab2de595d36e9e55dd61f6ecd139162" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_DATALEN </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The length of the data that was previously read.
+<p>
+This macro returns the length of the data that was previously read using <a class="el" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO()</a> or PSOCK_READ().<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket holding the data. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00281">281</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g4a264bb64ae706d53f572b1d9e4037a2"></a><!-- doxytag: member="psock.h::PSOCK_END" ref="g4a264bb64ae706d53f572b1d9e4037a2" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_END </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Declare the end of a protosocket's protothread.
+<p>
+This macro is used for declaring that the protosocket's protothread ends. It must always be used together with a matching <a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN()</a> macro.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a116">hello-world.c</a>, and <a class="el" href="a00038.html#a182">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00325">325</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gfa11b2a1faf395ae2a6626e01c482d5d"></a><!-- doxytag: member="psock.h::PSOCK_EXIT" ref="gfa11b2a1faf395ae2a6626e01c482d5d" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_EXIT </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Exit the protosocket's protothread.
+<p>
+This macro terminates the protothread of the protosocket and should almost always be used in conjunction with <a class="el" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE()</a>.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">PSOCK_CLOSE_EXIT()</a></dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a171">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00297">297</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g10d9a9201cba1a6db623284c475c6cea"></a><!-- doxytag: member="psock.h::PSOCK_GENERATOR_SEND" ref="g10d9a9201cba1a6db623284c475c6cea" args="(psock, generator, arg)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_GENERATOR_SEND </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>generator, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>arg </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Generate data with a function and send it.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>Pointer to the protosocket. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>generator</em> </td><td>Pointer to the generator function </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arg</em> </td><td>Argument to the generator function</td></tr>
+ </table>
+</dl>
+This function generates data and sends it over the protosocket. This can be used to dynamically generate data for a transmission, instead of generating the data in a buffer beforehand. This function reduces the need for buffer memory. The generator function is implemented by the application, and a pointer to the function is given as an argument with the call to <a class="el" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND()</a>.<p>
+The generator function should place the generated data directly in the uip_appdata buffer, and return the length of the generated data. The generator function is called by the protosocket layer when the data first is sent, and once for every retransmission that is needed.
+<p>
+Definition at line <a class="el" href="a00193.html#l00219">219</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g26ae707402e494f3895a9f012a93ea29"></a><!-- doxytag: member="psock.h::PSOCK_INIT" ref="g26ae707402e494f3895a9f012a93ea29" args="(psock, buffer, buffersize)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_INIT </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>buffer, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>buffersize </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize a protosocket.
+<p>
+This macro initializes a protosocket and must be called before the protosocket is used. The initialization also specifies the input buffer for the protosocket.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket to be initialized</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>buffer</em> </td><td>(char *) A pointer to the input buffer for the protosocket.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>buffersize</em> </td><td>(unsigned int) The size of the input buffer. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a108">hello-world.c</a>, and <a class="el" href="a00038.html#a193">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00144">144</a> of file <a class="el" href="a00193.html">psock.h</a>.
+<p>
+Referenced by <a class="el" href="a00170.html#l00055">hello_world_appcall()</a>, <a class="el" href="a00184.html#l00298">httpd_appcall()</a>, and <a class="el" href="a00174.html#l00233">smtp_send()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g55ce98ea4d6f22e9d5068b904d4d2447"></a><!-- doxytag: member="psock.h::PSOCK_NEWDATA" ref="g55ce98ea4d6f22e9d5068b904d4d2447" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_NEWDATA </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Check if new data has arrived on a protosocket.
+<p>
+This macro is used in conjunction with the <a class="el" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">PSOCK_WAIT_UNTIL()</a> macro to check if data has arrived on a protosocket.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00339">339</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gd895ab98c54d9966ff554aa873151751"></a><!-- doxytag: member="psock.h::PSOCK_READBUF" ref="gd895ab98c54d9966ff554aa873151751" args="(psock)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_READBUF </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a> </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Read data until the buffer is full.
+<p>
+This macro will block waiting for data and read the data into the input buffer specified with the call to <a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT()</a>. Data is read until the buffer is full..<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket from which data should be read. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00250">250</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb5d9c0becf7cb32d0aaef466839dd92e"></a><!-- doxytag: member="psock.h::PSOCK_READTO" ref="gb5d9c0becf7cb32d0aaef466839dd92e" args="(psock, c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_READTO </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>c </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Read data up to a specified character.
+<p>
+This macro will block waiting for data and read the data into the input buffer specified with the call to <a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT()</a>. Data is only read until the specifieed character appears in the data stream.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket from which data should be read.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>c</em> </td><td>(char) The character at which to stop reading. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a113">hello-world.c</a>, and <a class="el" href="a00038.html#a167">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00268">268</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g70d236d1cf34b4e21836edda60247b70"></a><!-- doxytag: member="psock.h::PSOCK_SEND" ref="g70d236d1cf34b4e21836edda60247b70" args="(psock, data, datalen)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_SEND </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>data, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>datalen </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send data.
+<p>
+This macro sends data over a protosocket. The protosocket protothread blocks until all data has been sent and is known to have been received by the remote end of the TCP connection.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket over which data is to be sent.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>(char *) A pointer to the data that is to be sent.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>datalen</em> </td><td>(unsigned int) The length of the data that is to be sent. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a178">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00178">178</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb0ad55aa96dd1d200cd0fc5a99f6a4f7"></a><!-- doxytag: member="psock.h::PSOCK_SEND_STR" ref="gb0ad55aa96dd1d200cd0fc5a99f6a4f7" args="(psock, str)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_SEND_STR </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>str </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send a null-terminated string.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>Pointer to the protosocket. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>The string to be sent.</td></tr>
+ </table>
+</dl>
+This function sends a null-terminated string over the protosocket. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00036.html#a112">hello-world.c</a>, and <a class="el" href="a00038.html#a172">smtp.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00193.html#l00191">191</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2ebfe5c8a7f3173714efdf2df74fc392"></a><!-- doxytag: member="psock.h::PSOCK_WAIT_UNTIL" ref="g2ebfe5c8a7f3173714efdf2df74fc392" args="(psock, condition)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define PSOCK_WAIT_UNTIL </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00082.html">psock</a>, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>condition </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Wait until a condition is true.
+<p>
+This macro blocks the protothread until the specified condition is true. The macro <a class="el" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">PSOCK_NEWDATA()</a> can be used to check if new data arrives when the protosocket is waiting.<p>
+Typically, this macro is used as follows:<p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(thread(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s, <span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t))
+ {
+ <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(s);
+
+ <a class="code" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">PSOCK_WAIT_UNTIL</a>(s, PSOCK_NEWADATA(s) || <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(t));
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">PSOCK_NEWDATA</a>(s)) {
+ <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(s, <span class="charliteral">'\n'</span>);
+ } <span class="keywordflow">else</span> {
+ handle_timed_out(s);
+ }
+
+ <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(s);
+ }
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>psock</em> </td><td>(struct psock *) A pointer to the protosocket. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>condition</em> </td><td>The condition to wait for. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00193.html#l00372">372</a> of file <a class="el" href="a00193.html">psock.h</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00159.html b/third_party/uip-1.0/doc/html/a00159.html new file mode 100644 index 0000000..d91b51f --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00159.html @@ -0,0 +1,251 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Memory block management functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Memory block management functions</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The memory block allocation routines provide a simple yet powerful set of functions for managing a set of memory blocks of fixed size.
+<p>
+A set of memory blocks is statically declared with the <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a> macro. Memory blocks are allocated from the declared memory by the <a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc()</a> function, and are deallocated with the <a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free()</a> function.<p>
+<dl compact><dt><b>Note:</b></dt><dd>Because of namespace clashes only one <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a> can be declared per C module, and the name scope of a <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a> memory block is local to each C module.</dd></dl>
+The following example shows how to declare and use a memory block called "cmem" which has 8 chunks of memory with each memory chunk being 20 bytes large.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">memb.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory block allocation routines. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">memb.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory block allocation routines. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html">memb_blocks</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga680bc3f3a1a8a6aec20fe729d138cb8"></a><!-- doxytag: member="memb::MEMB_CONCAT2" ref="ga680bc3f3a1a8a6aec20fe729d138cb8" args="(s1, s2)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#ga680bc3f3a1a8a6aec20fe729d138cb8">MEMB_CONCAT2</a>(s1, s2) s1##s2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g720ac440c7b24bdd07c53ba146e36fb2"></a><!-- doxytag: member="memb::MEMB_CONCAT" ref="g720ac440c7b24bdd07c53ba146e36fb2" args="(s1, s2)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(s1, s2) MEMB_CONCAT2(s1, s2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB</a>(name, structure, num)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Declare a memory block. <a href="#gf31774d02a69fd3f1c2b282454438cba"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize a memory block that was declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="#gd58a6c7e62ae59bf7a016ded12ca2910"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a memory block from a block of memory declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="#gfe5e93119035e14cc485760a176249ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a> (struct <a class="el" href="a00081.html">memb_blocks</a> *m, void *ptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate a memory block from a memory block previously declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. <a href="#gceb952d27de8125d5146ac0bee325b8f"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="gf31774d02a69fd3f1c2b282454438cba"></a><!-- doxytag: member="memb.h::MEMB" ref="gf31774d02a69fd3f1c2b282454438cba" args="(name, structure, num)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define MEMB </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">name, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>structure, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>num </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(name,_memb_count)[num]; \
+ <span class="keyword">static</span> structure <a class="code" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(name,_memb_mem)[num]; \
+ <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00081.html">memb_blocks</a> name = {<span class="keyword">sizeof</span>(structure), <a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a>, \
+ <a class="code" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(name,_memb_count), \
+ (<span class="keywordtype">void</span> *)<a class="code" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">MEMB_CONCAT</a>(name,_memb_mem)}
+</pre></div>Declare a memory block.
+<p>
+This macro is used to staticall declare a block of memory that can be used by the block allocation functions. The macro statically declares a C array with a size that matches the specified number of blocks and their individual sizes.<p>
+Example: <div class="fragment"><pre class="fragment"><a class="code" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB</a>(connections, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> connection), 16);
+</pre></div><p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the memory block (later used with <a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init()</a>, <a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc()</a> and <a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free()</a>).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>size</em> </td><td>The size of each memory chunk, in bytes.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>num</em> </td><td>The total number of memory chunks in the block. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a206">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00187.html#l00098">98</a> of file <a class="el" href="a00187.html">memb.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gfe5e93119035e14cc485760a176249ba"></a><!-- doxytag: member="memb.c::memb_alloc" ref="gfe5e93119035e14cc485760a176249ba" args="(struct memb_blocks *m)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void * memb_alloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00081.html">memb_blocks</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>m</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Allocate a memory block from a block of memory declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>m</em> </td><td>A memory block previosly declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a208">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00186.html#l00059">59</a> of file <a class="el" href="a00186.html">memb.c</a>.
+<p>
+References <a class="el" href="a00187.html#l00108">memb_blocks::count</a>, <a class="el" href="a00187.html#l00109">memb_blocks::mem</a>, <a class="el" href="a00187.html#l00107">memb_blocks::num</a>, and <a class="el" href="a00187.html#l00106">memb_blocks::size</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gceb952d27de8125d5146ac0bee325b8f"></a><!-- doxytag: member="memb.c::memb_free" ref="gceb952d27de8125d5146ac0bee325b8f" args="(struct memb_blocks *m, void *ptr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">char memb_free </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00081.html">memb_blocks</a> * </td>
+ <td class="mdname" nowrap> <em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>void * </td>
+ <td class="mdname" nowrap> <em>ptr</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Deallocate a memory block from a memory block previously declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>m</em> </td><td>m A memory block previosly declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ptr</em> </td><td>A pointer to the memory block that is to be deallocated.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The new reference count for the memory block (should be 0 if successfully deallocated) or -1 if the pointer "ptr" did not point to a legal memory block. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a209">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00186.html#l00079">79</a> of file <a class="el" href="a00186.html">memb.c</a>.
+<p>
+References <a class="el" href="a00187.html#l00108">memb_blocks::count</a>, <a class="el" href="a00187.html#l00109">memb_blocks::mem</a>, and <a class="el" href="a00187.html#l00106">memb_blocks::size</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gd58a6c7e62ae59bf7a016ded12ca2910"></a><!-- doxytag: member="memb.c::memb_init" ref="gd58a6c7e62ae59bf7a016ded12ca2910" args="(struct memb_blocks *m)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void memb_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">struct <a class="el" href="a00081.html">memb_blocks</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>m</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize a memory block that was declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>m</em> </td><td>A memory block previosly declared with <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB()</a>. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00044.html#a220">telnetd.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00186.html#l00052">52</a> of file <a class="el" href="a00186.html">memb.c</a>.
+<p>
+References <a class="el" href="a00187.html#l00108">memb_blocks::count</a>, <a class="el" href="a00187.html#l00109">memb_blocks::mem</a>, <a class="el" href="a00187.html#l00107">memb_blocks::num</a>, and <a class="el" href="a00187.html#l00106">memb_blocks::size</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00160.html b/third_party/uip-1.0/doc/html/a00160.html new file mode 100644 index 0000000..1ac8e26 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00160.html @@ -0,0 +1,284 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: DNS resolver</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>DNS resolver<br>
+<small>
+[<a class="el" href="a00143.html">Applications</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address.
+<p>
+It maintains a list of resolved hostnames that can be queried with the <a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup()</a> function. New hostnames can be resolved using the <a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query()</a> function.<p>
+When a hostname has been resolved (or found to be non-existant), the resolver code calls a callback function called <a class="el" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found()</a> that must be implemented by the module that uses the resolver.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html">resolv.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">DNS resolver code header file. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">resolv.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">DNS host name to IP address resolver. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3d768e989e308144190ae1a5ddfa9726"></a><!-- doxytag: member="resolv::UIP_UDP_APPCALL" ref="g3d768e989e308144190ae1a5ddfa9726" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">UIP_UDP_APPCALL</a> resolv_appcall</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g070d2ce7b6bb7e5c05602aa8c308d0c4"></a><!-- doxytag: member="resolv::NULL" ref="g070d2ce7b6bb7e5c05602aa8c308d0c4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> (void *)0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gecf13b8dc783db2202ca5c34fe117fc3"></a><!-- doxytag: member="resolv::MAX_RETRIES" ref="gecf13b8dc783db2202ca5c34fe117fc3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">MAX_RETRIES</a> 8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g221d37ccde7e3fd0dd2c2eb0a6b15493"></a><!-- doxytag: member="resolv::RESOLV_ENTRIES" ref="g221d37ccde7e3fd0dd2c2eb0a6b15493" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a> 4</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7c5359305008e9183b18d6ab75f568bf"></a><!-- doxytag: member="resolv::resolv_appcall" ref="g7c5359305008e9183b18d6ab75f568bf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a> (char *name, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *ipaddr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function which is called when a hostname is found. <a href="#g6d9751d534453425c7a5a215d1d4414c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Configure which DNS server to use for queries. <a href="#gdf916e0c752f5cda70d0bddb2be422ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the currently configured DNS server. <a href="#g3191066cf8f76bd00b6843b77c37068f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb50f78bbf36d912d69f6c1685d0b40e3"></a><!-- doxytag: member="resolv::resolv_init" ref="gb50f78bbf36d912d69f6c1685d0b40e3" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initalize the resolver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Look up a hostname in the array of known hostnames. <a href="#g66d19181ad5fe8b8f7c84d1f1d46a2ec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a> (char *name)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queues a name so that a question for the name will be sent out. <a href="#ge4dcbbe6c641d2e3b8537b479df5fc99"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gdf916e0c752f5cda70d0bddb2be422ba"></a><!-- doxytag: member="resolv.h::resolv_conf" ref="gdf916e0c752f5cda70d0bddb2be422ba" args="(u16_t *dnsserver)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void resolv_conf </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td>
+ <td class="mdname1" valign="top" nowrap> <em>dnsserver</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Configure which DNS server to use for queries.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>dnsserver</em> </td><td>A pointer to a 4-byte representation of the IP address of the DNS server to be configured. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a151">resolv.c</a>, and <a class="el" href="a00047.html#a158">resolv.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00172.html#l00438">438</a> of file <a class="el" href="a00172.html">resolv.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01070">HTONS</a>, <a class="el" href="a00172.html#l00069">NULL</a>, <a class="el" href="a00201.html#l00473">uip_udp_new()</a>, and <a class="el" href="a00202.html#l00775">uip_udp_remove</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g6d9751d534453425c7a5a215d1d4414c"></a><!-- doxytag: member="resolv.h::resolv_found" ref="g6d9751d534453425c7a5a215d1d4414c" args="(char *name, u16_t *ipaddr)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void resolv_found </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td>
+ <td class="mdname" nowrap> <em>ipaddr</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function which is called when a hostname is found.
+<p>
+This function must be implemented by the module that uses the DNS resolver. It is called when a hostname is found, or when a hostname was not found.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>A pointer to the name that was looked up.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ipaddr</em> </td><td>A pointer to a 4-byte array containing the IP address of the hostname, or NULL if the hostname could not be found. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a135">resolv.c</a>, and <a class="el" href="a00047.html#a156">resolv.h</a>.</dl> </td>
+ </tr>
+</table>
+<a class="anchor" name="g3191066cf8f76bd00b6843b77c37068f"></a><!-- doxytag: member="resolv.h::resolv_getserver" ref="g3191066cf8f76bd00b6843b77c37068f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * resolv_getserver </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Obtain the currently configured DNS server.
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to a 4-byte representation of the IP address of the currently configured DNS server or NULL if no DNS server has been configured. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a149">resolv.c</a>, and <a class="el" href="a00047.html#a159">resolv.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00172.html#l00422">422</a> of file <a class="el" href="a00172.html">resolv.c</a>.
+<p>
+References <a class="el" href="a00172.html#l00069">NULL</a>, and <a class="el" href="a00202.html#l01211">uip_udp_conn::ripaddr</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g66d19181ad5fe8b8f7c84d1f1d46a2ec"></a><!-- doxytag: member="resolv.h::resolv_lookup" ref="g66d19181ad5fe8b8f7c84d1f1d46a2ec" args="(char *name)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * resolv_lookup </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>name</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Look up a hostname in the array of known hostnames.
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function only looks in the internal array of known hostnames, it does not send out a query for the hostname if none was found. The function <a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query()</a> can be used to send a query for a hostname.</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to a 4-byte representation of the hostname's IP address, or NULL if the hostname was not found in the array of hostnames. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a148">resolv.c</a>, <a class="el" href="a00047.html#a161">resolv.h</a>, and <a class="el" href="a00040.html#a271">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00172.html#l00396">396</a> of file <a class="el" href="a00172.html">resolv.c</a>.
+<p>
+References <a class="el" href="a00172.html#l00123">RESOLV_ENTRIES</a>, and <a class="el" href="a00172.html#l00111">STATE_DONE</a>.
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="ge4dcbbe6c641d2e3b8537b479df5fc99"></a><!-- doxytag: member="resolv.h::resolv_query" ref="ge4dcbbe6c641d2e3b8537b479df5fc99" args="(char *name)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void resolv_query </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>name</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Queues a name so that a question for the name will be sent out.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The hostname that is to be queried. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00046.html#a146">resolv.c</a>, <a class="el" href="a00047.html#a162">resolv.h</a>, and <a class="el" href="a00040.html#a306">webclient.c</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00172.html#l00350">350</a> of file <a class="el" href="a00172.html">resolv.c</a>.
+<p>
+References <a class="el" href="a00172.html#l00123">RESOLV_ENTRIES</a>, and <a class="el" href="a00172.html#l00108">STATE_UNUSED</a>.
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00161.html b/third_party/uip-1.0/doc/html/a00161.html new file mode 100644 index 0000000..74d2892 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00161.html @@ -0,0 +1,257 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: SMTP E-mail sender</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>SMTP E-mail sender<br>
+<small>
+[<a class="el" href="a00143.html">Applications</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet.
+<p>
+This simple example implementation is intended as an example of how to implement protocols in uIP, and is able to send out e-mail but has not been extensively tested.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00105.html">smtp.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SMTP header file. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html">smtp.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SMTP example implementation. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">smtp_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g029256bc17a12e1e86781887e11c0c7d"></a><!-- doxytag: member="smtp::SMTP_ERR_OK" ref="g029256bc17a12e1e86781887e11c0c7d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">SMTP_ERR_OK</a> 0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Error number that signifies a non-error condition. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcff75c8c930abd6ff168e85373a4eb92"></a><!-- doxytag: member="smtp::SMTP_SEND" ref="gcff75c8c930abd6ff168e85373a4eb92" args="(to, cc, from, subject, msg)" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gcff75c8c930abd6ff168e85373a4eb92">SMTP_SEND</a>(to, cc, from, subject, msg) smtp_send(to, cc, from, subject, msg, strlen(msg))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="smtp::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6cda47c85ce1b58b501b44ac9cccc50e"></a><!-- doxytag: member="smtp::ISO_cr" ref="g6cda47c85ce1b58b501b44ac9cccc50e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a> 0x0d</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf7dd2757d1e766f65b01ba7c91c660a0"></a><!-- doxytag: member="smtp::ISO_period" ref="gf7dd2757d1e766f65b01ba7c91c660a0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a> 0x2e</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g34b924954ba5707d536df28d71a80d39"></a><!-- doxytag: member="smtp::ISO_2" ref="g34b924954ba5707d536df28d71a80d39" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a> 0x32</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9e97c58fe35f750ad192774be9408ac8"></a><!-- doxytag: member="smtp::ISO_3" ref="g9e97c58fe35f750ad192774be9408ac8" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">ISO_3</a> 0x33</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28cf9765e4b57451af559ab988ad7160"></a><!-- doxytag: member="smtp::ISO_4" ref="g28cf9765e4b57451af559ab988ad7160" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g28cf9765e4b57451af559ab988ad7160">ISO_4</a> 0x34</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g17ccd786400fd08b941e11046df1668f"></a><!-- doxytag: member="smtp::ISO_5" ref="g17ccd786400fd08b941e11046df1668f" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g17ccd786400fd08b941e11046df1668f">ISO_5</a> 0x35</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a> (unsigned char error)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called when an e-mail transmission is done. <a href="#gb1fc692a2700b7a51517724364683f67"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g64807ba7c221ddf735572d05021539f2"></a><!-- doxytag: member="smtp::smtp_init" ref="g64807ba7c221ddf735572d05021539f2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbc331f73107958428bf1c392ba19b6f4"></a><!-- doxytag: member="smtp::smtp_appcall" ref="gbc331f73107958428bf1c392ba19b6f4" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#g37e3103b9591790d484a450525739661">smtp_configure</a> (char *lhostname, void *server)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specificy an SMTP server and hostname. <a href="#g37e3103b9591790d484a450525739661"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#gf0349a8481565e80f55a751e2b408d6d">smtp_send</a> (char *to, char *cc, char *from, char *subject, char *msg, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> msglen)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Send an e-mail. <a href="#gf0349a8481565e80f55a751e2b408d6d"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g37e3103b9591790d484a450525739661"></a><!-- doxytag: member="smtp.c::smtp_configure" ref="g37e3103b9591790d484a450525739661" args="(char *lhostname, void *server)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void smtp_configure </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>lhostname</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>void * </td>
+ <td class="mdname" nowrap> <em>server</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Specificy an SMTP server and hostname.
+<p>
+This function is used to configure the SMTP module with an SMTP server and the hostname of the host.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lhostname</em> </td><td>The hostname of the uIP host.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>server</em> </td><td>A pointer to a 4-byte array representing the IP address of the SMTP server to be configured. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00174.html#l00216">216</a> of file <a class="el" href="a00174.html">smtp.c</a>.
+<p>
+References <a class="el" href="a00202.html#l00882">uip_ipaddr_copy</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gb1fc692a2700b7a51517724364683f67"></a><!-- doxytag: member="smtp.h::smtp_done" ref="gb1fc692a2700b7a51517724364683f67" args="(unsigned char error)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void smtp_done </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">unsigned char </td>
+ <td class="mdname1" valign="top" nowrap> <em>error</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called when an e-mail transmission is done.
+<p>
+This function must be implemented by the module that uses the SMTP module.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>error</em> </td><td>The number of the error if an error occured, or SMTP_ERR_OK. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00038.html#a170">smtp.c</a>, and <a class="el" href="a00039.html#a195">smtp.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00174.html#l00190">smtp_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf0349a8481565e80f55a751e2b408d6d"></a><!-- doxytag: member="smtp.c::smtp_send" ref="gf0349a8481565e80f55a751e2b408d6d" args="(char *to, char *cc, char *from, char *subject, char *msg, u16_t msglen)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">unsigned char smtp_send </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>to</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>cc</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>from</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>subject</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>msglen</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Send an e-mail.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>to</em> </td><td>The e-mail address of the receiver of the e-mail. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cc</em> </td><td>The e-mail address of the CC: receivers of the e-mail. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>from</em> </td><td>The e-mail address of the sender of the e-mail. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>subject</em> </td><td>The subject of the e-mail. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>msg</em> </td><td>The actual e-mail message. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>msglen</em> </td><td>The length of the e-mail message. </td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a00174.html#l00233">233</a> of file <a class="el" href="a00174.html">smtp.c</a>.
+<p>
+References <a class="el" href="a00175.html#l00084">smtp_state::from</a>, <a class="el" href="a00202.html#l01070">HTONS</a>, <a class="el" href="a00175.html#l00086">smtp_state::msg</a>, <a class="el" href="a00175.html#l00087">smtp_state::msglen</a>, <a class="el" href="a00172.html#l00069">NULL</a>, <a class="el" href="a00193.html#l00144">PSOCK_INIT</a>, <a class="el" href="a00175.html#l00085">smtp_state::subject</a>, <a class="el" href="a00175.html#l00083">smtp_state::to</a>, and <a class="el" href="a00201.html#l00407">uip_connect()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00162.html b/third_party/uip-1.0/doc/html/a00162.html new file mode 100644 index 0000000..4a07bbf --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00162.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Hello, world</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Hello, world<br>
+<small>
+[<a class="el" href="a00143.html">Applications</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+A small example showing how to write applications with <a class="el" href="a00158.html">protosockets</a>.
+<p>
+
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00101.html">hello-world.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Header file for an example of how to write uIP applications with protosockets. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00100.html">hello-world.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An example of how to write uIP applications with protosockets. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">hello_world_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge28f6cb60e86088d8886d0f804b4f37c"></a><!-- doxytag: member="helloworld::UIP_APPCALL" ref="ge28f6cb60e86088d8886d0f804b4f37c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#ge28f6cb60e86088d8886d0f804b4f37c">UIP_APPCALL</a> hello_world_appcall</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03070adbf8faab0f34f87c1270964306"></a><!-- doxytag: member="helloworld::hello_world_appcall" ref="g03070adbf8faab0f34f87c1270964306" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb97849f0d3ea858eee790b69591e6427"></a><!-- doxytag: member="helloworld::hello_world_init" ref="gb97849f0d3ea858eee790b69591e6427" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a> (void)</td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00163.html b/third_party/uip-1.0/doc/html/a00163.html new file mode 100644 index 0000000..f1d5eb1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00163.html @@ -0,0 +1,533 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Web client</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Web client<br>
+<small>
+[<a class="el" href="a00143.html">Applications</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+This example shows a HTTP client that is able to download web pages and files from web servers.
+<p>
+It requires a number of callback functions to be implemented by the module that utilizes the code: <a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler()</a>, <a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected()</a>, <a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout()</a>, <a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted()</a>, <a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed()</a>.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">webclient.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Header file for the HTTP client. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html">webclient.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implementation of the HTTP client. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html">webclient_state</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5a5bfd7e9060903893481db90645187b"></a><!-- doxytag: member="webclient::WEBCLIENT_CONF_MAX_URLLEN" ref="g5a5bfd7e9060903893481db90645187b" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g5a5bfd7e9060903893481db90645187b">WEBCLIENT_CONF_MAX_URLLEN</a> 100</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge28f6cb60e86088d8886d0f804b4f37c"></a><!-- doxytag: member="webclient::UIP_APPCALL" ref="ge28f6cb60e86088d8886d0f804b4f37c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#ge28f6cb60e86088d8886d0f804b4f37c">UIP_APPCALL</a> webclient_appcall</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g31be289fd8ec3fe09b0088165d13976d"></a><!-- doxytag: member="webclient::WEBCLIENT_TIMEOUT" ref="g31be289fd8ec3fe09b0088165d13976d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">WEBCLIENT_TIMEOUT</a> 100</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8714af98a550f10dc814db92b08d1b0d"></a><!-- doxytag: member="webclient::WEBCLIENT_STATE_STATUSLINE" ref="g8714af98a550f10dc814db92b08d1b0d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc4357cec23abca29d2bb885803625a6a"></a><!-- doxytag: member="webclient::WEBCLIENT_STATE_HEADERS" ref="gc4357cec23abca29d2bb885803625a6a" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4d457c50e6f2cef57167c3804ce8bf7c"></a><!-- doxytag: member="webclient::WEBCLIENT_STATE_DATA" ref="g4d457c50e6f2cef57167c3804ce8bf7c" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g863c94b0ed4a76997e53a3ccd5d0b6c3"></a><!-- doxytag: member="webclient::WEBCLIENT_STATE_CLOSE" ref="g863c94b0ed4a76997e53a3ccd5d0b6c3" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g40fb1fb2d990ce04ae9bbee275627c03"></a><!-- doxytag: member="webclient::HTTPFLAG_NONE" ref="g40fb1fb2d990ce04ae9bbee275627c03" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">HTTPFLAG_NONE</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gda99954e0f6905091885934e86c278cc"></a><!-- doxytag: member="webclient::HTTPFLAG_OK" ref="gda99954e0f6905091885934e86c278cc" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gda99954e0f6905091885934e86c278cc">HTTPFLAG_OK</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd895686859ae7d178d31be04eb0a1a97"></a><!-- doxytag: member="webclient::HTTPFLAG_MOVED" ref="gd895686859ae7d178d31be04eb0a1a97" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a> 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g38af81a4c9884ce89803fc3e52383112"></a><!-- doxytag: member="webclient::HTTPFLAG_ERROR" ref="g38af81a4c9884ce89803fc3e52383112" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g38af81a4c9884ce89803fc3e52383112">HTTPFLAG_ERROR</a> 3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="webclient::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6cda47c85ce1b58b501b44ac9cccc50e"></a><!-- doxytag: member="webclient::ISO_cr" ref="g6cda47c85ce1b58b501b44ac9cccc50e" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a> 0x0d</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g71e1b022f7b7fa3a154f19372b239935"></a><!-- doxytag: member="webclient::ISO_space" ref="g71e1b022f7b7fa3a154f19372b239935" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a> 0x20</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdc5aec3587b2c55b714a6c2f37b56cba"></a><!-- doxytag: member="webclient::uip_tcp_appstate_t" ref="gdc5aec3587b2c55b714a6c2f37b56cba" args="" -->
+typedef <a class="el" href="a00097.html">webclient_state</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gdc5aec3587b2c55b714a6c2f37b56cba">uip_tcp_appstate_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a> (char *data, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when HTTP data has been received. <a href="#gc4b119801e50cc1824498a1cdf9adc37"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when the HTTP connection has been connected to the web server. <a href="#g6b942c1ef22f8cd1a726ef3364c9fbea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code if the HTTP connection to the web server has timed out. <a href="#g23705efb9077187881f094fc9be13bde"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server. <a href="#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Callback function that is called from the webclient code when the HTTP connection to the web server has been closed. <a href="#gf8f12c820cc08da32aa62898bfc02db3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3caacabb2fe1c71921e1a471719ccbd2"></a><!-- doxytag: member="webclient::webclient_init" ref="g3caacabb2fe1c71921e1a471719ccbd2" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the webclient module. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a> (char *host, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port, char *file)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Open an HTTP connection to a web server and ask for a file using the GET method. <a href="#gf9385ef9ecc74c7d53ff2f15e62bfde3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1d34be506a61db90dd7829117efdf8cf"></a><!-- doxytag: member="webclient::webclient_close" ref="g1d34be506a61db90dd7829117efdf8cf" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Close the currently open HTTP connection. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9e6d2864f390a4ba1ac60dc65e2b9815"></a><!-- doxytag: member="webclient::webclient_appcall" ref="g9e6d2864f390a4ba1ac60dc65e2b9815" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the MIME type of the current HTTP data stream. <a href="#g4433d3af16ea083a81576d0f18ba57c9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the filename of the current HTTP data stream. <a href="#g41e616d3fcc17e0aabfe8ab45ef0d30f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the hostname of the current HTTP data stream. <a href="#g0e0ea5f24b77f124ba33bcbc7ede5bfb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the port number of the current HTTP data stream. <a href="#g2a939aa4fcffabbce1dc1f784a7e0ad3"></a><br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gf11d9915ec12a8cdd9fdcbb5e8fcd5c7"></a><!-- doxytag: member="webclient.h::webclient_aborted" ref="gf11d9915ec12a8cdd9fdcbb5e8fcd5c7" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void webclient_aborted </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server.
+<p>
+This function must be implemented by the module that uses the webclient code. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a286">webclient.c</a>, and <a class="el" href="a00041.html#a321">webclient.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf8f12c820cc08da32aa62898bfc02db3"></a><!-- doxytag: member="webclient.h::webclient_closed" ref="gf8f12c820cc08da32aa62898bfc02db3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void webclient_closed </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called from the webclient code when the HTTP connection to the web server has been closed.
+<p>
+This function must be implemented by the module that uses the webclient code. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a296">webclient.c</a>, and <a class="el" href="a00041.html#a322">webclient.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g6b942c1ef22f8cd1a726ef3364c9fbea"></a><!-- doxytag: member="webclient.h::webclient_connected" ref="g6b942c1ef22f8cd1a726ef3364c9fbea" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void webclient_connected </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called from the webclient code when the HTTP connection has been connected to the web server.
+<p>
+This function must be implemented by the module that uses the webclient code. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a295">webclient.c</a>, and <a class="el" href="a00041.html#a319">webclient.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gc4b119801e50cc1824498a1cdf9adc37"></a><!-- doxytag: member="webclient.h::webclient_datahandler" ref="gc4b119801e50cc1824498a1cdf9adc37" args="(char *data, u16_t len)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void webclient_datahandler </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>len</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called from the webclient code when HTTP data has been received.
+<p>
+This function must be implemented by the module that uses the webclient code. The function is called from the webclient module when HTTP data has been received. The function is not called when HTTP headers are received, only for the actual data.<p>
+<dl compact><dt><b>Note:</b></dt><dd>This function is called many times, repetedly, when data is being received, and not once when all data has been received.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>A pointer to the data that has been received. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>The length of the data that has been received. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a291">webclient.c</a>, and <a class="el" href="a00041.html#a318">webclient.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g41e616d3fcc17e0aabfe8ab45ef0d30f"></a><!-- doxytag: member="webclient.h::webclient_filename" ref="g41e616d3fcc17e0aabfe8ab45ef0d30f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">char * webclient_filename </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Obtain the filename of the current HTTP data stream.
+<p>
+The filename of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with <a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get()</a>. This function is used for obtaining the current filename.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the current filename. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a254">webclient.c</a>, and <a class="el" href="a00041.html#a328">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00180.html#l00093">93</a> of file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+References <a class="el" href="a00181.html#l00062">webclient_state::file</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="gf9385ef9ecc74c7d53ff2f15e62bfde3"></a><!-- doxytag: member="webclient.h::webclient_get" ref="gf9385ef9ecc74c7d53ff2f15e62bfde3" args="(char *host, u16_t port, char *file)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">unsigned char webclient_get </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname" nowrap> <em>host</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> </td>
+ <td class="mdname" nowrap> <em>port</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>char * </td>
+ <td class="mdname" nowrap> <em>file</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Open an HTTP connection to a web server and ask for a file using the GET method.
+<p>
+This function opens an HTTP connection to the specified web server and requests the specified file using the GET method. When the HTTP connection has been connected, the <a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected()</a> callback function is called and when the HTTP data arrives the <a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler()</a> callback function is called.<p>
+The callback function <a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout()</a> is called if the web server could not be contacted, and the <a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted()</a> callback function is called if the HTTP connection is aborted by the web server.<p>
+When the HTTP request has been completed and the HTTP connection is closed, the <a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed()</a> callback function will be called.<p>
+<dl compact><dt><b>Note:</b></dt><dd>If the function is passed a host name, it must already be in the resolver cache in order for the function to connect to the web server. It is therefore up to the calling module to implement the resolver calls and the signal handler used for reporting a resolv query answer.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>host</em> </td><td>A pointer to a string containing either a host name or a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>The port number to which to connect, in host byte order.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>file</em> </td><td>A pointer to the name of the file to get.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Return values:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>0</em> </td><td>if the host name could not be found in the cache, or if a TCP connection could not be created.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>1</em> </td><td>if the connection was initiated. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a268">webclient.c</a>, and <a class="el" href="a00041.html#a324">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00180.html#l00140">140</a> of file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+References <a class="el" href="a00181.html#l00062">webclient_state::file</a>, <a class="el" href="a00181.html#l00061">webclient_state::host</a>, <a class="el" href="a00201.html#l01882">htons()</a>, <a class="el" href="a00172.html#l00069">NULL</a>, <a class="el" href="a00181.html#l00060">webclient_state::port</a>, <a class="el" href="a00172.html#l00396">resolv_lookup()</a>, and <a class="el" href="a00201.html#l00407">uip_connect()</a>.
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g0e0ea5f24b77f124ba33bcbc7ede5bfb"></a><!-- doxytag: member="webclient.h::webclient_hostname" ref="g0e0ea5f24b77f124ba33bcbc7ede5bfb" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">char * webclient_hostname </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Obtain the hostname of the current HTTP data stream.
+<p>
+The hostname of the web server of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with <a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get()</a>. This function is used for obtaining the current hostname.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the current hostname. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a256">webclient.c</a>, and <a class="el" href="a00041.html#a329">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00180.html#l00099">99</a> of file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+References <a class="el" href="a00181.html#l00061">webclient_state::host</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g4433d3af16ea083a81576d0f18ba57c9"></a><!-- doxytag: member="webclient.h::webclient_mimetype" ref="g4433d3af16ea083a81576d0f18ba57c9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">char * webclient_mimetype </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Obtain the MIME type of the current HTTP data stream.
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A pointer to a string contaning the MIME type. The string may be empty if no MIME type was reported by the web server. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a252">webclient.c</a>, and <a class="el" href="a00041.html#a327">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00180.html#l00087">87</a> of file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+References <a class="el" href="a00181.html#l00069">webclient_state::mimetype</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g2a939aa4fcffabbce1dc1f784a7e0ad3"></a><!-- doxytag: member="webclient.h::webclient_port" ref="g2a939aa4fcffabbce1dc1f784a7e0ad3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">unsigned short webclient_port </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Obtain the port number of the current HTTP data stream.
+<p>
+The port number of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with <a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get()</a>. This function is used for obtaining the current port number.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The port number of the current HTTP data stream, in host byte order. </dd></dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a258">webclient.c</a>, and <a class="el" href="a00041.html#a330">webclient.h</a>.</dl>
+<p>
+Definition at line <a class="el" href="a00180.html#l00105">105</a> of file <a class="el" href="a00180.html">webclient.c</a>.
+<p>
+References <a class="el" href="a00181.html#l00060">webclient_state::port</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="g23705efb9077187881f094fc9be13bde"></a><!-- doxytag: member="webclient.h::webclient_timedout" ref="g23705efb9077187881f094fc9be13bde" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void webclient_timedout </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Callback function that is called from the webclient code if the HTTP connection to the web server has timed out.
+<p>
+This function must be implemented by the module that uses the webclient code. <dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="a00040.html#a299">webclient.c</a>, and <a class="el" href="a00041.html#a320">webclient.h</a>.</dl>
+<p>
+Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00164.html b/third_party/uip-1.0/doc/html/a00164.html new file mode 100644 index 0000000..82def65 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00164.html @@ -0,0 +1,172 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Web server</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>Web server<br>
+<small>
+[<a class="el" href="a00143.html">Applications</a>]</small>
+</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The uIP web server is a very simplistic implementation of an HTTP server.
+<p>
+It can serve web pages and files from a read-only ROM filesystem, and provides a very small scripting language.
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html">httpd-cgi.h</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Web server script interface header file. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html">httpd-cgi.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Web server script interface. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00114.html">httpd.c</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Web server. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">httpd_cgi_call</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">HTTPD_CGI_CALL</a>(name, str, function)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">HTTPD CGI function declaration. <a href="#g1dbc635a2924806f42d7e3273a6a69b5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7d7920c1e51cc4eef80206ebd6fee3f4"></a><!-- doxytag: member="httpd::STATE_WAITING" ref="g7d7920c1e51cc4eef80206ebd6fee3f4" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">STATE_WAITING</a> 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8a645f8831837320c4e0c704e871abcf"></a><!-- doxytag: member="httpd::STATE_OUTPUT" ref="g8a645f8831837320c4e0c704e871abcf" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">STATE_OUTPUT</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3212e70c55244608ac16316888c354f0"></a><!-- doxytag: member="httpd::ISO_nl" ref="g3212e70c55244608ac16316888c354f0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> 0x0a</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g71e1b022f7b7fa3a154f19372b239935"></a><!-- doxytag: member="httpd::ISO_space" ref="g71e1b022f7b7fa3a154f19372b239935" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a> 0x20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge3f8f7deae69854853b0c8ebb82c380d"></a><!-- doxytag: member="httpd::ISO_bang" ref="ge3f8f7deae69854853b0c8ebb82c380d" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">ISO_bang</a> 0x21</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g79f9a50c2cccb967d38a2eeb45d2fd75"></a><!-- doxytag: member="httpd::ISO_percent" ref="g79f9a50c2cccb967d38a2eeb45d2fd75" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a> 0x25</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf7dd2757d1e766f65b01ba7c91c660a0"></a><!-- doxytag: member="httpd::ISO_period" ref="gf7dd2757d1e766f65b01ba7c91c660a0" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a> 0x2e</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g820fb27c50e7bb4ac6d9eae1b06630a5"></a><!-- doxytag: member="httpd::ISO_slash" ref="g820fb27c50e7bb4ac6d9eae1b06630a5" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">ISO_slash</a> 0x2f</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g14e276fa8e765f774f4162619f1c8fc1"></a><!-- doxytag: member="httpd::ISO_colon" ref="g14e276fa8e765f774f4162619f1c8fc1" args="" -->
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">ISO_colon</a> 0x3a</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge6f849e94cf6e214be8ffa9a548ecfcd"></a><!-- doxytag: member="httpd::httpd_cgi" ref="ge6f849e94cf6e214be8ffa9a548ecfcd" args="(char *name)" -->
+httpd_cgifunction </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a> (char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g648ddfb2dde2cc55034e4e0ea41cb6d1"></a><!-- doxytag: member="httpd::httpd_appcall" ref="g648ddfb2dde2cc55034e4e0ea41cb6d1" args="(void)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the web server. <a href="#gc364305cee969a0be43c071722b136e6"></a><br></td></tr>
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g1dbc635a2924806f42d7e3273a6a69b5"></a><!-- doxytag: member="httpd-cgi.h::HTTPD_CGI_CALL" ref="g1dbc635a2924806f42d7e3273a6a69b5" args="(name, str, function)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">#define HTTPD_CGI_CALL </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">name, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>str, <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>function </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+HTTPD CGI function declaration.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The C variable name of the function </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>The string name of the function, used in the script file </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>function</em> </td><td>A pointer to the function that implements it</td></tr>
+ </table>
+</dl>
+This macro is used for declaring a HTTPD CGI function. This function is then added to the list of HTTPD CGI functions with the httpd_cgi_add() function.
+<p>
+Definition at line <a class="el" href="a00183.html#l00077">77</a> of file <a class="el" href="a00183.html">httpd-cgi.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gc364305cee969a0be43c071722b136e6"></a><!-- doxytag: member="httpd.c::httpd_init" ref="gc364305cee969a0be43c071722b136e6" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void httpd_init </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initialize the web server.
+<p>
+This function initializes the web server and should be called at system boot-up.
+<p>
+Definition at line <a class="el" href="a00184.html#l00333">333</a> of file <a class="el" href="a00184.html">httpd.c</a>.
+<p>
+References <a class="el" href="a00202.html#l01070">HTONS</a>, and <a class="el" href="a00201.html#l00529">uip_listen()</a>. </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00168.html b/third_party/uip-1.0/doc/html/a00168.html new file mode 100644 index 0000000..3468aca --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00168.html @@ -0,0 +1,381 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/dhcpc/dhcpc.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/dhcpc/dhcpc.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2005, Swedish Institute of Computer Science</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "dhcpc.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "<a class="code" href="a00128.html">pt.h</a>"</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#define STATE_INITIAL 0</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define STATE_SENDING 1</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define STATE_OFFER_RECEIVED 2</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define STATE_CONFIG_RECEIVED 3</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00077.html">dhcpc_state</a> s;
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="keyword">struct </span>dhcp_msg {
+<a name="l00050"></a>00050 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> op, htype, hlen, hops;
+<a name="l00051"></a>00051 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> xid[4];
+<a name="l00052"></a>00052 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> secs, flags;
+<a name="l00053"></a>00053 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> ciaddr[4];
+<a name="l00054"></a>00054 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> yiaddr[4];
+<a name="l00055"></a>00055 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> siaddr[4];
+<a name="l00056"></a>00056 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> giaddr[4];
+<a name="l00057"></a>00057 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> chaddr[16];
+<a name="l00058"></a>00058 <span class="preprocessor">#ifndef UIP_CONF_DHCP_LIGHT</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> sname[64];
+<a name="l00060"></a>00060 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> file[128];
+<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> options[312];
+<a name="l00063"></a>00063 };
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#define BOOTP_BROADCAST 0x8000</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067 <span class="preprocessor">#define DHCP_REQUEST 1</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_REPLY 2</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_HTYPE_ETHERNET 1</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_HLEN_ETHERNET 6</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_MSG_LEN 236</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a>00073 <span class="preprocessor">#define DHCPC_SERVER_PORT 67</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define DHCPC_CLIENT_PORT 68</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a>00076 <span class="preprocessor">#define DHCPDISCOVER 1</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define DHCPOFFER 2</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define DHCPREQUEST 3</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define DHCPDECLINE 4</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define DHCPACK 5</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define DHCPNAK 6</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define DHCPRELEASE 7</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a>00084 <span class="preprocessor">#define DHCP_OPTION_SUBNET_MASK 1</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_ROUTER 3</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_DNS_SERVER 6</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_REQ_IPADDR 50</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_LEASE_TIME 51</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_MSG_TYPE 53</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_SERVER_ID 54</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_REQ_LIST 55</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define DHCP_OPTION_END 255</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span>
+<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> xid[4] = {0xad, 0xde, 0x12, 0x23};
+<a name="l00095"></a>00095 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> magic_cookie[4] = {99, 130, 83, 99};
+<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00097"></a>00097 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00098"></a>00098 add_msg_type(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr, <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> type)
+<a name="l00099"></a>00099 {
+<a name="l00100"></a>00100 *optptr++ = DHCP_OPTION_MSG_TYPE;
+<a name="l00101"></a>00101 *optptr++ = 1;
+<a name="l00102"></a>00102 *optptr++ = type;
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> optptr;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00106"></a>00106 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00107"></a>00107 add_server_id(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00108"></a>00108 {
+<a name="l00109"></a>00109 *optptr++ = DHCP_OPTION_SERVER_ID;
+<a name="l00110"></a>00110 *optptr++ = 4;
+<a name="l00111"></a>00111 memcpy(optptr, s.<a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>, 4);
+<a name="l00112"></a>00112 <span class="keywordflow">return</span> optptr + 4;
+<a name="l00113"></a>00113 }
+<a name="l00114"></a>00114 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00115"></a>00115 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00116"></a>00116 add_req_ipaddr(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00117"></a>00117 {
+<a name="l00118"></a>00118 *optptr++ = DHCP_OPTION_REQ_IPADDR;
+<a name="l00119"></a>00119 *optptr++ = 4;
+<a name="l00120"></a>00120 memcpy(optptr, s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>, 4);
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> optptr + 4;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00124"></a>00124 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00125"></a>00125 add_req_options(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00126"></a>00126 {
+<a name="l00127"></a>00127 *optptr++ = DHCP_OPTION_REQ_LIST;
+<a name="l00128"></a>00128 *optptr++ = 3;
+<a name="l00129"></a>00129 *optptr++ = DHCP_OPTION_SUBNET_MASK;
+<a name="l00130"></a>00130 *optptr++ = DHCP_OPTION_ROUTER;
+<a name="l00131"></a>00131 *optptr++ = DHCP_OPTION_DNS_SERVER;
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> optptr;
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00135"></a>00135 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *
+<a name="l00136"></a>00136 add_end(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr)
+<a name="l00137"></a>00137 {
+<a name="l00138"></a>00138 *optptr++ = DHCP_OPTION_END;
+<a name="l00139"></a>00139 <span class="keywordflow">return</span> optptr;
+<a name="l00140"></a>00140 }
+<a name="l00141"></a>00141 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00142"></a>00142 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00143"></a>00143 create_msg(<span class="keyword">register</span> <span class="keyword">struct</span> dhcp_msg *m)
+<a name="l00144"></a>00144 {
+<a name="l00145"></a>00145 m->op = DHCP_REQUEST;
+<a name="l00146"></a>00146 m->htype = DHCP_HTYPE_ETHERNET;
+<a name="l00147"></a>00147 m->hlen = s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>;
+<a name="l00148"></a>00148 m->hops = 0;
+<a name="l00149"></a>00149 memcpy(m->xid, xid, <span class="keyword">sizeof</span>(m->xid));
+<a name="l00150"></a>00150 m->secs = 0;
+<a name="l00151"></a>00151 m->flags = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(BOOTP_BROADCAST); <span class="comment">/* Broadcast bit. */</span>
+<a name="l00152"></a>00152 <span class="comment">/* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/</span>
+<a name="l00153"></a>00153 memcpy(m->ciaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, <span class="keyword">sizeof</span>(m->ciaddr));
+<a name="l00154"></a>00154 memset(m->yiaddr, 0, <span class="keyword">sizeof</span>(m->yiaddr));
+<a name="l00155"></a>00155 memset(m->siaddr, 0, <span class="keyword">sizeof</span>(m->siaddr));
+<a name="l00156"></a>00156 memset(m->giaddr, 0, <span class="keyword">sizeof</span>(m->giaddr));
+<a name="l00157"></a>00157 memcpy(m->chaddr, s.<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a>, s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>);
+<a name="l00158"></a>00158 memset(&m->chaddr[s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>], 0, <span class="keyword">sizeof</span>(m->chaddr) - s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>);
+<a name="l00159"></a>00159 <span class="preprocessor">#ifndef UIP_CONF_DHCP_LIGHT</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span> memset(m->sname, 0, <span class="keyword">sizeof</span>(m->sname));
+<a name="l00161"></a>00161 memset(m->file, 0, <span class="keyword">sizeof</span>(m->file));
+<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span>
+<a name="l00164"></a>00164 memcpy(m->options, magic_cookie, <span class="keyword">sizeof</span>(magic_cookie));
+<a name="l00165"></a>00165 }
+<a name="l00166"></a>00166 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00168"></a>00168 send_discover(<span class="keywordtype">void</span>)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end;
+<a name="l00171"></a>00171 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 create_msg(m);
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 end = add_msg_type(&m->options[4], DHCPDISCOVER);
+<a name="l00176"></a>00176 end = add_req_options(end);
+<a name="l00177"></a>00177 end = add_end(end);
+<a name="l00178"></a>00178
+<a name="l00179"></a>00179 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, end - (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00180"></a>00180 }
+<a name="l00181"></a>00181 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00183"></a>00183 send_request(<span class="keywordtype">void</span>)
+<a name="l00184"></a>00184 {
+<a name="l00185"></a>00185 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end;
+<a name="l00186"></a>00186 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 create_msg(m);
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 end = add_msg_type(&m->options[4], DHCPREQUEST);
+<a name="l00191"></a>00191 end = add_server_id(end);
+<a name="l00192"></a>00192 end = add_req_ipaddr(end);
+<a name="l00193"></a>00193 end = add_end(end);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, end - (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00196"></a>00196 }
+<a name="l00197"></a>00197 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00198"></a>00198 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00199"></a>00199 parse_options(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *optptr, <span class="keywordtype">int</span> len)
+<a name="l00200"></a>00200 {
+<a name="l00201"></a>00201 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *end = optptr + len;
+<a name="l00202"></a>00202 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> type = 0;
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 <span class="keywordflow">while</span>(optptr < end) {
+<a name="l00205"></a>00205 <span class="keywordflow">switch</span>(*optptr) {
+<a name="l00206"></a>00206 <span class="keywordflow">case</span> DHCP_OPTION_SUBNET_MASK:
+<a name="l00207"></a>00207 memcpy(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>, optptr + 2, 4);
+<a name="l00208"></a>00208 <span class="keywordflow">break</span>;
+<a name="l00209"></a>00209 <span class="keywordflow">case</span> DHCP_OPTION_ROUTER:
+<a name="l00210"></a>00210 memcpy(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>, optptr + 2, 4);
+<a name="l00211"></a>00211 <span class="keywordflow">break</span>;
+<a name="l00212"></a>00212 <span class="keywordflow">case</span> DHCP_OPTION_DNS_SERVER:
+<a name="l00213"></a>00213 memcpy(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>, optptr + 2, 4);
+<a name="l00214"></a>00214 <span class="keywordflow">break</span>;
+<a name="l00215"></a>00215 <span class="keywordflow">case</span> DHCP_OPTION_MSG_TYPE:
+<a name="l00216"></a>00216 type = *(optptr + 2);
+<a name="l00217"></a>00217 <span class="keywordflow">break</span>;
+<a name="l00218"></a>00218 <span class="keywordflow">case</span> DHCP_OPTION_SERVER_ID:
+<a name="l00219"></a>00219 memcpy(s.<a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>, optptr + 2, 4);
+<a name="l00220"></a>00220 <span class="keywordflow">break</span>;
+<a name="l00221"></a>00221 <span class="keywordflow">case</span> DHCP_OPTION_LEASE_TIME:
+<a name="l00222"></a>00222 memcpy(s.<a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>, optptr + 2, 4);
+<a name="l00223"></a>00223 <span class="keywordflow">break</span>;
+<a name="l00224"></a>00224 <span class="keywordflow">case</span> DHCP_OPTION_END:
+<a name="l00225"></a>00225 <span class="keywordflow">return</span> type;
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 optptr += optptr[1] + 2;
+<a name="l00229"></a>00229 }
+<a name="l00230"></a>00230 <span class="keywordflow">return</span> type;
+<a name="l00231"></a>00231 }
+<a name="l00232"></a>00232 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00233"></a>00233 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00234"></a>00234 parse_msg(<span class="keywordtype">void</span>)
+<a name="l00235"></a>00235 {
+<a name="l00236"></a>00236 <span class="keyword">struct </span>dhcp_msg *m = (<span class="keyword">struct </span>dhcp_msg *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 <span class="keywordflow">if</span>(m->op == DHCP_REPLY &&
+<a name="l00239"></a>00239 memcmp(m->xid, xid, <span class="keyword">sizeof</span>(xid)) == 0 &&
+<a name="l00240"></a>00240 memcmp(m->chaddr, s.<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a>, s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>) == 0) {
+<a name="l00241"></a>00241 memcpy(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>, m->yiaddr, 4);
+<a name="l00242"></a>00242 <span class="keywordflow">return</span> parse_options(&m->options[4], <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>());
+<a name="l00243"></a>00243 }
+<a name="l00244"></a>00244 <span class="keywordflow">return</span> 0;
+<a name="l00245"></a>00245 }
+<a name="l00246"></a>00246 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00247"></a>00247 <span class="keyword">static</span>
+<a name="l00248"></a>00248 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(handle_dhcp(<span class="keywordtype">void</span>))
+<a name="l00249"></a>00249 {
+<a name="l00250"></a>00250 <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="comment">/* try_again:*/</span>
+<a name="l00253"></a>00253 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_SENDING;
+<a name="l00254"></a>00254 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> = <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordflow">do</span> {
+<a name="l00257"></a>00257 send_discover();
+<a name="l00258"></a>00258 <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>, s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>);
+<a name="l00259"></a>00259 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>, <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() || <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>));
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() && parse_msg() == DHCPOFFER) {
+<a name="l00262"></a>00262 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_OFFER_RECEIVED;
+<a name="l00263"></a>00263 <span class="keywordflow">break</span>;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> < <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> * 60) {
+<a name="l00267"></a>00267 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> *= 2;
+<a name="l00268"></a>00268 }
+<a name="l00269"></a>00269 } <span class="keywordflow">while</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> != STATE_OFFER_RECEIVED);
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> = <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="keywordflow">do</span> {
+<a name="l00274"></a>00274 send_request();
+<a name="l00275"></a>00275 <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>, s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>);
+<a name="l00276"></a>00276 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>, <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() || <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(&s.<a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>));
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() && parse_msg() == DHCPACK) {
+<a name="l00279"></a>00279 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_CONFIG_RECEIVED;
+<a name="l00280"></a>00280 <span class="keywordflow">break</span>;
+<a name="l00281"></a>00281 }
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> <= <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a> * 10) {
+<a name="l00284"></a>00284 s.<a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a> += <a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">CLOCK_SECOND</a>;
+<a name="l00285"></a>00285 } <span class="keywordflow">else</span> {
+<a name="l00286"></a>00286 <a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00287"></a>00287 }
+<a name="l00288"></a>00288 } <span class="keywordflow">while</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> != STATE_CONFIG_RECEIVED);
+<a name="l00289"></a>00289
+<a name="l00290"></a>00290 <span class="preprocessor">#if 0</span>
+<a name="l00291"></a>00291 <span class="preprocessor"></span> printf(<span class="stringliteral">"Got IP address %d.%d.%d.%d\n"</span>,
+<a name="l00292"></a>00292 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>),
+<a name="l00293"></a>00293 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>));
+<a name="l00294"></a>00294 printf(<span class="stringliteral">"Got netmask %d.%d.%d.%d\n"</span>,
+<a name="l00295"></a>00295 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>),
+<a name="l00296"></a>00296 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>));
+<a name="l00297"></a>00297 printf(<span class="stringliteral">"Got DNS server %d.%d.%d.%d\n"</span>,
+<a name="l00298"></a>00298 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>),
+<a name="l00299"></a>00299 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>));
+<a name="l00300"></a>00300 printf(<span class="stringliteral">"Got default router %d.%d.%d.%d\n"</span>,
+<a name="l00301"></a>00301 <a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip_ipaddr1</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>), <a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip_ipaddr2</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>),
+<a name="l00302"></a>00302 <a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip_ipaddr3</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>), <a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip_ipaddr4</a>(s.<a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>));
+<a name="l00303"></a>00303 printf(<span class="stringliteral">"Lease expires in %ld seconds\n"</span>,
+<a name="l00304"></a>00304 <a class="code" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a>(s.<a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[0])*65536ul + <a class="code" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">ntohs</a>(s.<a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[1]));
+<a name="l00305"></a>00305 <span class="preprocessor">#endif</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span>
+<a name="l00307"></a>00307 dhcpc_configured(&s);
+<a name="l00308"></a>00308
+<a name="l00309"></a>00309 <span class="comment">/* timer_stop(&s.timer);*/</span>
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 <span class="comment">/*</span>
+<a name="l00312"></a>00312 <span class="comment"> * PT_END restarts the thread so we do this instead. Eventually we</span>
+<a name="l00313"></a>00313 <span class="comment"> * should reacquire expired leases here.</span>
+<a name="l00314"></a>00314 <span class="comment"> */</span>
+<a name="l00315"></a>00315 <span class="keywordflow">while</span>(1) {
+<a name="l00316"></a>00316 <a class="code" href="a00142.html#g155cba6121323726d02c00284428fed6">PT_YIELD</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00317"></a>00317 }
+<a name="l00318"></a>00318
+<a name="l00319"></a>00319 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00320"></a>00320 }
+<a name="l00321"></a>00321 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00322"></a>00322 <span class="keywordtype">void</span>
+<a name="l00323"></a>00323 dhcpc_init(<span class="keyword">const</span> <span class="keywordtype">void</span> *mac_addr, <span class="keywordtype">int</span> mac_len)
+<a name="l00324"></a>00324 {
+<a name="l00325"></a>00325 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 s.<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a> = mac_addr;
+<a name="l00328"></a>00328 s.<a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a> = mac_len;
+<a name="l00329"></a>00329
+<a name="l00330"></a>00330 s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> = STATE_INITIAL;
+<a name="l00331"></a>00331 <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(addr, 255,255,255,255);
+<a name="l00332"></a>00332 s.<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a> = <a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(&addr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(DHCPC_SERVER_PORT));
+<a name="l00333"></a>00333 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a> != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00334"></a>00334 <a class="code" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip_udp_bind</a>(s.<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a>, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(DHCPC_CLIENT_PORT));
+<a name="l00335"></a>00335 }
+<a name="l00336"></a>00336 <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&s.<a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>);
+<a name="l00337"></a>00337 }
+<a name="l00338"></a>00338 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00339"></a>00339 <span class="keywordtype">void</span>
+<a name="l00340"></a>00340 dhcpc_appcall(<span class="keywordtype">void</span>)
+<a name="l00341"></a>00341 {
+<a name="l00342"></a>00342 handle_dhcp();
+<a name="l00343"></a>00343 }
+<a name="l00344"></a>00344 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00345"></a>00345 <span class="keywordtype">void</span>
+<a name="l00346"></a>00346 dhcpc_request(<span class="keywordtype">void</span>)
+<a name="l00347"></a>00347 {
+<a name="l00348"></a>00348 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+<a name="l00349"></a>00349
+<a name="l00350"></a>00350 <span class="keywordflow">if</span>(s.<a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a> == STATE_INITIAL) {
+<a name="l00351"></a>00351 <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 0,0,0,0);
+<a name="l00352"></a>00352 <a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">uip_sethostaddr</a>(ipaddr);
+<a name="l00353"></a>00353 <span class="comment">/* handle_dhcp(PROCESS_EVENT_NONE, NULL);*/</span>
+<a name="l00354"></a>00354 }
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00169.html b/third_party/uip-1.0/doc/html/a00169.html new file mode 100644 index 0000000..32e9635 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00169.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/dhcpc/dhcpc.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/dhcpc/dhcpc.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2005, Swedish Institute of Computer Science</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#ifndef __DHCPC_H__</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define __DHCPC_H__</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00128.html">pt.h</a>"</span>
+<a name="l00038"></a>00038
+<a name="l00039"></a><a class="code" href="a00077.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00077.html">dhcpc_state</a> {
+<a name="l00040"></a><a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">00040</a> <span class="keyword">struct </span><a class="code" href="a00084.html">pt</a> <a class="code" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">pt</a>;
+<a name="l00041"></a><a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">00041</a> <span class="keywordtype">char</span> <a class="code" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">state</a>;
+<a name="l00042"></a><a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">00042</a> <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *<a class="code" href="a00077.html#cfd36e02c7498d766ff802575e981612">conn</a>;
+<a name="l00043"></a><a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">00043</a> <span class="keyword">struct </span><a class="code" href="a00087.html">timer</a> <a class="code" href="a00077.html#e80af46ceef63eab3c786525370ae720">timer</a>;
+<a name="l00044"></a><a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">00044</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">ticks</a>;
+<a name="l00045"></a><a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">00045</a> <span class="keyword">const</span> <span class="keywordtype">void</span> *<a class="code" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">mac_addr</a>;
+<a name="l00046"></a><a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">00046</a> <span class="keywordtype">int</span> <a class="code" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">mac_len</a>;
+<a name="l00047"></a>00047
+<a name="l00048"></a><a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">00048</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">serverid</a>[4];
+<a name="l00049"></a>00049
+<a name="l00050"></a><a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">00050</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#7a520a57d7d0541524f34a7685635597">lease_time</a>[2];
+<a name="l00051"></a><a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">00051</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">ipaddr</a>[2];
+<a name="l00052"></a><a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">00052</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">netmask</a>[2];
+<a name="l00053"></a><a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">00053</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#27df2817055bc099821d96eb60a40b34">dnsaddr</a>[2];
+<a name="l00054"></a><a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">00054</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00077.html#5e16ca335dfd7394527f602da879fca2">default_router</a>[2];
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keywordtype">void</span> dhcpc_init(<span class="keyword">const</span> <span class="keywordtype">void</span> *mac_addr, <span class="keywordtype">int</span> mac_len);
+<a name="l00058"></a>00058 <span class="keywordtype">void</span> dhcpc_request(<span class="keywordtype">void</span>);
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="keywordtype">void</span> dhcpc_appcall(<span class="keywordtype">void</span>);
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="keywordtype">void</span> dhcpc_configured(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="a00077.html">dhcpc_state</a> *s);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00077.html">dhcpc_state</a> <a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a>;
+<a name="l00065"></a>00065 <span class="preprocessor">#define UIP_UDP_APPCALL dhcpc_appcall</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="preprocessor">#endif </span><span class="comment">/* __DHCPC_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00170.html b/third_party/uip-1.0/doc/html/a00170.html new file mode 100644 index 0000000..5291e2e --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00170.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/hello-world/hello-world.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/hello-world/hello-world.c</h1><a href="a00100.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup helloworld</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * An example of how to write uIP applications</span>
+<a name="l00009"></a>00009 <span class="comment"> * with protosockets.</span>
+<a name="l00010"></a>00010 <span class="comment"> * \author</span>
+<a name="l00011"></a>00011 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="comment">/*</span>
+<a name="l00015"></a>00015 <span class="comment"> * This is a short example of how to write uIP applications using</span>
+<a name="l00016"></a>00016 <span class="comment"> * protosockets.</span>
+<a name="l00017"></a>00017 <span class="comment"> */</span>
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="comment">/*</span>
+<a name="l00020"></a>00020 <span class="comment"> * We define the application state (struct hello_world_state) in the</span>
+<a name="l00021"></a>00021 <span class="comment"> * hello-world.h file, so we need to include it here. We also include</span>
+<a name="l00022"></a>00022 <span class="comment"> * uip.h (since this cannot be included in hello-world.h) and</span>
+<a name="l00023"></a>00023 <span class="comment"> * <string.h>, since we use the memcpy() function in the code.</span>
+<a name="l00024"></a>00024 <span class="comment"> */</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="a00101.html">hello-world.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <string.h></span>
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="comment">/*</span>
+<a name="l00030"></a>00030 <span class="comment"> * Declaration of the protosocket function that handles the connection</span>
+<a name="l00031"></a>00031 <span class="comment"> * (defined at the end of the code).</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="keyword">static</span> <span class="keywordtype">int</span> handle_connection(<span class="keyword">struct</span> <a class="code" href="a00078.html">hello_world_state</a> *s);
+<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00035"></a>00035 <span class="comment">/*</span>
+<a name="l00036"></a>00036 <span class="comment"> * The initialization function. We must explicitly call this function</span>
+<a name="l00037"></a>00037 <span class="comment"> * from the system initialization code, some time after uip_init() is</span>
+<a name="l00038"></a>00038 <span class="comment"> * called.</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="keywordtype">void</span>
+<a name="l00041"></a><a class="code" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">00041</a> <a class="code" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a>(<span class="keywordtype">void</span>)
+<a name="l00042"></a>00042 {
+<a name="l00043"></a>00043 <span class="comment">/* We start to listen for connections on TCP port 1000. */</span>
+<a name="l00044"></a>00044 <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1000));
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00047"></a>00047 <span class="comment">/*</span>
+<a name="l00048"></a>00048 <span class="comment"> * In hello-world.h we have defined the UIP_APPCALL macro to</span>
+<a name="l00049"></a>00049 <span class="comment"> * hello_world_appcall so that this funcion is uIP's application</span>
+<a name="l00050"></a>00050 <span class="comment"> * function. This function is called whenever an uIP event occurs</span>
+<a name="l00051"></a>00051 <span class="comment"> * (e.g. when a new connection is established, new data arrives, sent</span>
+<a name="l00052"></a>00052 <span class="comment"> * data is acknowledged, data needs to be retransmitted, etc.).</span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054 <span class="keywordtype">void</span>
+<a name="l00055"></a><a class="code" href="a00162.html#g03070adbf8faab0f34f87c1270964306">00055</a> <a class="code" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00056"></a>00056 {
+<a name="l00057"></a>00057 <span class="comment">/*</span>
+<a name="l00058"></a>00058 <span class="comment"> * The uip_conn structure has a field called "appstate" that holds</span>
+<a name="l00059"></a>00059 <span class="comment"> * the application state of the connection. We make a pointer to</span>
+<a name="l00060"></a>00060 <span class="comment"> * this to access it easier.</span>
+<a name="l00061"></a>00061 <span class="comment"> */</span>
+<a name="l00062"></a>00062 <span class="keyword">struct </span><a class="code" href="a00078.html">hello_world_state</a> *s = &(<a class="code" href="a00088.html">uip_conn</a>->appstate);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="comment">/*</span>
+<a name="l00065"></a>00065 <span class="comment"> * If a new connection was just established, we should initialize</span>
+<a name="l00066"></a>00066 <span class="comment"> * the protosocket in our applications' state structure.</span>
+<a name="l00067"></a>00067 <span class="comment"> */</span>
+<a name="l00068"></a>00068 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00069"></a>00069 <a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, s-><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>));
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="comment">/*</span>
+<a name="l00073"></a>00073 <span class="comment"> * Finally, we run the protosocket function that actually handles</span>
+<a name="l00074"></a>00074 <span class="comment"> * the communication. We pass it a pointer to the application state</span>
+<a name="l00075"></a>00075 <span class="comment"> * of the current connection.</span>
+<a name="l00076"></a>00076 <span class="comment"> */</span>
+<a name="l00077"></a>00077 handle_connection(s);
+<a name="l00078"></a>00078 }
+<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00080"></a>00080 <span class="comment">/*</span>
+<a name="l00081"></a>00081 <span class="comment"> * This is the protosocket function that handles the communication. A</span>
+<a name="l00082"></a>00082 <span class="comment"> * protosocket function must always return an int, but must never</span>
+<a name="l00083"></a>00083 <span class="comment"> * explicitly return - all return statements are hidden in the PSOCK</span>
+<a name="l00084"></a>00084 <span class="comment"> * macros.</span>
+<a name="l00085"></a>00085 <span class="comment"> */</span>
+<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00087"></a>00087 handle_connection(<span class="keyword">struct</span> <a class="code" href="a00078.html">hello_world_state</a> *s)
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="stringliteral">"Hello. What is your name?\n"</span>);
+<a name="l00092"></a>00092 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="charliteral">'\n'</span>);
+<a name="l00093"></a>00093 strncpy(s-><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>, s-><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>));
+<a name="l00094"></a>00094 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, <span class="stringliteral">"Hello "</span>);
+<a name="l00095"></a>00095 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>, s-><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>);
+<a name="l00096"></a>00096 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00097"></a>00097
+<a name="l00098"></a>00098 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>);
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00171.html b/third_party/uip-1.0/doc/html/a00171.html new file mode 100644 index 0000000..8de185a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00171.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/hello-world/hello-world.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/hello-world/hello-world.h</h1><a href="a00101.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup helloworld Hello, world</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * A small example showing how to write applications with</span>
+<a name="l00011"></a>00011 <span class="comment"> * \ref psock "protosockets".</span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013 <span class="comment"></span>
+<a name="l00014"></a>00014 <span class="comment">/**</span>
+<a name="l00015"></a>00015 <span class="comment"> * \file</span>
+<a name="l00016"></a>00016 <span class="comment"> * Header file for an example of how to write uIP applications</span>
+<a name="l00017"></a>00017 <span class="comment"> * with protosockets.</span>
+<a name="l00018"></a>00018 <span class="comment"> * \author</span>
+<a name="l00019"></a>00019 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00020"></a>00020 <span class="comment"> */</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="preprocessor">#ifndef __HELLO_WORLD_H__</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define __HELLO_WORLD_H__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a>00025 <span class="comment">/* Since this file will be included by uip.h, we cannot include uip.h</span>
+<a name="l00026"></a>00026 <span class="comment"> here. But we might need to include uipopt.h if we need the u8_t and</span>
+<a name="l00027"></a>00027 <span class="comment"> u16_t datatypes. */</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00031"></a>00031
+<a name="l00032"></a>00032 <span class="comment">/* Next, we define the uip_tcp_appstate_t datatype. This is the state</span>
+<a name="l00033"></a>00033 <span class="comment"> of our application, and the memory required for this state is</span>
+<a name="l00034"></a>00034 <span class="comment"> allocated together with each TCP connection. One application state</span>
+<a name="l00035"></a>00035 <span class="comment"> for each TCP connection. */</span>
+<a name="l00036"></a><a class="code" href="a00078.html">00036</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00078.html">hello_world_state</a> {
+<a name="l00037"></a><a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">00037</a> <span class="keyword">struct </span><a class="code" href="a00082.html">psock</a> <a class="code" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">p</a>;
+<a name="l00038"></a><a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">00038</a> <span class="keywordtype">char</span> <a class="code" href="a00078.html#4b1b1436b50ed7638aece35f41421196">inputbuffer</a>[10];
+<a name="l00039"></a><a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">00039</a> <span class="keywordtype">char</span> <a class="code" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">name</a>[40];
+<a name="l00040"></a>00040 } <a class="code" href="a00085.html">uip_tcp_appstate_t</a>;
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="comment">/* Finally we define the application function to be called by uIP. */</span>
+<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello_world_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00044"></a>00044 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00045"></a><a class="code" href="a00162.html#ge28f6cb60e86088d8886d0f804b4f37c">00045</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL hello_world_appcall</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_APPCALL */</span>
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello_world_init</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#endif </span><span class="comment">/* __HELLO_WORLD_H__ */</span>
+<a name="l00051"></a>00051 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00052"></a>00052 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00172.html b/third_party/uip-1.0/doc/html/a00172.html new file mode 100644 index 0000000..1871f07 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00172.html @@ -0,0 +1,489 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/resolv/resolv.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/resolv/resolv.c</h1><a href="a00102.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup resolv DNS resolver</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The uIP DNS resolver functions are used to lookup a hostname and</span>
+<a name="l00011"></a>00011 <span class="comment"> * map it to a numerical IP address. It maintains a list of resolved</span>
+<a name="l00012"></a>00012 <span class="comment"> * hostnames that can be queried with the resolv_lookup()</span>
+<a name="l00013"></a>00013 <span class="comment"> * function. New hostnames can be resolved using the resolv_query()</span>
+<a name="l00014"></a>00014 <span class="comment"> * function.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * When a hostname has been resolved (or found to be non-existant),</span>
+<a name="l00017"></a>00017 <span class="comment"> * the resolver code calls a callback function called resolv_found()</span>
+<a name="l00018"></a>00018 <span class="comment"> * that must be implemented by the module that uses the resolver.</span>
+<a name="l00019"></a>00019 <span class="comment"> */</span>
+<a name="l00020"></a>00020 <span class="comment"></span>
+<a name="l00021"></a>00021 <span class="comment">/**</span>
+<a name="l00022"></a>00022 <span class="comment"> * \file</span>
+<a name="l00023"></a>00023 <span class="comment"> * DNS host name to IP address resolver.</span>
+<a name="l00024"></a>00024 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00025"></a>00025 <span class="comment"> *</span>
+<a name="l00026"></a>00026 <span class="comment"> * This file implements a DNS host name to IP address resolver.</span>
+<a name="l00027"></a>00027 <span class="comment"> */</span>
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="comment">/*</span>
+<a name="l00030"></a>00030 <span class="comment"> * Copyright (c) 2002-2003, Adam Dunkels.</span>
+<a name="l00031"></a>00031 <span class="comment"> * All rights reserved.</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00034"></a>00034 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00035"></a>00035 <span class="comment"> * are met:</span>
+<a name="l00036"></a>00036 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00037"></a>00037 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00038"></a>00038 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00039"></a>00039 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00040"></a>00040 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00041"></a>00041 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00042"></a>00042 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00043"></a>00043 <span class="comment"> * written permission.</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00046"></a>00046 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00047"></a>00047 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00048"></a>00048 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00049"></a>00049 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00050"></a>00050 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00051"></a>00051 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00052"></a>00052 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00053"></a>00053 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00054"></a>00054 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00055"></a>00055 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> */</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include "<a class="code" href="a00103.html">resolv.h</a>"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="preprocessor">#include <string.h></span>
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="preprocessor">#ifndef NULL</span>
+<a name="l00069"></a><a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define NULL (void *)0</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* NULL */</span>
+<a name="l00071"></a>00071 <span class="comment"></span>
+<a name="l00072"></a>00072 <span class="comment">/** \internal The maximum number of retries when asking for a name. */</span>
+<a name="l00073"></a><a class="code" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">00073</a> <span class="preprocessor">#define MAX_RETRIES 8</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/** \internal The DNS message header. */</span>
+<a name="l00076"></a>00076 <span class="keyword">struct </span>dns_hdr {
+<a name="l00077"></a>00077 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> id;
+<a name="l00078"></a>00078 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flags1, flags2;
+<a name="l00079"></a><a class="code" href="a00102.html#96eb4534b574ece96ed36806039f73d3">00079</a> <span class="preprocessor">#define DNS_FLAG1_RESPONSE 0x80</span>
+<a name="l00080"></a><a class="code" href="a00102.html#4350350ce0d4595876743d4c0a720bcc">00080</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_STATUS 0x10</span>
+<a name="l00081"></a><a class="code" href="a00102.html#e7250008b68d1909d54040515eef8ebb">00081</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_INVERSE 0x08</span>
+<a name="l00082"></a><a class="code" href="a00102.html#6a327c0ffd40f69fbcd5f01f12e5745c">00082</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_OPCODE_STANDARD 0x00</span>
+<a name="l00083"></a><a class="code" href="a00102.html#dd685a0f8b5e76a2687cc0f306813bfb">00083</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_AUTHORATIVE 0x04</span>
+<a name="l00084"></a><a class="code" href="a00102.html#2e52037249bb98d7bbecf42e275beb07">00084</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_TRUNC 0x02</span>
+<a name="l00085"></a><a class="code" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">00085</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG1_RD 0x01</span>
+<a name="l00086"></a><a class="code" href="a00102.html#c72f8777ccc45ae274449ea7a9f3de04">00086</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_RA 0x80</span>
+<a name="l00087"></a><a class="code" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">00087</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_MASK 0x0f</span>
+<a name="l00088"></a><a class="code" href="a00102.html#6aaa9da3d0f8d4c0799516d46d939942">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_NONE 0x00</span>
+<a name="l00089"></a><a class="code" href="a00102.html#8ee5e2c8e517d6e4f2198057f81e93c6">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define DNS_FLAG2_ERR_NAME 0x03</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numquestions;
+<a name="l00091"></a>00091 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numanswers;
+<a name="l00092"></a>00092 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numauthrr;
+<a name="l00093"></a>00093 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> numextrarr;
+<a name="l00094"></a>00094 };
+<a name="l00095"></a>00095 <span class="comment"></span>
+<a name="l00096"></a>00096 <span class="comment">/** \internal The DNS answer message structure. */</span>
+<a name="l00097"></a>00097 <span class="keyword">struct </span>dns_answer {
+<a name="l00098"></a>00098 <span class="comment">/* DNS answer record starts with either a domain name or a pointer</span>
+<a name="l00099"></a>00099 <span class="comment"> to a name already present somewhere in the packet. */</span>
+<a name="l00100"></a>00100 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> type;
+<a name="l00101"></a>00101 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <span class="keyword">class</span>;
+<a name="l00102"></a>00102 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ttl[2];
+<a name="l00103"></a>00103 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00104"></a>00104 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00105"></a>00105 };
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keyword">struct </span>namemap {
+<a name="l00108"></a><a class="code" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">00108</a> <span class="preprocessor">#define STATE_UNUSED 0</span>
+<a name="l00109"></a><a class="code" href="a00102.html#bf4401501f1389872141a78b63f325a3">00109</a> <span class="preprocessor"></span><span class="preprocessor">#define STATE_NEW 1</span>
+<a name="l00110"></a><a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">00110</a> <span class="preprocessor"></span><span class="preprocessor">#define STATE_ASKING 2</span>
+<a name="l00111"></a><a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">00111</a> <span class="preprocessor"></span><span class="preprocessor">#define STATE_DONE 3</span>
+<a name="l00112"></a><a class="code" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">00112</a> <span class="preprocessor"></span><span class="preprocessor">#define STATE_ERROR 4</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> state;
+<a name="l00114"></a>00114 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> tmr;
+<a name="l00115"></a>00115 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> retries;
+<a name="l00116"></a>00116 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> seqno;
+<a name="l00117"></a>00117 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> err;
+<a name="l00118"></a>00118 <span class="keywordtype">char</span> name[32];
+<a name="l00119"></a>00119 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00120"></a>00120 };
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 <span class="preprocessor">#ifndef UIP_CONF_RESOLV_ENTRIES</span>
+<a name="l00123"></a><a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">00123</a> <span class="preprocessor"></span><span class="preprocessor">#define RESOLV_ENTRIES 4</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_RESOLV_ENTRIES */</span>
+<a name="l00125"></a>00125 <span class="preprocessor">#define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_RESOLV_ENTRIES */</span>
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keyword">struct </span>namemap names[<a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>];
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> seqno;
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *resolv_conn = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">/** \internal</span>
+<a name="l00138"></a>00138 <span class="comment"> * Walk through a compact encoded DNS name and return the end of it.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * \return The end of the name.</span>
+<a name="l00141"></a>00141 <span class="comment"> */</span>
+<a name="l00142"></a>00142 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00143"></a>00143 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *
+<a name="l00144"></a>00144 parse_name(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *query)
+<a name="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> n;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 <span class="keywordflow">do</span> {
+<a name="l00149"></a>00149 n = *query++;
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordflow">while</span>(n > 0) {
+<a name="l00152"></a>00152 <span class="comment">/* printf("%c", *query);*/</span>
+<a name="l00153"></a>00153 ++query;
+<a name="l00154"></a>00154 --n;
+<a name="l00155"></a>00155 };
+<a name="l00156"></a>00156 <span class="comment">/* printf(".");*/</span>
+<a name="l00157"></a>00157 } <span class="keywordflow">while</span>(*query != 0);
+<a name="l00158"></a>00158 <span class="comment">/* printf("\n");*/</span>
+<a name="l00159"></a>00159 <span class="keywordflow">return</span> query + 1;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00162"></a>00162 <span class="comment">/** \internal</span>
+<a name="l00163"></a>00163 <span class="comment"> * Runs through the list of names to see if there are any that have</span>
+<a name="l00164"></a>00164 <span class="comment"> * not yet been queried and, if so, sends out a query.</span>
+<a name="l00165"></a>00165 <span class="comment"> */</span>
+<a name="l00166"></a>00166 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00168"></a>00168 check_entries(<span class="keywordtype">void</span>)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <span class="keyword">register</span> <span class="keyword">struct </span>dns_hdr *hdr;
+<a name="l00171"></a>00171 <span class="keywordtype">char</span> *query, *nptr, *nameptr;
+<a name="l00172"></a>00172 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00173"></a>00173 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> n;
+<a name="l00174"></a>00174 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *namemapptr;
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00177"></a>00177 namemapptr = &names[i];
+<a name="l00178"></a>00178 <span class="keywordflow">if</span>(namemapptr->state == <a class="code" href="a00102.html#bf4401501f1389872141a78b63f325a3">STATE_NEW</a> ||
+<a name="l00179"></a>00179 namemapptr->state == <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00180"></a>00180 <span class="keywordflow">if</span>(namemapptr->state == <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00181"></a>00181 <span class="keywordflow">if</span>(--namemapptr->tmr == 0) {
+<a name="l00182"></a>00182 <span class="keywordflow">if</span>(++namemapptr->retries == <a class="code" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">MAX_RETRIES</a>) {
+<a name="l00183"></a>00183 namemapptr->state = <a class="code" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a>;
+<a name="l00184"></a>00184 <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
+<a name="l00185"></a>00185 <span class="keywordflow">continue</span>;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187 namemapptr->tmr = namemapptr->retries;
+<a name="l00188"></a>00188 } <span class="keywordflow">else</span> {
+<a name="l00189"></a>00189 <span class="comment">/* printf("Timer %d\n", namemapptr->tmr);*/</span>
+<a name="l00190"></a>00190 <span class="comment">/* Its timer has not run out, so we move on to next</span>
+<a name="l00191"></a>00191 <span class="comment"> entry. */</span>
+<a name="l00192"></a>00192 <span class="keywordflow">continue</span>;
+<a name="l00193"></a>00193 }
+<a name="l00194"></a>00194 } <span class="keywordflow">else</span> {
+<a name="l00195"></a>00195 namemapptr->state = <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>;
+<a name="l00196"></a>00196 namemapptr->tmr = 1;
+<a name="l00197"></a>00197 namemapptr->retries = 0;
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 hdr = (<span class="keyword">struct </span>dns_hdr *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00200"></a>00200 memset(hdr, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> dns_hdr));
+<a name="l00201"></a>00201 hdr->id = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(i);
+<a name="l00202"></a>00202 hdr->flags1 = <a class="code" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">DNS_FLAG1_RD</a>;
+<a name="l00203"></a>00203 hdr->numquestions = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1);
+<a name="l00204"></a>00204 query = (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> + 12;
+<a name="l00205"></a>00205 nameptr = namemapptr->name;
+<a name="l00206"></a>00206 --nameptr;
+<a name="l00207"></a>00207 <span class="comment">/* Convert hostname into suitable query format. */</span>
+<a name="l00208"></a>00208 <span class="keywordflow">do</span> {
+<a name="l00209"></a>00209 ++nameptr;
+<a name="l00210"></a>00210 nptr = query;
+<a name="l00211"></a>00211 ++query;
+<a name="l00212"></a>00212 <span class="keywordflow">for</span>(n = 0; *nameptr != <span class="charliteral">'.'</span> && *nameptr != 0; ++nameptr) {
+<a name="l00213"></a>00213 *query = *nameptr;
+<a name="l00214"></a>00214 ++query;
+<a name="l00215"></a>00215 ++n;
+<a name="l00216"></a>00216 }
+<a name="l00217"></a>00217 *nptr = n;
+<a name="l00218"></a>00218 } <span class="keywordflow">while</span>(*nameptr != 0);
+<a name="l00219"></a>00219 {
+<a name="l00220"></a>00220 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> endquery[] =
+<a name="l00221"></a>00221 {0,0,1,0,1};
+<a name="l00222"></a>00222 memcpy(query, endquery, 5);
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224 <a class="code" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip_udp_send</a>((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(query + 5 - (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>));
+<a name="l00225"></a>00225 <span class="keywordflow">break</span>;
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00230"></a>00230 <span class="comment">/** \internal</span>
+<a name="l00231"></a>00231 <span class="comment"> * Called when new UDP data arrives.</span>
+<a name="l00232"></a>00232 <span class="comment"> */</span>
+<a name="l00233"></a>00233 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00234"></a>00234 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00235"></a>00235 newdata(<span class="keywordtype">void</span>)
+<a name="l00236"></a>00236 {
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> *nameptr;
+<a name="l00238"></a>00238 <span class="keyword">struct </span>dns_answer *ans;
+<a name="l00239"></a>00239 <span class="keyword">struct </span>dns_hdr *hdr;
+<a name="l00240"></a>00240 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> nquestions, nanswers;
+<a name="l00241"></a>00241 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00242"></a>00242 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *namemapptr;
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 hdr = (<span class="keyword">struct </span>dns_hdr *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00245"></a>00245 <span class="comment">/* printf("ID %d\n", htons(hdr->id));</span>
+<a name="l00246"></a>00246 <span class="comment"> printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);</span>
+<a name="l00247"></a>00247 <span class="comment"> printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);</span>
+<a name="l00248"></a>00248 <span class="comment"> printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",</span>
+<a name="l00249"></a>00249 <span class="comment"> htons(hdr->numquestions),</span>
+<a name="l00250"></a>00250 <span class="comment"> htons(hdr->numanswers),</span>
+<a name="l00251"></a>00251 <span class="comment"> htons(hdr->numauthrr),</span>
+<a name="l00252"></a>00252 <span class="comment"> htons(hdr->numextrarr));</span>
+<a name="l00253"></a>00253 <span class="comment"> */</span>
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 <span class="comment">/* The ID in the DNS header should be our entry into the name</span>
+<a name="l00256"></a>00256 <span class="comment"> table. */</span>
+<a name="l00257"></a>00257 i = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->id);
+<a name="l00258"></a>00258 namemapptr = &names[i];
+<a name="l00259"></a>00259 <span class="keywordflow">if</span>(i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a> &&
+<a name="l00260"></a>00260 namemapptr->state == <a class="code" href="a00102.html#55735650f879293d9b7b5fda6753d147">STATE_ASKING</a>) {
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 <span class="comment">/* This entry is now finished. */</span>
+<a name="l00263"></a>00263 namemapptr->state = <a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a>;
+<a name="l00264"></a>00264 namemapptr->err = hdr->flags2 & <a class="code" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">DNS_FLAG2_ERR_MASK</a>;
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 <span class="comment">/* Check for error. If so, call callback to inform. */</span>
+<a name="l00267"></a>00267 <span class="keywordflow">if</span>(namemapptr->err != 0) {
+<a name="l00268"></a>00268 namemapptr->state = <a class="code" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a>;
+<a name="l00269"></a>00269 <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
+<a name="l00270"></a>00270 <span class="keywordflow">return</span>;
+<a name="l00271"></a>00271 }
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="comment">/* We only care about the question(s) and the answers. The authrr</span>
+<a name="l00274"></a>00274 <span class="comment"> and the extrarr are simply discarded. */</span>
+<a name="l00275"></a>00275 nquestions = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->numquestions);
+<a name="l00276"></a>00276 nanswers = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(hdr->numanswers);
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="comment">/* Skip the name in the question. XXX: This should really be</span>
+<a name="l00279"></a>00279 <span class="comment"> checked agains the name in the question, to be sure that they</span>
+<a name="l00280"></a>00280 <span class="comment"> match. */</span>
+<a name="l00281"></a>00281 nameptr = parse_name((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> + 12) + 4;
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordflow">while</span>(nanswers > 0) {
+<a name="l00284"></a>00284 <span class="comment">/* The first byte in the answer resource record determines if it</span>
+<a name="l00285"></a>00285 <span class="comment"> is a compressed record or a normal one. */</span>
+<a name="l00286"></a>00286 <span class="keywordflow">if</span>(*nameptr & 0xc0) {
+<a name="l00287"></a>00287 <span class="comment">/* Compressed name. */</span>
+<a name="l00288"></a>00288 nameptr +=2;
+<a name="l00289"></a>00289 <span class="comment">/* printf("Compressed anwser\n");*/</span>
+<a name="l00290"></a>00290 } <span class="keywordflow">else</span> {
+<a name="l00291"></a>00291 <span class="comment">/* Not compressed name. */</span>
+<a name="l00292"></a>00292 nameptr = parse_name((<span class="keywordtype">char</span> *)nameptr);
+<a name="l00293"></a>00293 }
+<a name="l00294"></a>00294
+<a name="l00295"></a>00295 ans = (<span class="keyword">struct </span>dns_answer *)nameptr;
+<a name="l00296"></a>00296 <span class="comment">/* printf("Answer: type %x, class %x, ttl %x, length %x\n",</span>
+<a name="l00297"></a>00297 <span class="comment"> htons(ans->type), htons(ans->class), (htons(ans->ttl[0])</span>
+<a name="l00298"></a>00298 <span class="comment"> << 16) | htons(ans->ttl[1]), htons(ans->len));*/</span>
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 <span class="comment">/* Check for IP address type and Internet class. Others are</span>
+<a name="l00301"></a>00301 <span class="comment"> discarded. */</span>
+<a name="l00302"></a>00302 <span class="keywordflow">if</span>(ans->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1) &&
+<a name="l00303"></a>00303 ans->class == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1) &&
+<a name="l00304"></a>00304 ans->len == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(4)) {
+<a name="l00305"></a>00305 <span class="comment">/* printf("IP address %d.%d.%d.%d\n",</span>
+<a name="l00306"></a>00306 <span class="comment"> htons(ans->ipaddr[0]) >> 8,</span>
+<a name="l00307"></a>00307 <span class="comment"> htons(ans->ipaddr[0]) & 0xff,</span>
+<a name="l00308"></a>00308 <span class="comment"> htons(ans->ipaddr[1]) >> 8,</span>
+<a name="l00309"></a>00309 <span class="comment"> htons(ans->ipaddr[1]) & 0xff);*/</span>
+<a name="l00310"></a>00310 <span class="comment">/* XXX: we should really check that this IP address is the one</span>
+<a name="l00311"></a>00311 <span class="comment"> we want. */</span>
+<a name="l00312"></a>00312 namemapptr->ipaddr[0] = ans->ipaddr[0];
+<a name="l00313"></a>00313 namemapptr->ipaddr[1] = ans->ipaddr[1];
+<a name="l00314"></a>00314
+<a name="l00315"></a>00315 <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(namemapptr->name, namemapptr->ipaddr);
+<a name="l00316"></a>00316 <span class="keywordflow">return</span>;
+<a name="l00317"></a>00317 } <span class="keywordflow">else</span> {
+<a name="l00318"></a>00318 nameptr = nameptr + 10 + <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(ans->len);
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 --nanswers;
+<a name="l00321"></a>00321 }
+<a name="l00322"></a>00322 }
+<a name="l00323"></a>00323
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00326"></a>00326 <span class="comment">/** \internal</span>
+<a name="l00327"></a>00327 <span class="comment"> * The main UDP function.</span>
+<a name="l00328"></a>00328 <span class="comment"> */</span>
+<a name="l00329"></a>00329 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00330"></a>00330 <span class="keywordtype">void</span>
+<a name="l00331"></a><a class="code" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">00331</a> <a class="code" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00332"></a>00332 {
+<a name="l00333"></a>00333 <span class="keywordflow">if</span>(<a class="code" href="a00095.html">uip_udp_conn</a>->rport == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(53)) {
+<a name="l00334"></a>00334 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00335"></a>00335 check_entries();
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00338"></a>00338 newdata();
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341 }
+<a name="l00342"></a>00342 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00343"></a>00343 <span class="comment">/**</span>
+<a name="l00344"></a>00344 <span class="comment"> * Queues a name so that a question for the name will be sent out.</span>
+<a name="l00345"></a>00345 <span class="comment"> *</span>
+<a name="l00346"></a>00346 <span class="comment"> * \param name The hostname that is to be queried.</span>
+<a name="l00347"></a>00347 <span class="comment"> */</span>
+<a name="l00348"></a>00348 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00349"></a>00349 <span class="keywordtype">void</span>
+<a name="l00350"></a><a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">00350</a> <a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(<span class="keywordtype">char</span> *name)
+<a name="l00351"></a>00351 {
+<a name="l00352"></a>00352 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00353"></a>00353 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> lseq, lseqi;
+<a name="l00354"></a>00354 <span class="keyword">register</span> <span class="keyword">struct </span>namemap *nameptr;
+<a name="l00355"></a>00355
+<a name="l00356"></a>00356 lseq = lseqi = 0;
+<a name="l00357"></a>00357
+<a name="l00358"></a>00358 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00359"></a>00359 nameptr = &names[i];
+<a name="l00360"></a>00360 <span class="keywordflow">if</span>(nameptr->state == <a class="code" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">STATE_UNUSED</a>) {
+<a name="l00361"></a>00361 <span class="keywordflow">break</span>;
+<a name="l00362"></a>00362 }
+<a name="l00363"></a>00363 <span class="keywordflow">if</span>(seqno - nameptr->seqno > lseq) {
+<a name="l00364"></a>00364 lseq = seqno - nameptr->seqno;
+<a name="l00365"></a>00365 lseqi = i;
+<a name="l00366"></a>00366 }
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369 <span class="keywordflow">if</span>(i == <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>) {
+<a name="l00370"></a>00370 i = lseqi;
+<a name="l00371"></a>00371 nameptr = &names[i];
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373
+<a name="l00374"></a>00374 <span class="comment">/* printf("Using entry %d\n", i);*/</span>
+<a name="l00375"></a>00375
+<a name="l00376"></a>00376 strcpy(nameptr->name, name);
+<a name="l00377"></a>00377 nameptr->state = <a class="code" href="a00102.html#bf4401501f1389872141a78b63f325a3">STATE_NEW</a>;
+<a name="l00378"></a>00378 nameptr->seqno = seqno;
+<a name="l00379"></a>00379 ++seqno;
+<a name="l00380"></a>00380 }
+<a name="l00381"></a>00381 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00382"></a>00382 <span class="comment">/**</span>
+<a name="l00383"></a>00383 <span class="comment"> * Look up a hostname in the array of known hostnames.</span>
+<a name="l00384"></a>00384 <span class="comment"> *</span>
+<a name="l00385"></a>00385 <span class="comment"> * \note This function only looks in the internal array of known</span>
+<a name="l00386"></a>00386 <span class="comment"> * hostnames, it does not send out a query for the hostname if none</span>
+<a name="l00387"></a>00387 <span class="comment"> * was found. The function resolv_query() can be used to send a query</span>
+<a name="l00388"></a>00388 <span class="comment"> * for a hostname.</span>
+<a name="l00389"></a>00389 <span class="comment"> *</span>
+<a name="l00390"></a>00390 <span class="comment"> * \return A pointer to a 4-byte representation of the hostname's IP</span>
+<a name="l00391"></a>00391 <span class="comment"> * address, or NULL if the hostname was not found in the array of</span>
+<a name="l00392"></a>00392 <span class="comment"> * hostnames.</span>
+<a name="l00393"></a>00393 <span class="comment"> */</span>
+<a name="l00394"></a>00394 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00395"></a>00395 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *
+<a name="l00396"></a><a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">00396</a> <a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(<span class="keywordtype">char</span> *name)
+<a name="l00397"></a>00397 {
+<a name="l00398"></a>00398 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00399"></a>00399 <span class="keyword">struct </span>namemap *nameptr;
+<a name="l00400"></a>00400
+<a name="l00401"></a>00401 <span class="comment">/* Walk through the list to see if the name is in there. If it is</span>
+<a name="l00402"></a>00402 <span class="comment"> not, we return NULL. */</span>
+<a name="l00403"></a>00403 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00404"></a>00404 nameptr = &names[i];
+<a name="l00405"></a>00405 <span class="keywordflow">if</span>(nameptr->state == <a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a> &&
+<a name="l00406"></a>00406 strcmp(name, nameptr->name) == 0) {
+<a name="l00407"></a>00407 <span class="keywordflow">return</span> nameptr->ipaddr;
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00411"></a>00411 }
+<a name="l00412"></a>00412 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00413"></a>00413 <span class="comment">/**</span>
+<a name="l00414"></a>00414 <span class="comment"> * Obtain the currently configured DNS server.</span>
+<a name="l00415"></a>00415 <span class="comment"> *</span>
+<a name="l00416"></a>00416 <span class="comment"> * \return A pointer to a 4-byte representation of the IP address of</span>
+<a name="l00417"></a>00417 <span class="comment"> * the currently configured DNS server or NULL if no DNS server has</span>
+<a name="l00418"></a>00418 <span class="comment"> * been configured.</span>
+<a name="l00419"></a>00419 <span class="comment"> */</span>
+<a name="l00420"></a>00420 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00421"></a>00421 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *
+<a name="l00422"></a><a class="code" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">00422</a> <a class="code" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a>(<span class="keywordtype">void</span>)
+<a name="l00423"></a>00423 {
+<a name="l00424"></a>00424 <span class="keywordflow">if</span>(resolv_conn == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00425"></a>00425 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00426"></a>00426 }
+<a name="l00427"></a>00427 <span class="keywordflow">return</span> resolv_conn-><a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>;
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00430"></a>00430 <span class="comment">/**</span>
+<a name="l00431"></a>00431 <span class="comment"> * Configure which DNS server to use for queries.</span>
+<a name="l00432"></a>00432 <span class="comment"> *</span>
+<a name="l00433"></a>00433 <span class="comment"> * \param dnsserver A pointer to a 4-byte representation of the IP</span>
+<a name="l00434"></a>00434 <span class="comment"> * address of the DNS server to be configured.</span>
+<a name="l00435"></a>00435 <span class="comment"> */</span>
+<a name="l00436"></a>00436 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00437"></a>00437 <span class="keywordtype">void</span>
+<a name="l00438"></a><a class="code" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">00438</a> <a class="code" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver)
+<a name="l00439"></a>00439 {
+<a name="l00440"></a>00440 <span class="keywordflow">if</span>(resolv_conn != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00441"></a>00441 <a class="code" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip_udp_remove</a>(resolv_conn);
+<a name="l00442"></a>00442 }
+<a name="l00443"></a>00443
+<a name="l00444"></a>00444 resolv_conn = <a class="code" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip_udp_new</a>(dnsserver, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(53));
+<a name="l00445"></a>00445 }
+<a name="l00446"></a>00446 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00447"></a>00447 <span class="comment">/**</span>
+<a name="l00448"></a>00448 <span class="comment"> * Initalize the resolver.</span>
+<a name="l00449"></a>00449 <span class="comment"> */</span>
+<a name="l00450"></a>00450 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00451"></a>00451 <span class="keywordtype">void</span>
+<a name="l00452"></a><a class="code" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">00452</a> <a class="code" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a>(<span class="keywordtype">void</span>)
+<a name="l00453"></a>00453 {
+<a name="l00454"></a>00454 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i;
+<a name="l00455"></a>00455
+<a name="l00456"></a>00456 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a>; ++i) {
+<a name="l00457"></a>00457 names[i].state = <a class="code" href="a00102.html#876c82c946543cd70c141e41417138e0">STATE_DONE</a>;
+<a name="l00458"></a>00458 }
+<a name="l00459"></a>00459
+<a name="l00460"></a>00460 }
+<a name="l00461"></a>00461 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00462"></a>00462 <span class="comment"></span>
+<a name="l00463"></a>00463 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00464"></a>00464 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00173.html b/third_party/uip-1.0/doc/html/a00173.html new file mode 100644 index 0000000..dcd2f41 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00173.html @@ -0,0 +1,100 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/resolv/resolv.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/resolv/resolv.h</h1><a href="a00103.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup resolv</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span><span class="comment"></span>
+<a name="l00005"></a>00005 <span class="comment">/**</span>
+<a name="l00006"></a>00006 <span class="comment"> * \file</span>
+<a name="l00007"></a>00007 <span class="comment"> * DNS resolver code header file.</span>
+<a name="l00008"></a>00008 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00009"></a>00009 <span class="comment"> */</span>
+<a name="l00010"></a>00010
+<a name="l00011"></a>00011 <span class="comment">/*</span>
+<a name="l00012"></a>00012 <span class="comment"> * Copyright (c) 2002-2003, Adam Dunkels.</span>
+<a name="l00013"></a>00013 <span class="comment"> * All rights reserved.</span>
+<a name="l00014"></a>00014 <span class="comment"> *</span>
+<a name="l00015"></a>00015 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00016"></a>00016 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00017"></a>00017 <span class="comment"> * are met:</span>
+<a name="l00018"></a>00018 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00019"></a>00019 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00020"></a>00020 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00021"></a>00021 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00022"></a>00022 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00023"></a>00023 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00024"></a>00024 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00025"></a>00025 <span class="comment"> * written permission.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00028"></a>00028 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00029"></a>00029 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00030"></a>00030 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00031"></a>00031 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00032"></a>00032 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00033"></a>00033 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00034"></a>00034 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00035"></a>00035 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00036"></a>00036 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00037"></a>00037 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00040"></a>00040 <span class="comment"> *</span>
+<a name="l00041"></a>00041 <span class="comment"> * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> */</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifndef __RESOLV_H__</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define __RESOLV_H__</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">00047</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a>;
+<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a><a class="code" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">00049</a> <span class="preprocessor">#define UIP_UDP_APPCALL resolv_appcall</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00052"></a>00052 <span class="comment"></span>
+<a name="l00053"></a>00053 <span class="comment">/**</span>
+<a name="l00054"></a>00054 <span class="comment"> * Callback function which is called when a hostname is found.</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * This function must be implemented by the module that uses the DNS</span>
+<a name="l00057"></a>00057 <span class="comment"> * resolver. It is called when a hostname is found, or when a hostname</span>
+<a name="l00058"></a>00058 <span class="comment"> * was not found.</span>
+<a name="l00059"></a>00059 <span class="comment"> *</span>
+<a name="l00060"></a>00060 <span class="comment"> * \param name A pointer to the name that was looked up. \param</span>
+<a name="l00061"></a>00061 <span class="comment"> * ipaddr A pointer to a 4-byte array containing the IP address of the</span>
+<a name="l00062"></a>00062 <span class="comment"> * hostname, or NULL if the hostname could not be found.</span>
+<a name="l00063"></a>00063 <span class="comment"> */</span>
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv_found</a>(<span class="keywordtype">char</span> *name, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *ipaddr);
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="comment">/* Functions. */</span>
+<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv_conf</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *dnsserver);
+<a name="l00068"></a>00068 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *<a class="code" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv_getserver</a>(<span class="keywordtype">void</span>);
+<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a>(<span class="keywordtype">void</span>);
+<a name="l00070"></a>00070 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *<a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(<span class="keywordtype">char</span> *name);
+<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(<span class="keywordtype">char</span> *name);
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 <span class="preprocessor">#endif </span><span class="comment">/* __RESOLV_H__ */</span>
+<a name="l00074"></a>00074 <span class="comment"></span>
+<a name="l00075"></a>00075 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00174.html b/third_party/uip-1.0/doc/html/a00174.html new file mode 100644 index 0000000..611a5bb --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00174.html @@ -0,0 +1,287 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/smtp/smtp.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/smtp/smtp.c</h1><a href="a00104.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup smtp SMTP E-mail sender</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is</span>
+<a name="l00011"></a>00011 <span class="comment"> * the standard way of sending and transfering e-mail on the</span>
+<a name="l00012"></a>00012 <span class="comment"> * Internet. This simple example implementation is intended as an</span>
+<a name="l00013"></a>00013 <span class="comment"> * example of how to implement protocols in uIP, and is able to send</span>
+<a name="l00014"></a>00014 <span class="comment"> * out e-mail but has not been extensively tested.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016 <span class="comment"></span>
+<a name="l00017"></a>00017 <span class="comment">/**</span>
+<a name="l00018"></a>00018 <span class="comment"> * \file</span>
+<a name="l00019"></a>00019 <span class="comment"> * SMTP example implementation</span>
+<a name="l00020"></a>00020 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00021"></a>00021 <span class="comment"> */</span>
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <span class="comment">/*</span>
+<a name="l00024"></a>00024 <span class="comment"> * Copyright (c) 2004, Adam Dunkels.</span>
+<a name="l00025"></a>00025 <span class="comment"> * All rights reserved.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00028"></a>00028 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00029"></a>00029 <span class="comment"> * are met:</span>
+<a name="l00030"></a>00030 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00031"></a>00031 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00032"></a>00032 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00033"></a>00033 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00034"></a>00034 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00035"></a>00035 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00036"></a>00036 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00037"></a>00037 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00040"></a>00040 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00041"></a>00041 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00042"></a>00042 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00043"></a>00043 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00044"></a>00044 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00045"></a>00045 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00046"></a>00046 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00047"></a>00047 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00048"></a>00048 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00049"></a>00049 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00052"></a>00052 <span class="comment"> *</span>
+<a name="l00053"></a>00053 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00056"></a>00056 <span class="comment"> */</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include "<a class="code" href="a00105.html">smtp.h</a>"</span>
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#include "smtp-strings.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include <string.h></span>
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00085.html">smtp_state</a> s;
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">char</span> *localhostname;
+<a name="l00068"></a>00068 <span class="keyword">static</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> smtpserver;
+<a name="l00069"></a>00069
+<a name="l00070"></a><a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">00070</a> <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00071"></a><a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a><a class="code" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">00073</a> <span class="preprocessor">#define ISO_period 0x2e</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span>
+<a name="l00075"></a><a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">00075</a> <span class="preprocessor">#define ISO_2 0x32</span>
+<a name="l00076"></a><a class="code" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">00076</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_3 0x33</span>
+<a name="l00077"></a><a class="code" href="a00161.html#g28cf9765e4b57451af559ab988ad7160">00077</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_4 0x34</span>
+<a name="l00078"></a><a class="code" href="a00161.html#g17ccd786400fd08b941e11046df1668f">00078</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_5 0x35</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00082"></a>00082 <span class="keyword">static</span>
+<a name="l00083"></a>00083 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(smtp_thread(<span class="keywordtype">void</span>))
+<a name="l00084"></a>00084 {
+<a name="l00085"></a>00085 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s.psock);
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">if</span>(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+<a name="l00090"></a>00090 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00091"></a>00091 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(2);
+<a name="l00092"></a>00092 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00093"></a>00093 }
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_helo);
+<a name="l00096"></a>00096 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, localhostname);
+<a name="l00097"></a>00097 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00102"></a>00102 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00103"></a>00103 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(3);
+<a name="l00104"></a>00104 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_mail_from);
+<a name="l00108"></a>00108 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>);
+<a name="l00109"></a>00109 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00114"></a>00114 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00115"></a>00115 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(4);
+<a name="l00116"></a>00116 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_rcpt_to);
+<a name="l00120"></a>00120 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>);
+<a name="l00121"></a>00121 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00126"></a>00126 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00127"></a>00127 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(5);
+<a name="l00128"></a>00128 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keywordflow">if</span>(s.cc != 0) {
+<a name="l00132"></a>00132 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_rcpt_to);
+<a name="l00133"></a>00133 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.cc);
+<a name="l00134"></a>00134 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00139"></a>00139 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00140"></a>00140 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(6);
+<a name="l00141"></a>00141 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 }
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_data);
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">ISO_3</a>) {
+<a name="l00150"></a>00150 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00151"></a>00151 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(7);
+<a name="l00152"></a>00152 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_to);
+<a name="l00156"></a>00156 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>);
+<a name="l00157"></a>00157 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 <span class="keywordflow">if</span>(s.cc != 0) {
+<a name="l00160"></a>00160 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_cc);
+<a name="l00161"></a>00161 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.cc);
+<a name="l00162"></a>00162 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00163"></a>00163 }
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_from);
+<a name="l00166"></a>00166 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>);
+<a name="l00167"></a>00167 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_subject);
+<a name="l00170"></a>00170 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, s.<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a>);
+<a name="l00171"></a>00171 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnl);
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 <a class="code" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">PSOCK_SEND</a>(&s.psock, s.<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a>, s.<a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a>);
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_crnlperiodcrnl);
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s.psock, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00178"></a>00178 <span class="keywordflow">if</span>(s.inputbuffer[0] != <a class="code" href="a00161.html#g34b924954ba5707d536df28d71a80d39">ISO_2</a>) {
+<a name="l00179"></a>00179 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s.psock);
+<a name="l00180"></a>00180 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(8);
+<a name="l00181"></a>00181 <a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">PSOCK_EXIT</a>(&s.psock);
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s.psock, (<span class="keywordtype">char</span> *)smtp_quit);
+<a name="l00185"></a>00185 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(<a class="code" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">SMTP_ERR_OK</a>);
+<a name="l00186"></a>00186 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s.psock);
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00189"></a>00189 <span class="keywordtype">void</span>
+<a name="l00190"></a><a class="code" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">00190</a> <a class="code" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00191"></a>00191 {
+<a name="l00192"></a>00192 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()) {
+<a name="l00193"></a>00193 s.connected = 0;
+<a name="l00194"></a>00194 <span class="keywordflow">return</span>;
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>() || <a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00197"></a>00197 s.connected = 0;
+<a name="l00198"></a>00198 <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(1);
+<a name="l00199"></a>00199 <span class="keywordflow">return</span>;
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201 smtp_thread();
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00204"></a>00204 <span class="comment">/**</span>
+<a name="l00205"></a>00205 <span class="comment"> * Specificy an SMTP server and hostname.</span>
+<a name="l00206"></a>00206 <span class="comment"> *</span>
+<a name="l00207"></a>00207 <span class="comment"> * This function is used to configure the SMTP module with an SMTP</span>
+<a name="l00208"></a>00208 <span class="comment"> * server and the hostname of the host.</span>
+<a name="l00209"></a>00209 <span class="comment"> *</span>
+<a name="l00210"></a>00210 <span class="comment"> * \param lhostname The hostname of the uIP host.</span>
+<a name="l00211"></a>00211 <span class="comment"> *</span>
+<a name="l00212"></a>00212 <span class="comment"> * \param server A pointer to a 4-byte array representing the IP</span>
+<a name="l00213"></a>00213 <span class="comment"> * address of the SMTP server to be configured.</span>
+<a name="l00214"></a>00214 <span class="comment"> */</span>
+<a name="l00215"></a>00215 <span class="keywordtype">void</span>
+<a name="l00216"></a><a class="code" href="a00161.html#g37e3103b9591790d484a450525739661">00216</a> smtp_configure(<span class="keywordtype">char</span> *lhostname, <span class="keywordtype">void</span> *server)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 localhostname = lhostname;
+<a name="l00219"></a>00219 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(smtpserver, server);
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00222"></a>00222 <span class="comment">/**</span>
+<a name="l00223"></a>00223 <span class="comment"> * Send an e-mail.</span>
+<a name="l00224"></a>00224 <span class="comment"> *</span>
+<a name="l00225"></a>00225 <span class="comment"> * \param to The e-mail address of the receiver of the e-mail.</span>
+<a name="l00226"></a>00226 <span class="comment"> * \param cc The e-mail address of the CC: receivers of the e-mail.</span>
+<a name="l00227"></a>00227 <span class="comment"> * \param from The e-mail address of the sender of the e-mail.</span>
+<a name="l00228"></a>00228 <span class="comment"> * \param subject The subject of the e-mail.</span>
+<a name="l00229"></a>00229 <span class="comment"> * \param msg The actual e-mail message.</span>
+<a name="l00230"></a>00230 <span class="comment"> * \param msglen The length of the e-mail message.</span>
+<a name="l00231"></a>00231 <span class="comment"> */</span>
+<a name="l00232"></a>00232 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
+<a name="l00233"></a><a class="code" href="a00161.html#gf0349a8481565e80f55a751e2b408d6d">00233</a> smtp_send(<span class="keywordtype">char</span> *<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>, <span class="keywordtype">char</span> *cc, <span class="keywordtype">char</span> *<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>,
+<a name="l00234"></a>00234 <span class="keywordtype">char</span> *<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a>, <span class="keywordtype">char</span> *<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a>)
+<a name="l00235"></a>00235 {
+<a name="l00236"></a>00236 <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *conn;
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 conn = <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(smtpserver, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(25));
+<a name="l00239"></a>00239 <span class="keywordflow">if</span>(conn == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> 0;
+<a name="l00241"></a>00241 }
+<a name="l00242"></a>00242 s.connected = 1;
+<a name="l00243"></a>00243 s.<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a> = to;
+<a name="l00244"></a>00244 s.cc = cc;
+<a name="l00245"></a>00245 s.<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a> = from;
+<a name="l00246"></a>00246 s.<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a> = subject;
+<a name="l00247"></a>00247 s.<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a> = msg;
+<a name="l00248"></a>00248 s.<a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a> = msglen;
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s.psock, s.inputbuffer, <span class="keyword">sizeof</span>(s.inputbuffer));
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="keywordflow">return</span> 1;
+<a name="l00253"></a>00253 }
+<a name="l00254"></a>00254 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00255"></a>00255 <span class="keywordtype">void</span>
+<a name="l00256"></a><a class="code" href="a00161.html#g64807ba7c221ddf735572d05021539f2">00256</a> <a class="code" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a>(<span class="keywordtype">void</span>)
+<a name="l00257"></a>00257 {
+<a name="l00258"></a>00258 s.connected = 0;
+<a name="l00259"></a>00259 }
+<a name="l00260"></a>00260 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00261"></a>00261 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00262"></a>00262 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00175.html b/third_party/uip-1.0/doc/html/a00175.html new file mode 100644 index 0000000..9f7ddea --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00175.html @@ -0,0 +1,128 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/smtp/smtp.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/smtp/smtp.h</h1><a href="a00105.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment"></span>
+<a name="l00002"></a>00002 <span class="comment">/**</span>
+<a name="l00003"></a>00003 <span class="comment"> * \addtogroup smtp</span>
+<a name="l00004"></a>00004 <span class="comment"> * @{</span>
+<a name="l00005"></a>00005 <span class="comment"> */</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="comment"></span>
+<a name="l00008"></a>00008 <span class="comment">/**</span>
+<a name="l00009"></a>00009 <span class="comment"> * \file</span>
+<a name="l00010"></a>00010 <span class="comment"> * SMTP header file</span>
+<a name="l00011"></a>00011 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="comment">/*</span>
+<a name="l00015"></a>00015 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00016"></a>00016 <span class="comment"> * All rights reserved.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00019"></a>00019 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00020"></a>00020 <span class="comment"> * are met:</span>
+<a name="l00021"></a>00021 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00022"></a>00022 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00023"></a>00023 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00024"></a>00024 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00025"></a>00025 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00026"></a>00026 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00027"></a>00027 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00028"></a>00028 <span class="comment"> * written permission.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00031"></a>00031 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00032"></a>00032 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00033"></a>00033 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00034"></a>00034 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00035"></a>00035 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00036"></a>00036 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00037"></a>00037 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00038"></a>00038 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00039"></a>00039 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00040"></a>00040 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00041"></a>00041 <span class="comment"> *</span>
+<a name="l00042"></a>00042 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#ifndef __SMTP_H__</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define __SMTP_H__</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00051"></a>00051 <span class="comment"></span>
+<a name="l00052"></a>00052 <span class="comment">/**</span>
+<a name="l00053"></a>00053 <span class="comment"> * Error number that signifies a non-error condition.</span>
+<a name="l00054"></a>00054 <span class="comment"> */</span>
+<a name="l00055"></a><a class="code" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">00055</a> <span class="preprocessor">#define SMTP_ERR_OK 0</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00057"></a>00057 <span class="comment">/**</span>
+<a name="l00058"></a>00058 <span class="comment"> * Callback function that is called when an e-mail transmission is</span>
+<a name="l00059"></a>00059 <span class="comment"> * done.</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> * This function must be implemented by the module that uses the SMTP</span>
+<a name="l00062"></a>00062 <span class="comment"> * module.</span>
+<a name="l00063"></a>00063 <span class="comment"> *</span>
+<a name="l00064"></a>00064 <span class="comment"> * \param error The number of the error if an error occured, or</span>
+<a name="l00065"></a>00065 <span class="comment"> * SMTP_ERR_OK.</span>
+<a name="l00066"></a>00066 <span class="comment"> */</span>
+<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp_done</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> error);
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp_init</a>(<span class="keywordtype">void</span>);
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="comment">/* Functions. */</span>
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> smtp_configure(<span class="keywordtype">char</span> *localhostname, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *smtpserver);
+<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> smtp_send(<span class="keywordtype">char</span> *to, <span class="keywordtype">char</span> *from,
+<a name="l00074"></a>00074 <span class="keywordtype">char</span> *subject, <span class="keywordtype">char</span> *msg,
+<a name="l00075"></a>00075 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> msglen);
+<a name="l00076"></a><a class="code" href="a00161.html#gcff75c8c930abd6ff168e85373a4eb92">00076</a> <span class="preprocessor">#define SMTP_SEND(to, cc, from, subject, msg) \</span>
+<a name="l00077"></a>00077 <span class="preprocessor"> smtp_send(to, cc, from, subject, msg, strlen(msg))</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span>
+<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00080"></a>00080
+<a name="l00081"></a><a class="code" href="a00085.html">00081</a> <span class="keyword">struct </span><a class="code" href="a00085.html">smtp_state</a> {
+<a name="l00082"></a><a class="code" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">00082</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">state</a>;
+<a name="l00083"></a><a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">00083</a> <span class="keywordtype">char</span> *<a class="code" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">to</a>;
+<a name="l00084"></a><a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">00084</a> <span class="keywordtype">char</span> *<a class="code" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">from</a>;
+<a name="l00085"></a><a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">00085</a> <span class="keywordtype">char</span> *<a class="code" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">subject</a>;
+<a name="l00086"></a><a class="code" href="a00085.html#04833004cec509a41c502429df308e35">00086</a> <span class="keywordtype">char</span> *<a class="code" href="a00085.html#04833004cec509a41c502429df308e35">msg</a>;
+<a name="l00087"></a><a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">00087</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">msglen</a>;
+<a name="l00088"></a>00088
+<a name="l00089"></a><a class="code" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">00089</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00085.html#68204df6bde3e3c27271ebde10579a57">sentlen</a>, <a class="code" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">textlen</a>;
+<a name="l00090"></a><a class="code" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">00090</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">sendptr</a>;
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 };
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00096"></a><a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">00096</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL smtp_appcall</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00098"></a><a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">00098</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00085.html">smtp_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="preprocessor">#endif </span><span class="comment">/* __SMTP_H__ */</span>
+<a name="l00102"></a>00102 <span class="comment"></span>
+<a name="l00103"></a>00103 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00176.html b/third_party/uip-1.0/doc/html/a00176.html new file mode 100644 index 0000000..2385ff0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00176.html @@ -0,0 +1,148 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/telnetd/shell.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/telnetd/shell.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00014"></a>00014 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00015"></a>00015 <span class="comment"> * written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00019"></a>00019 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00021"></a>00021 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00023"></a>00023 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00024"></a>00024 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00025"></a>00025 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00026"></a>00026 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00027"></a>00027 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="a00107.html">shell.h</a>"</span>
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039 <span class="keyword">struct </span>ptentry {
+<a name="l00040"></a>00040 <span class="keywordtype">char</span> *commandstr;
+<a name="l00041"></a>00041 void (* pfunc)(<span class="keywordtype">char</span> *str);
+<a name="l00042"></a>00042 };
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="preprocessor">#define SHELL_PROMPT "uIP 1.0> "</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00048"></a>00048 parse(<span class="keyword">register</span> <span class="keywordtype">char</span> *str, <span class="keyword">struct</span> ptentry *t)
+<a name="l00049"></a>00049 {
+<a name="l00050"></a>00050 <span class="keyword">struct </span>ptentry *p;
+<a name="l00051"></a>00051 <span class="keywordflow">for</span>(p = t; p->commandstr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; ++p) {
+<a name="l00052"></a>00052 <span class="keywordflow">if</span>(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) {
+<a name="l00053"></a>00053 <span class="keywordflow">break</span>;
+<a name="l00054"></a>00054 }
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 p->pfunc(str);
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00061"></a>00061 inttostr(<span class="keyword">register</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)
+<a name="l00062"></a>00062 {
+<a name="l00063"></a>00063 str[0] = <span class="charliteral">'0'</span> + i / 100;
+<a name="l00064"></a>00064 <span class="keywordflow">if</span>(str[0] == <span class="charliteral">'0'</span>) {
+<a name="l00065"></a>00065 str[0] = <span class="charliteral">' '</span>;
+<a name="l00066"></a>00066 }
+<a name="l00067"></a>00067 str[1] = <span class="charliteral">'0'</span> + (i / 10) % 10;
+<a name="l00068"></a>00068 <span class="keywordflow">if</span>(str[0] == <span class="charliteral">' '</span> && str[1] == <span class="charliteral">'0'</span>) {
+<a name="l00069"></a>00069 str[1] = <span class="charliteral">' '</span>;
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071 str[2] = <span class="charliteral">'0'</span> + i % 10;
+<a name="l00072"></a>00072 str[3] = <span class="charliteral">' '</span>;
+<a name="l00073"></a>00073 str[4] = 0;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00077"></a>00077 help(<span class="keywordtype">char</span> *str)
+<a name="l00078"></a>00078 {
+<a name="l00079"></a>00079 shell_output(<span class="stringliteral">"Available commands:"</span>, <span class="stringliteral">""</span>);
+<a name="l00080"></a>00080 shell_output(<span class="stringliteral">"stats - show network statistics"</span>, <span class="stringliteral">""</span>);
+<a name="l00081"></a>00081 shell_output(<span class="stringliteral">"conn - show TCP connections"</span>, <span class="stringliteral">""</span>);
+<a name="l00082"></a>00082 shell_output(<span class="stringliteral">"help, ? - show help"</span>, <span class="stringliteral">""</span>);
+<a name="l00083"></a>00083 shell_output(<span class="stringliteral">"exit - exit shell"</span>, <span class="stringliteral">""</span>);
+<a name="l00084"></a>00084 }
+<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00087"></a>00087 unknown(<span class="keywordtype">char</span> *str)
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 <span class="keywordflow">if</span>(strlen(str) > 0) {
+<a name="l00090"></a>00090 shell_output(<span class="stringliteral">"Unknown command: "</span>, str);
+<a name="l00091"></a>00091 }
+<a name="l00092"></a>00092 }
+<a name="l00093"></a>00093 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keyword">struct </span>ptentry parsetab[] =
+<a name="l00095"></a>00095 {{<span class="stringliteral">"stats"</span>, help},
+<a name="l00096"></a>00096 {<span class="stringliteral">"conn"</span>, help},
+<a name="l00097"></a>00097 {<span class="stringliteral">"help"</span>, help},
+<a name="l00098"></a>00098 {<span class="stringliteral">"exit"</span>, shell_quit},
+<a name="l00099"></a>00099 {<span class="stringliteral">"?"</span>, help},
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="comment">/* Default action */</span>
+<a name="l00102"></a>00102 {<a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, unknown}};
+<a name="l00103"></a>00103 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00104"></a>00104 <span class="keywordtype">void</span>
+<a name="l00105"></a><a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">00105</a> <a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a>(<span class="keywordtype">void</span>)
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00109"></a>00109 <span class="keywordtype">void</span>
+<a name="l00110"></a><a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">00110</a> <a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a>(<span class="keywordtype">void</span>)
+<a name="l00111"></a>00111 {
+<a name="l00112"></a>00112 shell_output(<span class="stringliteral">"uIP command shell"</span>, <span class="stringliteral">""</span>);
+<a name="l00113"></a>00113 shell_output(<span class="stringliteral">"Type '?' and return for help"</span>, <span class="stringliteral">""</span>);
+<a name="l00114"></a>00114 shell_prompt(SHELL_PROMPT);
+<a name="l00115"></a>00115 }
+<a name="l00116"></a>00116 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00117"></a>00117 <span class="keywordtype">void</span>
+<a name="l00118"></a><a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">00118</a> <a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a>(<span class="keywordtype">char</span> *cmd)
+<a name="l00119"></a>00119 {
+<a name="l00120"></a>00120 parse(cmd, parsetab);
+<a name="l00121"></a>00121 shell_prompt(SHELL_PROMPT);
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00177.html b/third_party/uip-1.0/doc/html/a00177.html new file mode 100644 index 0000000..39296cb --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00177.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/telnetd/shell.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/telnetd/shell.h</h1><a href="a00107.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \file</span>
+<a name="l00003"></a>00003 <span class="comment"> * Interface for the Contiki shell.</span>
+<a name="l00004"></a>00004 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Some of the functions declared in this file must be implemented as</span>
+<a name="l00007"></a>00007 <span class="comment"> * a shell back-end in the architecture specific files of a Contiki</span>
+<a name="l00008"></a>00008 <span class="comment"> * port.</span>
+<a name="l00009"></a>00009 <span class="comment"> */</span>
+<a name="l00010"></a>00010
+<a name="l00011"></a>00011
+<a name="l00012"></a>00012 <span class="comment">/*</span>
+<a name="l00013"></a>00013 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00014"></a>00014 <span class="comment"> * All rights reserved.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00017"></a>00017 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00018"></a>00018 <span class="comment"> * are met:</span>
+<a name="l00019"></a>00019 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00020"></a>00020 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00021"></a>00021 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00022"></a>00022 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00023"></a>00023 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00024"></a>00024 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00025"></a>00025 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00026"></a>00026 <span class="comment"> * written permission.</span>
+<a name="l00027"></a>00027 <span class="comment"> *</span>
+<a name="l00028"></a>00028 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00029"></a>00029 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00030"></a>00030 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00031"></a>00031 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00032"></a>00032 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00033"></a>00033 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00034"></a>00034 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00035"></a>00035 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00036"></a>00036 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00037"></a>00037 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00038"></a>00038 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00039"></a>00039 <span class="comment"> *</span>
+<a name="l00040"></a>00040 <span class="comment"> * This file is part of the Contiki desktop OS.</span>
+<a name="l00041"></a>00041 <span class="comment"> *</span>
+<a name="l00042"></a>00042 <span class="comment"> * $Id: shell.h,v 1.1 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> */</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#ifndef __SHELL_H__</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define __SHELL_H__</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">/**</span>
+<a name="l00049"></a>00049 <span class="comment"> * Initialize the shell.</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> * Called when the shell front-end process starts. This function may</span>
+<a name="l00052"></a>00052 <span class="comment"> * be used to start listening for signals.</span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a>(<span class="keywordtype">void</span>);
+<a name="l00055"></a>00055 <span class="comment"></span>
+<a name="l00056"></a>00056 <span class="comment">/**</span>
+<a name="l00057"></a>00057 <span class="comment"> * Start the shell back-end.</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> * Called by the front-end when a new shell is started.</span>
+<a name="l00060"></a>00060 <span class="comment"> */</span>
+<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a>(<span class="keywordtype">void</span>);
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/**</span>
+<a name="l00064"></a>00064 <span class="comment"> * Process a shell command.</span>
+<a name="l00065"></a>00065 <span class="comment"> *</span>
+<a name="l00066"></a>00066 <span class="comment"> * This function will be called by the shell GUI / telnet server whan</span>
+<a name="l00067"></a>00067 <span class="comment"> * a command has been entered that should be processed by the shell</span>
+<a name="l00068"></a>00068 <span class="comment"> * back-end.</span>
+<a name="l00069"></a>00069 <span class="comment"> *</span>
+<a name="l00070"></a>00070 <span class="comment"> * \param command The command to be processed.</span>
+<a name="l00071"></a>00071 <span class="comment"> */</span>
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a>(<span class="keywordtype">char</span> *command);
+<a name="l00073"></a>00073 <span class="comment"></span>
+<a name="l00074"></a>00074 <span class="comment">/**</span>
+<a name="l00075"></a>00075 <span class="comment"> * Quit the shell.</span>
+<a name="l00076"></a>00076 <span class="comment"> *</span>
+<a name="l00077"></a>00077 <span class="comment"> */</span>
+<a name="l00078"></a>00078 <span class="keywordtype">void</span> shell_quit(<span class="keywordtype">char</span> *);
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 <span class="comment"></span>
+<a name="l00081"></a>00081 <span class="comment">/**</span>
+<a name="l00082"></a>00082 <span class="comment"> * Print a string to the shell window.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * This function is implemented by the shell GUI / telnet server and</span>
+<a name="l00085"></a>00085 <span class="comment"> * can be called by the shell back-end to output a string in the</span>
+<a name="l00086"></a>00086 <span class="comment"> * shell window. The string is automatically appended with a linebreak.</span>
+<a name="l00087"></a>00087 <span class="comment"> *</span>
+<a name="l00088"></a>00088 <span class="comment"> * \param str1 The first half of the string to be output.</span>
+<a name="l00089"></a>00089 <span class="comment"> * \param str2 The second half of the string to be output.</span>
+<a name="l00090"></a>00090 <span class="comment"> */</span>
+<a name="l00091"></a>00091 <span class="keywordtype">void</span> shell_output(<span class="keywordtype">char</span> *str1, <span class="keywordtype">char</span> *str2);
+<a name="l00092"></a>00092 <span class="comment"></span>
+<a name="l00093"></a>00093 <span class="comment">/**</span>
+<a name="l00094"></a>00094 <span class="comment"> * Print a prompt to the shell window.</span>
+<a name="l00095"></a>00095 <span class="comment"> *</span>
+<a name="l00096"></a>00096 <span class="comment"> * This function can be used by the shell back-end to print out a</span>
+<a name="l00097"></a>00097 <span class="comment"> * prompt to the shell window.</span>
+<a name="l00098"></a>00098 <span class="comment"> *</span>
+<a name="l00099"></a>00099 <span class="comment"> * \param prompt The prompt to be printed.</span>
+<a name="l00100"></a>00100 <span class="comment"> *</span>
+<a name="l00101"></a>00101 <span class="comment"> */</span>
+<a name="l00102"></a>00102 <span class="keywordtype">void</span> shell_prompt(<span class="keywordtype">char</span> *prompt);
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="preprocessor">#endif </span><span class="comment">/* __SHELL_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00178.html b/third_party/uip-1.0/doc/html/a00178.html new file mode 100644 index 0000000..b05a055 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00178.html @@ -0,0 +1,375 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/telnetd/telnetd.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/telnetd/telnetd.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00014"></a>00014 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00015"></a>00015 <span class="comment"> * written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00019"></a>00019 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00021"></a>00021 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00023"></a>00023 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00024"></a>00024 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00025"></a>00025 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00026"></a>00026 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00027"></a>00027 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "telnetd.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="a00121.html">memb.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00107.html">shell.h</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="preprocessor">#include <string.h></span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00045"></a>00045 <span class="keyword">struct </span>telnetd_line {
+<a name="l00046"></a>00046 <span class="keywordtype">char</span> line[TELNETD_CONF_LINELEN];
+<a name="l00047"></a>00047 };
+<a name="l00048"></a>00048 <a class="code" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">MEMB</a>(linemem, <span class="keyword">struct</span> telnetd_line, TELNETD_CONF_NUMLINES);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#define STATE_NORMAL 0</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define STATE_IAC 1</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define STATE_WILL 2</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define STATE_WONT 3</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DO 4</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DONT 5</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define STATE_CLOSE 6</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00086.html">telnetd_state</a> s;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="preprocessor">#define TELNET_IAC 255</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_WILL 251</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_WONT 252</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_DO 253</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define TELNET_DONT 254</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> *
+<a name="l00067"></a>00067 alloc_line(<span class="keywordtype">void</span>)
+<a name="l00068"></a>00068 {
+<a name="l00069"></a>00069 <span class="keywordflow">return</span> <a class="code" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a>(&linemem);
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00073"></a>00073 dealloc_line(<span class="keywordtype">char</span> *line)
+<a name="l00074"></a>00074 {
+<a name="l00075"></a>00075 <a class="code" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a>(&linemem, line);
+<a name="l00076"></a>00076 }
+<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00078"></a>00078 <span class="keywordtype">void</span>
+<a name="l00079"></a><a class="code" href="a00107.html#984c4a8b65a3cb35460b073a40568c25">00079</a> shell_quit(<span class="keywordtype">char</span> *str)
+<a name="l00080"></a>00080 {
+<a name="l00081"></a>00081 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_CLOSE;
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00085"></a>00085 sendline(<span class="keywordtype">char</span> *line)
+<a name="l00086"></a>00086 {
+<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00090"></a>00090 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00091"></a>00091 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] = line;
+<a name="l00092"></a>00092 <span class="keywordflow">break</span>;
+<a name="l00093"></a>00093 }
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095 <span class="keywordflow">if</span>(i == TELNETD_CONF_NUMLINES) {
+<a name="l00096"></a>00096 dealloc_line(line);
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 }
+<a name="l00099"></a>00099 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00100"></a>00100 <span class="keywordtype">void</span>
+<a name="l00101"></a><a class="code" href="a00107.html#123c95a7bb55143cabba92446ce8f513">00101</a> shell_prompt(<span class="keywordtype">char</span> *str)
+<a name="l00102"></a>00102 {
+<a name="l00103"></a>00103 <span class="keywordtype">char</span> *line;
+<a name="l00104"></a>00104 line = alloc_line();
+<a name="l00105"></a>00105 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00106"></a>00106 strncpy(line, str, TELNETD_CONF_LINELEN);
+<a name="l00107"></a>00107 <span class="comment">/* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00108"></a>00108 sendline(line);
+<a name="l00109"></a>00109 }
+<a name="l00110"></a>00110 }
+<a name="l00111"></a>00111 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00112"></a>00112 <span class="keywordtype">void</span>
+<a name="l00113"></a><a class="code" href="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f">00113</a> shell_output(<span class="keywordtype">char</span> *str1, <span class="keywordtype">char</span> *str2)
+<a name="l00114"></a>00114 {
+<a name="l00115"></a>00115 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> len;
+<a name="l00116"></a>00116 <span class="keywordtype">char</span> *line;
+<a name="l00117"></a>00117
+<a name="l00118"></a>00118 line = alloc_line();
+<a name="l00119"></a>00119 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00120"></a>00120 len = strlen(str1);
+<a name="l00121"></a>00121 strncpy(line, str1, TELNETD_CONF_LINELEN);
+<a name="l00122"></a>00122 <span class="keywordflow">if</span>(len < TELNETD_CONF_LINELEN) {
+<a name="l00123"></a>00123 strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125 len = strlen(line);
+<a name="l00126"></a>00126 <span class="keywordflow">if</span>(len < TELNETD_CONF_LINELEN - 2) {
+<a name="l00127"></a>00127 line[len] = <a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>;
+<a name="l00128"></a>00128 line[len+1] = <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>;
+<a name="l00129"></a>00129 line[len+2] = 0;
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 <span class="comment">/* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00132"></a>00132 sendline(line);
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134 }
+<a name="l00135"></a>00135 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00136"></a>00136 <span class="keywordtype">void</span>
+<a name="l00137"></a>00137 telnetd_init(<span class="keywordtype">void</span>)
+<a name="l00138"></a>00138 {
+<a name="l00139"></a>00139 <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(23));
+<a name="l00140"></a>00140 <a class="code" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a>(&linemem);
+<a name="l00141"></a>00141 <a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a>();
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00144"></a>00144 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00145"></a>00145 acked(<span class="keywordtype">void</span>)
+<a name="l00146"></a>00146 {
+<a name="l00147"></a>00147 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keywordflow">while</span>(s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> > 0) {
+<a name="l00150"></a>00150 dealloc_line(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[0]);
+<a name="l00151"></a>00151 <span class="keywordflow">for</span>(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00152"></a>00152 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i - 1] = s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i];
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[TELNETD_CONF_NUMLINES - 1] = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00155"></a>00155 --s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>;
+<a name="l00156"></a>00156 }
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00159"></a>00159 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00160"></a>00160 senddata(<span class="keywordtype">void</span>)
+<a name="l00161"></a>00161 {
+<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">char</span> *<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>, *lineptr;
+<a name="l00163"></a>00163 <span class="keyword">static</span> <span class="keywordtype">int</span> buflen, linelen;
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 bufptr = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00166"></a>00166 buflen = 0;
+<a name="l00167"></a>00167 <span class="keywordflow">for</span>(s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> = 0; s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a> < TELNETD_CONF_NUMLINES &&
+<a name="l00168"></a>00168 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>] != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ; ++s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>) {
+<a name="l00169"></a>00169 lineptr = s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[s.<a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>];
+<a name="l00170"></a>00170 linelen = strlen(lineptr);
+<a name="l00171"></a>00171 <span class="keywordflow">if</span>(linelen > TELNETD_CONF_LINELEN) {
+<a name="l00172"></a>00172 linelen = TELNETD_CONF_LINELEN;
+<a name="l00173"></a>00173 }
+<a name="l00174"></a>00174 <span class="keywordflow">if</span>(buflen + linelen < <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00175"></a>00175 memcpy(bufptr, lineptr, linelen);
+<a name="l00176"></a>00176 bufptr += linelen;
+<a name="l00177"></a>00177 buflen += linelen;
+<a name="l00178"></a>00178 } <span class="keywordflow">else</span> {
+<a name="l00179"></a>00179 <span class="keywordflow">break</span>;
+<a name="l00180"></a>00180 }
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, buflen);
+<a name="l00183"></a>00183 }
+<a name="l00184"></a>00184 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00186"></a>00186 closed(<span class="keywordtype">void</span>)
+<a name="l00187"></a>00187 {
+<a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00191"></a>00191 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00192"></a>00192 dealloc_line(s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i]);
+<a name="l00193"></a>00193 }
+<a name="l00194"></a>00194 }
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00197"></a>00197 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00198"></a>00198 get_char(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c)
+<a name="l00199"></a>00199 {
+<a name="l00200"></a>00200 <span class="keywordflow">if</span>(c == <a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>) {
+<a name="l00201"></a>00201 <span class="keywordflow">return</span>;
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(int)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] = c;
+<a name="l00205"></a>00205 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(<span class="keywordtype">int</span>)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] == <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a> ||
+<a name="l00206"></a>00206 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> == <span class="keyword">sizeof</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>) - 1) {
+<a name="l00207"></a>00207 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> > 0) {
+<a name="l00208"></a>00208 s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[(int)s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>] = 0;
+<a name="l00209"></a>00209 <span class="comment">/* petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/</span>
+<a name="l00210"></a>00210 }
+<a name="l00211"></a>00211 <a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>);
+<a name="l00212"></a>00212 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> = 0;
+<a name="l00213"></a>00213 } <span class="keywordflow">else</span> {
+<a name="l00214"></a>00214 ++s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>;
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216 }
+<a name="l00217"></a>00217 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00218"></a>00218 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00219"></a>00219 sendopt(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> option, <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> value)
+<a name="l00220"></a>00220 {
+<a name="l00221"></a>00221 <span class="keywordtype">char</span> *line;
+<a name="l00222"></a>00222 line = alloc_line();
+<a name="l00223"></a>00223 <span class="keywordflow">if</span>(line != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00224"></a>00224 line[0] = TELNET_IAC;
+<a name="l00225"></a>00225 line[1] = option;
+<a name="l00226"></a>00226 line[2] = value;
+<a name="l00227"></a>00227 line[3] = 0;
+<a name="l00228"></a>00228 sendline(line);
+<a name="l00229"></a>00229 }
+<a name="l00230"></a>00230 }
+<a name="l00231"></a>00231 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00232"></a>00232 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00233"></a>00233 newdata(<span class="keywordtype">void</span>)
+<a name="l00234"></a>00234 {
+<a name="l00235"></a>00235 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00236"></a>00236 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c;
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> *dataptr;
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239
+<a name="l00240"></a>00240 len = <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();
+<a name="l00241"></a>00241 dataptr = (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> < <span class="keyword">sizeof</span>(s.<a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>)) {
+<a name="l00244"></a>00244 c = *dataptr;
+<a name="l00245"></a>00245 ++dataptr;
+<a name="l00246"></a>00246 --len;
+<a name="l00247"></a>00247 <span class="keywordflow">switch</span>(s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a>) {
+<a name="l00248"></a>00248 <span class="keywordflow">case</span> STATE_IAC:
+<a name="l00249"></a>00249 <span class="keywordflow">if</span>(c == TELNET_IAC) {
+<a name="l00250"></a>00250 get_char(c);
+<a name="l00251"></a>00251 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00252"></a>00252 } <span class="keywordflow">else</span> {
+<a name="l00253"></a>00253 <span class="keywordflow">switch</span>(c) {
+<a name="l00254"></a>00254 <span class="keywordflow">case</span> TELNET_WILL:
+<a name="l00255"></a>00255 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_WILL;
+<a name="l00256"></a>00256 <span class="keywordflow">break</span>;
+<a name="l00257"></a>00257 <span class="keywordflow">case</span> TELNET_WONT:
+<a name="l00258"></a>00258 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_WONT;
+<a name="l00259"></a>00259 <span class="keywordflow">break</span>;
+<a name="l00260"></a>00260 <span class="keywordflow">case</span> TELNET_DO:
+<a name="l00261"></a>00261 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_DO;
+<a name="l00262"></a>00262 <span class="keywordflow">break</span>;
+<a name="l00263"></a>00263 <span class="keywordflow">case</span> TELNET_DONT:
+<a name="l00264"></a>00264 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_DONT;
+<a name="l00265"></a>00265 <span class="keywordflow">break</span>;
+<a name="l00266"></a>00266 <span class="keywordflow">default</span>:
+<a name="l00267"></a>00267 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00268"></a>00268 <span class="keywordflow">break</span>;
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 }
+<a name="l00271"></a>00271 <span class="keywordflow">break</span>;
+<a name="l00272"></a>00272 <span class="keywordflow">case</span> STATE_WILL:
+<a name="l00273"></a>00273 <span class="comment">/* Reply with a DONT */</span>
+<a name="l00274"></a>00274 sendopt(TELNET_DONT, c);
+<a name="l00275"></a>00275 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00276"></a>00276 <span class="keywordflow">break</span>;
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">case</span> STATE_WONT:
+<a name="l00279"></a>00279 <span class="comment">/* Reply with a DONT */</span>
+<a name="l00280"></a>00280 sendopt(TELNET_DONT, c);
+<a name="l00281"></a>00281 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00282"></a>00282 <span class="keywordflow">break</span>;
+<a name="l00283"></a>00283 <span class="keywordflow">case</span> STATE_DO:
+<a name="l00284"></a>00284 <span class="comment">/* Reply with a WONT */</span>
+<a name="l00285"></a>00285 sendopt(TELNET_WONT, c);
+<a name="l00286"></a>00286 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00287"></a>00287 <span class="keywordflow">break</span>;
+<a name="l00288"></a>00288 <span class="keywordflow">case</span> STATE_DONT:
+<a name="l00289"></a>00289 <span class="comment">/* Reply with a WONT */</span>
+<a name="l00290"></a>00290 sendopt(TELNET_WONT, c);
+<a name="l00291"></a>00291 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00292"></a>00292 <span class="keywordflow">break</span>;
+<a name="l00293"></a>00293 <span class="keywordflow">case</span> STATE_NORMAL:
+<a name="l00294"></a>00294 <span class="keywordflow">if</span>(c == TELNET_IAC) {
+<a name="l00295"></a>00295 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_IAC;
+<a name="l00296"></a>00296 } <span class="keywordflow">else</span> {
+<a name="l00297"></a>00297 get_char(c);
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 <span class="keywordflow">break</span>;
+<a name="l00300"></a>00300 }
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 }
+<a name="l00304"></a>00304
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00307"></a>00307 <span class="keywordtype">void</span>
+<a name="l00308"></a>00308 telnetd_appcall(<span class="keywordtype">void</span>)
+<a name="l00309"></a>00309 {
+<a name="l00310"></a>00310 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
+<a name="l00311"></a>00311 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00312"></a>00312 <span class="comment">/* tcp_markconn(uip_conn, &s);*/</span>
+<a name="l00313"></a>00313 <span class="keywordflow">for</span>(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+<a name="l00314"></a>00314 s.<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[i] = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00315"></a>00315 }
+<a name="l00316"></a>00316 s.<a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a> = 0;
+<a name="l00317"></a>00317 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00318"></a>00318
+<a name="l00319"></a>00319 <a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a>();
+<a name="l00320"></a>00320 }
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 <span class="keywordflow">if</span>(s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> == STATE_CLOSE) {
+<a name="l00323"></a>00323 s.<a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a> = STATE_NORMAL;
+<a name="l00324"></a>00324 <a class="code" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>();
+<a name="l00325"></a>00325 <span class="keywordflow">return</span>;
+<a name="l00326"></a>00326 }
+<a name="l00327"></a>00327
+<a name="l00328"></a>00328 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>() ||
+<a name="l00329"></a>00329 <a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>() ||
+<a name="l00330"></a>00330 <a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00331"></a>00331 closed();
+<a name="l00332"></a>00332 }
+<a name="l00333"></a>00333
+<a name="l00334"></a>00334 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00335"></a>00335 acked();
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337
+<a name="l00338"></a>00338 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00339"></a>00339 newdata();
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341
+<a name="l00342"></a>00342 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>() ||
+<a name="l00343"></a>00343 <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() ||
+<a name="l00344"></a>00344 <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>() ||
+<a name="l00345"></a>00345 <a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>() ||
+<a name="l00346"></a>00346 <a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00347"></a>00347 senddata();
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349 }
+<a name="l00350"></a>00350 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00179.html b/third_party/uip-1.0/doc/html/a00179.html new file mode 100644 index 0000000..034d9cc --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00179.html @@ -0,0 +1,88 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/telnetd/telnetd.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/telnetd/telnetd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00011"></a>00011 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00012"></a>00012 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00013"></a>00013 <span class="comment"> * with the distribution.</span>
+<a name="l00014"></a>00014 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00015"></a>00015 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00016"></a>00016 <span class="comment"> * written permission.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00019"></a>00019 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00020"></a>00020 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00021"></a>00021 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00022"></a>00022 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00023"></a>00023 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00024"></a>00024 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00025"></a>00025 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00026"></a>00026 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00027"></a>00027 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00028"></a>00028 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#ifndef __TELNETD_H__</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define __TELNETD_H__</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="keywordtype">void</span> telnetd_appcall(<span class="keywordtype">void</span>);
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#ifndef TELNETD_CONF_LINELEN</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define TELNETD_CONF_LINELEN 40</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#ifndef TELNETD_CONF_NUMLINES</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define TELNETD_CONF_NUMLINES 16</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a><a class="code" href="a00086.html">00049</a> <span class="keyword">struct </span><a class="code" href="a00086.html">telnetd_state</a> {
+<a name="l00050"></a><a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">00050</a> <span class="keywordtype">char</span> *<a class="code" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">lines</a>[TELNETD_CONF_NUMLINES];
+<a name="l00051"></a><a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">00051</a> <span class="keywordtype">char</span> <a class="code" href="a00086.html#54a466311575a727830a92a6c3621cb2">buf</a>[TELNETD_CONF_LINELEN];
+<a name="l00052"></a><a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">00052</a> <span class="keywordtype">char</span> <a class="code" href="a00086.html#5eced097547fd3fac4ba2a255493d921">bufptr</a>;
+<a name="l00053"></a><a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">00053</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">numsent</a>;
+<a name="l00054"></a><a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">00054</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">state</a>;
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00086.html">telnetd_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#ifndef UIP_APPCALL</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define UIP_APPCALL telnetd_appcall</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a>00063 <span class="preprocessor">#endif </span><span class="comment">/* __TELNETD_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00180.html b/third_party/uip-1.0/doc/html/a00180.html new file mode 100644 index 0000000..d3a7a74 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00180.html @@ -0,0 +1,464 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webclient/webclient.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webclient/webclient.c</h1><a href="a00110.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup webclient Web client</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * This example shows a HTTP client that is able to download web pages</span>
+<a name="l00011"></a>00011 <span class="comment"> * and files from web servers. It requires a number of callback</span>
+<a name="l00012"></a>00012 <span class="comment"> * functions to be implemented by the module that utilizes the code:</span>
+<a name="l00013"></a>00013 <span class="comment"> * webclient_datahandler(), webclient_connected(),</span>
+<a name="l00014"></a>00014 <span class="comment"> * webclient_timedout(), webclient_aborted(), webclient_closed().</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016 <span class="comment"></span>
+<a name="l00017"></a>00017 <span class="comment">/**</span>
+<a name="l00018"></a>00018 <span class="comment"> * \file</span>
+<a name="l00019"></a>00019 <span class="comment"> * Implementation of the HTTP client.</span>
+<a name="l00020"></a>00020 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00021"></a>00021 <span class="comment"> */</span>
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <span class="comment">/*</span>
+<a name="l00024"></a>00024 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00025"></a>00025 <span class="comment"> * All rights reserved.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00028"></a>00028 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00029"></a>00029 <span class="comment"> * are met:</span>
+<a name="l00030"></a>00030 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00031"></a>00031 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00032"></a>00032 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00033"></a>00033 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00034"></a>00034 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00035"></a>00035 <span class="comment"> * with the distribution.</span>
+<a name="l00036"></a>00036 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00037"></a>00037 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00038"></a>00038 <span class="comment"> * written permission.</span>
+<a name="l00039"></a>00039 <span class="comment"> *</span>
+<a name="l00040"></a>00040 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00041"></a>00041 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00042"></a>00042 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00043"></a>00043 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00044"></a>00044 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00045"></a>00045 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00046"></a>00046 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00047"></a>00047 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00048"></a>00048 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00049"></a>00049 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00050"></a>00050 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00051"></a>00051 <span class="comment"> *</span>
+<a name="l00052"></a>00052 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00053"></a>00053 <span class="comment"> *</span>
+<a name="l00054"></a>00054 <span class="comment"> * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> */</span>
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "uiplib.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="a00111.html">webclient.h</a>"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="a00103.html">resolv.h</a>"</span>
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#include <string.h></span>
+<a name="l00064"></a>00064
+<a name="l00065"></a><a class="code" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">00065</a> <span class="preprocessor">#define WEBCLIENT_TIMEOUT 100</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a><a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">00067</a> <span class="preprocessor">#define WEBCLIENT_STATE_STATUSLINE 0</span>
+<a name="l00068"></a><a class="code" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">00068</a> <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_HEADERS 1</span>
+<a name="l00069"></a><a class="code" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_DATA 2</span>
+<a name="l00070"></a><a class="code" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define WEBCLIENT_STATE_CLOSE 3</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a><a class="code" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">00072</a> <span class="preprocessor">#define HTTPFLAG_NONE 0</span>
+<a name="l00073"></a><a class="code" href="a00163.html#gda99954e0f6905091885934e86c278cc">00073</a> <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_OK 1</span>
+<a name="l00074"></a><a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_MOVED 2</span>
+<a name="l00075"></a><a class="code" href="a00163.html#g38af81a4c9884ce89803fc3e52383112">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define HTTPFLAG_ERROR 3</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077
+<a name="l00078"></a><a class="code" href="a00163.html#g3212e70c55244608ac16316888c354f0">00078</a> <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00079"></a><a class="code" href="a00163.html#g6cda47c85ce1b58b501b44ac9cccc50e">00079</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_cr 0x0d</span>
+<a name="l00080"></a><a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">00080</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_space 0x20</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="a00097.html">webclient_state</a> s;
+<a name="l00084"></a>00084
+<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00086"></a>00086 <span class="keywordtype">char</span> *
+<a name="l00087"></a><a class="code" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">00087</a> <a class="code" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a>(<span class="keywordtype">void</span>)
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 <span class="keywordflow">return</span> s.<a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>;
+<a name="l00090"></a>00090 }
+<a name="l00091"></a>00091 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00092"></a>00092 <span class="keywordtype">char</span> *
+<a name="l00093"></a><a class="code" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">00093</a> <a class="code" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a>(<span class="keywordtype">void</span>)
+<a name="l00094"></a>00094 {
+<a name="l00095"></a>00095 <span class="keywordflow">return</span> s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>;
+<a name="l00096"></a>00096 }
+<a name="l00097"></a>00097 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00098"></a>00098 <span class="keywordtype">char</span> *
+<a name="l00099"></a><a class="code" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">00099</a> <a class="code" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a>(<span class="keywordtype">void</span>)
+<a name="l00100"></a>00100 {
+<a name="l00101"></a>00101 <span class="keywordflow">return</span> s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>;
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00104"></a>00104 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00105"></a><a class="code" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">00105</a> <a class="code" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a>(<span class="keywordtype">void</span>)
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107 <span class="keywordflow">return</span> s.<a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>;
+<a name="l00108"></a>00108 }
+<a name="l00109"></a>00109 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00110"></a>00110 <span class="keywordtype">void</span>
+<a name="l00111"></a><a class="code" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">00111</a> <a class="code" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a>(<span class="keywordtype">void</span>)
+<a name="l00112"></a>00112 {
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 }
+<a name="l00115"></a>00115 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00116"></a>00116 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00117"></a>00117 init_connection(<span class="keywordtype">void</span>)
+<a name="l00118"></a>00118 {
+<a name="l00119"></a>00119 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>;
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> = <span class="keyword">sizeof</span>(http_get) - 1 + 1 +
+<a name="l00122"></a>00122 <span class="keyword">sizeof</span>(http_10) - 1 +
+<a name="l00123"></a>00123 <span class="keyword">sizeof</span>(http_crnl) - 1 +
+<a name="l00124"></a>00124 <span class="keyword">sizeof</span>(http_host) - 1 +
+<a name="l00125"></a>00125 <span class="keyword">sizeof</span>(http_crnl) - 1 +
+<a name="l00126"></a>00126 strlen(http_user_agent_fields) +
+<a name="l00127"></a>00127 strlen(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>) + strlen(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>);
+<a name="l00128"></a>00128 s.<a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a> = 0;
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00131"></a>00131 }
+<a name="l00132"></a>00132 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00133"></a>00133 <span class="keywordtype">void</span>
+<a name="l00134"></a><a class="code" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">00134</a> <a class="code" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a>(<span class="keywordtype">void</span>)
+<a name="l00135"></a>00135 {
+<a name="l00136"></a>00136 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a>;
+<a name="l00137"></a>00137 }
+<a name="l00138"></a>00138 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
+<a name="l00140"></a><a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">00140</a> <a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(<span class="keywordtype">char</span> *<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>, <span class="keywordtype">char</span> *<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>)
+<a name="l00141"></a>00141 {
+<a name="l00142"></a>00142 <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *conn;
+<a name="l00143"></a>00143 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *ipaddr;
+<a name="l00144"></a>00144 <span class="keyword">static</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> addr;
+<a name="l00145"></a>00145
+<a name="l00146"></a>00146 <span class="comment">/* First check if the host is an IP address. */</span>
+<a name="l00147"></a>00147 ipaddr = &addr;
+<a name="l00148"></a>00148 <span class="keywordflow">if</span>(uiplib_ipaddrconv(host, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)addr) == 0) {
+<a name="l00149"></a>00149 ipaddr = (<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *)<a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(host);
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordflow">if</span>(ipaddr == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> 0;
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 conn = <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(ipaddr, <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(port));
+<a name="l00157"></a>00157
+<a name="l00158"></a>00158 <span class="keywordflow">if</span>(conn == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00159"></a>00159 <span class="keywordflow">return</span> 0;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 s.<a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a> = port;
+<a name="l00163"></a>00163 strncpy(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, file, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00164"></a>00164 strncpy(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, host, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>));
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 init_connection();
+<a name="l00167"></a>00167 <span class="keywordflow">return</span> 1;
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *
+<a name="l00171"></a>00171 copy_string(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *dest,
+<a name="l00172"></a>00172 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>)
+<a name="l00173"></a>00173 {
+<a name="l00174"></a>00174 strncpy(dest, src, len);
+<a name="l00175"></a>00175 <span class="keywordflow">return</span> dest + len;
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00179"></a>00179 senddata(<span class="keywordtype">void</span>)
+<a name="l00180"></a>00180 {
+<a name="l00181"></a>00181 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>;
+<a name="l00182"></a>00182 <span class="keywordtype">char</span> *getrequest;
+<a name="l00183"></a>00183 <span class="keywordtype">char</span> *cptr;
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > 0) {
+<a name="l00186"></a>00186 cptr = getrequest = (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 cptr = copy_string(cptr, http_get, <span class="keyword">sizeof</span>(http_get) - 1);
+<a name="l00189"></a>00189 cptr = copy_string(cptr, s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, strlen(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00190"></a>00190 *cptr++ = <a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a>;
+<a name="l00191"></a>00191 cptr = copy_string(cptr, http_10, <span class="keyword">sizeof</span>(http_10) - 1);
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 cptr = copy_string(cptr, http_crnl, <span class="keyword">sizeof</span>(http_crnl) - 1);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 cptr = copy_string(cptr, http_host, <span class="keyword">sizeof</span>(http_host) - 1);
+<a name="l00196"></a>00196 cptr = copy_string(cptr, s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, strlen(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>));
+<a name="l00197"></a>00197 cptr = copy_string(cptr, http_crnl, <span class="keyword">sizeof</span>(http_crnl) - 1);
+<a name="l00198"></a>00198
+<a name="l00199"></a>00199 cptr = copy_string(cptr, http_user_agent_fields,
+<a name="l00200"></a>00200 strlen(http_user_agent_fields));
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 len = s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()?
+<a name="l00203"></a>00203 <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>():
+<a name="l00204"></a>00204 s.getrequestleft;
+<a name="l00205"></a>00205 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(&(getrequest[s.<a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a>]), len);
+<a name="l00206"></a>00206 }
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00209"></a>00209 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00210"></a>00210 acked(<span class="keywordtype">void</span>)
+<a name="l00211"></a>00211 {
+<a name="l00212"></a>00212 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > 0) {
+<a name="l00215"></a>00215 len = s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()?
+<a name="l00216"></a>00216 <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>():
+<a name="l00217"></a>00217 s.getrequestleft;
+<a name="l00218"></a>00218 s.<a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a> -= len;
+<a name="l00219"></a>00219 s.<a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a> += len;
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221 }
+<a name="l00222"></a>00222 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00223"></a>00223 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00224"></a>00224 parse_statusline(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)
+<a name="l00225"></a>00225 {
+<a name="l00226"></a>00226 <span class="keywordtype">char</span> *cptr;
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> < <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>)) {
+<a name="l00229"></a>00229 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] = *(<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00230"></a>00230 ++((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>);
+<a name="l00231"></a>00231 --len;
+<a name="l00232"></a>00232 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] == <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>) {
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 <span class="keywordflow">if</span>((strncmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_10,
+<a name="l00235"></a>00235 <span class="keyword">sizeof</span>(http_10) - 1) == 0) ||
+<a name="l00236"></a>00236 (strncmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_11,
+<a name="l00237"></a>00237 <span class="keyword">sizeof</span>(http_11) - 1) == 0)) {
+<a name="l00238"></a>00238 cptr = &(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[9]);
+<a name="l00239"></a>00239 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a class="code" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">HTTPFLAG_NONE</a>;
+<a name="l00240"></a>00240 <span class="keywordflow">if</span>(strncmp(cptr, http_200, <span class="keyword">sizeof</span>(http_200) - 1) == 0) {
+<a name="l00241"></a>00241 <span class="comment">/* 200 OK */</span>
+<a name="l00242"></a>00242 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a class="code" href="a00163.html#gda99954e0f6905091885934e86c278cc">HTTPFLAG_OK</a>;
+<a name="l00243"></a>00243 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(cptr, http_301, <span class="keyword">sizeof</span>(http_301) - 1) == 0 ||
+<a name="l00244"></a>00244 strncmp(cptr, http_302, <span class="keyword">sizeof</span>(http_302) - 1) == 0) {
+<a name="l00245"></a>00245 <span class="comment">/* 301 Moved permanently or 302 Found. Location: header line</span>
+<a name="l00246"></a>00246 <span class="comment"> will contain thw new location. */</span>
+<a name="l00247"></a>00247 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> = <a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>;
+<a name="l00248"></a>00248 } <span class="keywordflow">else</span> {
+<a name="l00249"></a>00249 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 1] = 0;
+<a name="l00250"></a>00250 }
+<a name="l00251"></a>00251 } <span class="keywordflow">else</span> {
+<a name="l00252"></a>00252 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00253"></a>00253 <a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>();
+<a name="l00254"></a>00254 <span class="keywordflow">return</span> 0;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <span class="comment">/* We're done parsing the status line, so we reset the pointer</span>
+<a name="l00258"></a>00258 <span class="comment"> and start parsing the HTTP headers.*/</span>
+<a name="l00259"></a>00259 s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00260"></a>00260 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a>;
+<a name="l00261"></a>00261 <span class="keywordflow">break</span>;
+<a name="l00262"></a>00262 } <span class="keywordflow">else</span> {
+<a name="l00263"></a>00263 ++s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265 }
+<a name="l00266"></a>00266 <span class="keywordflow">return</span> len;
+<a name="l00267"></a>00267 }
+<a name="l00268"></a>00268 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00269"></a>00269 <span class="keyword">static</span> <span class="keywordtype">char</span>
+<a name="l00270"></a>00270 casecmp(<span class="keywordtype">char</span> *str1, <span class="keyword">const</span> <span class="keywordtype">char</span> *str2, <span class="keywordtype">char</span> len)
+<a name="l00271"></a>00271 {
+<a name="l00272"></a>00272 <span class="keyword">static</span> <span class="keywordtype">char</span> c;
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 <span class="keywordflow">while</span>(len > 0) {
+<a name="l00275"></a>00275 c = *str1;
+<a name="l00276"></a>00276 <span class="comment">/* Force lower-case characters. */</span>
+<a name="l00277"></a>00277 <span class="keywordflow">if</span>(c & 0x40) {
+<a name="l00278"></a>00278 c |= 0x20;
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280 <span class="keywordflow">if</span>(*str2 != c) {
+<a name="l00281"></a>00281 <span class="keywordflow">return</span> 1;
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 ++str1;
+<a name="l00284"></a>00284 ++str2;
+<a name="l00285"></a>00285 --len;
+<a name="l00286"></a>00286 }
+<a name="l00287"></a>00287 <span class="keywordflow">return</span> 0;
+<a name="l00288"></a>00288 }
+<a name="l00289"></a>00289 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00290"></a>00290 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00291"></a>00291 parse_headers(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)
+<a name="l00292"></a>00292 {
+<a name="l00293"></a>00293 <span class="keywordtype">char</span> *cptr;
+<a name="l00294"></a>00294 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 <span class="keywordflow">while</span>(len > 0 && s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> < <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>)) {
+<a name="l00297"></a>00297 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] = *(<span class="keywordtype">char</span> *)uip_appdata;
+<a name="l00298"></a>00298 ++((<span class="keywordtype">char</span> *)uip_appdata);
+<a name="l00299"></a>00299 --len;
+<a name="l00300"></a>00300 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>] == <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>) {
+<a name="l00301"></a>00301 <span class="comment">/* We have an entire HTTP header line in s.httpheaderline, so</span>
+<a name="l00302"></a>00302 <span class="comment"> we parse it. */</span>
+<a name="l00303"></a>00303 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[0] == <a class="code" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">ISO_cr</a>) {
+<a name="l00304"></a>00304 <span class="comment">/* This was the last header line (i.e., and empty "\r\n"), so</span>
+<a name="l00305"></a>00305 <span class="comment"> we are done with the headers and proceed with the actual</span>
+<a name="l00306"></a>00306 <span class="comment"> data. */</span>
+<a name="l00307"></a>00307 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a>;
+<a name="l00308"></a>00308 <span class="keywordflow">return</span> len;
+<a name="l00309"></a>00309 }
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 1] = 0;
+<a name="l00312"></a>00312 <span class="comment">/* Check for specific HTTP header fields. */</span>
+<a name="l00313"></a>00313 <span class="keywordflow">if</span>(casecmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_content_type,
+<a name="l00314"></a>00314 <span class="keyword">sizeof</span>(http_content_type) - 1) == 0) {
+<a name="l00315"></a>00315 <span class="comment">/* Found Content-type field. */</span>
+<a name="l00316"></a>00316 cptr = strchr(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, <span class="charliteral">';'</span>);
+<a name="l00317"></a>00317 <span class="keywordflow">if</span>(cptr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00318"></a>00318 *cptr = 0;
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 strncpy(s.<a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>, s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a> +
+<a name="l00321"></a>00321 <span class="keyword">sizeof</span>(http_content_type) - 1, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>));
+<a name="l00322"></a>00322 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(casecmp(s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>, http_location,
+<a name="l00323"></a>00323 <span class="keyword">sizeof</span>(http_location) - 1) == 0) {
+<a name="l00324"></a>00324 cptr = s.<a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a> +
+<a name="l00325"></a>00325 <span class="keyword">sizeof</span>(http_location) - 1;
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 <span class="keywordflow">if</span>(strncmp(cptr, http_http, 7) == 0) {
+<a name="l00328"></a>00328 cptr += 7;
+<a name="l00329"></a>00329 <span class="keywordflow">for</span>(i = 0; i < s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> - 7; ++i) {
+<a name="l00330"></a>00330 <span class="keywordflow">if</span>(*cptr == 0 ||
+<a name="l00331"></a>00331 *cptr == <span class="charliteral">'/'</span> ||
+<a name="l00332"></a>00332 *cptr == <span class="charliteral">' '</span> ||
+<a name="l00333"></a>00333 *cptr == <span class="charliteral">':'</span>) {
+<a name="l00334"></a>00334 s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>[i] = 0;
+<a name="l00335"></a>00335 <span class="keywordflow">break</span>;
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>[i] = *cptr;
+<a name="l00338"></a>00338 ++cptr;
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341 strncpy(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, cptr, <span class="keyword">sizeof</span>(s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>));
+<a name="l00342"></a>00342 <span class="comment">/* s.file[s.httpheaderlineptr - i] = 0;*/</span>
+<a name="l00343"></a>00343 }
+<a name="l00344"></a>00344
+<a name="l00345"></a>00345
+<a name="l00346"></a>00346 <span class="comment">/* We're done parsing, so we reset the pointer and start the</span>
+<a name="l00347"></a>00347 <span class="comment"> next line. */</span>
+<a name="l00348"></a>00348 s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a> = 0;
+<a name="l00349"></a>00349 } <span class="keywordflow">else</span> {
+<a name="l00350"></a>00350 ++s.<a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00351"></a>00351 }
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 <span class="keywordflow">return</span> len;
+<a name="l00354"></a>00354 }
+<a name="l00355"></a>00355 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00356"></a>00356 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00357"></a>00357 newdata(<span class="keywordtype">void</span>)
+<a name="l00358"></a>00358 {
+<a name="l00359"></a>00359 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len;
+<a name="l00360"></a>00360
+<a name="l00361"></a>00361 len = <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>();
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>) {
+<a name="l00364"></a>00364 len = parse_statusline(len);
+<a name="l00365"></a>00365 }
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">WEBCLIENT_STATE_HEADERS</a> && len > 0) {
+<a name="l00368"></a>00368 len = parse_headers(len);
+<a name="l00369"></a>00369 }
+<a name="l00370"></a>00370
+<a name="l00371"></a>00371 <span class="keywordflow">if</span>(len > 0 && s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">WEBCLIENT_STATE_DATA</a> &&
+<a name="l00372"></a>00372 s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> != <a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>) {
+<a name="l00373"></a>00373 <a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>((<span class="keywordtype">char</span> *)uip_appdata, len);
+<a name="l00374"></a>00374 }
+<a name="l00375"></a>00375 }
+<a name="l00376"></a>00376 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00377"></a>00377 <span class="keywordtype">void</span>
+<a name="l00378"></a><a class="code" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">00378</a> <a class="code" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00379"></a>00379 {
+<a name="l00380"></a>00380 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00381"></a>00381 s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00382"></a>00382 s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> = <a class="code" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">WEBCLIENT_STATE_STATUSLINE</a>;
+<a name="l00383"></a>00383 senddata();
+<a name="l00384"></a>00384 <a class="code" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a>();
+<a name="l00385"></a>00385 <span class="keywordflow">return</span>;
+<a name="l00386"></a>00386 }
+<a name="l00387"></a>00387
+<a name="l00388"></a>00388 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a> == <a class="code" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">WEBCLIENT_STATE_CLOSE</a>) {
+<a name="l00389"></a>00389 <a class="code" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a>();
+<a name="l00390"></a>00390 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00391"></a>00391 <span class="keywordflow">return</span>;
+<a name="l00392"></a>00392 }
+<a name="l00393"></a>00393
+<a name="l00394"></a>00394 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>()) {
+<a name="l00395"></a>00395 <a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>();
+<a name="l00396"></a>00396 }
+<a name="l00397"></a>00397 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00398"></a>00398 <a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>();
+<a name="l00399"></a>00399 }
+<a name="l00400"></a>00400
+<a name="l00401"></a>00401
+<a name="l00402"></a>00402 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00403"></a>00403 s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00404"></a>00404 acked();
+<a name="l00405"></a>00405 }
+<a name="l00406"></a>00406 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+<a name="l00407"></a>00407 s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> = 0;
+<a name="l00408"></a>00408 newdata();
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>() ||
+<a name="l00411"></a>00411 <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() ||
+<a name="l00412"></a>00412 <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00413"></a>00413 senddata();
+<a name="l00414"></a>00414 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00415"></a>00415 ++s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a>;
+<a name="l00416"></a>00416 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">timer</a> == <a class="code" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">WEBCLIENT_TIMEOUT</a>) {
+<a name="l00417"></a>00417 <a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>();
+<a name="l00418"></a>00418 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00419"></a>00419 <span class="keywordflow">return</span>;
+<a name="l00420"></a>00420 }
+<a name="l00421"></a>00421 <span class="comment">/* senddata();*/</span>
+<a name="l00422"></a>00422 }
+<a name="l00423"></a>00423
+<a name="l00424"></a>00424 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()) {
+<a name="l00425"></a>00425 <span class="keywordflow">if</span>(s.<a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a> != <a class="code" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">HTTPFLAG_MOVED</a>) {
+<a name="l00426"></a>00426 <span class="comment">/* Send NULL data to signal EOF. */</span>
+<a name="l00427"></a>00427 <a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>(<a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
+<a name="l00428"></a>00428 } <span class="keywordflow">else</span> {
+<a name="l00429"></a>00429 <span class="keywordflow">if</span>(<a class="code" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv_lookup</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>) == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00430"></a>00430 <a class="code" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv_query</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>);
+<a name="l00431"></a>00431 }
+<a name="l00432"></a>00432 <a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(s.<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, s.<a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>, s.<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>);
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434 }
+<a name="l00435"></a>00435 }
+<a name="l00436"></a>00436 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00437"></a>00437 <span class="comment"></span>
+<a name="l00438"></a>00438 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00439"></a>00439 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00181.html b/third_party/uip-1.0/doc/html/a00181.html new file mode 100644 index 0000000..ecd8163 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00181.html @@ -0,0 +1,253 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webclient/webclient.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webclient/webclient.h</h1><a href="a00111.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup webclient</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * Header file for the HTTP client.</span>
+<a name="l00009"></a>00009 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00010"></a>00010 <span class="comment"> */</span>
+<a name="l00011"></a>00011
+<a name="l00012"></a>00012 <span class="comment">/*</span>
+<a name="l00013"></a>00013 <span class="comment"> * Copyright (c) 2002, Adam Dunkels.</span>
+<a name="l00014"></a>00014 <span class="comment"> * All rights reserved.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00017"></a>00017 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00018"></a>00018 <span class="comment"> * are met:</span>
+<a name="l00019"></a>00019 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00020"></a>00020 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00021"></a>00021 <span class="comment"> * 2. Redistributions in binary form must reproduce the above</span>
+<a name="l00022"></a>00022 <span class="comment"> * copyright notice, this list of conditions and the following</span>
+<a name="l00023"></a>00023 <span class="comment"> * disclaimer in the documentation and/or other materials provided</span>
+<a name="l00024"></a>00024 <span class="comment"> * with the distribution.</span>
+<a name="l00025"></a>00025 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00026"></a>00026 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00027"></a>00027 <span class="comment"> * written permission.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00030"></a>00030 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00031"></a>00031 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00032"></a>00032 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00033"></a>00033 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00034"></a>00034 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00035"></a>00035 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00036"></a>00036 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00037"></a>00037 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00038"></a>00038 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00039"></a>00039 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00040"></a>00040 <span class="comment"> *</span>
+<a name="l00041"></a>00041 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> */</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#ifndef __WEBCLIENT_H__</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define __WEBCLIENT_H__</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#include "webclient-strings.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00052"></a>00052
+<a name="l00053"></a><a class="code" href="a00163.html#g5a5bfd7e9060903893481db90645187b">00053</a> <span class="preprocessor">#define WEBCLIENT_CONF_MAX_URLLEN 100</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a><a class="code" href="a00097.html">00055</a> <span class="keyword">struct </span><a class="code" href="a00097.html">webclient_state</a> {
+<a name="l00056"></a><a class="code" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">00056</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00087.html">timer</a>;
+<a name="l00057"></a><a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">00057</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00097.html#8ae6395641b7752dce47881e20cee970">state</a>;
+<a name="l00058"></a><a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">00058</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">httpflag</a>;
+<a name="l00059"></a>00059
+<a name="l00060"></a><a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">00060</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>;
+<a name="l00061"></a><a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">00061</a> <span class="keywordtype">char</span> <a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>[40];
+<a name="l00062"></a><a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">00062</a> <span class="keywordtype">char</span> <a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>[<a class="code" href="a00163.html#g5a5bfd7e9060903893481db90645187b">WEBCLIENT_CONF_MAX_URLLEN</a>];
+<a name="l00063"></a><a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">00063</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">getrequestptr</a>;
+<a name="l00064"></a><a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">00064</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">getrequestleft</a>;
+<a name="l00065"></a>00065
+<a name="l00066"></a><a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">00066</a> <span class="keywordtype">char</span> <a class="code" href="a00097.html#606d2729bf411ade69044828403a72af">httpheaderline</a>[200];
+<a name="l00067"></a><a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">00067</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">httpheaderlineptr</a>;
+<a name="l00068"></a>00068
+<a name="l00069"></a><a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">00069</a> <span class="keywordtype">char</span> <a class="code" href="a00097.html#fb60f42593d305ea36d9b4303722696e">mimetype</a>[32];
+<a name="l00070"></a>00070 };
+<a name="l00071"></a>00071
+<a name="l00072"></a><a class="code" href="a00163.html#gdc5aec3587b2c55b714a6c2f37b56cba">00072</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00097.html">webclient_state</a> <a class="code" href="a00153.html#g69646a81a922033c5281445a71f8ffed">uip_tcp_appstate_t</a>;
+<a name="l00073"></a><a class="code" href="a00163.html#ge28f6cb60e86088d8886d0f804b4f37c">00073</a> <span class="preprocessor">#define UIP_APPCALL webclient_appcall</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/**</span>
+<a name="l00076"></a>00076 <span class="comment"> * Callback function that is called from the webclient code when HTTP</span>
+<a name="l00077"></a>00077 <span class="comment"> * data has been received.</span>
+<a name="l00078"></a>00078 <span class="comment"> *</span>
+<a name="l00079"></a>00079 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00080"></a>00080 <span class="comment"> * webclient code. The function is called from the webclient module</span>
+<a name="l00081"></a>00081 <span class="comment"> * when HTTP data has been received. The function is not called when</span>
+<a name="l00082"></a>00082 <span class="comment"> * HTTP headers are received, only for the actual data.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * \note This function is called many times, repetedly, when data is</span>
+<a name="l00085"></a>00085 <span class="comment"> * being received, and not once when all data has been received.</span>
+<a name="l00086"></a>00086 <span class="comment"> *</span>
+<a name="l00087"></a>00087 <span class="comment"> * \param data A pointer to the data that has been received.</span>
+<a name="l00088"></a>00088 <span class="comment"> * \param len The length of the data that has been received.</span>
+<a name="l00089"></a>00089 <span class="comment"> */</span>
+<a name="l00090"></a>00090 <span class="keywordtype">void</span> <a class="code" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient_datahandler</a>(<span class="keywordtype">char</span> *data, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len);
+<a name="l00091"></a>00091 <span class="comment"></span>
+<a name="l00092"></a>00092 <span class="comment">/**</span>
+<a name="l00093"></a>00093 <span class="comment"> * Callback function that is called from the webclient code when the</span>
+<a name="l00094"></a>00094 <span class="comment"> * HTTP connection has been connected to the web server.</span>
+<a name="l00095"></a>00095 <span class="comment"> *</span>
+<a name="l00096"></a>00096 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00097"></a>00097 <span class="comment"> * webclient code.</span>
+<a name="l00098"></a>00098 <span class="comment"> */</span>
+<a name="l00099"></a>00099 <span class="keywordtype">void</span> <a class="code" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient_connected</a>(<span class="keywordtype">void</span>);
+<a name="l00100"></a>00100 <span class="comment"></span>
+<a name="l00101"></a>00101 <span class="comment">/**</span>
+<a name="l00102"></a>00102 <span class="comment"> * Callback function that is called from the webclient code if the</span>
+<a name="l00103"></a>00103 <span class="comment"> * HTTP connection to the web server has timed out.</span>
+<a name="l00104"></a>00104 <span class="comment"> *</span>
+<a name="l00105"></a>00105 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00106"></a>00106 <span class="comment"> * webclient code.</span>
+<a name="l00107"></a>00107 <span class="comment"> */</span>
+<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a class="code" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient_timedout</a>(<span class="keywordtype">void</span>);
+<a name="l00109"></a>00109 <span class="comment"></span>
+<a name="l00110"></a>00110 <span class="comment">/**</span>
+<a name="l00111"></a>00111 <span class="comment"> * Callback function that is called from the webclient code if the</span>
+<a name="l00112"></a>00112 <span class="comment"> * HTTP connection to the web server has been aborted by the web</span>
+<a name="l00113"></a>00113 <span class="comment"> * server.</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00116"></a>00116 <span class="comment"> * webclient code.</span>
+<a name="l00117"></a>00117 <span class="comment"> */</span>
+<a name="l00118"></a>00118 <span class="keywordtype">void</span> <a class="code" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient_aborted</a>(<span class="keywordtype">void</span>);
+<a name="l00119"></a>00119 <span class="comment"></span>
+<a name="l00120"></a>00120 <span class="comment">/**</span>
+<a name="l00121"></a>00121 <span class="comment"> * Callback function that is called from the webclient code when the</span>
+<a name="l00122"></a>00122 <span class="comment"> * HTTP connection to the web server has been closed.</span>
+<a name="l00123"></a>00123 <span class="comment"> *</span>
+<a name="l00124"></a>00124 <span class="comment"> * This function must be implemented by the module that uses the</span>
+<a name="l00125"></a>00125 <span class="comment"> * webclient code.</span>
+<a name="l00126"></a>00126 <span class="comment"> */</span>
+<a name="l00127"></a>00127 <span class="keywordtype">void</span> <a class="code" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient_closed</a>(<span class="keywordtype">void</span>);
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 <span class="comment"></span>
+<a name="l00131"></a>00131 <span class="comment">/**</span>
+<a name="l00132"></a>00132 <span class="comment"> * Initialize the webclient module.</span>
+<a name="l00133"></a>00133 <span class="comment"> */</span>
+<a name="l00134"></a>00134 <span class="keywordtype">void</span> <a class="code" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient_init</a>(<span class="keywordtype">void</span>);
+<a name="l00135"></a>00135 <span class="comment"></span>
+<a name="l00136"></a>00136 <span class="comment">/**</span>
+<a name="l00137"></a>00137 <span class="comment"> * Open an HTTP connection to a web server and ask for a file using</span>
+<a name="l00138"></a>00138 <span class="comment"> * the GET method.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * This function opens an HTTP connection to the specified web server</span>
+<a name="l00141"></a>00141 <span class="comment"> * and requests the specified file using the GET method. When the HTTP</span>
+<a name="l00142"></a>00142 <span class="comment"> * connection has been connected, the webclient_connected() callback</span>
+<a name="l00143"></a>00143 <span class="comment"> * function is called and when the HTTP data arrives the</span>
+<a name="l00144"></a>00144 <span class="comment"> * webclient_datahandler() callback function is called.</span>
+<a name="l00145"></a>00145 <span class="comment"> *</span>
+<a name="l00146"></a>00146 <span class="comment"> * The callback function webclient_timedout() is called if the web</span>
+<a name="l00147"></a>00147 <span class="comment"> * server could not be contacted, and the webclient_aborted() callback</span>
+<a name="l00148"></a>00148 <span class="comment"> * function is called if the HTTP connection is aborted by the web</span>
+<a name="l00149"></a>00149 <span class="comment"> * server.</span>
+<a name="l00150"></a>00150 <span class="comment"> *</span>
+<a name="l00151"></a>00151 <span class="comment"> * When the HTTP request has been completed and the HTTP connection is</span>
+<a name="l00152"></a>00152 <span class="comment"> * closed, the webclient_closed() callback function will be called.</span>
+<a name="l00153"></a>00153 <span class="comment"> *</span>
+<a name="l00154"></a>00154 <span class="comment"> * \note If the function is passed a host name, it must already be in</span>
+<a name="l00155"></a>00155 <span class="comment"> * the resolver cache in order for the function to connect to the web</span>
+<a name="l00156"></a>00156 <span class="comment"> * server. It is therefore up to the calling module to implement the</span>
+<a name="l00157"></a>00157 <span class="comment"> * resolver calls and the signal handler used for reporting a resolv</span>
+<a name="l00158"></a>00158 <span class="comment"> * query answer.</span>
+<a name="l00159"></a>00159 <span class="comment"> *</span>
+<a name="l00160"></a>00160 <span class="comment"> * \param host A pointer to a string containing either a host name or</span>
+<a name="l00161"></a>00161 <span class="comment"> * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).</span>
+<a name="l00162"></a>00162 <span class="comment"> *</span>
+<a name="l00163"></a>00163 <span class="comment"> * \param port The port number to which to connect, in host byte order.</span>
+<a name="l00164"></a>00164 <span class="comment"> *</span>
+<a name="l00165"></a>00165 <span class="comment"> * \param file A pointer to the name of the file to get.</span>
+<a name="l00166"></a>00166 <span class="comment"> *</span>
+<a name="l00167"></a>00167 <span class="comment"> * \retval 0 if the host name could not be found in the cache, or</span>
+<a name="l00168"></a>00168 <span class="comment"> * if a TCP connection could not be created.</span>
+<a name="l00169"></a>00169 <span class="comment"> *</span>
+<a name="l00170"></a>00170 <span class="comment"> * \retval 1 if the connection was initiated.</span>
+<a name="l00171"></a>00171 <span class="comment"> */</span>
+<a name="l00172"></a>00172 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient_get</a>(<span class="keywordtype">char</span> *<a class="code" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">host</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00097.html#7092781c50dcad50f473888585c85b83">port</a>, <span class="keywordtype">char</span> *<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>);
+<a name="l00173"></a>00173 <span class="comment"></span>
+<a name="l00174"></a>00174 <span class="comment">/**</span>
+<a name="l00175"></a>00175 <span class="comment"> * Close the currently open HTTP connection.</span>
+<a name="l00176"></a>00176 <span class="comment"> */</span>
+<a name="l00177"></a>00177 <span class="keywordtype">void</span> <a class="code" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient_close</a>(<span class="keywordtype">void</span>);
+<a name="l00178"></a>00178 <span class="keywordtype">void</span> <a class="code" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00179"></a>00179 <span class="comment"></span>
+<a name="l00180"></a>00180 <span class="comment">/**</span>
+<a name="l00181"></a>00181 <span class="comment"> * Obtain the MIME type of the current HTTP data stream.</span>
+<a name="l00182"></a>00182 <span class="comment"> *</span>
+<a name="l00183"></a>00183 <span class="comment"> * \return A pointer to a string contaning the MIME type. The string</span>
+<a name="l00184"></a>00184 <span class="comment"> * may be empty if no MIME type was reported by the web server.</span>
+<a name="l00185"></a>00185 <span class="comment"> */</span>
+<a name="l00186"></a>00186 <span class="keywordtype">char</span> *<a class="code" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient_mimetype</a>(<span class="keywordtype">void</span>);
+<a name="l00187"></a>00187 <span class="comment"></span>
+<a name="l00188"></a>00188 <span class="comment">/**</span>
+<a name="l00189"></a>00189 <span class="comment"> * Obtain the filename of the current HTTP data stream.</span>
+<a name="l00190"></a>00190 <span class="comment"> *</span>
+<a name="l00191"></a>00191 <span class="comment"> * The filename of an HTTP request may be changed by the web server,</span>
+<a name="l00192"></a>00192 <span class="comment"> * and may therefore not be the same as when the original GET request</span>
+<a name="l00193"></a>00193 <span class="comment"> * was made with webclient_get(). This function is used for obtaining</span>
+<a name="l00194"></a>00194 <span class="comment"> * the current filename.</span>
+<a name="l00195"></a>00195 <span class="comment"> *</span>
+<a name="l00196"></a>00196 <span class="comment"> * \return A pointer to the current filename.</span>
+<a name="l00197"></a>00197 <span class="comment"> */</span>
+<a name="l00198"></a>00198 <span class="keywordtype">char</span> *<a class="code" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient_filename</a>(<span class="keywordtype">void</span>);
+<a name="l00199"></a>00199 <span class="comment"></span>
+<a name="l00200"></a>00200 <span class="comment">/**</span>
+<a name="l00201"></a>00201 <span class="comment"> * Obtain the hostname of the current HTTP data stream.</span>
+<a name="l00202"></a>00202 <span class="comment"> *</span>
+<a name="l00203"></a>00203 <span class="comment"> * The hostname of the web server of an HTTP request may be changed</span>
+<a name="l00204"></a>00204 <span class="comment"> * by the web server, and may therefore not be the same as when the</span>
+<a name="l00205"></a>00205 <span class="comment"> * original GET request was made with webclient_get(). This function</span>
+<a name="l00206"></a>00206 <span class="comment"> * is used for obtaining the current hostname.</span>
+<a name="l00207"></a>00207 <span class="comment"> *</span>
+<a name="l00208"></a>00208 <span class="comment"> * \return A pointer to the current hostname.</span>
+<a name="l00209"></a>00209 <span class="comment"> */</span>
+<a name="l00210"></a>00210 <span class="keywordtype">char</span> *<a class="code" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient_hostname</a>(<span class="keywordtype">void</span>);
+<a name="l00211"></a>00211 <span class="comment"></span>
+<a name="l00212"></a>00212 <span class="comment">/**</span>
+<a name="l00213"></a>00213 <span class="comment"> * Obtain the port number of the current HTTP data stream.</span>
+<a name="l00214"></a>00214 <span class="comment"> *</span>
+<a name="l00215"></a>00215 <span class="comment"> * The port number of an HTTP request may be changed by the web</span>
+<a name="l00216"></a>00216 <span class="comment"> * server, and may therefore not be the same as when the original GET</span>
+<a name="l00217"></a>00217 <span class="comment"> * request was made with webclient_get(). This function is used for</span>
+<a name="l00218"></a>00218 <span class="comment"> * obtaining the current port number.</span>
+<a name="l00219"></a>00219 <span class="comment"> *</span>
+<a name="l00220"></a>00220 <span class="comment"> * \return The port number of the current HTTP data stream, in host byte order.</span>
+<a name="l00221"></a>00221 <span class="comment"> */</span>
+<a name="l00222"></a>00222 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient_port</a>(<span class="keywordtype">void</span>);
+<a name="l00223"></a>00223
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225
+<a name="l00226"></a>00226 <span class="preprocessor">#endif </span><span class="comment">/* __WEBCLIENT_H__ */</span>
+<a name="l00227"></a>00227 <span class="comment"></span>
+<a name="l00228"></a>00228 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00182.html b/third_party/uip-1.0/doc/html/a00182.html new file mode 100644 index 0000000..d4ba218 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00182.html @@ -0,0 +1,228 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd-cgi.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd-cgi.c</h1><a href="a00112.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup httpd</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * Web server script interface</span>
+<a name="l00009"></a>00009 <span class="comment"> * \author</span>
+<a name="l00010"></a>00010 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="comment">/*</span>
+<a name="l00015"></a>00015 <span class="comment"> * Copyright (c) 2001-2006, Adam Dunkels.</span>
+<a name="l00016"></a>00016 <span class="comment"> * All rights reserved.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00019"></a>00019 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00020"></a>00020 <span class="comment"> * are met:</span>
+<a name="l00021"></a>00021 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00022"></a>00022 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00023"></a>00023 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00024"></a>00024 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00025"></a>00025 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00026"></a>00026 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00027"></a>00027 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00028"></a>00028 <span class="comment"> * written permission.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00031"></a>00031 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00032"></a>00032 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00033"></a>00033 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00034"></a>00034 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00035"></a>00035 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00036"></a>00036 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00037"></a>00037 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00038"></a>00038 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00039"></a>00039 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00040"></a>00040 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00041"></a>00041 <span class="comment"> *</span>
+<a name="l00042"></a>00042 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "httpd.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="a00113.html">httpd-cgi.h</a>"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "httpd-fs.h"</span>
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include <string.h></span>
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <a class="code" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">HTTPD_CGI_CALL</a>(<a class="code" href="a00097.html#e87913860c6b05c6e6b060639b950098">file</a>, <span class="stringliteral">"file-stats"</span>, file_stats);
+<a name="l00058"></a>00058 <a class="code" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">HTTPD_CGI_CALL</a>(tcp, <span class="stringliteral">"tcp-connections"</span>, tcp_stats);
+<a name="l00059"></a>00059 <a class="code" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">HTTPD_CGI_CALL</a>(net, <span class="stringliteral">"net-stats"</span>, net_stats);
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00079.html">httpd_cgi_call</a> *calls[] = { &file, &tcp, &net, <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> };
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00064"></a>00064 <span class="keyword">static</span>
+<a name="l00065"></a>00065 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(nullfunction(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s, <span class="keywordtype">char</span> *ptr))
+<a name="l00066"></a>00066 {
+<a name="l00067"></a>00067 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00068"></a>00068 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00069"></a>00069 }
+<a name="l00070"></a>00070 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00071"></a>00071 httpd_cgifunction
+<a name="l00072"></a><a class="code" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">00072</a> <a class="code" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a>(<span class="keywordtype">char</span> *<a class="code" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">name</a>)
+<a name="l00073"></a>00073 {
+<a name="l00074"></a>00074 <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00079.html">httpd_cgi_call</a> **f;
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 <span class="comment">/* Find the matching name in the table, return the function. */</span>
+<a name="l00077"></a>00077 <span class="keywordflow">for</span>(f = calls; *f != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; ++f) {
+<a name="l00078"></a>00078 <span class="keywordflow">if</span>(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {
+<a name="l00079"></a>00079 return (*f)->function;
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081 }
+<a name="l00082"></a>00082 <span class="keywordflow">return</span> nullfunction;
+<a name="l00083"></a>00083 }
+<a name="l00084"></a>00084 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00086"></a>00086 generate_file_stats(<span class="keywordtype">void</span> *arg)
+<a name="l00087"></a>00087 {
+<a name="l00088"></a>00088 <span class="keywordtype">char</span> *f = (<span class="keywordtype">char</span> *)arg;
+<a name="l00089"></a>00089 <span class="keywordflow">return</span> snprintf((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a>, <span class="stringliteral">"%5u"</span>, httpd_fs_count(f));
+<a name="l00090"></a>00090 }
+<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00092"></a>00092 <span class="keyword">static</span>
+<a name="l00093"></a>00093 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(file_stats(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s, <span class="keywordtype">char</span> *ptr))
+<a name="l00094"></a>00094 {
+<a name="l00095"></a>00095 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00096"></a>00096
+<a name="l00097"></a>00097 <a class="code" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, generate_file_stats, strchr(ptr, <span class="charliteral">' '</span>) + 1);
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> closed[] = <span class="comment">/* "CLOSED",*/</span>
+<a name="l00103"></a>00103 {0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
+<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> syn_rcvd[] = <span class="comment">/* "SYN-RCVD",*/</span>
+<a name="l00105"></a>00105 {0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
+<a name="l00106"></a>00106 0x44, 0};
+<a name="l00107"></a>00107 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> syn_sent[] = <span class="comment">/* "SYN-SENT",*/</span>
+<a name="l00108"></a>00108 {0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
+<a name="l00109"></a>00109 0x54, 0};
+<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> established[] = <span class="comment">/* "ESTABLISHED",*/</span>
+<a name="l00111"></a>00111 {0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
+<a name="l00112"></a>00112 0x45, 0x44, 0};
+<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> fin_wait_1[] = <span class="comment">/* "FIN-WAIT-1",*/</span>
+<a name="l00114"></a>00114 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+<a name="l00115"></a>00115 0x54, 0x2d, 0x31, 0};
+<a name="l00116"></a>00116 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> fin_wait_2[] = <span class="comment">/* "FIN-WAIT-2",*/</span>
+<a name="l00117"></a>00117 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+<a name="l00118"></a>00118 0x54, 0x2d, 0x32, 0};
+<a name="l00119"></a>00119 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> closing[] = <span class="comment">/* "CLOSING",*/</span>
+<a name="l00120"></a>00120 {0x43, 0x4c, 0x4f, 0x53, 0x49,
+<a name="l00121"></a>00121 0x4e, 0x47, 0};
+<a name="l00122"></a>00122 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> time_wait[] = <span class="comment">/* "TIME-WAIT,"*/</span>
+<a name="l00123"></a>00123 {0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
+<a name="l00124"></a>00124 0x49, 0x54, 0};
+<a name="l00125"></a>00125 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> last_ack[] = <span class="comment">/* "LAST-ACK"*/</span>
+<a name="l00126"></a>00126 {0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
+<a name="l00127"></a>00127 0x4b, 0};
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *states[] = {
+<a name="l00130"></a>00130 closed,
+<a name="l00131"></a>00131 syn_rcvd,
+<a name="l00132"></a>00132 syn_sent,
+<a name="l00133"></a>00133 established,
+<a name="l00134"></a>00134 fin_wait_1,
+<a name="l00135"></a>00135 fin_wait_2,
+<a name="l00136"></a>00136 closing,
+<a name="l00137"></a>00137 time_wait,
+<a name="l00138"></a>00138 last_ack};
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00142"></a>00142 generate_tcp_stats(<span class="keywordtype">void</span> *arg)
+<a name="l00143"></a>00143 {
+<a name="l00144"></a>00144 <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *conn;
+<a name="l00145"></a>00145 <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *s = (<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *)arg;
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 conn = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>];
+<a name="l00148"></a>00148 <span class="keywordflow">return</span> snprintf((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a>,
+<a name="l00149"></a>00149 <span class="stringliteral">"<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n"</span>,
+<a name="l00150"></a>00150 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a>),
+<a name="l00151"></a>00151 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>[0]) >> 8,
+<a name="l00152"></a>00152 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>[0]) & 0xff,
+<a name="l00153"></a>00153 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>[1]) >> 8,
+<a name="l00154"></a>00154 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>[1]) & 0xff,
+<a name="l00155"></a>00155 <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(conn-><a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>),
+<a name="l00156"></a>00156 states[conn-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>],
+<a name="l00157"></a>00157 conn-><a class="code" href="a00088.html#4289c59840b128f2f6526e9da2711d47">nrtx</a>,
+<a name="l00158"></a>00158 conn-><a class="code" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">timer</a>,
+<a name="l00159"></a>00159 (<a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(conn))? <span class="charliteral">'*'</span>:<span class="charliteral">' '</span>,
+<a name="l00160"></a>00160 (<a class="code" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip_stopped</a>(conn))? <span class="charliteral">'!'</span>:<span class="charliteral">' '</span>);
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00163"></a>00163 <span class="keyword">static</span>
+<a name="l00164"></a>00164 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(tcp_stats(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s, <span class="keywordtype">char</span> *ptr))
+<a name="l00165"></a>00165 {
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="keywordflow">for</span>(s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a> = 0; s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a> < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>) {
+<a name="l00170"></a>00170 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>].tcpstateflags & UIP_TS_MASK) != <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>) {
+<a name="l00171"></a>00171 <a class="code" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, generate_tcp_stats, s);
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173 }
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00179"></a>00179 generate_net_stats(<span class="keywordtype">void</span> *arg)
+<a name="l00180"></a>00180 {
+<a name="l00181"></a>00181 <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *s = (<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *)arg;
+<a name="l00182"></a>00182 <span class="keywordflow">return</span> snprintf((<span class="keywordtype">char</span> *)uip_appdata, <a class="code" href="a00150.html#ge0825474feee11b4e038bfe71757875f">UIP_APPDATA_SIZE</a>,
+<a name="l00183"></a>00183 <span class="stringliteral">"%5u\n"</span>, ((<a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> *)&<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>)[s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>]);
+<a name="l00184"></a>00184 }
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 <span class="keyword">static</span>
+<a name="l00187"></a>00187 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(net_stats(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s, <span class="keywordtype">char</span> *ptr))
+<a name="l00188"></a>00188 {
+<a name="l00189"></a>00189 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 <span class="preprocessor">#if UIP_STATISTICS</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>
+<a name="l00193"></a>00193 <span class="keywordflow">for</span>(s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a> = 0; s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a> < <span class="keyword">sizeof</span>(<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>) / <span class="keyword">sizeof</span>(<a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a>);
+<a name="l00194"></a>00194 ++s-><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>) {
+<a name="l00195"></a>00195 <a class="code" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, generate_net_stats, s);
+<a name="l00196"></a>00196 }
+<a name="l00197"></a>00197
+<a name="l00198"></a>00198 <span class="preprocessor">#endif </span><span class="comment">/* UIP_STATISTICS */</span>
+<a name="l00199"></a>00199
+<a name="l00200"></a>00200 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00201"></a>00201 }
+<a name="l00202"></a>00202 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00203"></a>00203 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00183.html b/third_party/uip-1.0/doc/html/a00183.html new file mode 100644 index 0000000..4898da3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00183.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd-cgi.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd-cgi.h</h1><a href="a00113.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup httpd</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * Web server script interface header file</span>
+<a name="l00009"></a>00009 <span class="comment"> * \author</span>
+<a name="l00010"></a>00010 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014
+<a name="l00015"></a>00015
+<a name="l00016"></a>00016 <span class="comment">/*</span>
+<a name="l00017"></a>00017 <span class="comment"> * Copyright (c) 2001, Adam Dunkels.</span>
+<a name="l00018"></a>00018 <span class="comment"> * All rights reserved.</span>
+<a name="l00019"></a>00019 <span class="comment"> *</span>
+<a name="l00020"></a>00020 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00021"></a>00021 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00022"></a>00022 <span class="comment"> * are met:</span>
+<a name="l00023"></a>00023 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00024"></a>00024 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00025"></a>00025 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00026"></a>00026 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00027"></a>00027 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00028"></a>00028 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00029"></a>00029 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00030"></a>00030 <span class="comment"> * written permission.</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00033"></a>00033 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00034"></a>00034 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00035"></a>00035 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00036"></a>00036 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00037"></a>00037 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00038"></a>00038 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00039"></a>00039 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00040"></a>00040 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00041"></a>00041 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00042"></a>00042 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $</span>
+<a name="l00047"></a>00047 <span class="comment"> *</span>
+<a name="l00048"></a>00048 <span class="comment"> */</span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#ifndef __HTTPD_CGI_H__</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define __HTTPD_CGI_H__</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include "httpd.h"</span>
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="keyword">typedef</span> <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>((* httpd_cgifunction)(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *, <span class="keywordtype">char</span> *));
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 httpd_cgifunction <a class="code" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a>(<span class="keywordtype">char</span> *name);
+<a name="l00059"></a>00059
+<a name="l00060"></a><a class="code" href="a00079.html">00060</a> <span class="keyword">struct </span><a class="code" href="a00079.html">httpd_cgi_call</a> {
+<a name="l00061"></a><a class="code" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">00061</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">name</a>;
+<a name="l00062"></a><a class="code" href="a00079.html#1513a9e88921750d2a611b518f6fc207">00062</a> <span class="keyword">const</span> httpd_cgifunction <a class="code" href="a00079.html#1513a9e88921750d2a611b518f6fc207">function</a>;
+<a name="l00063"></a>00063 };
+<a name="l00064"></a>00064 <span class="comment"></span>
+<a name="l00065"></a>00065 <span class="comment">/**</span>
+<a name="l00066"></a>00066 <span class="comment"> * \brief HTTPD CGI function declaration</span>
+<a name="l00067"></a>00067 <span class="comment"> * \param name The C variable name of the function</span>
+<a name="l00068"></a>00068 <span class="comment"> * \param str The string name of the function, used in the script file</span>
+<a name="l00069"></a>00069 <span class="comment"> * \param function A pointer to the function that implements it</span>
+<a name="l00070"></a>00070 <span class="comment"> *</span>
+<a name="l00071"></a>00071 <span class="comment"> * This macro is used for declaring a HTTPD CGI</span>
+<a name="l00072"></a>00072 <span class="comment"> * function. This function is then added to the list of</span>
+<a name="l00073"></a>00073 <span class="comment"> * HTTPD CGI functions with the httpd_cgi_add() function.</span>
+<a name="l00074"></a>00074 <span class="comment"> *</span>
+<a name="l00075"></a>00075 <span class="comment"> * \hideinitializer</span>
+<a name="l00076"></a>00076 <span class="comment"> */</span>
+<a name="l00077"></a><a class="code" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">00077</a> <span class="preprocessor">#define HTTPD_CGI_CALL(name, str, function) \</span>
+<a name="l00078"></a>00078 <span class="preprocessor">static PT_THREAD(function(struct httpd_state *, char *)); \</span>
+<a name="l00079"></a>00079 <span class="preprocessor">static const struct httpd_cgi_call name = {str, function}</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>
+<a name="l00081"></a>00081 <span class="keywordtype">void</span> httpd_cgi_init(<span class="keywordtype">void</span>);
+<a name="l00082"></a>00082 <span class="preprocessor">#endif </span><span class="comment">/* __HTTPD_CGI_H__ */</span>
+<a name="l00083"></a>00083 <span class="comment"></span>
+<a name="l00084"></a>00084 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00184.html b/third_party/uip-1.0/doc/html/a00184.html new file mode 100644 index 0000000..cd539a9 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00184.html @@ -0,0 +1,363 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd.c</h1><a href="a00114.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup apps</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup httpd Web server</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> * The uIP web server is a very simplistic implementation of an HTTP</span>
+<a name="l00010"></a>00010 <span class="comment"> * server. It can serve web pages and files from a read-only ROM</span>
+<a name="l00011"></a>00011 <span class="comment"> * filesystem, and provides a very small scripting language.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment"> */</span>
+<a name="l00014"></a>00014 <span class="comment"></span>
+<a name="l00015"></a>00015 <span class="comment">/**</span>
+<a name="l00016"></a>00016 <span class="comment"> * \file</span>
+<a name="l00017"></a>00017 <span class="comment"> * Web server</span>
+<a name="l00018"></a>00018 <span class="comment"> * \author</span>
+<a name="l00019"></a>00019 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00020"></a>00020 <span class="comment"> */</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 <span class="comment">/*</span>
+<a name="l00024"></a>00024 <span class="comment"> * Copyright (c) 2004, Adam Dunkels.</span>
+<a name="l00025"></a>00025 <span class="comment"> * All rights reserved.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00028"></a>00028 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00029"></a>00029 <span class="comment"> * are met:</span>
+<a name="l00030"></a>00030 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00031"></a>00031 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00032"></a>00032 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00033"></a>00033 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00034"></a>00034 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00035"></a>00035 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00036"></a>00036 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00037"></a>00037 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00040"></a>00040 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00041"></a>00041 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00042"></a>00042 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00043"></a>00043 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00044"></a>00044 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00045"></a>00045 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00046"></a>00046 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00047"></a>00047 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00048"></a>00048 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00049"></a>00049 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00052"></a>00052 <span class="comment"> *</span>
+<a name="l00053"></a>00053 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $</span>
+<a name="l00056"></a>00056 <span class="comment"> */</span>
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "httpd.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "httpd-fs.h"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="a00113.html">httpd-cgi.h</a>"</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#include "http-strings.h"</span>
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="preprocessor">#include <string.h></span>
+<a name="l00065"></a>00065
+<a name="l00066"></a><a class="code" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">00066</a> <span class="preprocessor">#define STATE_WAITING 0</span>
+<a name="l00067"></a><a class="code" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">00067</a> <span class="preprocessor"></span><span class="preprocessor">#define STATE_OUTPUT 1</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a><a class="code" href="a00164.html#g3212e70c55244608ac16316888c354f0">00069</a> <span class="preprocessor">#define ISO_nl 0x0a</span>
+<a name="l00070"></a><a class="code" href="a00164.html#g71e1b022f7b7fa3a154f19372b239935">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_space 0x20</span>
+<a name="l00071"></a><a class="code" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_bang 0x21</span>
+<a name="l00072"></a><a class="code" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">00072</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_percent 0x25</span>
+<a name="l00073"></a><a class="code" href="a00164.html#gf7dd2757d1e766f65b01ba7c91c660a0">00073</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_period 0x2e</span>
+<a name="l00074"></a><a class="code" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_slash 0x2f</span>
+<a name="l00075"></a><a class="code" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define ISO_colon 0x3a</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>
+<a name="l00080"></a>00080 generate_part_of_file(<span class="keywordtype">void</span> *state)
+<a name="l00081"></a>00081 {
+<a name="l00082"></a>00082 <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *s = (<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *)state;
+<a name="l00083"></a>00083
+<a name="l00084"></a>00084 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00085"></a>00085 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>();
+<a name="l00086"></a>00086 } <span class="keywordflow">else</span> {
+<a name="l00087"></a>00087 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len;
+<a name="l00088"></a>00088 }
+<a name="l00089"></a>00089 memcpy(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data, s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>);
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <span class="keywordflow">return</span> s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00092"></a>00092 }
+<a name="l00093"></a>00093 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00094"></a>00094 <span class="keyword">static</span>
+<a name="l00095"></a>00095 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(send_file(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s))
+<a name="l00096"></a>00096 {
+<a name="l00097"></a>00097 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <span class="keywordflow">do</span> {
+<a name="l00100"></a>00100 <a class="code" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">PSOCK_GENERATOR_SEND</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, generate_part_of_file, s);
+<a name="l00101"></a>00101 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len -= s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00102"></a>00102 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data += s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00103"></a>00103 } <span class="keywordflow">while</span>(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len > 0);
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00106"></a>00106 }
+<a name="l00107"></a>00107 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00108"></a>00108 <span class="keyword">static</span>
+<a name="l00109"></a>00109 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(send_part_of_file(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s))
+<a name="l00110"></a>00110 {
+<a name="l00111"></a>00111 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <a class="code" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">PSOCK_SEND</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data, s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>);
+<a name="l00114"></a>00114
+<a name="l00115"></a>00115 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00116"></a>00116 }
+<a name="l00117"></a>00117 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00118"></a>00118 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00119"></a>00119 next_scriptstate(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s)
+<a name="l00120"></a>00120 {
+<a name="l00121"></a>00121 <span class="keywordtype">char</span> *p;
+<a name="l00122"></a>00122 p = strchr(s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>) + 1;
+<a name="l00123"></a>00123 s-><a class="code" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">scriptlen</a> -= (<span class="keywordtype">unsigned</span> short)(p - s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>);
+<a name="l00124"></a>00124 s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a> = p;
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00127"></a>00127 <span class="keyword">static</span>
+<a name="l00128"></a>00128 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(handle_script(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s))
+<a name="l00129"></a>00129 {
+<a name="l00130"></a>00130 <span class="keywordtype">char</span> *ptr;
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>);
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 <span class="keywordflow">while</span>(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len > 0) {
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 <span class="comment">/* Check if we should start executing a script. */</span>
+<a name="l00138"></a>00138 <span class="keywordflow">if</span>(*s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data == <a class="code" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a> &&
+<a name="l00139"></a>00139 *(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data + 1) == <a class="code" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">ISO_bang</a>) {
+<a name="l00140"></a>00140 s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a> = s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data + 3;
+<a name="l00141"></a>00141 s-><a class="code" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">scriptlen</a> = s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len - 3;
+<a name="l00142"></a>00142 <span class="keywordflow">if</span>(*(s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a> - 1) == <a class="code" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">ISO_colon</a>) {
+<a name="l00143"></a>00143 httpd_fs_open(s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a> + 1, &s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>);
+<a name="l00144"></a>00144 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>, send_file(s));
+<a name="l00145"></a>00145 } <span class="keywordflow">else</span> {
+<a name="l00146"></a>00146 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>,
+<a name="l00147"></a>00147 <a class="code" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd_cgi</a>(s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>)(s, s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>));
+<a name="l00148"></a>00148 }
+<a name="l00149"></a>00149 next_scriptstate(s);
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="comment">/* The script is over, so we reset the pointers and continue</span>
+<a name="l00152"></a>00152 <span class="comment"> sending the rest of the file. */</span>
+<a name="l00153"></a>00153 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data = s-><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>;
+<a name="l00154"></a>00154 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len = s-><a class="code" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">scriptlen</a>;
+<a name="l00155"></a>00155 } <span class="keywordflow">else</span> {
+<a name="l00156"></a>00156 <span class="comment">/* See if we find the start of script marker in the block of HTML</span>
+<a name="l00157"></a>00157 <span class="comment"> to be sent. */</span>
+<a name="l00158"></a>00158
+<a name="l00159"></a>00159 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00160"></a>00160 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>();
+<a name="l00161"></a>00161 } <span class="keywordflow">else</span> {
+<a name="l00162"></a>00162 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len;
+<a name="l00163"></a>00163 }
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <span class="keywordflow">if</span>(*s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data == <a class="code" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a>) {
+<a name="l00166"></a>00166 ptr = strchr(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data + 1, <a class="code" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a>);
+<a name="l00167"></a>00167 } <span class="keywordflow">else</span> {
+<a name="l00168"></a>00168 ptr = strchr(s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data, <a class="code" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">ISO_percent</a>);
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 <span class="keywordflow">if</span>(ptr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &&
+<a name="l00171"></a>00171 ptr != s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data) {
+<a name="l00172"></a>00172 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = (int)(ptr - s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data);
+<a name="l00173"></a>00173 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> >= <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00174"></a>00174 s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a> = <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>();
+<a name="l00175"></a>00175 }
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>, send_part_of_file(s));
+<a name="l00178"></a>00178 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.data += s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00179"></a>00179 s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>.len -= s-><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>);
+<a name="l00185"></a>00185 }
+<a name="l00186"></a>00186 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00187"></a>00187 <span class="keyword">static</span>
+<a name="l00188"></a>00188 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(send_headers(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s, <span class="keyword">const</span> <span class="keywordtype">char</span> *statushdr))
+<a name="l00189"></a>00189 {
+<a name="l00190"></a>00190 <span class="keywordtype">char</span> *ptr;
+<a name="l00191"></a>00191
+<a name="l00192"></a>00192 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, statushdr);
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 ptr = strrchr(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, <a class="code" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a>);
+<a name="l00197"></a>00197 <span class="keywordflow">if</span>(ptr == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00198"></a>00198 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_binary);
+<a name="l00199"></a>00199 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(http_html, ptr, 5) == 0 ||
+<a name="l00200"></a>00200 strncmp(http_shtml, ptr, 6) == 0) {
+<a name="l00201"></a>00201 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_html);
+<a name="l00202"></a>00202 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(http_css, ptr, 4) == 0) {
+<a name="l00203"></a>00203 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_css);
+<a name="l00204"></a>00204 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(http_png, ptr, 4) == 0) {
+<a name="l00205"></a>00205 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_png);
+<a name="l00206"></a>00206 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(http_gif, ptr, 4) == 0) {
+<a name="l00207"></a>00207 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_gif);
+<a name="l00208"></a>00208 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp(http_jpg, ptr, 4) == 0) {
+<a name="l00209"></a>00209 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_jpg);
+<a name="l00210"></a>00210 } <span class="keywordflow">else</span> {
+<a name="l00211"></a>00211 <a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">PSOCK_SEND_STR</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, http_content_type_plain);
+<a name="l00212"></a>00212 }
+<a name="l00213"></a>00213 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00214"></a>00214 }
+<a name="l00215"></a>00215 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00216"></a>00216 <span class="keyword">static</span>
+<a name="l00217"></a>00217 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(handle_output(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s))
+<a name="l00218"></a>00218 {
+<a name="l00219"></a>00219 <span class="keywordtype">char</span> *ptr;
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221 <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s->outputpt);
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 <span class="keywordflow">if</span>(!httpd_fs_open(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, &s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>)) {
+<a name="l00224"></a>00224 httpd_fs_open(http_404_html, &s-><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">file</a>);
+<a name="l00225"></a>00225 strcpy(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, http_404_html);
+<a name="l00226"></a>00226 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s->outputpt,
+<a name="l00227"></a>00227 send_headers(s,
+<a name="l00228"></a>00228 http_header_404));
+<a name="l00229"></a>00229 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s->outputpt,
+<a name="l00230"></a>00230 send_file(s));
+<a name="l00231"></a>00231 } <span class="keywordflow">else</span> {
+<a name="l00232"></a>00232 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s->outputpt,
+<a name="l00233"></a>00233 send_headers(s,
+<a name="l00234"></a>00234 http_header_200));
+<a name="l00235"></a>00235 ptr = strchr(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, <a class="code" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">ISO_period</a>);
+<a name="l00236"></a>00236 <span class="keywordflow">if</span>(ptr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> && strncmp(ptr, http_shtml, 6) == 0) {
+<a name="l00237"></a>00237 <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&s-><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>);
+<a name="l00238"></a>00238 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s->outputpt, handle_script(s));
+<a name="l00239"></a>00239 } <span class="keywordflow">else</span> {
+<a name="l00240"></a>00240 <a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">PT_WAIT_THREAD</a>(&s->outputpt,
+<a name="l00241"></a>00241 send_file(s));
+<a name="l00242"></a>00242 }
+<a name="l00243"></a>00243 }
+<a name="l00244"></a>00244 <a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">PSOCK_CLOSE</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>);
+<a name="l00245"></a>00245 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s->outputpt);
+<a name="l00246"></a>00246 }
+<a name="l00247"></a>00247 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00248"></a>00248 <span class="keyword">static</span>
+<a name="l00249"></a>00249 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(handle_input(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s))
+<a name="l00250"></a>00250 {
+<a name="l00251"></a>00251 <a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">PSOCK_BEGIN</a>(&s->sin);
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s->sin, <a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a>);
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordflow">if</span>(strncmp(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>, http_get, 4) != 0) {
+<a name="l00257"></a>00257 <a class="code" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">PSOCK_CLOSE_EXIT</a>(&s->sin);
+<a name="l00258"></a>00258 }
+<a name="l00259"></a>00259 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s->sin, <a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a>);
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[0] != <a class="code" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">ISO_slash</a>) {
+<a name="l00262"></a>00262 <a class="code" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">PSOCK_CLOSE_EXIT</a>(&s->sin);
+<a name="l00263"></a>00263 }
+<a name="l00264"></a>00264
+<a name="l00265"></a>00265 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[1] == <a class="code" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">ISO_space</a>) {
+<a name="l00266"></a>00266 strncpy(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, http_index_html, <span class="keyword">sizeof</span>(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>));
+<a name="l00267"></a>00267 } <span class="keywordflow">else</span> {
+<a name="l00268"></a>00268 s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[<a class="code" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">PSOCK_DATALEN</a>(&s->sin) - 1] = 0;
+<a name="l00269"></a>00269 strncpy(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>, &s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[0], <span class="keyword">sizeof</span>(s-><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>));
+<a name="l00270"></a>00270 }
+<a name="l00271"></a>00271
+<a name="l00272"></a>00272 <span class="comment">/* httpd_log_file(uip_conn->ripaddr, s->filename);*/</span>
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 s-><a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a> = <a class="code" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">STATE_OUTPUT</a>;
+<a name="l00275"></a>00275
+<a name="l00276"></a>00276 <span class="keywordflow">while</span>(1) {
+<a name="l00277"></a>00277 <a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">PSOCK_READTO</a>(&s->sin, <a class="code" href="a00161.html#g3212e70c55244608ac16316888c354f0">ISO_nl</a>);
+<a name="l00278"></a>00278
+<a name="l00279"></a>00279 <span class="keywordflow">if</span>(strncmp(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>, http_referer, 8) == 0) {
+<a name="l00280"></a>00280 s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[<a class="code" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">PSOCK_DATALEN</a>(&s->sin) - 2] = 0;
+<a name="l00281"></a>00281 <span class="comment">/* httpd_log(&s->inputbuf[9]);*/</span>
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284
+<a name="l00285"></a>00285 <a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">PSOCK_END</a>(&s->sin);
+<a name="l00286"></a>00286 }
+<a name="l00287"></a>00287 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00288"></a>00288 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00289"></a>00289 handle_connection(<span class="keyword">struct</span> <a class="code" href="a00080.html">httpd_state</a> *s)
+<a name="l00290"></a>00290 {
+<a name="l00291"></a>00291 handle_input(s);
+<a name="l00292"></a>00292 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a> == <a class="code" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">STATE_OUTPUT</a>) {
+<a name="l00293"></a>00293 handle_output(s);
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295 }
+<a name="l00296"></a>00296 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00297"></a>00297 <span class="keywordtype">void</span>
+<a name="l00298"></a><a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">00298</a> <a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a>(<span class="keywordtype">void</span>)
+<a name="l00299"></a>00299 {
+<a name="l00300"></a>00300 <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *s = (<span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> *)&(<a class="code" href="a00088.html">uip_conn</a>->appstate);
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>() || <a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>() || <a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+<a name="l00303"></a>00303 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+<a name="l00304"></a>00304 <a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s->sin, s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>) - 1);
+<a name="l00305"></a>00305 <a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">PSOCK_INIT</a>(&s-><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>, s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>, <span class="keyword">sizeof</span>(s-><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>) - 1);
+<a name="l00306"></a>00306 <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&s->outputpt);
+<a name="l00307"></a>00307 s-><a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a> = <a class="code" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">STATE_WAITING</a>;
+<a name="l00308"></a>00308 <span class="comment">/* timer_set(&s->timer, CLOCK_SECOND * 100);*/</span>
+<a name="l00309"></a>00309 s-><a class="code" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">timer</a> = 0;
+<a name="l00310"></a>00310 handle_connection(s);
+<a name="l00311"></a>00311 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(s != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00312"></a>00312 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+<a name="l00313"></a>00313 ++s-><a class="code" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">timer</a>;
+<a name="l00314"></a>00314 <span class="keywordflow">if</span>(s-><a class="code" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">timer</a> >= 20) {
+<a name="l00315"></a>00315 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 } <span class="keywordflow">else</span> {
+<a name="l00318"></a>00318 s-><a class="code" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">timer</a> = 0;
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 handle_connection(s);
+<a name="l00321"></a>00321 } <span class="keywordflow">else</span> {
+<a name="l00322"></a>00322 <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00326"></a>00326 <span class="comment">/**</span>
+<a name="l00327"></a>00327 <span class="comment"> * \brief Initialize the web server</span>
+<a name="l00328"></a>00328 <span class="comment"> *</span>
+<a name="l00329"></a>00329 <span class="comment"> * This function initializes the web server and should be</span>
+<a name="l00330"></a>00330 <span class="comment"> * called at system boot-up.</span>
+<a name="l00331"></a>00331 <span class="comment"> */</span>
+<a name="l00332"></a>00332 <span class="keywordtype">void</span>
+<a name="l00333"></a><a class="code" href="a00164.html#gc364305cee969a0be43c071722b136e6">00333</a> <a class="code" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a>(<span class="keywordtype">void</span>)
+<a name="l00334"></a>00334 {
+<a name="l00335"></a>00335 <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00185.html b/third_party/uip-1.0/doc/html/a00185.html new file mode 100644 index 0000000..f041e01 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00185.html @@ -0,0 +1,87 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: apps/webserver/httpd.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>apps/webserver/httpd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2001-2005, Adam Dunkels.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00014"></a>00014 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00015"></a>00015 <span class="comment"> * written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00019"></a>00019 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00021"></a>00021 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00023"></a>00023 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00024"></a>00024 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00025"></a>00025 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00026"></a>00026 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00027"></a>00027 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="preprocessor">#ifndef __HTTPD_H__</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define __HTTPD_H__</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "httpd-fs.h"</span>
+<a name="l00040"></a>00040
+<a name="l00041"></a><a class="code" href="a00080.html">00041</a> <span class="keyword">struct </span><a class="code" href="a00080.html">httpd_state</a> {
+<a name="l00042"></a><a class="code" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">00042</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00087.html">timer</a>;
+<a name="l00043"></a><a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">00043</a> <span class="keyword">struct </span><a class="code" href="a00082.html">psock</a> sin, <a class="code" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">sout</a>;
+<a name="l00044"></a><a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">00044</a> <span class="keyword">struct </span><a class="code" href="a00084.html">pt</a> outputpt, <a class="code" href="a00080.html#e261f08e1556287d241764fb2e99fc26">scriptpt</a>;
+<a name="l00045"></a><a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">00045</a> <span class="keywordtype">char</span> <a class="code" href="a00080.html#4c6f843219271d25766ee5969e435d1a">inputbuf</a>[50];
+<a name="l00046"></a><a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">00046</a> <span class="keywordtype">char</span> <a class="code" href="a00080.html#447eb700ea7a185e0f155934995d49e5">filename</a>[20];
+<a name="l00047"></a><a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">00047</a> <span class="keywordtype">char</span> <a class="code" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">state</a>;
+<a name="l00048"></a><a class="code" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">00048</a> <span class="keyword">struct </span>httpd_fs_file file;
+<a name="l00049"></a><a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">00049</a> <span class="keywordtype">int</span> <a class="code" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">len</a>;
+<a name="l00050"></a><a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">00050</a> <span class="keywordtype">char</span> *<a class="code" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">scriptptr</a>;
+<a name="l00051"></a><a class="code" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">00051</a> <span class="keywordtype">int</span> <a class="code" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">scriptlen</a>;
+<a name="l00052"></a>00052
+<a name="l00053"></a><a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">00053</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">count</a>;
+<a name="l00054"></a>00054 };
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd_init</a>(<span class="keywordtype">void</span>);
+<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd_appcall</a>(<span class="keywordtype">void</span>);
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="keywordtype">void</span> httpd_log(<span class="keywordtype">char</span> *msg);
+<a name="l00060"></a>00060 <span class="keywordtype">void</span> httpd_log_file(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *requester, <span class="keywordtype">char</span> *file);
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="preprocessor">#endif </span><span class="comment">/* __HTTPD_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00186.html b/third_party/uip-1.0/doc/html/a00186.html new file mode 100644 index 0000000..7bfb8c7 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00186.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: lib/memb.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>lib/memb.c</h1><a href="a00120.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: memb.c,v 1.1 2006/06/12 08:21:43 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \addtogroup memb</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment"> /**</span>
+<a name="l00042"></a>00042 <span class="comment"> * \file</span>
+<a name="l00043"></a>00043 <span class="comment"> * Memory block allocation routines.</span>
+<a name="l00044"></a>00044 <span class="comment"> * \author Adam Dunkels <adam@sics.se></span>
+<a name="l00045"></a>00045 <span class="comment"> */</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include <string.h></span>
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="preprocessor">#include "<a class="code" href="a00121.html">memb.h</a>"</span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00051"></a>00051 <span class="keywordtype">void</span>
+<a name="l00052"></a><a class="code" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">00052</a> <a class="code" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m)
+<a name="l00053"></a>00053 {
+<a name="l00054"></a>00054 memset(m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>, 0, m-><a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a>);
+<a name="l00055"></a>00055 memset(m-><a class="code" href="a00081.html#b5801722740492e69bcc73687476009f">mem</a>, 0, m-><a class="code" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">size</a> * m-><a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a>);
+<a name="l00056"></a>00056 }
+<a name="l00057"></a>00057 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00058"></a>00058 <span class="keywordtype">void</span> *
+<a name="l00059"></a><a class="code" href="a00159.html#gfe5e93119035e14cc485760a176249ba">00059</a> <a class="code" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m)
+<a name="l00060"></a>00060 {
+<a name="l00061"></a>00061 <span class="keywordtype">int</span> i;
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keywordflow">for</span>(i = 0; i < m-><a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a>; ++i) {
+<a name="l00064"></a>00064 <span class="keywordflow">if</span>(m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>[i] == 0) {
+<a name="l00065"></a>00065 <span class="comment">/* If this block was unused, we increase the reference count to</span>
+<a name="l00066"></a>00066 <span class="comment"> indicate that it now is used and return a pointer to the</span>
+<a name="l00067"></a>00067 <span class="comment"> memory block. */</span>
+<a name="l00068"></a>00068 ++(m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>[i]);
+<a name="l00069"></a>00069 return (<span class="keywordtype">void</span> *)((<span class="keywordtype">char</span> *)m-><a class="code" href="a00081.html#b5801722740492e69bcc73687476009f">mem</a> + (i * m-><a class="code" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">size</a>));
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071 }
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 <span class="comment">/* No free block was found, so we return NULL to indicate failure to</span>
+<a name="l00074"></a>00074 <span class="comment"> allocate block. */</span>
+<a name="l00075"></a>00075 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00076"></a>00076 }
+<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00078"></a>00078 <span class="keywordtype">char</span>
+<a name="l00079"></a><a class="code" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">00079</a> <a class="code" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m, <span class="keywordtype">void</span> *ptr)
+<a name="l00080"></a>00080 {
+<a name="l00081"></a>00081 <span class="keywordtype">int</span> i;
+<a name="l00082"></a>00082 <span class="keywordtype">char</span> *ptr2;
+<a name="l00083"></a>00083
+<a name="l00084"></a>00084 <span class="comment">/* Walk through the list of blocks and try to find the block to</span>
+<a name="l00085"></a>00085 <span class="comment"> which the pointer "ptr" points to. */</span>
+<a name="l00086"></a>00086 ptr2 = (<span class="keywordtype">char</span> *)m-><a class="code" href="a00081.html#b5801722740492e69bcc73687476009f">mem</a>;
+<a name="l00087"></a>00087 <span class="keywordflow">for</span>(i = 0; i < m->num; ++i) {
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">if</span>(ptr2 == (<span class="keywordtype">char</span> *)ptr) {
+<a name="l00090"></a>00090 <span class="comment">/* We've found to block to which "ptr" points so we decrease the</span>
+<a name="l00091"></a>00091 <span class="comment"> reference count and return the new value of it. */</span>
+<a name="l00092"></a>00092 <span class="keywordflow">if</span>(m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>[i] > 0) {
+<a name="l00093"></a>00093 <span class="comment">/* Make sure that we don't deallocate free memory. */</span>
+<a name="l00094"></a>00094 --(m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>[i]);
+<a name="l00095"></a>00095 }
+<a name="l00096"></a>00096 <span class="keywordflow">return</span> m-><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>[i];
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 ptr2 += m-><a class="code" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">size</a>;
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100 <span class="keywordflow">return</span> -1;
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00103"></a>00103 <span class="comment"></span>
+<a name="l00104"></a>00104 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00187.html b/third_party/uip-1.0/doc/html/a00187.html new file mode 100644 index 0000000..d1f5865 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00187.html @@ -0,0 +1,167 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: lib/memb.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>lib/memb.h</h1><a href="a00121.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: memb.h,v 1.1 2006/06/12 08:21:43 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \defgroup memb Memory block management functions</span>
+<a name="l00038"></a>00038 <span class="comment"> *</span>
+<a name="l00039"></a>00039 <span class="comment"> * The memory block allocation routines provide a simple yet powerful</span>
+<a name="l00040"></a>00040 <span class="comment"> * set of functions for managing a set of memory blocks of fixed</span>
+<a name="l00041"></a>00041 <span class="comment"> * size. A set of memory blocks is statically declared with the</span>
+<a name="l00042"></a>00042 <span class="comment"> * MEMB() macro. Memory blocks are allocated from the declared</span>
+<a name="l00043"></a>00043 <span class="comment"> * memory by the memb_alloc() function, and are deallocated with the</span>
+<a name="l00044"></a>00044 <span class="comment"> * memb_free() function.</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * \note Because of namespace clashes only one MEMB() can be</span>
+<a name="l00047"></a>00047 <span class="comment"> * declared per C module, and the name scope of a MEMB() memory</span>
+<a name="l00048"></a>00048 <span class="comment"> * block is local to each C module.</span>
+<a name="l00049"></a>00049 <span class="comment"> *</span>
+<a name="l00050"></a>00050 <span class="comment"> * The following example shows how to declare and use a memory block</span>
+<a name="l00051"></a>00051 <span class="comment"> * called "cmem" which has 8 chunks of memory with each memory chunk</span>
+<a name="l00052"></a>00052 <span class="comment"> * being 20 bytes large.</span>
+<a name="l00053"></a>00053 <span class="comment"> *</span>
+<a name="l00054"></a>00054 <span class="comment"> * @{</span>
+<a name="l00055"></a>00055 <span class="comment"> */</span>
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="comment"></span>
+<a name="l00058"></a>00058 <span class="comment">/**</span>
+<a name="l00059"></a>00059 <span class="comment"> * \file</span>
+<a name="l00060"></a>00060 <span class="comment"> * Memory block allocation routines.</span>
+<a name="l00061"></a>00061 <span class="comment"> * \author</span>
+<a name="l00062"></a>00062 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00063"></a>00063 <span class="comment"> *</span>
+<a name="l00064"></a>00064 <span class="comment"> */</span>
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="preprocessor">#ifndef __MEMB_H__</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define __MEMB_H__</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a>00069 <span class="comment">/*</span>
+<a name="l00070"></a>00070 <span class="comment"> * Here we define a C preprocessing macro for concatenating to</span>
+<a name="l00071"></a>00071 <span class="comment"> * strings. We need use two macros in order to allow concatenation of</span>
+<a name="l00072"></a>00072 <span class="comment"> * two #defined macros.</span>
+<a name="l00073"></a>00073 <span class="comment"> */</span>
+<a name="l00074"></a><a class="code" href="a00159.html#ga680bc3f3a1a8a6aec20fe729d138cb8">00074</a> <span class="preprocessor">#define MEMB_CONCAT2(s1, s2) s1##s2</span>
+<a name="l00075"></a><a class="code" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define MEMB_CONCAT(s1, s2) MEMB_CONCAT2(s1, s2)</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00077"></a>00077 <span class="comment">/**</span>
+<a name="l00078"></a>00078 <span class="comment"> * Declare a memory block.</span>
+<a name="l00079"></a>00079 <span class="comment"> *</span>
+<a name="l00080"></a>00080 <span class="comment"> * This macro is used to staticall declare a block of memory that can</span>
+<a name="l00081"></a>00081 <span class="comment"> * be used by the block allocation functions. The macro statically</span>
+<a name="l00082"></a>00082 <span class="comment"> * declares a C array with a size that matches the specified number of</span>
+<a name="l00083"></a>00083 <span class="comment"> * blocks and their individual sizes.</span>
+<a name="l00084"></a>00084 <span class="comment"> *</span>
+<a name="l00085"></a>00085 <span class="comment"> * Example:</span>
+<a name="l00086"></a>00086 <span class="comment"> \code</span>
+<a name="l00087"></a>00087 <span class="comment">MEMB(connections, sizeof(struct connection), 16);</span>
+<a name="l00088"></a>00088 <span class="comment"> \endcode</span>
+<a name="l00089"></a>00089 <span class="comment"> *</span>
+<a name="l00090"></a>00090 <span class="comment"> * \param name The name of the memory block (later used with</span>
+<a name="l00091"></a>00091 <span class="comment"> * memb_init(), memb_alloc() and memb_free()).</span>
+<a name="l00092"></a>00092 <span class="comment"> *</span>
+<a name="l00093"></a>00093 <span class="comment"> * \param size The size of each memory chunk, in bytes.</span>
+<a name="l00094"></a>00094 <span class="comment"> *</span>
+<a name="l00095"></a>00095 <span class="comment"> * \param num The total number of memory chunks in the block.</span>
+<a name="l00096"></a>00096 <span class="comment"> *</span>
+<a name="l00097"></a>00097 <span class="comment"> */</span>
+<a name="l00098"></a><a class="code" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">00098</a> <span class="preprocessor">#define MEMB(name, structure, num) \</span>
+<a name="l00099"></a>00099 <span class="preprocessor"> static char MEMB_CONCAT(name,_memb_count)[num]; \</span>
+<a name="l00100"></a>00100 <span class="preprocessor"> static structure MEMB_CONCAT(name,_memb_mem)[num]; \</span>
+<a name="l00101"></a>00101 <span class="preprocessor"> static struct memb_blocks name = {sizeof(structure), num, \</span>
+<a name="l00102"></a>00102 <span class="preprocessor"> MEMB_CONCAT(name,_memb_count), \</span>
+<a name="l00103"></a>00103 <span class="preprocessor"> (void *)MEMB_CONCAT(name,_memb_mem)}</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>
+<a name="l00105"></a><a class="code" href="a00081.html">00105</a> <span class="keyword">struct </span><a class="code" href="a00081.html">memb_blocks</a> {
+<a name="l00106"></a><a class="code" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">00106</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">size</a>;
+<a name="l00107"></a><a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">00107</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00081.html#164124d48fe85bc98d9a300382a5245d">num</a>;
+<a name="l00108"></a><a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">00108</a> <span class="keywordtype">char</span> *<a class="code" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">count</a>;
+<a name="l00109"></a><a class="code" href="a00081.html#b5801722740492e69bcc73687476009f">00109</a> <span class="keywordtype">void</span> *<a class="code" href="a00081.html#b5801722740492e69bcc73687476009f">mem</a>;
+<a name="l00110"></a>00110 };
+<a name="l00111"></a>00111 <span class="comment"></span>
+<a name="l00112"></a>00112 <span class="comment">/**</span>
+<a name="l00113"></a>00113 <span class="comment"> * Initialize a memory block that was declared with MEMB().</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * \param m A memory block previosly declared with MEMB().</span>
+<a name="l00116"></a>00116 <span class="comment"> */</span>
+<a name="l00117"></a>00117 <span class="keywordtype">void</span> <a class="code" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb_init</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m);
+<a name="l00118"></a>00118 <span class="comment"></span>
+<a name="l00119"></a>00119 <span class="comment">/**</span>
+<a name="l00120"></a>00120 <span class="comment"> * Allocate a memory block from a block of memory declared with MEMB().</span>
+<a name="l00121"></a>00121 <span class="comment"> *</span>
+<a name="l00122"></a>00122 <span class="comment"> * \param m A memory block previosly declared with MEMB().</span>
+<a name="l00123"></a>00123 <span class="comment"> */</span>
+<a name="l00124"></a>00124 <span class="keywordtype">void</span> *<a class="code" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb_alloc</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m);
+<a name="l00125"></a>00125 <span class="comment"></span>
+<a name="l00126"></a>00126 <span class="comment">/**</span>
+<a name="l00127"></a>00127 <span class="comment"> * Deallocate a memory block from a memory block previously declared</span>
+<a name="l00128"></a>00128 <span class="comment"> * with MEMB().</span>
+<a name="l00129"></a>00129 <span class="comment"> *</span>
+<a name="l00130"></a>00130 <span class="comment"> * \param m m A memory block previosly declared with MEMB().</span>
+<a name="l00131"></a>00131 <span class="comment"> *</span>
+<a name="l00132"></a>00132 <span class="comment"> * \param ptr A pointer to the memory block that is to be deallocated.</span>
+<a name="l00133"></a>00133 <span class="comment"> *</span>
+<a name="l00134"></a>00134 <span class="comment"> * \return The new reference count for the memory block (should be 0</span>
+<a name="l00135"></a>00135 <span class="comment"> * if successfully deallocated) or -1 if the pointer "ptr" did not</span>
+<a name="l00136"></a>00136 <span class="comment"> * point to a legal memory block.</span>
+<a name="l00137"></a>00137 <span class="comment"> */</span>
+<a name="l00138"></a>00138 <span class="keywordtype">char</span> <a class="code" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb_free</a>(<span class="keyword">struct</span> <a class="code" href="a00081.html">memb_blocks</a> *m, <span class="keywordtype">void</span> *ptr);
+<a name="l00139"></a>00139 <span class="comment"></span>
+<a name="l00140"></a>00140 <span class="comment">/** @} */</span>
+<a name="l00141"></a>00141
+<a name="l00142"></a>00142 <span class="preprocessor">#endif </span><span class="comment">/* __MEMB_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00188.html b/third_party/uip-1.0/doc/html/a00188.html new file mode 100644 index 0000000..5b7d027 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00188.html @@ -0,0 +1,113 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/clock.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/clock.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \defgroup clock Clock interface</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * The clock interface is the interface between the \ref timer "timer library"</span>
+<a name="l00005"></a>00005 <span class="comment"> * and the platform specific clock functionality. The clock</span>
+<a name="l00006"></a>00006 <span class="comment"> * interface must be implemented for each platform that uses the \ref</span>
+<a name="l00007"></a>00007 <span class="comment"> * timer "timer library".</span>
+<a name="l00008"></a>00008 <span class="comment"> *</span>
+<a name="l00009"></a>00009 <span class="comment"> * The clock interface does only one this: it measures time. The clock</span>
+<a name="l00010"></a>00010 <span class="comment"> * interface provides a macro, CLOCK_SECOND, which corresponds to one</span>
+<a name="l00011"></a>00011 <span class="comment"> * second of system time.</span>
+<a name="l00012"></a>00012 <span class="comment"> *</span>
+<a name="l00013"></a>00013 <span class="comment"> * \sa \ref timer "Timer library"</span>
+<a name="l00014"></a>00014 <span class="comment"> *</span>
+<a name="l00015"></a>00015 <span class="comment"> * @{</span>
+<a name="l00016"></a>00016 <span class="comment"> */</span>
+<a name="l00017"></a>00017
+<a name="l00018"></a>00018 <span class="comment">/*</span>
+<a name="l00019"></a>00019 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00020"></a>00020 <span class="comment"> * All rights reserved.</span>
+<a name="l00021"></a>00021 <span class="comment"> *</span>
+<a name="l00022"></a>00022 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00023"></a>00023 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00024"></a>00024 <span class="comment"> * are met:</span>
+<a name="l00025"></a>00025 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00026"></a>00026 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00027"></a>00027 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00028"></a>00028 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00029"></a>00029 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00030"></a>00030 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00031"></a>00031 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00032"></a>00032 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00035"></a>00035 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00036"></a>00036 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00037"></a>00037 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00038"></a>00038 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00039"></a>00039 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00040"></a>00040 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00041"></a>00041 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00042"></a>00042 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00043"></a>00043 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00044"></a>00044 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00047"></a>00047 <span class="comment"> *</span>
+<a name="l00048"></a>00048 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00049"></a>00049 <span class="comment"> *</span>
+<a name="l00050"></a>00050 <span class="comment"> * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $</span>
+<a name="l00051"></a>00051 <span class="comment"> */</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#ifndef __CLOCK_H__</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define __CLOCK_H__</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "clock-arch.h"</span>
+<a name="l00056"></a>00056 <span class="comment"></span>
+<a name="l00057"></a>00057 <span class="comment">/**</span>
+<a name="l00058"></a>00058 <span class="comment"> * Initialize the clock library.</span>
+<a name="l00059"></a>00059 <span class="comment"> *</span>
+<a name="l00060"></a>00060 <span class="comment"> * This function initializes the clock library and should be called</span>
+<a name="l00061"></a>00061 <span class="comment"> * from the main() function of the system.</span>
+<a name="l00062"></a>00062 <span class="comment"> *</span>
+<a name="l00063"></a>00063 <span class="comment"> */</span>
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="a00157.html#g78ab77b57cf2e00089f0a3a22508524c">clock_init</a>(<span class="keywordtype">void</span>);
+<a name="l00065"></a>00065 <span class="comment"></span>
+<a name="l00066"></a>00066 <span class="comment">/**</span>
+<a name="l00067"></a>00067 <span class="comment"> * Get the current clock time.</span>
+<a name="l00068"></a>00068 <span class="comment"> *</span>
+<a name="l00069"></a>00069 <span class="comment"> * This function returns the current system clock time.</span>
+<a name="l00070"></a>00070 <span class="comment"> *</span>
+<a name="l00071"></a>00071 <span class="comment"> * \return The current clock time, measured in system ticks.</span>
+<a name="l00072"></a>00072 <span class="comment"> */</span>
+<a name="l00073"></a>00073 clock_time_t <a class="code" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time</a>(<span class="keywordtype">void</span>);
+<a name="l00074"></a>00074 <span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/**</span>
+<a name="l00076"></a>00076 <span class="comment"> * A second, measured in system clock time.</span>
+<a name="l00077"></a>00077 <span class="comment"> *</span>
+<a name="l00078"></a>00078 <span class="comment"> * \hideinitializer</span>
+<a name="l00079"></a>00079 <span class="comment"> */</span>
+<a name="l00080"></a>00080 <span class="preprocessor">#ifdef CLOCK_CONF_SECOND</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define CLOCK_SECOND CLOCK_CONF_SECOND</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00083"></a><a class="code" href="a00157.html#ge3ced0551b26c9b99cb45a86f34d100a">00083</a> <span class="preprocessor"></span><span class="preprocessor">#define CLOCK_SECOND (clock_time_t)32</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* __CLOCK_H__ */</span>
+<a name="l00087"></a>00087 <span class="comment"></span>
+<a name="l00088"></a>00088 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00189.html b/third_party/uip-1.0/doc/html/a00189.html new file mode 100644 index 0000000..7eb5e3f --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00189.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc-addrlabels.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc-addrlabels.h</h1><a href="a00123.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004-2005, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \addtogroup lc</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">/**</span>
+<a name="l00042"></a>00042 <span class="comment"> * \file</span>
+<a name="l00043"></a>00043 <span class="comment"> * Implementation of local continuations based on the "Labels as</span>
+<a name="l00044"></a>00044 <span class="comment"> * values" feature of gcc</span>
+<a name="l00045"></a>00045 <span class="comment"> * \author</span>
+<a name="l00046"></a>00046 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00047"></a>00047 <span class="comment"> *</span>
+<a name="l00048"></a>00048 <span class="comment"> * This implementation of local continuations is based on a special</span>
+<a name="l00049"></a>00049 <span class="comment"> * feature of the GCC C compiler called "labels as values". This</span>
+<a name="l00050"></a>00050 <span class="comment"> * feature allows assigning pointers with the address of the code</span>
+<a name="l00051"></a>00051 <span class="comment"> * corresponding to a particular C label.</span>
+<a name="l00052"></a>00052 <span class="comment"> *</span>
+<a name="l00053"></a>00053 <span class="comment"> * For more information, see the GCC documentation:</span>
+<a name="l00054"></a>00054 <span class="comment"> * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * Thanks to dividuum for finding the nice local scope label</span>
+<a name="l00057"></a>00057 <span class="comment"> * implementation.</span>
+<a name="l00058"></a>00058 <span class="comment"> */</span>
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="preprocessor">#ifndef __LC_ADDRLABELS_H__</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define __LC_ADDRLABELS_H__</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/** \hideinitializer */</span>
+<a name="l00064"></a><a class="code" href="a00155.html#g2bdc4b7b4038454a79f1b2a94a6d2a98">00064</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a>;
+<a name="l00065"></a>00065
+<a name="l00066"></a><a class="code" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">00066</a> <span class="preprocessor">#define LC_INIT(s) s = NULL</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a>00068
+<a name="l00069"></a><a class="code" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">00069</a> <span class="preprocessor">#define LC_RESUME(s) \</span>
+<a name="l00070"></a>00070 <span class="preprocessor"> do { \</span>
+<a name="l00071"></a>00071 <span class="preprocessor"> if(s != NULL) { \</span>
+<a name="l00072"></a>00072 <span class="preprocessor"> goto *s; \</span>
+<a name="l00073"></a>00073 <span class="preprocessor"> } \</span>
+<a name="l00074"></a>00074 <span class="preprocessor"> } while(0)</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a><a class="code" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">00076</a> <span class="preprocessor">#define LC_SET(s) \</span>
+<a name="l00077"></a>00077 <span class="preprocessor"> do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span>
+<a name="l00079"></a><a class="code" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">00079</a> <span class="preprocessor">#define LC_END(s)</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>
+<a name="l00081"></a>00081 <span class="preprocessor">#endif </span><span class="comment">/* __LC_ADDRLABELS_H__ */</span>
+<a name="l00082"></a>00082 <span class="comment"></span>
+<a name="l00083"></a>00083 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00190.html b/third_party/uip-1.0/doc/html/a00190.html new file mode 100644 index 0000000..81ce234 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00190.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc-switch.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc-switch.h</h1><a href="a00124.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004-2005, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \addtogroup lc</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">/**</span>
+<a name="l00042"></a>00042 <span class="comment"> * \file</span>
+<a name="l00043"></a>00043 <span class="comment"> * Implementation of local continuations based on switch() statment</span>
+<a name="l00044"></a>00044 <span class="comment"> * \author Adam Dunkels <adam@sics.se></span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * This implementation of local continuations uses the C switch()</span>
+<a name="l00047"></a>00047 <span class="comment"> * statement to resume execution of a function somewhere inside the</span>
+<a name="l00048"></a>00048 <span class="comment"> * function's body. The implementation is based on the fact that</span>
+<a name="l00049"></a>00049 <span class="comment"> * switch() statements are able to jump directly into the bodies of</span>
+<a name="l00050"></a>00050 <span class="comment"> * control structures such as if() or while() statmenets.</span>
+<a name="l00051"></a>00051 <span class="comment"> *</span>
+<a name="l00052"></a>00052 <span class="comment"> * This implementation borrows heavily from Simon Tatham's coroutines</span>
+<a name="l00053"></a>00053 <span class="comment"> * implementation in C:</span>
+<a name="l00054"></a>00054 <span class="comment"> * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html</span>
+<a name="l00055"></a>00055 <span class="comment"> */</span>
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="preprocessor">#ifndef __LC_SWITCH_H__</span>
+<a name="l00058"></a><a class="code" href="a00155.html#g44311ecc30759ca38b4069182247bdae">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define __LC_SWTICH_H__</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="comment">/* WARNING! lc implementation using switch() does not work if an</span>
+<a name="l00061"></a>00061 <span class="comment"> LC_SET() is done within another switch() statement! */</span>
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/** \hideinitializer */</span>
+<a name="l00064"></a><a class="code" href="a00155.html#g3983e0c026396d5c4506779d770007ba">00064</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a>;
+<a name="l00065"></a>00065
+<a name="l00066"></a><a class="code" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">00066</a> <span class="preprocessor">#define LC_INIT(s) s = 0;</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a><a class="code" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">00068</a> <span class="preprocessor">#define LC_RESUME(s) switch(s) { case 0:</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>
+<a name="l00070"></a><a class="code" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">00070</a> <span class="preprocessor">#define LC_SET(s) s = __LINE__; case __LINE__:</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a><a class="code" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">00072</a> <span class="preprocessor">#define LC_END(s) }</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* __LC_SWITCH_H__ */</span>
+<a name="l00075"></a>00075 <span class="comment"></span>
+<a name="l00076"></a>00076 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00191.html b/third_party/uip-1.0/doc/html/a00191.html new file mode 100644 index 0000000..06fd8f6 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00191.html @@ -0,0 +1,156 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/lc.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/lc.h</h1><a href="a00125.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004-2005, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \addtogroup pt</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">/**</span>
+<a name="l00042"></a>00042 <span class="comment"> * \defgroup lc Local continuations</span>
+<a name="l00043"></a>00043 <span class="comment"> * @{</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * Local continuations form the basis for implementing protothreads. A</span>
+<a name="l00046"></a>00046 <span class="comment"> * local continuation can be <i>set</i> in a specific function to</span>
+<a name="l00047"></a>00047 <span class="comment"> * capture the state of the function. After a local continuation has</span>
+<a name="l00048"></a>00048 <span class="comment"> * been set can be <i>resumed</i> in order to restore the state of the</span>
+<a name="l00049"></a>00049 <span class="comment"> * function at the point where the local continuation was set.</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> *</span>
+<a name="l00052"></a>00052 <span class="comment"> */</span>
+<a name="l00053"></a>00053 <span class="comment"></span>
+<a name="l00054"></a>00054 <span class="comment">/**</span>
+<a name="l00055"></a>00055 <span class="comment"> * \file lc.h</span>
+<a name="l00056"></a>00056 <span class="comment"> * Local continuations</span>
+<a name="l00057"></a>00057 <span class="comment"> * \author</span>
+<a name="l00058"></a>00058 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00059"></a>00059 <span class="comment"> *</span>
+<a name="l00060"></a>00060 <span class="comment"> */</span>
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="preprocessor">#ifdef DOXYGEN</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="comment">/**</span>
+<a name="l00064"></a>00064 <span class="comment"> * Initialize a local continuation.</span>
+<a name="l00065"></a>00065 <span class="comment"> *</span>
+<a name="l00066"></a>00066 <span class="comment"> * This operation initializes the local continuation, thereby</span>
+<a name="l00067"></a>00067 <span class="comment"> * unsetting any previously set continuation state.</span>
+<a name="l00068"></a>00068 <span class="comment"> *</span>
+<a name="l00069"></a>00069 <span class="comment"> * \hideinitializer</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 <span class="preprocessor">#define LC_INIT(lc)</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00073"></a>00073 <span class="comment">/**</span>
+<a name="l00074"></a>00074 <span class="comment"> * Set a local continuation.</span>
+<a name="l00075"></a>00075 <span class="comment"> *</span>
+<a name="l00076"></a>00076 <span class="comment"> * The set operation saves the state of the function at the point</span>
+<a name="l00077"></a>00077 <span class="comment"> * where the operation is executed. As far as the set operation is</span>
+<a name="l00078"></a>00078 <span class="comment"> * concerned, the state of the function does <b>not</b> include the</span>
+<a name="l00079"></a>00079 <span class="comment"> * call-stack or local (automatic) variables, but only the program</span>
+<a name="l00080"></a>00080 <span class="comment"> * counter and such CPU registers that needs to be saved.</span>
+<a name="l00081"></a>00081 <span class="comment"> *</span>
+<a name="l00082"></a>00082 <span class="comment"> * \hideinitializer</span>
+<a name="l00083"></a>00083 <span class="comment"> */</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#define LC_SET(lc)</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00086"></a>00086 <span class="comment">/**</span>
+<a name="l00087"></a>00087 <span class="comment"> * Resume a local continuation.</span>
+<a name="l00088"></a>00088 <span class="comment"> *</span>
+<a name="l00089"></a>00089 <span class="comment"> * The resume operation resumes a previously set local continuation, thus</span>
+<a name="l00090"></a>00090 <span class="comment"> * restoring the state in which the function was when the local</span>
+<a name="l00091"></a>00091 <span class="comment"> * continuation was set. If the local continuation has not been</span>
+<a name="l00092"></a>00092 <span class="comment"> * previously set, the resume operation does nothing.</span>
+<a name="l00093"></a>00093 <span class="comment"> *</span>
+<a name="l00094"></a>00094 <span class="comment"> * \hideinitializer</span>
+<a name="l00095"></a>00095 <span class="comment"> */</span>
+<a name="l00096"></a>00096 <span class="preprocessor">#define LC_RESUME(lc)</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00098"></a>00098 <span class="comment">/**</span>
+<a name="l00099"></a>00099 <span class="comment"> * Mark the end of local continuation usage.</span>
+<a name="l00100"></a>00100 <span class="comment"> *</span>
+<a name="l00101"></a>00101 <span class="comment"> * The end operation signifies that local continuations should not be</span>
+<a name="l00102"></a>00102 <span class="comment"> * used any more in the function. This operation is not needed for</span>
+<a name="l00103"></a>00103 <span class="comment"> * most implementations of local continuation, but is required by a</span>
+<a name="l00104"></a>00104 <span class="comment"> * few implementations.</span>
+<a name="l00105"></a>00105 <span class="comment"> *</span>
+<a name="l00106"></a>00106 <span class="comment"> * \hideinitializer</span>
+<a name="l00107"></a>00107 <span class="comment"> */</span>
+<a name="l00108"></a>00108 <span class="preprocessor">#define LC_END(lc)</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00110"></a>00110 <span class="comment">/**</span>
+<a name="l00111"></a>00111 <span class="comment"> * \var typedef lc_t;</span>
+<a name="l00112"></a>00112 <span class="comment"> *</span>
+<a name="l00113"></a>00113 <span class="comment"> * The local continuation type.</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * \hideinitializer</span>
+<a name="l00116"></a>00116 <span class="comment"> */</span>
+<a name="l00117"></a>00117 <span class="preprocessor">#endif </span><span class="comment">/* DOXYGEN */</span>
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <span class="preprocessor">#ifndef __LC_H__</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define __LC_H__</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span>
+<a name="l00122"></a>00122 <span class="preprocessor">#ifdef LC_CONF_INCLUDE</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#include LC_CONF_INCLUDE</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="a00124.html">lc-switch.h</a>"</span>
+<a name="l00126"></a>00126 <span class="preprocessor">#endif </span><span class="comment">/* LC_CONF_INCLUDE */</span>
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="preprocessor">#endif </span><span class="comment">/* __LC_H__ */</span>
+<a name="l00129"></a>00129 <span class="comment"></span>
+<a name="l00130"></a>00130 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00131"></a>00131 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00192.html b/third_party/uip-1.0/doc/html/a00192.html new file mode 100644 index 0000000..3e0fb55 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00192.html @@ -0,0 +1,363 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/psock.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/psock.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "<a class="code" href="a00127.html">psock.h</a>"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="preprocessor">#define STATE_NONE 0</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define STATE_ACKED 1</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define STATE_READ 2</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define STATE_BLOCKED_NEWDATA 3</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define STATE_BLOCKED_CLOSE 4</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define STATE_BLOCKED_SEND 5</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define STATE_DATA_SENT 6</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00051"></a>00051 <span class="comment">/*</span>
+<a name="l00052"></a>00052 <span class="comment"> * Return value of the buffering functions that indicates that a</span>
+<a name="l00053"></a>00053 <span class="comment"> * buffer was not filled by incoming data.</span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> */</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#define BUF_NOT_FULL 0</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define BUF_NOT_FOUND 0</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00059"></a>00059 <span class="comment">/*</span>
+<a name="l00060"></a>00060 <span class="comment"> * Return value of the buffering functions that indicates that a</span>
+<a name="l00061"></a>00061 <span class="comment"> * buffer was completely filled by incoming data.</span>
+<a name="l00062"></a>00062 <span class="comment"> *</span>
+<a name="l00063"></a>00063 <span class="comment"> */</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define BUF_FULL 1</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="comment">/*</span>
+<a name="l00067"></a>00067 <span class="comment"> * Return value of the buffering functions that indicates that an</span>
+<a name="l00068"></a>00068 <span class="comment"> * end-marker byte was found.</span>
+<a name="l00069"></a>00069 <span class="comment"> *</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 <span class="preprocessor">#define BUF_FOUND 2</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a>00073 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00075"></a>00075 buf_setup(<span class="keyword">struct</span> <a class="code" href="a00083.html">psock_buf</a> *buf,
+<a name="l00076"></a>00076 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *bufptr, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> bufsize)
+<a name="l00077"></a>00077 {
+<a name="l00078"></a>00078 buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a> = bufptr;
+<a name="l00079"></a>00079 buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a> = bufsize;
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00082"></a>00082 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00083"></a>00083 buf_bufdata(<span class="keyword">struct</span> <a class="code" href="a00083.html">psock_buf</a> *buf, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len,
+<a name="l00084"></a>00084 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> **dataptr, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *datalen)
+<a name="l00085"></a>00085 {
+<a name="l00086"></a>00086 <span class="keywordflow">if</span>(*datalen < buf->left) {
+<a name="l00087"></a>00087 memcpy(buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a>, *dataptr, *datalen);
+<a name="l00088"></a>00088 buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a> += *datalen;
+<a name="l00089"></a>00089 buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a> -= *datalen;
+<a name="l00090"></a>00090 *dataptr += *datalen;
+<a name="l00091"></a>00091 *datalen = 0;
+<a name="l00092"></a>00092 <span class="keywordflow">return</span> BUF_NOT_FULL;
+<a name="l00093"></a>00093 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*datalen == buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>) {
+<a name="l00094"></a>00094 memcpy(buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a>, *dataptr, *datalen);
+<a name="l00095"></a>00095 buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a> += *datalen;
+<a name="l00096"></a>00096 buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a> = 0;
+<a name="l00097"></a>00097 *dataptr += *datalen;
+<a name="l00098"></a>00098 *datalen = 0;
+<a name="l00099"></a>00099 <span class="keywordflow">return</span> BUF_FULL;
+<a name="l00100"></a>00100 } <span class="keywordflow">else</span> {
+<a name="l00101"></a>00101 memcpy(buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a>, *dataptr, buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>);
+<a name="l00102"></a>00102 buf-><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a> += buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>;
+<a name="l00103"></a>00103 *datalen -= buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>;
+<a name="l00104"></a>00104 *dataptr += buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>;
+<a name="l00105"></a>00105 buf-><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a> = 0;
+<a name="l00106"></a>00106 <span class="keywordflow">return</span> BUF_FULL;
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108 }
+<a name="l00109"></a>00109 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00110"></a>00110 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>
+<a name="l00111"></a>00111 buf_bufto(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00083.html">psock_buf</a> *buf, <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> endmarker,
+<a name="l00112"></a>00112 <span class="keyword">register</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> **dataptr, <span class="keyword">register</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *datalen)
+<a name="l00113"></a>00113 {
+<a name="l00114"></a>00114 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c;
+<a name="l00115"></a>00115 <span class="keywordflow">while</span>(buf->left > 0 && *datalen > 0) {
+<a name="l00116"></a>00116 c = *buf->ptr = **dataptr;
+<a name="l00117"></a>00117 ++*dataptr;
+<a name="l00118"></a>00118 ++buf->ptr;
+<a name="l00119"></a>00119 --*datalen;
+<a name="l00120"></a>00120 --buf->left;
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 <span class="keywordflow">if</span>(c == endmarker) {
+<a name="l00123"></a>00123 <span class="keywordflow">return</span> BUF_FOUND;
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <span class="keywordflow">if</span>(*datalen == 0) {
+<a name="l00128"></a>00128 <span class="keywordflow">return</span> BUF_NOT_FOUND;
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keywordflow">while</span>(*datalen > 0) {
+<a name="l00132"></a>00132 c = **dataptr;
+<a name="l00133"></a>00133 --*datalen;
+<a name="l00134"></a>00134 ++*dataptr;
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="keywordflow">if</span>(c == endmarker) {
+<a name="l00137"></a>00137 <span class="keywordflow">return</span> BUF_FOUND | BUF_FULL;
+<a name="l00138"></a>00138 }
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 <span class="keywordflow">return</span> BUF_FULL;
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00144"></a>00144 <span class="keyword">static</span> <span class="keywordtype">char</span>
+<a name="l00145"></a>00145 send_data(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s)
+<a name="l00146"></a>00146 {
+<a name="l00147"></a>00147 <span class="keywordflow">if</span>(s->state != STATE_DATA_SENT || <a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()) {
+<a name="l00148"></a>00148 <span class="keywordflow">if</span>(s->sendlen > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00149"></a>00149 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(s->sendptr, <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>());
+<a name="l00150"></a>00150 } <span class="keywordflow">else</span> {
+<a name="l00151"></a>00151 <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(s->sendptr, s->sendlen);
+<a name="l00152"></a>00152 }
+<a name="l00153"></a>00153 s->state = STATE_DATA_SENT;
+<a name="l00154"></a>00154 <span class="keywordflow">return</span> 1;
+<a name="l00155"></a>00155 }
+<a name="l00156"></a>00156 <span class="keywordflow">return</span> 0;
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00159"></a>00159 <span class="keyword">static</span> <span class="keywordtype">char</span>
+<a name="l00160"></a>00160 data_acked(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s)
+<a name="l00161"></a>00161 {
+<a name="l00162"></a>00162 <span class="keywordflow">if</span>(s->state == STATE_DATA_SENT && <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+<a name="l00163"></a>00163 <span class="keywordflow">if</span>(s->sendlen > <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+<a name="l00164"></a>00164 s->sendlen -= <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>();
+<a name="l00165"></a>00165 s->sendptr += <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>();
+<a name="l00166"></a>00166 } <span class="keywordflow">else</span> {
+<a name="l00167"></a>00167 s->sendptr += s->sendlen;
+<a name="l00168"></a>00168 s->sendlen = 0;
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 s->state = STATE_ACKED;
+<a name="l00171"></a>00171 <span class="keywordflow">return</span> 1;
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173 <span class="keywordflow">return</span> 0;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00176"></a>00176 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_send(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s, <span class="keyword">const</span> <span class="keywordtype">char</span> *buf,
+<a name="l00177"></a>00177 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len))
+<a name="l00178"></a>00178 {
+<a name="l00179"></a>00179 <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s->psockpt);
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181 <span class="comment">/* If there is no data to send, we exit immediately. */</span>
+<a name="l00182"></a>00182 <span class="keywordflow">if</span>(len == 0) {
+<a name="l00183"></a>00183 <a class="code" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">PT_EXIT</a>(&s->psockpt);
+<a name="l00184"></a>00184 }
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 <span class="comment">/* Save the length of and a pointer to the data that is to be</span>
+<a name="l00187"></a>00187 <span class="comment"> sent. */</span>
+<a name="l00188"></a>00188 s->sendptr = buf;
+<a name="l00189"></a>00189 s->sendlen = len;
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 s->state = STATE_NONE;
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="comment">/* We loop here until all data is sent. The s->sendlen variable is</span>
+<a name="l00194"></a>00194 <span class="comment"> updated by the data_sent() function. */</span>
+<a name="l00195"></a>00195 <span class="keywordflow">while</span>(s->sendlen > 0) {
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="comment">/*</span>
+<a name="l00198"></a>00198 <span class="comment"> * The condition for this PT_WAIT_UNTIL is a little tricky: the</span>
+<a name="l00199"></a>00199 <span class="comment"> * protothread will wait here until all data has been acknowledged</span>
+<a name="l00200"></a>00200 <span class="comment"> * (data_acked() returns true) and until all data has been sent</span>
+<a name="l00201"></a>00201 <span class="comment"> * (send_data() returns true). The two functions data_acked() and</span>
+<a name="l00202"></a>00202 <span class="comment"> * send_data() must be called in succession to ensure that all</span>
+<a name="l00203"></a>00203 <span class="comment"> * data is sent. Therefore the & operator is used instead of the</span>
+<a name="l00204"></a>00204 <span class="comment"> * && operator, which would cause only the data_acked() function</span>
+<a name="l00205"></a>00205 <span class="comment"> * to be called when it returns false.</span>
+<a name="l00206"></a>00206 <span class="comment"> */</span>
+<a name="l00207"></a>00207 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&s->psockpt, data_acked(s) & send_data(s));
+<a name="l00208"></a>00208 }
+<a name="l00209"></a>00209
+<a name="l00210"></a>00210 s->state = STATE_NONE;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s->psockpt);
+<a name="l00213"></a>00213 }
+<a name="l00214"></a>00214 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00215"></a>00215 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_generator_send(<span class="keyword">register</span> <span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *s,
+<a name="l00216"></a>00216 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> (*generate)(<span class="keywordtype">void</span> *), <span class="keywordtype">void</span> *arg))
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 <a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">PT_BEGIN</a>(&s->psockpt);
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 <span class="comment">/* Ensure that there is a generator function to call. */</span>
+<a name="l00221"></a>00221 <span class="keywordflow">if</span>(generate == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00222"></a>00222 <a class="code" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">PT_EXIT</a>(&s->psockpt);
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224
+<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->sendlen = generate(arg);
+<a name="l00228"></a>00228 s->sendptr = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l00229"></a>00229
+<a name="l00230"></a>00230 s->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>(&s->psockpt, data_acked(s) & send_data(s));
+<a name="l00239"></a>00239 } <span class="keywordflow">while</span>(s->sendlen > 0);
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 s->state = STATE_NONE;
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&s->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-><a class="code" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">bufsize</a> - psock-><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-><a class="code" href="a00082.html#a408ca8630154ebd039f37a828399f7b">readlen</a> > 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-><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-><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>(&psock->psockpt);
+<a name="l00275"></a>00275
+<a name="l00276"></a>00276 buf_setup(&psock->buf, psock->bufptr, psock->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->readlen == 0) {
+<a name="l00283"></a>00283 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&psock->psockpt, <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(psock));
+<a name="l00284"></a>00284 psock->state = STATE_READ;
+<a name="l00285"></a>00285 psock->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->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(&psock->buf, c,
+<a name="l00289"></a>00289 &psock->readptr,
+<a name="l00290"></a>00290 &psock->readlen) & 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->state = STATE_NONE;
+<a name="l00294"></a>00294 <a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&psock->psockpt);
+<a name="l00295"></a>00295 }
+<a name="l00296"></a>00296 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&psock->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>(&psock->psockpt);
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 buf_setup(&psock->buf, psock->bufptr, psock->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->readlen == 0) {
+<a name="l00310"></a>00310 <a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">PT_WAIT_UNTIL</a>(&psock->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->state = STATE_READ;
+<a name="l00313"></a>00313 psock->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->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(&psock->buf, psock->bufsize,
+<a name="l00317"></a>00317 &psock->readptr,
+<a name="l00318"></a>00318 &psock->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->state = STATE_NONE;
+<a name="l00322"></a>00322 <a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">PT_RESTART</a>(&psock->psockpt);
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324 <a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">PT_END</a>(&psock->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->state = STATE_NONE;
+<a name="l00331"></a>00331 psock->readlen = 0;
+<a name="l00332"></a>00332 psock->bufptr = buffer;
+<a name="l00333"></a>00333 psock->bufsize = buffersize;
+<a name="l00334"></a>00334 buf_setup(&psock->buf, buffer, buffersize);
+<a name="l00335"></a>00335 <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&psock->pt);
+<a name="l00336"></a>00336 <a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">PT_INIT</a>(&psock->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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00193.html b/third_party/uip-1.0/doc/html/a00193.html new file mode 100644 index 0000000..c9b6a9c --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00193.html @@ -0,0 +1,405 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/psock.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/psock.h</h1><a href="a00127.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \defgroup psock Protosockets library</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> *</span>
+<a name="l00040"></a>00040 <span class="comment"> * The protosocket library provides an interface to the uIP stack that is</span>
+<a name="l00041"></a>00041 <span class="comment"> * similar to the traditional BSD socket interface. Unlike programs</span>
+<a name="l00042"></a>00042 <span class="comment"> * written for the ordinary uIP event-driven interface, programs</span>
+<a name="l00043"></a>00043 <span class="comment"> * written with the protosocket library are executed in a sequential</span>
+<a name="l00044"></a>00044 <span class="comment"> * fashion and does not have to be implemented as explicit state</span>
+<a name="l00045"></a>00045 <span class="comment"> * machines.</span>
+<a name="l00046"></a>00046 <span class="comment"> *</span>
+<a name="l00047"></a>00047 <span class="comment"> * Protosockets only work with TCP connections.</span>
+<a name="l00048"></a>00048 <span class="comment"> *</span>
+<a name="l00049"></a>00049 <span class="comment"> * The protosocket library uses \ref pt protothreads to provide</span>
+<a name="l00050"></a>00050 <span class="comment"> * sequential control flow. This makes the protosockets lightweight in</span>
+<a name="l00051"></a>00051 <span class="comment"> * terms of memory, but also means that protosockets inherits the</span>
+<a name="l00052"></a>00052 <span class="comment"> * functional limitations of protothreads. Each protosocket lives only</span>
+<a name="l00053"></a>00053 <span class="comment"> * within a single function. Automatic variables (stack variables) are</span>
+<a name="l00054"></a>00054 <span class="comment"> * not retained across a protosocket library function call.</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * \note Because the protosocket library uses protothreads, local</span>
+<a name="l00057"></a>00057 <span class="comment"> * variables will not always be saved across a call to a protosocket</span>
+<a name="l00058"></a>00058 <span class="comment"> * library function. It is therefore advised that local variables are</span>
+<a name="l00059"></a>00059 <span class="comment"> * used with extreme care.</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> * The protosocket library provides functions for sending data without</span>
+<a name="l00062"></a>00062 <span class="comment"> * having to deal with retransmissions and acknowledgements, as well</span>
+<a name="l00063"></a>00063 <span class="comment"> * as functions for reading data without having to deal with data</span>
+<a name="l00064"></a>00064 <span class="comment"> * being split across more than one TCP segment.</span>
+<a name="l00065"></a>00065 <span class="comment"> *</span>
+<a name="l00066"></a>00066 <span class="comment"> * Because each protosocket runs as a protothread, the protosocket has to be</span>
+<a name="l00067"></a>00067 <span class="comment"> * started with a call to PSOCK_BEGIN() at the start of the function</span>
+<a name="l00068"></a>00068 <span class="comment"> * in which the protosocket is used. Similarly, the protosocket protothread can</span>
+<a name="l00069"></a>00069 <span class="comment"> * be terminated by a call to PSOCK_EXIT().</span>
+<a name="l00070"></a>00070 <span class="comment"> *</span>
+<a name="l00071"></a>00071 <span class="comment"> */</span>
+<a name="l00072"></a>00072 <span class="comment"></span>
+<a name="l00073"></a>00073 <span class="comment">/**</span>
+<a name="l00074"></a>00074 <span class="comment"> * \file</span>
+<a name="l00075"></a>00075 <span class="comment"> * Protosocket library header file</span>
+<a name="l00076"></a>00076 <span class="comment"> * \author</span>
+<a name="l00077"></a>00077 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00078"></a>00078 <span class="comment"> *</span>
+<a name="l00079"></a>00079 <span class="comment"> */</span>
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="preprocessor">#ifndef __PSOCK_H__</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define __PSOCK_H__</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#include "<a class="code" href="a00128.html">pt.h</a>"</span>
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 <span class="comment">/*</span>
+<a name="l00088"></a>00088 <span class="comment"> * The structure that holds the state of a buffer.</span>
+<a name="l00089"></a>00089 <span class="comment"> *</span>
+<a name="l00090"></a>00090 <span class="comment"> * This structure holds the state of a uIP buffer. The structure has</span>
+<a name="l00091"></a>00091 <span class="comment"> * no user-visible elements, but is used through the functions</span>
+<a name="l00092"></a>00092 <span class="comment"> * provided by the library.</span>
+<a name="l00093"></a>00093 <span class="comment"> *</span>
+<a name="l00094"></a>00094 <span class="comment"> */</span>
+<a name="l00095"></a><a class="code" href="a00083.html">00095</a> <span class="keyword">struct </span><a class="code" href="a00083.html">psock_buf</a> {
+<a name="l00096"></a><a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">00096</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *<a class="code" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">ptr</a>;
+<a name="l00097"></a><a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">00097</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">left</a>;
+<a name="l00098"></a>00098 };
+<a name="l00099"></a>00099 <span class="comment"></span>
+<a name="l00100"></a>00100 <span class="comment">/**</span>
+<a name="l00101"></a>00101 <span class="comment"> * The representation of a protosocket.</span>
+<a name="l00102"></a>00102 <span class="comment"> *</span>
+<a name="l00103"></a>00103 <span class="comment"> * The protosocket structrure is an opaque structure with no user-visible</span>
+<a name="l00104"></a>00104 <span class="comment"> * elements.</span>
+<a name="l00105"></a>00105 <span class="comment"> */</span>
+<a name="l00106"></a><a class="code" href="a00082.html">00106</a> <span class="keyword">struct </span><a class="code" href="a00082.html">psock</a> {
+<a name="l00107"></a><a class="code" href="a00082.html#17aacf7c5e2046c1f3ab50faa1b2f7eb">00107</a> <span class="keyword">struct </span><a class="code" href="a00084.html">pt</a> pt, <a class="code" href="a00082.html#17aacf7c5e2046c1f3ab50faa1b2f7eb">psockpt</a>; <span class="comment">/* Protothreads - one that's using the psock</span>
+<a name="l00108"></a>00108 <span class="comment"> functions, and one that runs inside the</span>
+<a name="l00109"></a>00109 <span class="comment"> psock functions. */</span>
+<a name="l00110"></a><a class="code" href="a00082.html#31f25efccba9fd043047133d0d0ba5ab">00110</a> <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *<a class="code" href="a00082.html#31f25efccba9fd043047133d0d0ba5ab">sendptr</a>; <span class="comment">/* Pointer to the next data to be sent. */</span>
+<a name="l00111"></a><a class="code" href="a00082.html#b973f2e16c2883a8a0164d716cce5a31">00111</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *<a class="code" href="a00082.html#b973f2e16c2883a8a0164d716cce5a31">readptr</a>; <span class="comment">/* Pointer to the next data to be read. */</span>
+<a name="l00112"></a>00112
+<a name="l00113"></a><a class="code" href="a00082.html#c3d1bfbb1abde31973c015de97ce2f84">00113</a> <span class="keywordtype">char</span> *<a class="code" href="a00082.html#c3d1bfbb1abde31973c015de97ce2f84">bufptr</a>; <span class="comment">/* Pointer to the buffer used for buffering</span>
+<a name="l00114"></a>00114 <span class="comment"> incoming data. */</span>
+<a name="l00115"></a>00115
+<a name="l00116"></a><a class="code" href="a00082.html#19b82696bd84a803250cbf9812f2f125">00116</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00082.html#19b82696bd84a803250cbf9812f2f125">sendlen</a>; <span class="comment">/* The number of bytes left to be sent. */</span>
+<a name="l00117"></a><a class="code" href="a00082.html#a408ca8630154ebd039f37a828399f7b">00117</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00082.html#a408ca8630154ebd039f37a828399f7b">readlen</a>; <span class="comment">/* The number of bytes left to be read. */</span>
+<a name="l00118"></a>00118
+<a name="l00119"></a><a class="code" href="a00082.html#d6bd03239291629676e4c0286ebb650f">00119</a> <span class="keyword">struct </span><a class="code" href="a00083.html">psock_buf</a> <a class="code" href="a00082.html#d6bd03239291629676e4c0286ebb650f">buf</a>; <span class="comment">/* The structure holding the state of the</span>
+<a name="l00120"></a>00120 <span class="comment"> input buffer. */</span>
+<a name="l00121"></a><a class="code" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">00121</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">bufsize</a>; <span class="comment">/* The size of the input buffer. */</span>
+<a name="l00122"></a>00122
+<a name="l00123"></a><a class="code" href="a00082.html#fda184638130452f3570966acc5b97f9">00123</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00082.html#fda184638130452f3570966acc5b97f9">state</a>; <span class="comment">/* The state of the protosocket. */</span>
+<a name="l00124"></a>00124 };
+<a name="l00125"></a>00125
+<a name="l00126"></a>00126 <span class="keywordtype">void</span> psock_init(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *<a class="code" href="a00082.html">psock</a>, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> buffersize);<span class="comment"></span>
+<a name="l00127"></a>00127 <span class="comment">/**</span>
+<a name="l00128"></a>00128 <span class="comment"> * Initialize a protosocket.</span>
+<a name="l00129"></a>00129 <span class="comment"> *</span>
+<a name="l00130"></a>00130 <span class="comment"> * This macro initializes a protosocket and must be called before the</span>
+<a name="l00131"></a>00131 <span class="comment"> * protosocket is used. The initialization also specifies the input buffer</span>
+<a name="l00132"></a>00132 <span class="comment"> * for the protosocket.</span>
+<a name="l00133"></a>00133 <span class="comment"> *</span>
+<a name="l00134"></a>00134 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket to be</span>
+<a name="l00135"></a>00135 <span class="comment"> * initialized</span>
+<a name="l00136"></a>00136 <span class="comment"> *</span>
+<a name="l00137"></a>00137 <span class="comment"> * \param buffer (char *) A pointer to the input buffer for the</span>
+<a name="l00138"></a>00138 <span class="comment"> * protosocket.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * \param buffersize (unsigned int) The size of the input buffer.</span>
+<a name="l00141"></a>00141 <span class="comment"> *</span>
+<a name="l00142"></a>00142 <span class="comment"> * \hideinitializer</span>
+<a name="l00143"></a>00143 <span class="comment"> */</span>
+<a name="l00144"></a><a class="code" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">00144</a> <span class="preprocessor">#define PSOCK_INIT(psock, buffer, buffersize) \</span>
+<a name="l00145"></a>00145 <span class="preprocessor"> psock_init(psock, buffer, buffersize)</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00147"></a>00147 <span class="comment">/**</span>
+<a name="l00148"></a>00148 <span class="comment"> * Start the protosocket protothread in a function.</span>
+<a name="l00149"></a>00149 <span class="comment"> *</span>
+<a name="l00150"></a>00150 <span class="comment"> * This macro starts the protothread associated with the protosocket and</span>
+<a name="l00151"></a>00151 <span class="comment"> * must come before other protosocket calls in the function it is used.</span>
+<a name="l00152"></a>00152 <span class="comment"> *</span>
+<a name="l00153"></a>00153 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket to be</span>
+<a name="l00154"></a>00154 <span class="comment"> * started.</span>
+<a name="l00155"></a>00155 <span class="comment"> *</span>
+<a name="l00156"></a>00156 <span class="comment"> * \hideinitializer</span>
+<a name="l00157"></a>00157 <span class="comment"> */</span>
+<a name="l00158"></a><a class="code" href="a00158.html#g84901a5aa60040e96d272a69977edd22">00158</a> <span class="preprocessor">#define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt))</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span>
+<a name="l00160"></a>00160 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_send(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *<a class="code" href="a00082.html">psock</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len));<span class="comment"></span>
+<a name="l00161"></a>00161 <span class="comment">/**</span>
+<a name="l00162"></a>00162 <span class="comment"> * Send data.</span>
+<a name="l00163"></a>00163 <span class="comment"> *</span>
+<a name="l00164"></a>00164 <span class="comment"> * This macro sends data over a protosocket. The protosocket protothread blocks</span>
+<a name="l00165"></a>00165 <span class="comment"> * until all data has been sent and is known to have been received by</span>
+<a name="l00166"></a>00166 <span class="comment"> * the remote end of the TCP connection.</span>
+<a name="l00167"></a>00167 <span class="comment"> *</span>
+<a name="l00168"></a>00168 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket over which</span>
+<a name="l00169"></a>00169 <span class="comment"> * data is to be sent.</span>
+<a name="l00170"></a>00170 <span class="comment"> *</span>
+<a name="l00171"></a>00171 <span class="comment"> * \param data (char *) A pointer to the data that is to be sent.</span>
+<a name="l00172"></a>00172 <span class="comment"> *</span>
+<a name="l00173"></a>00173 <span class="comment"> * \param datalen (unsigned int) The length of the data that is to be</span>
+<a name="l00174"></a>00174 <span class="comment"> * sent.</span>
+<a name="l00175"></a>00175 <span class="comment"> *</span>
+<a name="l00176"></a>00176 <span class="comment"> * \hideinitializer</span>
+<a name="l00177"></a>00177 <span class="comment"> */</span>
+<a name="l00178"></a><a class="code" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">00178</a> <span class="preprocessor">#define PSOCK_SEND(psock, data, datalen) \</span>
+<a name="l00179"></a>00179 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen))</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00181"></a>00181 <span class="comment">/**</span>
+<a name="l00182"></a>00182 <span class="comment"> * \brief Send a null-terminated string.</span>
+<a name="l00183"></a>00183 <span class="comment"> * \param psock Pointer to the protosocket.</span>
+<a name="l00184"></a>00184 <span class="comment"> * \param str The string to be sent.</span>
+<a name="l00185"></a>00185 <span class="comment"> *</span>
+<a name="l00186"></a>00186 <span class="comment"> * This function sends a null-terminated string over the</span>
+<a name="l00187"></a>00187 <span class="comment"> * protosocket.</span>
+<a name="l00188"></a>00188 <span class="comment"> *</span>
+<a name="l00189"></a>00189 <span class="comment"> * \hideinitializer</span>
+<a name="l00190"></a>00190 <span class="comment"> */</span>
+<a name="l00191"></a><a class="code" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">00191</a> <span class="preprocessor">#define PSOCK_SEND_STR(psock, str) \</span>
+<a name="l00192"></a>00192 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str)))</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>
+<a name="l00194"></a>00194 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_generator_send(<span class="keyword">struct</span> <a class="code" href="a00082.html">psock</a> *<a class="code" href="a00082.html">psock</a>,
+<a name="l00195"></a>00195 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> (*f)(<span class="keywordtype">void</span> *), <span class="keywordtype">void</span> *arg));
+<a name="l00196"></a>00196 <span class="comment"></span>
+<a name="l00197"></a>00197 <span class="comment">/**</span>
+<a name="l00198"></a>00198 <span class="comment"> * \brief Generate data with a function and send it</span>
+<a name="l00199"></a>00199 <span class="comment"> * \param psock Pointer to the protosocket.</span>
+<a name="l00200"></a>00200 <span class="comment"> * \param generator Pointer to the generator function</span>
+<a name="l00201"></a>00201 <span class="comment"> * \param arg Argument to the generator function</span>
+<a name="l00202"></a>00202 <span class="comment"> *</span>
+<a name="l00203"></a>00203 <span class="comment"> * This function generates data and sends it over the</span>
+<a name="l00204"></a>00204 <span class="comment"> * protosocket. This can be used to dynamically generate</span>
+<a name="l00205"></a>00205 <span class="comment"> * data for a transmission, instead of generating the data</span>
+<a name="l00206"></a>00206 <span class="comment"> * in a buffer beforehand. This function reduces the need for</span>
+<a name="l00207"></a>00207 <span class="comment"> * buffer memory. The generator function is implemented by</span>
+<a name="l00208"></a>00208 <span class="comment"> * the application, and a pointer to the function is given</span>
+<a name="l00209"></a>00209 <span class="comment"> * as an argument with the call to PSOCK_GENERATOR_SEND().</span>
+<a name="l00210"></a>00210 <span class="comment"> *</span>
+<a name="l00211"></a>00211 <span class="comment"> * The generator function should place the generated data</span>
+<a name="l00212"></a>00212 <span class="comment"> * directly in the uip_appdata buffer, and return the</span>
+<a name="l00213"></a>00213 <span class="comment"> * length of the generated data. The generator function is</span>
+<a name="l00214"></a>00214 <span class="comment"> * called by the protosocket layer when the data first is</span>
+<a name="l00215"></a>00215 <span class="comment"> * sent, and once for every retransmission that is needed.</span>
+<a name="l00216"></a>00216 <span class="comment"> *</span>
+<a name="l00217"></a>00217 <span class="comment"> * \hideinitializer</span>
+<a name="l00218"></a>00218 <span class="comment"> */</span>
+<a name="l00219"></a><a class="code" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">00219</a> <span class="preprocessor">#define PSOCK_GENERATOR_SEND(psock, generator, arg) \</span>
+<a name="l00220"></a>00220 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), \</span>
+<a name="l00221"></a>00221 <span class="preprocessor"> psock_generator_send(psock, generator, arg))</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span>
+<a name="l00223"></a>00223 <span class="comment"></span>
+<a name="l00224"></a>00224 <span class="comment">/**</span>
+<a name="l00225"></a>00225 <span class="comment"> * Close a protosocket.</span>
+<a name="l00226"></a>00226 <span class="comment"> *</span>
+<a name="l00227"></a>00227 <span class="comment"> * This macro closes a protosocket and can only be called from within the</span>
+<a name="l00228"></a>00228 <span class="comment"> * protothread in which the protosocket lives.</span>
+<a name="l00229"></a>00229 <span class="comment"> *</span>
+<a name="l00230"></a>00230 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket that is to</span>
+<a name="l00231"></a>00231 <span class="comment"> * be closed.</span>
+<a name="l00232"></a>00232 <span class="comment"> *</span>
+<a name="l00233"></a>00233 <span class="comment"> * \hideinitializer</span>
+<a name="l00234"></a>00234 <span class="comment"> */</span>
+<a name="l00235"></a><a class="code" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">00235</a> <span class="preprocessor">#define PSOCK_CLOSE(psock) uip_close()</span>
+<a name="l00236"></a>00236 <span class="preprocessor"></span>
+<a name="l00237"></a>00237 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_readbuf(<span class="keyword">struct</span> psock *psock));<span class="comment"></span>
+<a name="l00238"></a>00238 <span class="comment">/**</span>
+<a name="l00239"></a>00239 <span class="comment"> * Read data until the buffer is full.</span>
+<a name="l00240"></a>00240 <span class="comment"> *</span>
+<a name="l00241"></a>00241 <span class="comment"> * This macro will block waiting for data and read the data into the</span>
+<a name="l00242"></a>00242 <span class="comment"> * input buffer specified with the call to PSOCK_INIT(). Data is read</span>
+<a name="l00243"></a>00243 <span class="comment"> * until the buffer is full..</span>
+<a name="l00244"></a>00244 <span class="comment"> *</span>
+<a name="l00245"></a>00245 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket from which</span>
+<a name="l00246"></a>00246 <span class="comment"> * data should be read.</span>
+<a name="l00247"></a>00247 <span class="comment"> *</span>
+<a name="l00248"></a>00248 <span class="comment"> * \hideinitializer</span>
+<a name="l00249"></a>00249 <span class="comment"> */</span>
+<a name="l00250"></a><a class="code" href="a00158.html#gd895ab98c54d9966ff554aa873151751">00250</a> <span class="preprocessor">#define PSOCK_READBUF(psock) \</span>
+<a name="l00251"></a>00251 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock))</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span>
+<a name="l00253"></a>00253 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_readto(<span class="keyword">struct</span> psock *psock, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c));<span class="comment"></span>
+<a name="l00254"></a>00254 <span class="comment">/**</span>
+<a name="l00255"></a>00255 <span class="comment"> * Read data up to a specified character.</span>
+<a name="l00256"></a>00256 <span class="comment"> *</span>
+<a name="l00257"></a>00257 <span class="comment"> * This macro will block waiting for data and read the data into the</span>
+<a name="l00258"></a>00258 <span class="comment"> * input buffer specified with the call to PSOCK_INIT(). Data is only</span>
+<a name="l00259"></a>00259 <span class="comment"> * read until the specifieed character appears in the data stream.</span>
+<a name="l00260"></a>00260 <span class="comment"> *</span>
+<a name="l00261"></a>00261 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket from which</span>
+<a name="l00262"></a>00262 <span class="comment"> * data should be read.</span>
+<a name="l00263"></a>00263 <span class="comment"> *</span>
+<a name="l00264"></a>00264 <span class="comment"> * \param c (char) The character at which to stop reading.</span>
+<a name="l00265"></a>00265 <span class="comment"> *</span>
+<a name="l00266"></a>00266 <span class="comment"> * \hideinitializer</span>
+<a name="l00267"></a>00267 <span class="comment"> */</span>
+<a name="l00268"></a><a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">00268</a> <span class="preprocessor">#define PSOCK_READTO(psock, c) \</span>
+<a name="l00269"></a>00269 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c))</span>
+<a name="l00270"></a>00270 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00271"></a>00271 <span class="comment">/**</span>
+<a name="l00272"></a>00272 <span class="comment"> * The length of the data that was previously read.</span>
+<a name="l00273"></a>00273 <span class="comment"> *</span>
+<a name="l00274"></a>00274 <span class="comment"> * This macro returns the length of the data that was previously read</span>
+<a name="l00275"></a>00275 <span class="comment"> * using PSOCK_READTO() or PSOCK_READ().</span>
+<a name="l00276"></a>00276 <span class="comment"> *</span>
+<a name="l00277"></a>00277 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket holding the data.</span>
+<a name="l00278"></a>00278 <span class="comment"> *</span>
+<a name="l00279"></a>00279 <span class="comment"> * \hideinitializer</span>
+<a name="l00280"></a>00280 <span class="comment"> */</span>
+<a name="l00281"></a><a class="code" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">00281</a> <span class="preprocessor">#define PSOCK_DATALEN(psock) psock_datalen(psock)</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span>
+<a name="l00283"></a>00283 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a>(<span class="keyword">struct</span> psock *psock);
+<a name="l00284"></a>00284 <span class="comment"></span>
+<a name="l00285"></a>00285 <span class="comment">/**</span>
+<a name="l00286"></a>00286 <span class="comment"> * Exit the protosocket's protothread.</span>
+<a name="l00287"></a>00287 <span class="comment"> *</span>
+<a name="l00288"></a>00288 <span class="comment"> * This macro terminates the protothread of the protosocket and should</span>
+<a name="l00289"></a>00289 <span class="comment"> * almost always be used in conjunction with PSOCK_CLOSE().</span>
+<a name="l00290"></a>00290 <span class="comment"> *</span>
+<a name="l00291"></a>00291 <span class="comment"> * \sa PSOCK_CLOSE_EXIT()</span>
+<a name="l00292"></a>00292 <span class="comment"> *</span>
+<a name="l00293"></a>00293 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span>
+<a name="l00294"></a>00294 <span class="comment"> *</span>
+<a name="l00295"></a>00295 <span class="comment"> * \hideinitializer</span>
+<a name="l00296"></a>00296 <span class="comment"> */</span>
+<a name="l00297"></a><a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">00297</a> <span class="preprocessor">#define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt))</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00299"></a>00299 <span class="comment">/**</span>
+<a name="l00300"></a>00300 <span class="comment"> * Close a protosocket and exit the protosocket's protothread.</span>
+<a name="l00301"></a>00301 <span class="comment"> *</span>
+<a name="l00302"></a>00302 <span class="comment"> * This macro closes a protosocket and exits the protosocket's protothread.</span>
+<a name="l00303"></a>00303 <span class="comment"> *</span>
+<a name="l00304"></a>00304 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span>
+<a name="l00305"></a>00305 <span class="comment"> *</span>
+<a name="l00306"></a>00306 <span class="comment"> * \hideinitializer</span>
+<a name="l00307"></a>00307 <span class="comment"> */</span>
+<a name="l00308"></a><a class="code" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">00308</a> <span class="preprocessor">#define PSOCK_CLOSE_EXIT(psock) \</span>
+<a name="l00309"></a>00309 <span class="preprocessor"> do { \</span>
+<a name="l00310"></a>00310 <span class="preprocessor"> PSOCK_CLOSE(psock); \</span>
+<a name="l00311"></a>00311 <span class="preprocessor"> PSOCK_EXIT(psock); \</span>
+<a name="l00312"></a>00312 <span class="preprocessor"> } while(0)</span>
+<a name="l00313"></a>00313 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00314"></a>00314 <span class="comment">/**</span>
+<a name="l00315"></a>00315 <span class="comment"> * Declare the end of a protosocket's protothread.</span>
+<a name="l00316"></a>00316 <span class="comment"> *</span>
+<a name="l00317"></a>00317 <span class="comment"> * This macro is used for declaring that the protosocket's protothread</span>
+<a name="l00318"></a>00318 <span class="comment"> * ends. It must always be used together with a matching PSOCK_BEGIN()</span>
+<a name="l00319"></a>00319 <span class="comment"> * macro.</span>
+<a name="l00320"></a>00320 <span class="comment"> *</span>
+<a name="l00321"></a>00321 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span>
+<a name="l00322"></a>00322 <span class="comment"> *</span>
+<a name="l00323"></a>00323 <span class="comment"> * \hideinitializer</span>
+<a name="l00324"></a>00324 <span class="comment"> */</span>
+<a name="l00325"></a><a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">00325</a> <span class="preprocessor">#define PSOCK_END(psock) PT_END(&((psock)->pt))</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span>
+<a name="l00327"></a>00327 <span class="keywordtype">char</span> <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(<span class="keyword">struct</span> psock *s);
+<a name="l00328"></a>00328 <span class="comment"></span>
+<a name="l00329"></a>00329 <span class="comment">/**</span>
+<a name="l00330"></a>00330 <span class="comment"> * Check if new data has arrived on a protosocket.</span>
+<a name="l00331"></a>00331 <span class="comment"> *</span>
+<a name="l00332"></a>00332 <span class="comment"> * This macro is used in conjunction with the PSOCK_WAIT_UNTIL()</span>
+<a name="l00333"></a>00333 <span class="comment"> * macro to check if data has arrived on a protosocket.</span>
+<a name="l00334"></a>00334 <span class="comment"> *</span>
+<a name="l00335"></a>00335 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span>
+<a name="l00336"></a>00336 <span class="comment"> *</span>
+<a name="l00337"></a>00337 <span class="comment"> * \hideinitializer</span>
+<a name="l00338"></a>00338 <span class="comment"> */</span>
+<a name="l00339"></a><a class="code" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">00339</a> <span class="preprocessor">#define PSOCK_NEWDATA(psock) psock_newdata(psock)</span>
+<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00341"></a>00341 <span class="comment">/**</span>
+<a name="l00342"></a>00342 <span class="comment"> * Wait until a condition is true.</span>
+<a name="l00343"></a>00343 <span class="comment"> *</span>
+<a name="l00344"></a>00344 <span class="comment"> * This macro blocks the protothread until the specified condition is</span>
+<a name="l00345"></a>00345 <span class="comment"> * true. The macro PSOCK_NEWDATA() can be used to check if new data</span>
+<a name="l00346"></a>00346 <span class="comment"> * arrives when the protosocket is waiting.</span>
+<a name="l00347"></a>00347 <span class="comment"> *</span>
+<a name="l00348"></a>00348 <span class="comment"> * Typically, this macro is used as follows:</span>
+<a name="l00349"></a>00349 <span class="comment"> *</span>
+<a name="l00350"></a>00350 <span class="comment"> \code</span>
+<a name="l00351"></a>00351 <span class="comment"> PT_THREAD(thread(struct psock *s, struct timer *t))</span>
+<a name="l00352"></a>00352 <span class="comment"> {</span>
+<a name="l00353"></a>00353 <span class="comment"> PSOCK_BEGIN(s);</span>
+<a name="l00354"></a>00354 <span class="comment"></span>
+<a name="l00355"></a>00355 <span class="comment"> PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));</span>
+<a name="l00356"></a>00356 <span class="comment"> </span>
+<a name="l00357"></a>00357 <span class="comment"> if(PSOCK_NEWDATA(s)) {</span>
+<a name="l00358"></a>00358 <span class="comment"> PSOCK_READTO(s, '\n');</span>
+<a name="l00359"></a>00359 <span class="comment"> } else {</span>
+<a name="l00360"></a>00360 <span class="comment"> handle_timed_out(s);</span>
+<a name="l00361"></a>00361 <span class="comment"> }</span>
+<a name="l00362"></a>00362 <span class="comment"> </span>
+<a name="l00363"></a>00363 <span class="comment"> PSOCK_END(s);</span>
+<a name="l00364"></a>00364 <span class="comment"> }</span>
+<a name="l00365"></a>00365 <span class="comment"> \endcode</span>
+<a name="l00366"></a>00366 <span class="comment"> *</span>
+<a name="l00367"></a>00367 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span>
+<a name="l00368"></a>00368 <span class="comment"> * \param condition The condition to wait for.</span>
+<a name="l00369"></a>00369 <span class="comment"> *</span>
+<a name="l00370"></a>00370 <span class="comment"> * \hideinitializer</span>
+<a name="l00371"></a>00371 <span class="comment"> */</span>
+<a name="l00372"></a><a class="code" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">00372</a> <span class="preprocessor">#define PSOCK_WAIT_UNTIL(psock, condition) \</span>
+<a name="l00373"></a>00373 <span class="preprocessor"> PT_WAIT_UNTIL(&((psock)->pt), (condition));</span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span>
+<a name="l00375"></a><a class="code" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">00375</a> <span class="preprocessor">#define PSOCK_WAIT_THREAD(psock, condition) \</span>
+<a name="l00376"></a>00376 <span class="preprocessor"> PT_WAIT_THREAD(&((psock)->pt), (condition))</span>
+<a name="l00377"></a>00377 <span class="preprocessor"></span>
+<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __PSOCK_H__ */</span>
+<a name="l00379"></a>00379 <span class="comment"></span>
+<a name="l00380"></a>00380 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00194.html b/third_party/uip-1.0/doc/html/a00194.html new file mode 100644 index 0000000..4ab6544 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00194.html @@ -0,0 +1,348 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/pt.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/pt.h</h1><a href="a00128.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004-2005, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035 <span class="comment"></span>
+<a name="l00036"></a>00036 <span class="comment">/**</span>
+<a name="l00037"></a>00037 <span class="comment"> * \addtogroup pt</span>
+<a name="l00038"></a>00038 <span class="comment"> * @{</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040 <span class="comment"></span>
+<a name="l00041"></a>00041 <span class="comment">/**</span>
+<a name="l00042"></a>00042 <span class="comment"> * \file</span>
+<a name="l00043"></a>00043 <span class="comment"> * Protothreads implementation.</span>
+<a name="l00044"></a>00044 <span class="comment"> * \author</span>
+<a name="l00045"></a>00045 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00046"></a>00046 <span class="comment"> *</span>
+<a name="l00047"></a>00047 <span class="comment"> */</span>
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="preprocessor">#ifndef __PT_H__</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define __PT_H__</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "<a class="code" href="a00125.html">lc.h</a>"</span>
+<a name="l00053"></a>00053
+<a name="l00054"></a><a class="code" href="a00084.html">00054</a> <span class="keyword">struct </span><a class="code" href="a00084.html">pt</a> {
+<a name="l00055"></a><a class="code" href="a00084.html#c3fa0fa86689e3e7c039a16c16861dbe">00055</a> <a class="code" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc_t</a> <a class="code" href="a00084.html#c3fa0fa86689e3e7c039a16c16861dbe">lc</a>;
+<a name="l00056"></a>00056 };
+<a name="l00057"></a>00057
+<a name="l00058"></a><a class="code" href="a00142.html#g7b5319b5b65761a845fcd1500fde4cdc">00058</a> <span class="preprocessor">#define PT_WAITING 0</span>
+<a name="l00059"></a><a class="code" href="a00142.html#gcfae9053e5c107a1aed6b228c917d2ea">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define PT_EXITED 1</span>
+<a name="l00060"></a><a class="code" href="a00142.html#g9ff1e8936a8a26bff54c05f8a989b93b">00060</a> <span class="preprocessor"></span><span class="preprocessor">#define PT_ENDED 2</span>
+<a name="l00061"></a><a class="code" href="a00142.html#ge469332907e0617d72d5e2dd4297119d">00061</a> <span class="preprocessor"></span><span class="preprocessor">#define PT_YIELDED 3</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/**</span>
+<a name="l00064"></a>00064 <span class="comment"> * \name Initialization</span>
+<a name="l00065"></a>00065 <span class="comment"> * @{</span>
+<a name="l00066"></a>00066 <span class="comment"> */</span>
+<a name="l00067"></a>00067 <span class="comment"></span>
+<a name="l00068"></a>00068 <span class="comment">/**</span>
+<a name="l00069"></a>00069 <span class="comment"> * Initialize a protothread.</span>
+<a name="l00070"></a>00070 <span class="comment"> *</span>
+<a name="l00071"></a>00071 <span class="comment"> * Initializes a protothread. Initialization must be done prior to</span>
+<a name="l00072"></a>00072 <span class="comment"> * starting to execute the protothread.</span>
+<a name="l00073"></a>00073 <span class="comment"> *</span>
+<a name="l00074"></a>00074 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00075"></a>00075 <span class="comment"> *</span>
+<a name="l00076"></a>00076 <span class="comment"> * \sa PT_SPAWN()</span>
+<a name="l00077"></a>00077 <span class="comment"> *</span>
+<a name="l00078"></a>00078 <span class="comment"> * \hideinitializer</span>
+<a name="l00079"></a>00079 <span class="comment"> */</span>
+<a name="l00080"></a><a class="code" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">00080</a> <span class="preprocessor">#define PT_INIT(pt) LC_INIT((pt)->lc)</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00082"></a>00082 <span class="comment">/** @} */</span>
+<a name="l00083"></a>00083 <span class="comment"></span>
+<a name="l00084"></a>00084 <span class="comment">/**</span>
+<a name="l00085"></a>00085 <span class="comment"> * \name Declaration and definition</span>
+<a name="l00086"></a>00086 <span class="comment"> * @{</span>
+<a name="l00087"></a>00087 <span class="comment"> */</span>
+<a name="l00088"></a>00088 <span class="comment"></span>
+<a name="l00089"></a>00089 <span class="comment">/**</span>
+<a name="l00090"></a>00090 <span class="comment"> * Declaration of a protothread.</span>
+<a name="l00091"></a>00091 <span class="comment"> *</span>
+<a name="l00092"></a>00092 <span class="comment"> * This macro is used to declare a protothread. All protothreads must</span>
+<a name="l00093"></a>00093 <span class="comment"> * be declared with this macro.</span>
+<a name="l00094"></a>00094 <span class="comment"> *</span>
+<a name="l00095"></a>00095 <span class="comment"> * \param name_args The name and arguments of the C function</span>
+<a name="l00096"></a>00096 <span class="comment"> * implementing the protothread.</span>
+<a name="l00097"></a>00097 <span class="comment"> *</span>
+<a name="l00098"></a>00098 <span class="comment"> * \hideinitializer</span>
+<a name="l00099"></a>00099 <span class="comment"> */</span>
+<a name="l00100"></a><a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">00100</a> <span class="preprocessor">#define PT_THREAD(name_args) char name_args</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00102"></a>00102 <span class="comment">/**</span>
+<a name="l00103"></a>00103 <span class="comment"> * Declare the start of a protothread inside the C function</span>
+<a name="l00104"></a>00104 <span class="comment"> * implementing the protothread.</span>
+<a name="l00105"></a>00105 <span class="comment"> *</span>
+<a name="l00106"></a>00106 <span class="comment"> * This macro is used to declare the starting point of a</span>
+<a name="l00107"></a>00107 <span class="comment"> * protothread. It should be placed at the start of the function in</span>
+<a name="l00108"></a>00108 <span class="comment"> * which the protothread runs. All C statements above the PT_BEGIN()</span>
+<a name="l00109"></a>00109 <span class="comment"> * invokation will be executed each time the protothread is scheduled.</span>
+<a name="l00110"></a>00110 <span class="comment"> *</span>
+<a name="l00111"></a>00111 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00112"></a>00112 <span class="comment"> *</span>
+<a name="l00113"></a>00113 <span class="comment"> * \hideinitializer</span>
+<a name="l00114"></a>00114 <span class="comment"> */</span>
+<a name="l00115"></a><a class="code" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">00115</a> <span class="preprocessor">#define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc)</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00117"></a>00117 <span class="comment">/**</span>
+<a name="l00118"></a>00118 <span class="comment"> * Declare the end of a protothread.</span>
+<a name="l00119"></a>00119 <span class="comment"> *</span>
+<a name="l00120"></a>00120 <span class="comment"> * This macro is used for declaring that a protothread ends. It must</span>
+<a name="l00121"></a>00121 <span class="comment"> * always be used together with a matching PT_BEGIN() macro.</span>
+<a name="l00122"></a>00122 <span class="comment"> *</span>
+<a name="l00123"></a>00123 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00124"></a>00124 <span class="comment"> *</span>
+<a name="l00125"></a>00125 <span class="comment"> * \hideinitializer</span>
+<a name="l00126"></a>00126 <span class="comment"> */</span>
+<a name="l00127"></a><a class="code" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">00127</a> <span class="preprocessor">#define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \</span>
+<a name="l00128"></a>00128 <span class="preprocessor"> PT_INIT(pt); return PT_ENDED; }</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00130"></a>00130 <span class="comment">/** @} */</span>
+<a name="l00131"></a>00131 <span class="comment"></span>
+<a name="l00132"></a>00132 <span class="comment">/**</span>
+<a name="l00133"></a>00133 <span class="comment"> * \name Blocked wait</span>
+<a name="l00134"></a>00134 <span class="comment"> * @{</span>
+<a name="l00135"></a>00135 <span class="comment"> */</span>
+<a name="l00136"></a>00136 <span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">/**</span>
+<a name="l00138"></a>00138 <span class="comment"> * Block and wait until condition is true.</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * This macro blocks the protothread until the specified condition is</span>
+<a name="l00141"></a>00141 <span class="comment"> * true.</span>
+<a name="l00142"></a>00142 <span class="comment"> *</span>
+<a name="l00143"></a>00143 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00144"></a>00144 <span class="comment"> * \param condition The condition.</span>
+<a name="l00145"></a>00145 <span class="comment"> *</span>
+<a name="l00146"></a>00146 <span class="comment"> * \hideinitializer</span>
+<a name="l00147"></a>00147 <span class="comment"> */</span>
+<a name="l00148"></a><a class="code" href="a00142.html#g99e43010ec61327164466aa2d902de45">00148</a> <span class="preprocessor">#define PT_WAIT_UNTIL(pt, condition) \</span>
+<a name="l00149"></a>00149 <span class="preprocessor"> do { \</span>
+<a name="l00150"></a>00150 <span class="preprocessor"> LC_SET((pt)->lc); \</span>
+<a name="l00151"></a>00151 <span class="preprocessor"> if(!(condition)) { \</span>
+<a name="l00152"></a>00152 <span class="preprocessor"> return PT_WAITING; \</span>
+<a name="l00153"></a>00153 <span class="preprocessor"> } \</span>
+<a name="l00154"></a>00154 <span class="preprocessor"> } while(0)</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00156"></a>00156 <span class="comment">/**</span>
+<a name="l00157"></a>00157 <span class="comment"> * Block and wait while condition is true.</span>
+<a name="l00158"></a>00158 <span class="comment"> *</span>
+<a name="l00159"></a>00159 <span class="comment"> * This function blocks and waits while condition is true. See</span>
+<a name="l00160"></a>00160 <span class="comment"> * PT_WAIT_UNTIL().</span>
+<a name="l00161"></a>00161 <span class="comment"> *</span>
+<a name="l00162"></a>00162 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00163"></a>00163 <span class="comment"> * \param cond The condition.</span>
+<a name="l00164"></a>00164 <span class="comment"> *</span>
+<a name="l00165"></a>00165 <span class="comment"> * \hideinitializer</span>
+<a name="l00166"></a>00166 <span class="comment"> */</span>
+<a name="l00167"></a><a class="code" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">00167</a> <span class="preprocessor">#define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond))</span>
+<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00169"></a>00169 <span class="comment">/** @} */</span>
+<a name="l00170"></a>00170 <span class="comment"></span>
+<a name="l00171"></a>00171 <span class="comment">/**</span>
+<a name="l00172"></a>00172 <span class="comment"> * \name Hierarchical protothreads</span>
+<a name="l00173"></a>00173 <span class="comment"> * @{</span>
+<a name="l00174"></a>00174 <span class="comment"> */</span>
+<a name="l00175"></a>00175 <span class="comment"></span>
+<a name="l00176"></a>00176 <span class="comment">/**</span>
+<a name="l00177"></a>00177 <span class="comment"> * Block and wait until a child protothread completes.</span>
+<a name="l00178"></a>00178 <span class="comment"> *</span>
+<a name="l00179"></a>00179 <span class="comment"> * This macro schedules a child protothread. The current protothread</span>
+<a name="l00180"></a>00180 <span class="comment"> * will block until the child protothread completes.</span>
+<a name="l00181"></a>00181 <span class="comment"> *</span>
+<a name="l00182"></a>00182 <span class="comment"> * \note The child protothread must be manually initialized with the</span>
+<a name="l00183"></a>00183 <span class="comment"> * PT_INIT() function before this function is used.</span>
+<a name="l00184"></a>00184 <span class="comment"> *</span>
+<a name="l00185"></a>00185 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00186"></a>00186 <span class="comment"> * \param thread The child protothread with arguments</span>
+<a name="l00187"></a>00187 <span class="comment"> *</span>
+<a name="l00188"></a>00188 <span class="comment"> * \sa PT_SPAWN()</span>
+<a name="l00189"></a>00189 <span class="comment"> *</span>
+<a name="l00190"></a>00190 <span class="comment"> * \hideinitializer</span>
+<a name="l00191"></a>00191 <span class="comment"> */</span>
+<a name="l00192"></a><a class="code" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">00192</a> <span class="preprocessor">#define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread))</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00194"></a>00194 <span class="comment">/**</span>
+<a name="l00195"></a>00195 <span class="comment"> * Spawn a child protothread and wait until it exits.</span>
+<a name="l00196"></a>00196 <span class="comment"> *</span>
+<a name="l00197"></a>00197 <span class="comment"> * This macro spawns a child protothread and waits until it exits. The</span>
+<a name="l00198"></a>00198 <span class="comment"> * macro can only be used within a protothread.</span>
+<a name="l00199"></a>00199 <span class="comment"> *</span>
+<a name="l00200"></a>00200 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00201"></a>00201 <span class="comment"> * \param child A pointer to the child protothread's control structure.</span>
+<a name="l00202"></a>00202 <span class="comment"> * \param thread The child protothread with arguments</span>
+<a name="l00203"></a>00203 <span class="comment"> *</span>
+<a name="l00204"></a>00204 <span class="comment"> * \hideinitializer</span>
+<a name="l00205"></a>00205 <span class="comment"> */</span>
+<a name="l00206"></a><a class="code" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">00206</a> <span class="preprocessor">#define PT_SPAWN(pt, child, thread) \</span>
+<a name="l00207"></a>00207 <span class="preprocessor"> do { \</span>
+<a name="l00208"></a>00208 <span class="preprocessor"> PT_INIT((child)); \</span>
+<a name="l00209"></a>00209 <span class="preprocessor"> PT_WAIT_THREAD((pt), (thread)); \</span>
+<a name="l00210"></a>00210 <span class="preprocessor"> } while(0)</span>
+<a name="l00211"></a>00211 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00212"></a>00212 <span class="comment">/** @} */</span>
+<a name="l00213"></a>00213 <span class="comment"></span>
+<a name="l00214"></a>00214 <span class="comment">/**</span>
+<a name="l00215"></a>00215 <span class="comment"> * \name Exiting and restarting</span>
+<a name="l00216"></a>00216 <span class="comment"> * @{</span>
+<a name="l00217"></a>00217 <span class="comment"> */</span>
+<a name="l00218"></a>00218 <span class="comment"></span>
+<a name="l00219"></a>00219 <span class="comment">/**</span>
+<a name="l00220"></a>00220 <span class="comment"> * Restart the protothread.</span>
+<a name="l00221"></a>00221 <span class="comment"> *</span>
+<a name="l00222"></a>00222 <span class="comment"> * This macro will block and cause the running protothread to restart</span>
+<a name="l00223"></a>00223 <span class="comment"> * its execution at the place of the PT_BEGIN() call.</span>
+<a name="l00224"></a>00224 <span class="comment"> *</span>
+<a name="l00225"></a>00225 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00226"></a>00226 <span class="comment"> *</span>
+<a name="l00227"></a>00227 <span class="comment"> * \hideinitializer</span>
+<a name="l00228"></a>00228 <span class="comment"> */</span>
+<a name="l00229"></a><a class="code" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">00229</a> <span class="preprocessor">#define PT_RESTART(pt) \</span>
+<a name="l00230"></a>00230 <span class="preprocessor"> do { \</span>
+<a name="l00231"></a>00231 <span class="preprocessor"> PT_INIT(pt); \</span>
+<a name="l00232"></a>00232 <span class="preprocessor"> return PT_WAITING; \</span>
+<a name="l00233"></a>00233 <span class="preprocessor"> } while(0)</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00235"></a>00235 <span class="comment">/**</span>
+<a name="l00236"></a>00236 <span class="comment"> * Exit the protothread.</span>
+<a name="l00237"></a>00237 <span class="comment"> *</span>
+<a name="l00238"></a>00238 <span class="comment"> * This macro causes the protothread to exit. If the protothread was</span>
+<a name="l00239"></a>00239 <span class="comment"> * spawned by another protothread, the parent protothread will become</span>
+<a name="l00240"></a>00240 <span class="comment"> * unblocked and can continue to run.</span>
+<a name="l00241"></a>00241 <span class="comment"> *</span>
+<a name="l00242"></a>00242 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00243"></a>00243 <span class="comment"> *</span>
+<a name="l00244"></a>00244 <span class="comment"> * \hideinitializer</span>
+<a name="l00245"></a>00245 <span class="comment"> */</span>
+<a name="l00246"></a><a class="code" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">00246</a> <span class="preprocessor">#define PT_EXIT(pt) \</span>
+<a name="l00247"></a>00247 <span class="preprocessor"> do { \</span>
+<a name="l00248"></a>00248 <span class="preprocessor"> PT_INIT(pt); \</span>
+<a name="l00249"></a>00249 <span class="preprocessor"> return PT_EXITED; \</span>
+<a name="l00250"></a>00250 <span class="preprocessor"> } while(0)</span>
+<a name="l00251"></a>00251 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00252"></a>00252 <span class="comment">/** @} */</span>
+<a name="l00253"></a>00253 <span class="comment"></span>
+<a name="l00254"></a>00254 <span class="comment">/**</span>
+<a name="l00255"></a>00255 <span class="comment"> * \name Calling a protothread</span>
+<a name="l00256"></a>00256 <span class="comment"> * @{</span>
+<a name="l00257"></a>00257 <span class="comment"> */</span>
+<a name="l00258"></a>00258 <span class="comment"></span>
+<a name="l00259"></a>00259 <span class="comment">/**</span>
+<a name="l00260"></a>00260 <span class="comment"> * Schedule a protothread.</span>
+<a name="l00261"></a>00261 <span class="comment"> *</span>
+<a name="l00262"></a>00262 <span class="comment"> * This function shedules a protothread. The return value of the</span>
+<a name="l00263"></a>00263 <span class="comment"> * function is non-zero if the protothread is running or zero if the</span>
+<a name="l00264"></a>00264 <span class="comment"> * protothread has exited.</span>
+<a name="l00265"></a>00265 <span class="comment"> *</span>
+<a name="l00266"></a>00266 <span class="comment"> * \param f The call to the C function implementing the protothread to</span>
+<a name="l00267"></a>00267 <span class="comment"> * be scheduled</span>
+<a name="l00268"></a>00268 <span class="comment"> *</span>
+<a name="l00269"></a>00269 <span class="comment"> * \hideinitializer</span>
+<a name="l00270"></a>00270 <span class="comment"> */</span>
+<a name="l00271"></a><a class="code" href="a00142.html#gfa82b860a64b67d25ab3abc21811896f">00271</a> <span class="preprocessor">#define PT_SCHEDULE(f) ((f) == PT_WAITING)</span>
+<a name="l00272"></a>00272 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00273"></a>00273 <span class="comment">/** @} */</span>
+<a name="l00274"></a>00274 <span class="comment"></span>
+<a name="l00275"></a>00275 <span class="comment">/**</span>
+<a name="l00276"></a>00276 <span class="comment"> * \name Yielding from a protothread</span>
+<a name="l00277"></a>00277 <span class="comment"> * @{</span>
+<a name="l00278"></a>00278 <span class="comment"> */</span>
+<a name="l00279"></a>00279 <span class="comment"></span>
+<a name="l00280"></a>00280 <span class="comment">/**</span>
+<a name="l00281"></a>00281 <span class="comment"> * Yield from the current protothread.</span>
+<a name="l00282"></a>00282 <span class="comment"> *</span>
+<a name="l00283"></a>00283 <span class="comment"> * This function will yield the protothread, thereby allowing other</span>
+<a name="l00284"></a>00284 <span class="comment"> * processing to take place in the system.</span>
+<a name="l00285"></a>00285 <span class="comment"> *</span>
+<a name="l00286"></a>00286 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00287"></a>00287 <span class="comment"> *</span>
+<a name="l00288"></a>00288 <span class="comment"> * \hideinitializer</span>
+<a name="l00289"></a>00289 <span class="comment"> */</span>
+<a name="l00290"></a><a class="code" href="a00142.html#g155cba6121323726d02c00284428fed6">00290</a> <span class="preprocessor">#define PT_YIELD(pt) \</span>
+<a name="l00291"></a>00291 <span class="preprocessor"> do { \</span>
+<a name="l00292"></a>00292 <span class="preprocessor"> PT_YIELD_FLAG = 0; \</span>
+<a name="l00293"></a>00293 <span class="preprocessor"> LC_SET((pt)->lc); \</span>
+<a name="l00294"></a>00294 <span class="preprocessor"> if(PT_YIELD_FLAG == 0) { \</span>
+<a name="l00295"></a>00295 <span class="preprocessor"> return PT_YIELDED; \</span>
+<a name="l00296"></a>00296 <span class="preprocessor"> } \</span>
+<a name="l00297"></a>00297 <span class="preprocessor"> } while(0)</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00299"></a>00299 <span class="comment">/**</span>
+<a name="l00300"></a>00300 <span class="comment"> * \brief Yield from the protothread until a condition occurs.</span>
+<a name="l00301"></a>00301 <span class="comment"> * \param pt A pointer to the protothread control structure.</span>
+<a name="l00302"></a>00302 <span class="comment"> * \param cond The condition.</span>
+<a name="l00303"></a>00303 <span class="comment"> *</span>
+<a name="l00304"></a>00304 <span class="comment"> * This function will yield the protothread, until the</span>
+<a name="l00305"></a>00305 <span class="comment"> * specified condition evaluates to true.</span>
+<a name="l00306"></a>00306 <span class="comment"> *</span>
+<a name="l00307"></a>00307 <span class="comment"> *</span>
+<a name="l00308"></a>00308 <span class="comment"> * \hideinitializer</span>
+<a name="l00309"></a>00309 <span class="comment"> */</span>
+<a name="l00310"></a><a class="code" href="a00142.html#ge3c821e3a388615528efda9d23c7d115">00310</a> <span class="preprocessor">#define PT_YIELD_UNTIL(pt, cond) \</span>
+<a name="l00311"></a>00311 <span class="preprocessor"> do { \</span>
+<a name="l00312"></a>00312 <span class="preprocessor"> PT_YIELD_FLAG = 0; \</span>
+<a name="l00313"></a>00313 <span class="preprocessor"> LC_SET((pt)->lc); \</span>
+<a name="l00314"></a>00314 <span class="preprocessor"> if((PT_YIELD_FLAG == 0) || !(cond)) { \</span>
+<a name="l00315"></a>00315 <span class="preprocessor"> return PT_YIELDED; \</span>
+<a name="l00316"></a>00316 <span class="preprocessor"> } \</span>
+<a name="l00317"></a>00317 <span class="preprocessor"> } while(0)</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00319"></a>00319 <span class="comment">/** @} */</span>
+<a name="l00320"></a>00320
+<a name="l00321"></a>00321 <span class="preprocessor">#endif </span><span class="comment">/* __PT_H__ */</span>
+<a name="l00322"></a>00322 <span class="comment"></span>
+<a name="l00323"></a>00323 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00195.html b/third_party/uip-1.0/doc/html/a00195.html new file mode 100644 index 0000000..de584d0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00195.html @@ -0,0 +1,152 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/timer.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/timer.c</h1><a href="a00129.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup timer</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \file</span>
+<a name="l00008"></a>00008 <span class="comment"> * Timer library implementation.</span>
+<a name="l00009"></a>00009 <span class="comment"> * \author</span>
+<a name="l00010"></a>00010 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00011"></a>00011 <span class="comment"> */</span>
+<a name="l00012"></a>00012
+<a name="l00013"></a>00013 <span class="comment">/*</span>
+<a name="l00014"></a>00014 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00015"></a>00015 <span class="comment"> * All rights reserved.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00018"></a>00018 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00019"></a>00019 <span class="comment"> * are met:</span>
+<a name="l00020"></a>00020 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00021"></a>00021 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00022"></a>00022 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00023"></a>00023 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00024"></a>00024 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00025"></a>00025 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00026"></a>00026 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00027"></a>00027 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00030"></a>00030 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00031"></a>00031 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00032"></a>00032 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00033"></a>00033 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00034"></a>00034 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00035"></a>00035 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00036"></a>00036 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00037"></a>00037 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00038"></a>00038 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00039"></a>00039 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00040"></a>00040 <span class="comment"> *</span>
+<a name="l00041"></a>00041 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="preprocessor">#include "clock.h"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "<a class="code" href="a00130.html">timer.h</a>"</span>
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00052"></a>00052 <span class="comment">/**</span>
+<a name="l00053"></a>00053 <span class="comment"> * Set a timer.</span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * This function is used to set a timer for a time sometime in the</span>
+<a name="l00056"></a>00056 <span class="comment"> * future. The function timer_expired() will evaluate to true after</span>
+<a name="l00057"></a>00057 <span class="comment"> * the timer has expired.</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> * \param t A pointer to the timer</span>
+<a name="l00060"></a>00060 <span class="comment"> * \param interval The interval before the timer expires.</span>
+<a name="l00061"></a>00061 <span class="comment"> *</span>
+<a name="l00062"></a>00062 <span class="comment"> */</span>
+<a name="l00063"></a>00063 <span class="keywordtype">void</span>
+<a name="l00064"></a><a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">00064</a> <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t, clock_time_t interval)
+<a name="l00065"></a>00065 {
+<a name="l00066"></a>00066 t-><a class="code" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">interval</a> = interval;
+<a name="l00067"></a>00067 t-><a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a> = <a class="code" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time</a>();
+<a name="l00068"></a>00068 }
+<a name="l00069"></a>00069 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00070"></a>00070 <span class="comment">/**</span>
+<a name="l00071"></a>00071 <span class="comment"> * Reset the timer with the same interval.</span>
+<a name="l00072"></a>00072 <span class="comment"> *</span>
+<a name="l00073"></a>00073 <span class="comment"> * This function resets the timer with the same interval that was</span>
+<a name="l00074"></a>00074 <span class="comment"> * given to the timer_set() function. The start point of the interval</span>
+<a name="l00075"></a>00075 <span class="comment"> * is the exact time that the timer last expired. Therefore, this</span>
+<a name="l00076"></a>00076 <span class="comment"> * function will cause the timer to be stable over time, unlike the</span>
+<a name="l00077"></a>00077 <span class="comment"> * timer_rester() function.</span>
+<a name="l00078"></a>00078 <span class="comment"> *</span>
+<a name="l00079"></a>00079 <span class="comment"> * \param t A pointer to the timer.</span>
+<a name="l00080"></a>00080 <span class="comment"> *</span>
+<a name="l00081"></a>00081 <span class="comment"> * \sa timer_restart()</span>
+<a name="l00082"></a>00082 <span class="comment"> */</span>
+<a name="l00083"></a>00083 <span class="keywordtype">void</span>
+<a name="l00084"></a><a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">00084</a> <a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t)
+<a name="l00085"></a>00085 {
+<a name="l00086"></a>00086 t-><a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a> += t-><a class="code" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">interval</a>;
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00089"></a>00089 <span class="comment">/**</span>
+<a name="l00090"></a>00090 <span class="comment"> * Restart the timer from the current point in time</span>
+<a name="l00091"></a>00091 <span class="comment"> *</span>
+<a name="l00092"></a>00092 <span class="comment"> * This function restarts a timer with the same interval that was</span>
+<a name="l00093"></a>00093 <span class="comment"> * given to the timer_set() function. The timer will start at the</span>
+<a name="l00094"></a>00094 <span class="comment"> * current time.</span>
+<a name="l00095"></a>00095 <span class="comment"> *</span>
+<a name="l00096"></a>00096 <span class="comment"> * \note A periodic timer will drift if this function is used to reset</span>
+<a name="l00097"></a>00097 <span class="comment"> * it. For preioric timers, use the timer_reset() function instead.</span>
+<a name="l00098"></a>00098 <span class="comment"> *</span>
+<a name="l00099"></a>00099 <span class="comment"> * \param t A pointer to the timer.</span>
+<a name="l00100"></a>00100 <span class="comment"> *</span>
+<a name="l00101"></a>00101 <span class="comment"> * \sa timer_reset()</span>
+<a name="l00102"></a>00102 <span class="comment"> */</span>
+<a name="l00103"></a>00103 <span class="keywordtype">void</span>
+<a name="l00104"></a><a class="code" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">00104</a> <a class="code" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t)
+<a name="l00105"></a>00105 {
+<a name="l00106"></a>00106 t-><a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a> = <a class="code" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time</a>();
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108 <span class="comment">/*---------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00109"></a>00109 <span class="comment">/**</span>
+<a name="l00110"></a>00110 <span class="comment"> * Check if a timer has expired.</span>
+<a name="l00111"></a>00111 <span class="comment"> *</span>
+<a name="l00112"></a>00112 <span class="comment"> * This function tests if a timer has expired and returns true or</span>
+<a name="l00113"></a>00113 <span class="comment"> * false depending on its status.</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * \param t A pointer to the timer</span>
+<a name="l00116"></a>00116 <span class="comment"> *</span>
+<a name="l00117"></a>00117 <span class="comment"> * \return Non-zero if the timer has expired, zero otherwise.</span>
+<a name="l00118"></a>00118 <span class="comment"> *</span>
+<a name="l00119"></a>00119 <span class="comment"> */</span>
+<a name="l00120"></a>00120 <span class="keywordtype">int</span>
+<a name="l00121"></a><a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">00121</a> <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t)
+<a name="l00122"></a>00122 {
+<a name="l00123"></a>00123 <span class="keywordflow">return</span> (clock_time_t)(<a class="code" href="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff">clock_time</a>() - t-><a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a>) >= (clock_time_t)t-><a class="code" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">interval</a>;
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00126"></a>00126 <span class="comment"></span>
+<a name="l00127"></a>00127 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00196.html b/third_party/uip-1.0/doc/html/a00196.html new file mode 100644 index 0000000..83f3824 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00196.html @@ -0,0 +1,111 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/timer.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/timer.h</h1><a href="a00130.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \defgroup timer Timer library</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * The timer library provides functions for setting, resetting and</span>
+<a name="l00005"></a>00005 <span class="comment"> * restarting timers, and for checking if a timer has expired. An</span>
+<a name="l00006"></a>00006 <span class="comment"> * application must "manually" check if its timers have expired; this</span>
+<a name="l00007"></a>00007 <span class="comment"> * is not done automatically.</span>
+<a name="l00008"></a>00008 <span class="comment"> *</span>
+<a name="l00009"></a>00009 <span class="comment"> * A timer is declared as a \c struct \c timer and all access to the</span>
+<a name="l00010"></a>00010 <span class="comment"> * timer is made by a pointer to the declared timer.</span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> * \note The timer library uses the \ref clock "Clock library" to</span>
+<a name="l00013"></a>00013 <span class="comment"> * measure time. Intervals should be specified in the format used by</span>
+<a name="l00014"></a>00014 <span class="comment"> * the clock library.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> * @{</span>
+<a name="l00017"></a>00017 <span class="comment"> */</span>
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="comment"></span>
+<a name="l00020"></a>00020 <span class="comment">/**</span>
+<a name="l00021"></a>00021 <span class="comment"> * \file</span>
+<a name="l00022"></a>00022 <span class="comment"> * Timer library header file.</span>
+<a name="l00023"></a>00023 <span class="comment"> * \author</span>
+<a name="l00024"></a>00024 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00025"></a>00025 <span class="comment"> */</span>
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 <span class="comment">/*</span>
+<a name="l00028"></a>00028 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00029"></a>00029 <span class="comment"> * All rights reserved.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00032"></a>00032 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00033"></a>00033 <span class="comment"> * are met:</span>
+<a name="l00034"></a>00034 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00035"></a>00035 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00036"></a>00036 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00037"></a>00037 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00038"></a>00038 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00039"></a>00039 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00040"></a>00040 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00041"></a>00041 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00044"></a>00044 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00045"></a>00045 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00046"></a>00046 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00047"></a>00047 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00048"></a>00048 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00049"></a>00049 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00050"></a>00050 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00051"></a>00051 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00052"></a>00052 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00053"></a>00053 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $</span>
+<a name="l00060"></a>00060 <span class="comment"> */</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#ifndef __TIMER_H__</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __TIMER_H__</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "clock.h"</span>
+<a name="l00065"></a>00065 <span class="comment"></span>
+<a name="l00066"></a>00066 <span class="comment">/**</span>
+<a name="l00067"></a>00067 <span class="comment"> * A timer.</span>
+<a name="l00068"></a>00068 <span class="comment"> *</span>
+<a name="l00069"></a>00069 <span class="comment"> * This structure is used for declaring a timer. The timer must be set</span>
+<a name="l00070"></a>00070 <span class="comment"> * with timer_set() before it can be used.</span>
+<a name="l00071"></a>00071 <span class="comment"> *</span>
+<a name="l00072"></a>00072 <span class="comment"> * \hideinitializer</span>
+<a name="l00073"></a>00073 <span class="comment"> */</span>
+<a name="l00074"></a><a class="code" href="a00087.html">00074</a> <span class="keyword">struct </span><a class="code" href="a00087.html">timer</a> {
+<a name="l00075"></a><a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">00075</a> clock_time_t <a class="code" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">start</a>;
+<a name="l00076"></a><a class="code" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">00076</a> clock_time_t <a class="code" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">interval</a>;
+<a name="l00077"></a>00077 };
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer_set</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t, clock_time_t interval);
+<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer_reset</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t);
+<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer_restart</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t);
+<a name="l00082"></a>00082 <span class="keywordtype">int</span> <a class="code" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer_expired</a>(<span class="keyword">struct</span> <a class="code" href="a00087.html">timer</a> *t);
+<a name="l00083"></a>00083
+<a name="l00084"></a>00084 <span class="preprocessor">#endif </span><span class="comment">/* __TIMER_H__ */</span>
+<a name="l00085"></a>00085 <span class="comment"></span>
+<a name="l00086"></a>00086 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00197.html b/third_party/uip-1.0/doc/html/a00197.html new file mode 100644 index 0000000..9b6016b --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00197.html @@ -0,0 +1,183 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-neighbor.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-neighbor.c</h1><a href="a00131.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2006, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="comment"></span>
+<a name="l00034"></a>00034 <span class="comment">/**</span>
+<a name="l00035"></a>00035 <span class="comment"> * \file</span>
+<a name="l00036"></a>00036 <span class="comment"> * Database of link-local neighbors, used by IPv6 code and</span>
+<a name="l00037"></a>00037 <span class="comment"> * to be used by a future ARP code rewrite.</span>
+<a name="l00038"></a>00038 <span class="comment"> * \author</span>
+<a name="l00039"></a>00039 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00040"></a>00040 <span class="comment"> */</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#include "<a class="code" href="a00132.html">uip-neighbor.h</a>"</span>
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="preprocessor">#include <string.h></span>
+<a name="l00045"></a>00045
+<a name="l00046"></a><a class="code" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">00046</a> <span class="preprocessor">#define MAX_TIME 128</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00048"></a>00048 <span class="preprocessor">#ifdef UIP_NEIGHBOR_CONF_ENTRIES</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_NEIGHBOR_CONF_ENTRIES */</span>
+<a name="l00051"></a><a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">00051</a> <span class="preprocessor">#define ENTRIES 8</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_NEIGHBOR_CONF_ENTRIES */</span>
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keyword">struct </span>neighbor_entry {
+<a name="l00055"></a>00055 <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr;
+<a name="l00056"></a>00056 <span class="keyword">struct </span><a class="code" href="a00092.html">uip_neighbor_addr</a> <a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>;
+<a name="l00057"></a>00057 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> time;
+<a name="l00058"></a>00058 };
+<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keyword">struct </span>neighbor_entry entries[<a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a>];
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00062"></a>00062 <span class="keywordtype">void</span>
+<a name="l00063"></a><a class="code" href="a00131.html#1273664aba3e6a2a46e87dcb1a5f19ad">00063</a> <a class="code" href="a00132.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip_neighbor_init</a>(<span class="keywordtype">void</span>)
+<a name="l00064"></a>00064 {
+<a name="l00065"></a>00065 <span class="keywordtype">int</span> i;
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a>; ++i) {
+<a name="l00068"></a>00068 entries[i].time = <a class="code" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">MAX_TIME</a>;
+<a name="l00069"></a>00069 }
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00072"></a>00072 <span class="keywordtype">void</span>
+<a name="l00073"></a><a class="code" href="a00131.html#890e822616a6839dfbf51dcb591b8e99">00073</a> <a class="code" href="a00132.html#890e822616a6839dfbf51dcb591b8e99">uip_neighbor_periodic</a>(<span class="keywordtype">void</span>)
+<a name="l00074"></a>00074 {
+<a name="l00075"></a>00075 <span class="keywordtype">int</span> i;
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a>; ++i) {
+<a name="l00078"></a>00078 <span class="keywordflow">if</span>(entries[i].time < <a class="code" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">MAX_TIME</a>) {
+<a name="l00079"></a>00079 entries[i].time++;
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081 }
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00084"></a>00084 <span class="keywordtype">void</span>
+<a name="l00085"></a><a class="code" href="a00131.html#88460bea09a462d0e22511cb567eee14">00085</a> <a class="code" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip_neighbor_add</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr, <span class="keyword">struct</span> <a class="code" href="a00092.html">uip_neighbor_addr</a> *addr)
+<a name="l00086"></a>00086 {
+<a name="l00087"></a>00087 <span class="keywordtype">int</span> i, oldest;
+<a name="l00088"></a>00088 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> oldest_time;
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090 printf(<span class="stringliteral">"Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n"</span>,
+<a name="l00091"></a>00091 addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[0], addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[1], addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[2], addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[3],
+<a name="l00092"></a>00092 addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[4], addr-><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[5]);
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094 <span class="comment">/* Find the first unused entry or the oldest used entry. */</span>
+<a name="l00095"></a>00095 oldest_time = 0;
+<a name="l00096"></a>00096 oldest = 0;
+<a name="l00097"></a>00097 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a>; ++i) {
+<a name="l00098"></a>00098 <span class="keywordflow">if</span>(entries[i].time == <a class="code" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">MAX_TIME</a>) {
+<a name="l00099"></a>00099 oldest = i;
+<a name="l00100"></a>00100 <span class="keywordflow">break</span>;
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(entries[i].ipaddr, addr)) {
+<a name="l00103"></a>00103 oldest = i;
+<a name="l00104"></a>00104 <span class="keywordflow">break</span>;
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106 <span class="keywordflow">if</span>(entries[i].time > oldest_time) {
+<a name="l00107"></a>00107 oldest = i;
+<a name="l00108"></a>00108 oldest_time = entries[i].time;
+<a name="l00109"></a>00109 }
+<a name="l00110"></a>00110 }
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 <span class="comment">/* Use the oldest or first free entry (either pointed to by the</span>
+<a name="l00113"></a>00113 <span class="comment"> "oldest" variable). */</span>
+<a name="l00114"></a>00114 entries[oldest].time = 0;
+<a name="l00115"></a>00115 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(entries[oldest].ipaddr, ipaddr);
+<a name="l00116"></a>00116 memcpy(&entries[oldest].addr, addr, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="a00092.html">uip_neighbor_addr</a>));
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00119"></a>00119 <span class="keyword">static</span> <span class="keyword">struct </span>neighbor_entry *
+<a name="l00120"></a>00120 find_entry(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)
+<a name="l00121"></a>00121 {
+<a name="l00122"></a>00122 <span class="keywordtype">int</span> i;
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">ENTRIES</a>; ++i) {
+<a name="l00125"></a>00125 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(entries[i].ipaddr, ipaddr)) {
+<a name="l00126"></a>00126 <span class="keywordflow">return</span> &entries[i];
+<a name="l00127"></a>00127 }
+<a name="l00128"></a>00128 }
+<a name="l00129"></a>00129 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00132"></a>00132 <span class="keywordtype">void</span>
+<a name="l00133"></a><a class="code" href="a00131.html#1d5ce7047650f3ecee0814dbc8714099">00133</a> <a class="code" href="a00132.html#1d5ce7047650f3ecee0814dbc8714099">uip_neighbor_update</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)
+<a name="l00134"></a>00134 {
+<a name="l00135"></a>00135 <span class="keyword">struct </span>neighbor_entry *e;
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 e = find_entry(ipaddr);
+<a name="l00138"></a>00138 <span class="keywordflow">if</span>(e != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00139"></a>00139 e->time = 0;
+<a name="l00140"></a>00140 }
+<a name="l00141"></a>00141 }
+<a name="l00142"></a>00142 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00143"></a>00143 <span class="keyword">struct </span><a class="code" href="a00092.html">uip_neighbor_addr</a> *
+<a name="l00144"></a><a class="code" href="a00131.html#692d80636342d564422ccd9296ad568d">00144</a> <a class="code" href="a00132.html#692d80636342d564422ccd9296ad568d">uip_neighbor_lookup</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr)
+<a name="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keyword">struct </span>neighbor_entry *e;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 e = find_entry(ipaddr);
+<a name="l00149"></a>00149 <span class="keywordflow">if</span>(e != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+<a name="l00150"></a>00150 <span class="comment">/* printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",</span>
+<a name="l00151"></a>00151 <span class="comment"> e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3],</span>
+<a name="l00152"></a>00152 <span class="comment"> e->addr.addr.addr[4], e->addr.addr.addr[5]);*/</span>
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="keywordflow">return</span> &e->addr;
+<a name="l00155"></a>00155 }
+<a name="l00156"></a>00156 <span class="keywordflow">return</span> <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00198.html b/third_party/uip-1.0/doc/html/a00198.html new file mode 100644 index 0000000..8332e63 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00198.html @@ -0,0 +1,86 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-neighbor.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-neighbor.h</h1><a href="a00132.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2006, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033 <span class="comment"></span>
+<a name="l00034"></a>00034 <span class="comment">/**</span>
+<a name="l00035"></a>00035 <span class="comment"> * \file</span>
+<a name="l00036"></a>00036 <span class="comment"> * Header file for database of link-local neighbors, used by</span>
+<a name="l00037"></a>00037 <span class="comment"> * IPv6 code and to be used by future ARP code.</span>
+<a name="l00038"></a>00038 <span class="comment"> * \author</span>
+<a name="l00039"></a>00039 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00040"></a>00040 <span class="comment"> */</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="preprocessor">#ifndef __UIP_NEIGHBOR_H__</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_NEIGHBOR_H__</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00046"></a>00046
+<a name="l00047"></a><a class="code" href="a00092.html">00047</a> <span class="keyword">struct </span><a class="code" href="a00092.html">uip_neighbor_addr</a> {
+<a name="l00048"></a>00048 <span class="preprocessor">#if UIP_NEIGHBOR_CONF_ADDRTYPE</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span> UIP_NEIGHBOR_CONF_ADDRTYPE <a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>;
+<a name="l00050"></a>00050 <span class="preprocessor">#else</span>
+<a name="l00051"></a><a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">00051</a> <span class="preprocessor"></span> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">addr</a>;
+<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>};
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="a00132.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip_neighbor_init</a>(<span class="keywordtype">void</span>);
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip_neighbor_add</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr, <span class="keyword">struct</span> <a class="code" href="a00092.html">uip_neighbor_addr</a> *<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>);
+<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="a00132.html#1d5ce7047650f3ecee0814dbc8714099">uip_neighbor_update</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr);
+<a name="l00058"></a>00058 <span class="keyword">struct </span><a class="code" href="a00092.html">uip_neighbor_addr</a> *<a class="code" href="a00132.html#692d80636342d564422ccd9296ad568d">uip_neighbor_lookup</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> ipaddr);
+<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="a00132.html#890e822616a6839dfbf51dcb591b8e99">uip_neighbor_periodic</a>(<span class="keywordtype">void</span>);
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 <span class="preprocessor">#endif </span><span class="comment">/* __UIP-NEIGHBOR_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00199.html b/third_party/uip-1.0/doc/html/a00199.html new file mode 100644 index 0000000..cefa82b --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00199.html @@ -0,0 +1,161 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-split.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-split.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: uip-split.c,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="a00134.html">uip-split.h</a>"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "uip-fw.h"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "<a class="code" href="a00137.html">uip_arch.h</a>"</span>
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044
+<a name="l00045"></a>00045 <span class="preprocessor">#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------*/</span>
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>
+<a name="l00049"></a><a class="code" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">00049</a> <a class="code" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a>(<span class="keywordtype">void</span>)
+<a name="l00050"></a>00050 {
+<a name="l00051"></a>00051 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> tcplen, len1, len2;
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="comment">/* We only try to split maximum sized TCP segments. */</span>
+<a name="l00054"></a>00054 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto == <a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a> &&
+<a name="l00055"></a>00055 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> == <a class="code" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">UIP_BUFSIZE</a> - <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>) {
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 tcplen = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>;
+<a name="l00058"></a>00058 <span class="comment">/* Split the segment in two. If the original packet length was</span>
+<a name="l00059"></a>00059 <span class="comment"> odd, we make the second packet one byte larger. */</span>
+<a name="l00060"></a>00060 len1 = len2 = tcplen / 2;
+<a name="l00061"></a>00061 <span class="keywordflow">if</span>(len1 + len2 < tcplen) {
+<a name="l00062"></a>00062 ++len2;
+<a name="l00063"></a>00063 }
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="comment">/* Create the first packet. This is done by altering the length</span>
+<a name="l00066"></a>00066 <span class="comment"> field of the IP header and updating the checksums. */</span>
+<a name="l00067"></a>00067 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = len1 + UIP_TCPIP_HLEN;
+<a name="l00068"></a>00068 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span> <span class="comment">/* For IPv6, the IP length field does not include the IPv6 IP header</span>
+<a name="l00070"></a>00070 <span class="comment"> length. */</span>
+<a name="l00071"></a>00071 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) >> 8);
+<a name="l00072"></a>00072 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) & 0xff);
+<a name="l00073"></a>00073 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00074"></a>00074 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> >> 8;
+<a name="l00075"></a>00075 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> & 0xff;
+<a name="l00076"></a>00076 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="comment">/* Recalculate the TCP checksum. */</span>
+<a name="l00079"></a>00079 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = 0;
+<a name="l00080"></a>00080 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = ~(<a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>());
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span> <span class="comment">/* Recalculate the IP checksum. */</span>
+<a name="l00084"></a>00084 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = 0;
+<a name="l00085"></a>00085 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = ~(<a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="comment">/* Transmit the first packet. */</span>
+<a name="l00089"></a>00089 <span class="comment">/* uip_fw_output();*/</span>
+<a name="l00090"></a>00090 tcpip_output();
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 <span class="comment">/* Now, create the second packet. To do this, it is not enough to</span>
+<a name="l00093"></a>00093 <span class="comment"> just alter the length field, but we must also update the TCP</span>
+<a name="l00094"></a>00094 <span class="comment"> sequence number and point the uip_appdata to a new place in</span>
+<a name="l00095"></a>00095 <span class="comment"> memory. This place is detemined by the length of the first</span>
+<a name="l00096"></a>00096 <span class="comment"> packet (len1). */</span>
+<a name="l00097"></a>00097 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = len2 + UIP_TCPIP_HLEN;
+<a name="l00098"></a>00098 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span> <span class="comment">/* For IPv6, the IP length field does not include the IPv6 IP header</span>
+<a name="l00100"></a>00100 <span class="comment"> length. */</span>
+<a name="l00101"></a>00101 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) >> 8);
+<a name="l00102"></a>00102 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) & 0xff);
+<a name="l00103"></a>00103 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00104"></a>00104 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> >> 8;
+<a name="l00105"></a>00105 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> & 0xff;
+<a name="l00106"></a>00106 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108 <span class="comment">/* uip_appdata += len1;*/</span>
+<a name="l00109"></a>00109 memcpy(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> + len1, len2);
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <a class="code" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno, len1);
+<a name="l00112"></a>00112 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[0];
+<a name="l00113"></a>00113 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[1];
+<a name="l00114"></a>00114 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[2];
+<a name="l00115"></a>00115 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[3];
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="comment">/* Recalculate the TCP checksum. */</span>
+<a name="l00118"></a>00118 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = 0;
+<a name="l00119"></a>00119 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = ~(<a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>());
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span> <span class="comment">/* Recalculate the IP checksum. */</span>
+<a name="l00123"></a>00123 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = 0;
+<a name="l00124"></a>00124 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = ~(<a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l00125"></a>00125 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <span class="comment">/* Transmit the second packet. */</span>
+<a name="l00128"></a>00128 <span class="comment">/* uip_fw_output();*/</span>
+<a name="l00129"></a>00129 tcpip_output();
+<a name="l00130"></a>00130 } <span class="keywordflow">else</span> {
+<a name="l00131"></a>00131 <span class="comment">/* uip_fw_output();*/</span>
+<a name="l00132"></a>00132 tcpip_output();
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 }
+<a name="l00136"></a>00136 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00200.html b/third_party/uip-1.0/doc/html/a00200.html new file mode 100644 index 0000000..2515484 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00200.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip-split.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip-split.h</h1><a href="a00134.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2004, Swedish Institute of Computer Science.</span>
+<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
+<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00009"></a>00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00011"></a>00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00012"></a>00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00013"></a>00013 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00014"></a>00014 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00015"></a>00015 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00018"></a>00018 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00019"></a>00019 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00021"></a>00021 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00023"></a>00023 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00024"></a>00024 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00025"></a>00025 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00026"></a>00026 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00027"></a>00027 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00028"></a>00028 <span class="comment"> *</span>
+<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Author: Adam Dunkels <adam@sics.se></span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span><span class="comment"></span>
+<a name="l00035"></a>00035 <span class="comment">/**</span>
+<a name="l00036"></a>00036 <span class="comment"> * \addtogroup uip</span>
+<a name="l00037"></a>00037 <span class="comment"> * @{</span>
+<a name="l00038"></a>00038 <span class="comment"> */</span>
+<a name="l00039"></a>00039 <span class="comment"></span>
+<a name="l00040"></a>00040 <span class="comment">/**</span>
+<a name="l00041"></a>00041 <span class="comment"> * \defgroup uipsplit uIP TCP throughput booster hack</span>
+<a name="l00042"></a>00042 <span class="comment"> * @{</span>
+<a name="l00043"></a>00043 <span class="comment"> *</span>
+<a name="l00044"></a>00044 <span class="comment"> * The basic uIP TCP implementation only allows each TCP connection to</span>
+<a name="l00045"></a>00045 <span class="comment"> * have a single TCP segment in flight at any given time. Because of</span>
+<a name="l00046"></a>00046 <span class="comment"> * the delayed ACK algorithm employed by most TCP receivers, uIP's</span>
+<a name="l00047"></a>00047 <span class="comment"> * limit on the amount of in-flight TCP segments seriously reduces the</span>
+<a name="l00048"></a>00048 <span class="comment"> * maximum achievable throughput for sending data from uIP.</span>
+<a name="l00049"></a>00049 <span class="comment"> *</span>
+<a name="l00050"></a>00050 <span class="comment"> * The uip-split module is a hack which tries to remedy this</span>
+<a name="l00051"></a>00051 <span class="comment"> * situation. By splitting maximum sized outgoing TCP segments into</span>
+<a name="l00052"></a>00052 <span class="comment"> * two, the delayed ACK algorithm is not invoked at TCP</span>
+<a name="l00053"></a>00053 <span class="comment"> * receivers. This improves the throughput when sending data from uIP</span>
+<a name="l00054"></a>00054 <span class="comment"> * by orders of magnitude.</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * The uip-split module uses the uip-fw module (uIP IP packet</span>
+<a name="l00057"></a>00057 <span class="comment"> * forwarding) for sending packets. Therefore, the uip-fw module must</span>
+<a name="l00058"></a>00058 <span class="comment"> * be set up with the appropriate network interfaces for this module</span>
+<a name="l00059"></a>00059 <span class="comment"> * to work.</span>
+<a name="l00060"></a>00060 <span class="comment"> */</span>
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="comment"></span>
+<a name="l00063"></a>00063 <span class="comment">/**</span>
+<a name="l00064"></a>00064 <span class="comment"> * \file</span>
+<a name="l00065"></a>00065 <span class="comment"> * Module for splitting outbound TCP segments in two to avoid the</span>
+<a name="l00066"></a>00066 <span class="comment"> * delayed ACK throughput degradation.</span>
+<a name="l00067"></a>00067 <span class="comment"> * \author</span>
+<a name="l00068"></a>00068 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00069"></a>00069 <span class="comment"> *</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="preprocessor">#ifndef __UIP_SPLIT_H__</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_SPLIT_H__</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00075"></a>00075 <span class="comment">/**</span>
+<a name="l00076"></a>00076 <span class="comment"> * Handle outgoing packets.</span>
+<a name="l00077"></a>00077 <span class="comment"> *</span>
+<a name="l00078"></a>00078 <span class="comment"> * This function inspects an outgoing packet in the uip_buf buffer and</span>
+<a name="l00079"></a>00079 <span class="comment"> * sends it out using the uip_fw_output() function. If the packet is a</span>
+<a name="l00080"></a>00080 <span class="comment"> * full-sized TCP segment it will be split into two segments and</span>
+<a name="l00081"></a>00081 <span class="comment"> * transmitted separately. This function should be called instead of</span>
+<a name="l00082"></a>00082 <span class="comment"> * the actual device driver output function, or the uip_fw_output()</span>
+<a name="l00083"></a>00083 <span class="comment"> * function.</span>
+<a name="l00084"></a>00084 <span class="comment"> *</span>
+<a name="l00085"></a>00085 <span class="comment"> * The headers of the outgoing packet is assumed to be in the uip_buf</span>
+<a name="l00086"></a>00086 <span class="comment"> * buffer and the payload is assumed to be wherever uip_appdata</span>
+<a name="l00087"></a>00087 <span class="comment"> * points. The length of the outgoing packet is assumed to be in the</span>
+<a name="l00088"></a>00088 <span class="comment"> * uip_len variable.</span>
+<a name="l00089"></a>00089 <span class="comment"> *</span>
+<a name="l00090"></a>00090 <span class="comment"> */</span>
+<a name="l00091"></a>00091 <span class="keywordtype">void</span> <a class="code" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a>(<span class="keywordtype">void</span>);
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_SPLIT_H__ */</span>
+<a name="l00094"></a>00094 <span class="comment"></span>
+<a name="l00095"></a>00095 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00096"></a>00096 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00201.html b/third_party/uip-1.0/doc/html/a00201.html new file mode 100644 index 0000000..010d216 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00201.html @@ -0,0 +1,1922 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip.c</h1><a href="a00135.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a><a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">00001</a> <span class="preprocessor">#define DEBUG_PRINTF(...) </span><span class="comment">/*printf(__VA_ARGS__)*/</span>
+<a name="l00002"></a>00002 <span class="comment"></span>
+<a name="l00003"></a>00003 <span class="comment">/**</span>
+<a name="l00004"></a>00004 <span class="comment"> * \defgroup uip The uIP TCP/IP stack</span>
+<a name="l00005"></a>00005 <span class="comment"> * @{</span>
+<a name="l00006"></a>00006 <span class="comment"> *</span>
+<a name="l00007"></a>00007 <span class="comment"> * uIP is an implementation of the TCP/IP protocol stack intended for</span>
+<a name="l00008"></a>00008 <span class="comment"> * small 8-bit and 16-bit microcontrollers.</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * uIP provides the necessary protocols for Internet communication,</span>
+<a name="l00011"></a>00011 <span class="comment"> * with a very small code footprint and RAM requirements - the uIP</span>
+<a name="l00012"></a>00012 <span class="comment"> * code size is on the order of a few kilobytes and RAM usage is on</span>
+<a name="l00013"></a>00013 <span class="comment"> * the order of a few hundred bytes.</span>
+<a name="l00014"></a>00014 <span class="comment"> */</span>
+<a name="l00015"></a>00015 <span class="comment"></span>
+<a name="l00016"></a>00016 <span class="comment">/**</span>
+<a name="l00017"></a>00017 <span class="comment"> * \file</span>
+<a name="l00018"></a>00018 <span class="comment"> * The uIP TCP/IP stack code.</span>
+<a name="l00019"></a>00019 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00020"></a>00020 <span class="comment"> */</span>
+<a name="l00021"></a>00021
+<a name="l00022"></a>00022 <span class="comment">/*</span>
+<a name="l00023"></a>00023 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
+<a name="l00024"></a>00024 <span class="comment"> * All rights reserved.</span>
+<a name="l00025"></a>00025 <span class="comment"> *</span>
+<a name="l00026"></a>00026 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00027"></a>00027 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00028"></a>00028 <span class="comment"> * are met:</span>
+<a name="l00029"></a>00029 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00030"></a>00030 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00031"></a>00031 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00032"></a>00032 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00033"></a>00033 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00034"></a>00034 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00035"></a>00035 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00036"></a>00036 <span class="comment"> * written permission.</span>
+<a name="l00037"></a>00037 <span class="comment"> *</span>
+<a name="l00038"></a>00038 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00039"></a>00039 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00040"></a>00040 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00041"></a>00041 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00042"></a>00042 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00043"></a>00043 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00044"></a>00044 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00045"></a>00045 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00046"></a>00046 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00047"></a>00047 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00048"></a>00048 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00049"></a>00049 <span class="comment"> *</span>
+<a name="l00050"></a>00050 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00051"></a>00051 <span class="comment"> *</span>
+<a name="l00052"></a>00052 <span class="comment"> * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $</span>
+<a name="l00053"></a>00053 <span class="comment"> *</span>
+<a name="l00054"></a>00054 <span class="comment"> */</span>
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="comment">/*</span>
+<a name="l00057"></a>00057 <span class="comment"> * uIP is a small implementation of the IP, UDP and TCP protocols (as</span>
+<a name="l00058"></a>00058 <span class="comment"> * well as some basic ICMP stuff). The implementation couples the IP,</span>
+<a name="l00059"></a>00059 <span class="comment"> * UDP, TCP and the application layers very tightly. To keep the size</span>
+<a name="l00060"></a>00060 <span class="comment"> * of the compiled code down, this code frequently uses the goto</span>
+<a name="l00061"></a>00061 <span class="comment"> * statement. While it would be possible to break the uip_process()</span>
+<a name="l00062"></a>00062 <span class="comment"> * function into many smaller functions, this would increase the code</span>
+<a name="l00063"></a>00063 <span class="comment"> * size because of the overhead of parameter passing and the fact that</span>
+<a name="l00064"></a>00064 <span class="comment"> * the optimier would not be as efficient.</span>
+<a name="l00065"></a>00065 <span class="comment"> *</span>
+<a name="l00066"></a>00066 <span class="comment"> * The principle is that we have a small buffer, called the uip_buf,</span>
+<a name="l00067"></a>00067 <span class="comment"> * in which the device driver puts an incoming packet. The TCP/IP</span>
+<a name="l00068"></a>00068 <span class="comment"> * stack parses the headers in the packet, and calls the</span>
+<a name="l00069"></a>00069 <span class="comment"> * application. If the remote host has sent data to the application,</span>
+<a name="l00070"></a>00070 <span class="comment"> * this data is present in the uip_buf and the application read the</span>
+<a name="l00071"></a>00071 <span class="comment"> * data from there. It is up to the application to put this data into</span>
+<a name="l00072"></a>00072 <span class="comment"> * a byte stream if needed. The application will not be fed with data</span>
+<a name="l00073"></a>00073 <span class="comment"> * that is out of sequence.</span>
+<a name="l00074"></a>00074 <span class="comment"> *</span>
+<a name="l00075"></a>00075 <span class="comment"> * If the application whishes to send data to the peer, it should put</span>
+<a name="l00076"></a>00076 <span class="comment"> * its data into the uip_buf. The uip_appdata pointer points to the</span>
+<a name="l00077"></a>00077 <span class="comment"> * first available byte. The TCP/IP stack will calculate the</span>
+<a name="l00078"></a>00078 <span class="comment"> * checksums, and fill in the necessary header fields and finally send</span>
+<a name="l00079"></a>00079 <span class="comment"> * the packet back to the peer.</span>
+<a name="l00080"></a>00080 <span class="comment">*/</span>
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="a00137.html">uip_arch.h</a>"</span>
+<a name="l00085"></a>00085
+<a name="l00086"></a>00086 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="a00132.html">uip-neighbor.h</a>"</span>
+<a name="l00088"></a>00088 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090 <span class="preprocessor">#include <string.h></span>
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00093"></a>00093 <span class="comment">/* Variable definitions. */</span>
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <span class="comment">/* The IP address of this host. If it is defined to be fixed (by</span>
+<a name="l00097"></a>00097 <span class="comment"> setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set</span>
+<a name="l00098"></a>00098 <span class="comment"> here. Otherwise, the address */</span>
+<a name="l00099"></a>00099 <span class="preprocessor">#if UIP_FIXEDADDR > 0</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a> =
+<a name="l00101"></a>00101 {<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_IPADDR0 << 8) | UIP_IPADDR1),
+<a name="l00102"></a>00102 <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_IPADDR2 << 8) | UIP_IPADDR3)};
+<a name="l00103"></a>00103 <span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a> =
+<a name="l00104"></a>00104 {<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1),
+<a name="l00105"></a>00105 <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)};
+<a name="l00106"></a>00106 <span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a> =
+<a name="l00107"></a>00107 {<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_NETMASK0 << 8) | UIP_NETMASK1),
+<a name="l00108"></a>00108 <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>((UIP_NETMASK2 << 8) | UIP_NETMASK3)};
+<a name="l00109"></a>00109 <span class="preprocessor">#else</span>
+<a name="l00110"></a><a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">00110</a> <span class="preprocessor"></span><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, <a class="code" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a>, uip_netmask;
+<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* UIP_FIXEDADDR */</span>
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> all_ones_addr =
+<a name="l00114"></a>00114 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span> {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
+<a name="l00116"></a>00116 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00117"></a>00117 {0xffff,0xffff};
+<a name="l00118"></a>00118 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00119"></a>00119 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> all_zeroes_addr =
+<a name="l00120"></a>00120 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span> {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
+<a name="l00122"></a>00122 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00123"></a>00123 {0x0000,0x0000};
+<a name="l00124"></a>00124 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00125"></a>00125
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <span class="preprocessor">#if UIP_FIXEDETHADDR</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a> = {{UIP_ETHADDR0,
+<a name="l00129"></a>00129 UIP_ETHADDR1,
+<a name="l00130"></a>00130 UIP_ETHADDR2,
+<a name="l00131"></a>00131 UIP_ETHADDR3,
+<a name="l00132"></a>00132 UIP_ETHADDR4,
+<a name="l00133"></a>00133 UIP_ETHADDR5}};
+<a name="l00134"></a>00134 <span class="preprocessor">#else</span>
+<a name="l00135"></a><a class="code" href="a00152.html#g499bb98a0b4ae9a98553ede81317606d">00135</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a> = {{0,0,0,0,0,0}};
+<a name="l00136"></a>00136 <span class="preprocessor">#endif</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span>
+<a name="l00138"></a>00138 <span class="preprocessor">#ifndef UIP_CONF_EXTERNAL_BUFFER</span>
+<a name="l00139"></a><a class="code" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">00139</a> <span class="preprocessor"></span><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">UIP_BUFSIZE</a> + 2]; <span class="comment">/* The packet buffer that contains</span>
+<a name="l00140"></a>00140 <span class="comment"> incoming packets. */</span>
+<a name="l00141"></a>00141 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_EXTERNAL_BUFFER */</span>
+<a name="l00142"></a>00142
+<a name="l00143"></a><a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">00143</a> <span class="keywordtype">void</span> *<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>; <span class="comment">/* The uip_appdata pointer points to</span>
+<a name="l00144"></a>00144 <span class="comment"> application data. */</span>
+<a name="l00145"></a><a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">00145</a> <span class="keywordtype">void</span> *<a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a>; <span class="comment">/* The uip_appdata pointer points to</span>
+<a name="l00146"></a>00146 <span class="comment"> the application data which is to</span>
+<a name="l00147"></a>00147 <span class="comment"> be sent. */</span>
+<a name="l00148"></a>00148 <span class="preprocessor">#if UIP_URGDATA > 0</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="keywordtype">void</span> *uip_urgdata; <span class="comment">/* The uip_urgdata pointer points to</span>
+<a name="l00150"></a>00150 <span class="comment"> urgent data (out-of-band data), if</span>
+<a name="l00151"></a>00151 <span class="comment"> present. */</span>
+<a name="l00152"></a>00152 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_urglen, uip_surglen;
+<a name="l00153"></a>00153 <span class="preprocessor">#endif </span><span class="comment">/* UIP_URGDATA > 0 */</span>
+<a name="l00154"></a>00154
+<a name="l00155"></a><a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">00155</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>, <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a>;
+<a name="l00156"></a>00156 <span class="comment">/* The uip_len is either 8 or 16 bits,</span>
+<a name="l00157"></a>00157 <span class="comment"> depending on the maximum packet</span>
+<a name="l00158"></a>00158 <span class="comment"> size. */</span>
+<a name="l00159"></a>00159
+<a name="l00160"></a><a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">00160</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a>; <span class="comment">/* The uip_flags variable is used for</span>
+<a name="l00161"></a>00161 <span class="comment"> communication between the TCP/IP stack</span>
+<a name="l00162"></a>00162 <span class="comment"> and the application program. */</span>
+<a name="l00163"></a><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">00163</a> <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *<a class="code" href="a00088.html">uip_conn</a>; <span class="comment">/* uip_conn always points to the current</span>
+<a name="l00164"></a>00164 <span class="comment"> connection. */</span>
+<a name="l00165"></a>00165
+<a name="l00166"></a><a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">00166</a> <span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> <a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[<a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>];
+<a name="l00167"></a>00167 <span class="comment">/* The uip_conns array holds all TCP</span>
+<a name="l00168"></a>00168 <span class="comment"> connections. */</span>
+<a name="l00169"></a><a class="code" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">00169</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip_listenports</a>[<a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>];
+<a name="l00170"></a>00170 <span class="comment">/* The uip_listenports list all currently</span>
+<a name="l00171"></a>00171 <span class="comment"> listning ports. */</span>
+<a name="l00172"></a>00172 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00173"></a><a class="code" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">00173</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *<a class="code" href="a00095.html">uip_udp_conn</a>;
+<a name="l00174"></a><a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">00174</a> <span class="keyword">struct </span><a class="code" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a> <a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[<a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>];
+<a name="l00175"></a>00175 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipid; <span class="comment">/* Ths ipid variable is an increasing</span>
+<a name="l00178"></a>00178 <span class="comment"> number that is used for the IP ID</span>
+<a name="l00179"></a>00179 <span class="comment"> field. */</span>
+<a name="l00180"></a>00180
+<a name="l00181"></a><a class="code" href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68">00181</a> <span class="keywordtype">void</span> <a class="code" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <span class="keywordtype">id</span>) { ipid = id; }
+<a name="l00182"></a>00182
+<a name="l00183"></a>00183 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> iss[4]; <span class="comment">/* The iss variable is used for the TCP</span>
+<a name="l00184"></a>00184 <span class="comment"> initial sequence number. */</span>
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> lastport; <span class="comment">/* Keeps track of the last port used for</span>
+<a name="l00188"></a>00188 <span class="comment"> a new connection. */</span>
+<a name="l00189"></a>00189 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 <span class="comment">/* Temporary variables. */</span>
+<a name="l00192"></a><a class="code" href="a00150.html#g2a0cf5d86c58fab216414ce59bf1fea1">00192</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[4];
+<a name="l00193"></a>00193 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> c, opt;
+<a name="l00194"></a>00194 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> tmp16;
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 <span class="comment">/* Structures and definitions. */</span>
+<a name="l00197"></a><a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">00197</a> <span class="preprocessor">#define TCP_FIN 0x01</span>
+<a name="l00198"></a><a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">00198</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_SYN 0x02</span>
+<a name="l00199"></a><a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">00199</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_RST 0x04</span>
+<a name="l00200"></a><a class="code" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">00200</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_PSH 0x08</span>
+<a name="l00201"></a><a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">00201</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_ACK 0x10</span>
+<a name="l00202"></a><a class="code" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">00202</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_URG 0x20</span>
+<a name="l00203"></a><a class="code" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">00203</a> <span class="preprocessor"></span><span class="preprocessor">#define TCP_CTL 0x3f</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span>
+<a name="l00205"></a><a class="code" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">00205</a> <span class="preprocessor">#define TCP_OPT_END 0 </span><span class="comment">/* End of TCP options list */</span>
+<a name="l00206"></a><a class="code" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">00206</a> <span class="preprocessor">#define TCP_OPT_NOOP 1 </span><span class="comment">/* "No-operation" TCP option */</span>
+<a name="l00207"></a><a class="code" href="a00150.html#g691688604655ea8943d15f14c60027d8">00207</a> <span class="preprocessor">#define TCP_OPT_MSS 2 </span><span class="comment">/* Maximum segment size TCP option */</span>
+<a name="l00208"></a>00208
+<a name="l00209"></a><a class="code" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">00209</a> <span class="preprocessor">#define TCP_OPT_MSS_LEN 4 </span><span class="comment">/* Length of TCP MSS option. */</span>
+<a name="l00210"></a>00210
+<a name="l00211"></a><a class="code" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">00211</a> <span class="preprocessor">#define ICMP_ECHO_REPLY 0</span>
+<a name="l00212"></a><a class="code" href="a00150.html#gd58231410d58e34b455328b888a9e73c">00212</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMP_ECHO 8</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span>
+<a name="l00214"></a><a class="code" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">00214</a> <span class="preprocessor">#define ICMP6_ECHO_REPLY 129</span>
+<a name="l00215"></a><a class="code" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">00215</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_ECHO 128</span>
+<a name="l00216"></a><a class="code" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">00216</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_NEIGHBOR_SOLICITATION 135</span>
+<a name="l00217"></a><a class="code" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">00217</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_NEIGHBOR_ADVERTISEMENT 136</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>
+<a name="l00219"></a><a class="code" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">00219</a> <span class="preprocessor">#define ICMP6_FLAG_S (1 << 6)</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>
+<a name="l00221"></a><a class="code" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">00221</a> <span class="preprocessor">#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1</span>
+<a name="l00222"></a><a class="code" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">00222</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 <span class="comment">/* Macros. */</span>
+<a name="l00226"></a><a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">00226</a> <span class="preprocessor">#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])</span>
+<a name="l00227"></a><a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">00227</a> <span class="preprocessor"></span><span class="preprocessor">#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])</span>
+<a name="l00228"></a><a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">00228</a> <span class="preprocessor"></span><span class="preprocessor">#define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])</span>
+<a name="l00229"></a><a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">00229</a> <span class="preprocessor"></span><span class="preprocessor">#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span>
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 <span class="preprocessor">#if UIP_STATISTICS == 1</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00093.html">uip_stats</a> <a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>;
+<a name="l00234"></a>00234 <span class="preprocessor">#define UIP_STAT(s) s</span>
+<a name="l00235"></a>00235 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00236"></a><a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">00236</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_STAT(s)</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_STATISTICS == 1 */</span>
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239 <span class="preprocessor">#if UIP_LOGGING == 1</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span>
+<a name="l00241"></a>00241 <span class="keywordtype">void</span> <a class="code" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uip_log</a>(<span class="keywordtype">char</span> *msg);
+<a name="l00242"></a>00242 <span class="preprocessor">#define UIP_LOG(m) uip_log(m)</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00244"></a><a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">00244</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_LOG(m)</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_LOGGING == 1 */</span>
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247 <span class="preprocessor">#if ! UIP_ARCH_ADD32</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="keywordtype">void</span>
+<a name="l00249"></a><a class="code" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">00249</a> <a class="code" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a>(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)
+<a name="l00250"></a>00250 {
+<a name="l00251"></a>00251 uip_acc32[3] = op32[3] + (op16 & 0xff);
+<a name="l00252"></a>00252 uip_acc32[2] = op32[2] + (op16 >> 8);
+<a name="l00253"></a>00253 uip_acc32[1] = op32[1];
+<a name="l00254"></a>00254 uip_acc32[0] = op32[0];
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordflow">if</span>(uip_acc32[2] < (op16 >> 8)) {
+<a name="l00257"></a>00257 ++uip_acc32[1];
+<a name="l00258"></a>00258 <span class="keywordflow">if</span>(uip_acc32[1] == 0) {
+<a name="l00259"></a>00259 ++uip_acc32[0];
+<a name="l00260"></a>00260 }
+<a name="l00261"></a>00261 }
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263
+<a name="l00264"></a>00264 <span class="keywordflow">if</span>(uip_acc32[3] < (op16 & 0xff)) {
+<a name="l00265"></a>00265 ++uip_acc32[2];
+<a name="l00266"></a>00266 <span class="keywordflow">if</span>(uip_acc32[2] == 0) {
+<a name="l00267"></a>00267 ++uip_acc32[1];
+<a name="l00268"></a>00268 <span class="keywordflow">if</span>(uip_acc32[1] == 0) {
+<a name="l00269"></a>00269 ++uip_acc32[0];
+<a name="l00270"></a>00270 }
+<a name="l00271"></a>00271 }
+<a name="l00272"></a>00272 }
+<a name="l00273"></a>00273 }
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ARCH_ADD32 */</span>
+<a name="l00276"></a>00276
+<a name="l00277"></a>00277 <span class="preprocessor">#if ! UIP_ARCH_CHKSUM</span>
+<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00279"></a>00279 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00280"></a>00280 chksum(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> sum, <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *data, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)
+<a name="l00281"></a>00281 {
+<a name="l00282"></a>00282 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> t;
+<a name="l00283"></a>00283 <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *dataptr;
+<a name="l00284"></a>00284 <span class="keyword">const</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *last_byte;
+<a name="l00285"></a>00285
+<a name="l00286"></a>00286 dataptr = data;
+<a name="l00287"></a>00287 last_byte = data + len - 1;
+<a name="l00288"></a>00288
+<a name="l00289"></a>00289 <span class="keywordflow">while</span>(dataptr < last_byte) { <span class="comment">/* At least two more bytes */</span>
+<a name="l00290"></a>00290 t = (dataptr[0] << 8) + dataptr[1];
+<a name="l00291"></a>00291 sum += t;
+<a name="l00292"></a>00292 <span class="keywordflow">if</span>(sum < t) {
+<a name="l00293"></a>00293 sum++; <span class="comment">/* carry */</span>
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295 dataptr += 2;
+<a name="l00296"></a>00296 }
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 <span class="keywordflow">if</span>(dataptr == last_byte) {
+<a name="l00299"></a>00299 t = (dataptr[0] << 8) + 0;
+<a name="l00300"></a>00300 sum += t;
+<a name="l00301"></a>00301 <span class="keywordflow">if</span>(sum < t) {
+<a name="l00302"></a>00302 sum++; <span class="comment">/* carry */</span>
+<a name="l00303"></a>00303 }
+<a name="l00304"></a>00304 }
+<a name="l00305"></a>00305
+<a name="l00306"></a>00306 <span class="comment">/* Return sum in host byte order. */</span>
+<a name="l00307"></a>00307 <span class="keywordflow">return</span> sum;
+<a name="l00308"></a>00308 }
+<a name="l00309"></a>00309 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00310"></a>00310 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00311"></a><a class="code" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">00311</a> <a class="code" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *data, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)
+<a name="l00312"></a>00312 {
+<a name="l00313"></a>00313 <span class="keywordflow">return</span> <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(chksum(0, (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)data, len));
+<a name="l00314"></a>00314 }
+<a name="l00315"></a>00315 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00316"></a>00316 <span class="preprocessor">#ifndef UIP_ARCH_IPCHKSUM</span>
+<a name="l00317"></a>00317 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00318"></a><a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">00318</a> <a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>(<span class="keywordtype">void</span>)
+<a name="l00319"></a>00319 {
+<a name="l00320"></a>00320 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> sum;
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 sum = chksum(0, &uip_buf[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>);
+<a name="l00323"></a>00323 <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"uip_ipchksum: sum 0x%04x\n"</span>, sum);
+<a name="l00324"></a>00324 <span class="keywordflow">return</span> (sum == 0) ? 0xffff : <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(sum);
+<a name="l00325"></a>00325 }
+<a name="l00326"></a>00326 <span class="preprocessor">#endif</span>
+<a name="l00327"></a>00327 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00328"></a>00328 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00329"></a>00329 upper_layer_chksum(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> proto)
+<a name="l00330"></a>00330 {
+<a name="l00331"></a>00331 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> upper_layer_len;
+<a name="l00332"></a>00332 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> sum;
+<a name="l00333"></a>00333
+<a name="l00334"></a>00334 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00335"></a>00335 <span class="preprocessor"></span> upper_layer_len = (((<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0]) << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1]);
+<a name="l00336"></a>00336 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00337"></a>00337 upper_layer_len = (((<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0]) << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1]) - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>;
+<a name="l00338"></a>00338 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00339"></a>00339
+<a name="l00340"></a>00340 <span class="comment">/* First sum pseudoheader. */</span>
+<a name="l00341"></a>00341
+<a name="l00342"></a>00342 <span class="comment">/* IP protocol and length fields. This addition cannot carry. */</span>
+<a name="l00343"></a>00343 sum = upper_layer_len + proto;
+<a name="l00344"></a>00344 <span class="comment">/* Sum IP source and destination addresses. */</span>
+<a name="l00345"></a>00345 sum = chksum(sum, (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)&<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr[0], 2 * <span class="keyword">sizeof</span>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a>));
+<a name="l00346"></a>00346
+<a name="l00347"></a>00347 <span class="comment">/* Sum TCP header and data. */</span>
+<a name="l00348"></a>00348 sum = chksum(sum, &uip_buf[<a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>],
+<a name="l00349"></a>00349 upper_layer_len);
+<a name="l00350"></a>00350
+<a name="l00351"></a>00351 <span class="keywordflow">return</span> (sum == 0) ? 0xffff : <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(sum);
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00354"></a>00354 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00356"></a>00356 uip_icmp6chksum(<span class="keywordtype">void</span>)
+<a name="l00357"></a>00357 {
+<a name="l00358"></a>00358 <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">UIP_PROTO_ICMP6</a>);
+<a name="l00359"></a>00359
+<a name="l00360"></a>00360 }
+<a name="l00361"></a>00361 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00362"></a>00362 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00363"></a>00363 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00364"></a><a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">00364</a> <a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>(<span class="keywordtype">void</span>)
+<a name="l00365"></a>00365 {
+<a name="l00366"></a>00366 <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a>);
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00369"></a>00369 <span class="preprocessor">#if UIP_UDP_CHECKSUMS</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l00371"></a>00371 <a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>(<span class="keywordtype">void</span>)
+<a name="l00372"></a>00372 {
+<a name="l00373"></a>00373 <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a>);
+<a name="l00374"></a>00374 }
+<a name="l00375"></a>00375 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP_CHECKSUMS */</span>
+<a name="l00376"></a>00376 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ARCH_CHKSUM */</span>
+<a name="l00377"></a>00377 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00378"></a>00378 <span class="keywordtype">void</span>
+<a name="l00379"></a><a class="code" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">00379</a> <a class="code" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a>(<span class="keywordtype">void</span>)
+<a name="l00380"></a>00380 {
+<a name="l00381"></a>00381 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>; ++c) {
+<a name="l00382"></a>00382 uip_listenports[c] = 0;
+<a name="l00383"></a>00383 }
+<a name="l00384"></a>00384 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {
+<a name="l00385"></a>00385 <a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c].tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l00386"></a>00386 }
+<a name="l00387"></a>00387 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span> lastport = 1024;
+<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span> <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; ++c) {
+<a name="l00393"></a>00393 <a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[c].lport = 0;
+<a name="l00394"></a>00394 }
+<a name="l00395"></a>00395 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00396"></a>00396
+<a name="l00397"></a>00397
+<a name="l00398"></a>00398 <span class="comment">/* IPv4 initialization. */</span>
+<a name="l00399"></a>00399 <span class="preprocessor">#if UIP_FIXEDADDR == 0</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span> <span class="comment">/* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/</span>
+<a name="l00401"></a>00401 <span class="preprocessor">#endif </span><span class="comment">/* UIP_FIXEDADDR */</span>
+<a name="l00402"></a>00402
+<a name="l00403"></a>00403 }
+<a name="l00404"></a>00404 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00405"></a>00405 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *
+<a name="l00407"></a><a class="code" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">00407</a> <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *<a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>)
+<a name="l00408"></a>00408 {
+<a name="l00409"></a>00409 <span class="keyword">register</span> <span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *conn, *cconn;
+<a name="l00410"></a>00410
+<a name="l00411"></a>00411 <span class="comment">/* Find an unused local port. */</span>
+<a name="l00412"></a>00412 again:
+<a name="l00413"></a>00413 ++lastport;
+<a name="l00414"></a>00414
+<a name="l00415"></a>00415 <span class="keywordflow">if</span>(lastport >= 32000) {
+<a name="l00416"></a>00416 lastport = 4096;
+<a name="l00417"></a>00417 }
+<a name="l00418"></a>00418
+<a name="l00419"></a>00419 <span class="comment">/* Check if this port is already in use, and if so try to find</span>
+<a name="l00420"></a>00420 <span class="comment"> another one. */</span>
+<a name="l00421"></a>00421 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {
+<a name="l00422"></a>00422 conn = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];
+<a name="l00423"></a>00423 <span class="keywordflow">if</span>(conn-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> != <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a> &&
+<a name="l00424"></a>00424 conn-><a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a> == <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(lastport)) {
+<a name="l00425"></a>00425 <span class="keywordflow">goto</span> again;
+<a name="l00426"></a>00426 }
+<a name="l00427"></a>00427 }
+<a name="l00428"></a>00428
+<a name="l00429"></a>00429 conn = 0;
+<a name="l00430"></a>00430 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {
+<a name="l00431"></a>00431 cconn = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];
+<a name="l00432"></a>00432 <span class="keywordflow">if</span>(cconn->tcpstateflags == <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>) {
+<a name="l00433"></a>00433 conn = cconn;
+<a name="l00434"></a>00434 <span class="keywordflow">break</span>;
+<a name="l00435"></a>00435 }
+<a name="l00436"></a>00436 <span class="keywordflow">if</span>(cconn->tcpstateflags == <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>) {
+<a name="l00437"></a>00437 <span class="keywordflow">if</span>(conn == 0 ||
+<a name="l00438"></a>00438 cconn->timer > conn->timer) {
+<a name="l00439"></a>00439 conn = cconn;
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441 }
+<a name="l00442"></a>00442 }
+<a name="l00443"></a>00443
+<a name="l00444"></a>00444 <span class="keywordflow">if</span>(conn == 0) {
+<a name="l00445"></a>00445 <span class="keywordflow">return</span> 0;
+<a name="l00446"></a>00446 }
+<a name="l00447"></a>00447
+<a name="l00448"></a>00448 conn-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> = <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a>;
+<a name="l00449"></a>00449
+<a name="l00450"></a>00450 conn->snd_nxt[0] = iss[0];
+<a name="l00451"></a>00451 conn->snd_nxt[1] = iss[1];
+<a name="l00452"></a>00452 conn->snd_nxt[2] = iss[2];
+<a name="l00453"></a>00453 conn->snd_nxt[3] = iss[3];
+<a name="l00454"></a>00454
+<a name="l00455"></a>00455 conn->initialmss = conn->mss = <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>;
+<a name="l00456"></a>00456
+<a name="l00457"></a>00457 conn->len = 1; <span class="comment">/* TCP length of the SYN is one. */</span>
+<a name="l00458"></a>00458 conn->nrtx = 0;
+<a name="l00459"></a>00459 conn->timer = 1; <span class="comment">/* Send the SYN next time around. */</span>
+<a name="l00460"></a>00460 conn->rto = <a class="code" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a>;
+<a name="l00461"></a>00461 conn->sa = 0;
+<a name="l00462"></a>00462 conn->sv = 16; <span class="comment">/* Initial value of the RTT variance. */</span>
+<a name="l00463"></a>00463 conn->lport = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(lastport);
+<a name="l00464"></a>00464 conn->rport = <a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>;
+<a name="l00465"></a>00465 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(&conn->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 >= 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 < <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 < <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 = &<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-><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->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->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>(&conn->ripaddr, <a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>);
+<a name="l00510"></a>00510 }
+<a name="l00511"></a>00511 conn->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 < <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 < <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 && !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, &<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->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>->srcipaddr[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->srcipaddr[0] &&
+<a name="l00575"></a>00575 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->srcipaddr[1] &&
+<a name="l00576"></a>00576 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->destipaddr[0] &&
+<a name="l00577"></a>00577 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->destipaddr[1] &&
+<a name="l00578"></a>00578 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipid[0] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->ipid[0] &&
+<a name="l00579"></a>00579 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipid[1] == <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>->ipid[1]) {
+<a name="l00580"></a>00580
+<a name="l00581"></a>00581 len = (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] - (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vhl & 0x0f) * 4;
+<a name="l00582"></a>00582 offset = (((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[0] & 0x3f) << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[1]) * 8;
+<a name="l00583"></a>00583
+<a name="l00584"></a>00584 <span class="comment">/* If the offset or the offset + fragment length overflows the</span>
+<a name="l00585"></a>00585 <span class="comment"> reassembly buffer, we discard the entire packet. */</span>
+<a name="l00586"></a>00586 <span class="keywordflow">if</span>(offset > UIP_REASS_BUFSIZE ||
+<a name="l00587"></a>00587 offset + len > UIP_REASS_BUFSIZE) {
+<a name="l00588"></a>00588 uip_reasstmr = 0;
+<a name="l00589"></a>00589 <span class="keywordflow">goto</span> nullreturn;
+<a name="l00590"></a>00590 }
+<a name="l00591"></a>00591
+<a name="l00592"></a>00592 <span class="comment">/* Copy the fragment into the reassembly buffer, at the right</span>
+<a name="l00593"></a>00593 <span class="comment"> offset. */</span>
+<a name="l00594"></a>00594 memcpy(&uip_reassbuf[<a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a> + offset],
+<a name="l00595"></a>00595 (<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a> + (<span class="keywordtype">int</span>)((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vhl & 0x0f) * 4),
+<a name="l00596"></a>00596 len);
+<a name="l00597"></a>00597
+<a name="l00598"></a>00598 <span class="comment">/* Update the bitmap. */</span>
+<a name="l00599"></a>00599 <span class="keywordflow">if</span>(offset / (8 * 8) == (offset + len) / (8 * 8)) {
+<a name="l00600"></a>00600 <span class="comment">/* If the two endpoints are in the same byte, we only update</span>
+<a name="l00601"></a>00601 <span class="comment"> that byte. */</span>
+<a name="l00602"></a>00602
+<a name="l00603"></a>00603 uip_reassbitmap[offset / (8 * 8)] |=
+<a name="l00604"></a>00604 bitmap_bits[(offset / 8 ) & 7] &
+<a name="l00605"></a>00605 ~bitmap_bits[((offset + len) / 8 ) & 7];
+<a name="l00606"></a>00606 } <span class="keywordflow">else</span> {
+<a name="l00607"></a>00607 <span class="comment">/* If the two endpoints are in different bytes, we update the</span>
+<a name="l00608"></a>00608 <span class="comment"> bytes in the endpoints and fill the stuff inbetween with</span>
+<a name="l00609"></a>00609 <span class="comment"> 0xff. */</span>
+<a name="l00610"></a>00610 uip_reassbitmap[offset / (8 * 8)] |=
+<a name="l00611"></a>00611 bitmap_bits[(offset / 8 ) & 7];
+<a name="l00612"></a>00612 <span class="keywordflow">for</span>(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
+<a name="l00613"></a>00613 uip_reassbitmap[i] = 0xff;
+<a name="l00614"></a>00614 }
+<a name="l00615"></a>00615 uip_reassbitmap[(offset + len) / (8 * 8)] |=
+<a name="l00616"></a>00616 ~bitmap_bits[((offset + len) / 8 ) & 7];
+<a name="l00617"></a>00617 }
+<a name="l00618"></a>00618
+<a name="l00619"></a>00619 <span class="comment">/* If this fragment has the More Fragments flag set to zero, we</span>
+<a name="l00620"></a>00620 <span class="comment"> know that this is the last fragment, so we can calculate the</span>
+<a name="l00621"></a>00621 <span class="comment"> size of the entire packet. We also set the</span>
+<a name="l00622"></a>00622 <span class="comment"> IP_REASS_FLAG_LASTFRAG flag to indicate that we have received</span>
+<a name="l00623"></a>00623 <span class="comment"> the final fragment. */</span>
+<a name="l00624"></a>00624
+<a name="l00625"></a>00625 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[0] & IP_MF) == 0) {
+<a name="l00626"></a>00626 uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
+<a name="l00627"></a>00627 uip_reasslen = offset + len;
+<a name="l00628"></a>00628 }
+<a name="l00629"></a>00629
+<a name="l00630"></a>00630 <span class="comment">/* Finally, we check if we have a full packet in the buffer. We do</span>
+<a name="l00631"></a>00631 <span class="comment"> this by checking if we have the last fragment and if all bits</span>
+<a name="l00632"></a>00632 <span class="comment"> in the bitmap are set. */</span>
+<a name="l00633"></a>00633 <span class="keywordflow">if</span>(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
+<a name="l00634"></a>00634 <span class="comment">/* Check all bytes up to and including all but the last byte in</span>
+<a name="l00635"></a>00635 <span class="comment"> the bitmap. */</span>
+<a name="l00636"></a>00636 <span class="keywordflow">for</span>(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
+<a name="l00637"></a>00637 <span class="keywordflow">if</span>(uip_reassbitmap[i] != 0xff) {
+<a name="l00638"></a>00638 <span class="keywordflow">goto</span> nullreturn;
+<a name="l00639"></a>00639 }
+<a name="l00640"></a>00640 }
+<a name="l00641"></a>00641 <span class="comment">/* Check the last byte in the bitmap. It should contain just the</span>
+<a name="l00642"></a>00642 <span class="comment"> right amount of bits. */</span>
+<a name="l00643"></a>00643 <span class="keywordflow">if</span>(uip_reassbitmap[uip_reasslen / (8 * 8)] !=
+<a name="l00644"></a>00644 (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>)~bitmap_bits[uip_reasslen / 8 & 7]) {
+<a name="l00645"></a>00645 <span class="keywordflow">goto</span> nullreturn;
+<a name="l00646"></a>00646 }
+<a name="l00647"></a>00647
+<a name="l00648"></a>00648 <span class="comment">/* If we have come this far, we have a full packet in the</span>
+<a name="l00649"></a>00649 <span class="comment"> buffer, so we allocate a pbuf and copy the packet into it. We</span>
+<a name="l00650"></a>00650 <span class="comment"> also reset the timer. */</span>
+<a name="l00651"></a>00651 uip_reasstmr = 0;
+<a name="l00652"></a>00652 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>, <a class="code" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">FBUF</a>, uip_reasslen);
+<a name="l00653"></a>00653
+<a name="l00654"></a>00654 <span class="comment">/* Pretend to be a "normal" (i.e., not fragmented) IP packet</span>
+<a name="l00655"></a>00655 <span class="comment"> from now on. */</span>
+<a name="l00656"></a>00656 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[1] = 0;
+<a name="l00657"></a>00657 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = uip_reasslen >> 8;
+<a name="l00658"></a>00658 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = uip_reasslen & 0xff;
+<a name="l00659"></a>00659 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = 0;
+<a name="l00660"></a>00660 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = ~(<a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l00661"></a>00661
+<a name="l00662"></a>00662 <span class="keywordflow">return</span> uip_reasslen;
+<a name="l00663"></a>00663 }
+<a name="l00664"></a>00664 }
+<a name="l00665"></a>00665
+<a name="l00666"></a>00666 nullreturn:
+<a name="l00667"></a>00667 <span class="keywordflow">return</span> 0;
+<a name="l00668"></a>00668 }
+<a name="l00669"></a>00669 <span class="preprocessor">#endif </span><span class="comment">/* UIP_REASSEMBLY */</span>
+<a name="l00670"></a>00670 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00671"></a>00671 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00672"></a>00672 uip_add_rcv_nxt(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> n)
+<a name="l00673"></a>00673 {
+<a name="l00674"></a>00674 <a class="code" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a>(<a class="code" href="a00088.html">uip_conn</a>->rcv_nxt, n);
+<a name="l00675"></a>00675 <a class="code" href="a00088.html">uip_conn</a>->rcv_nxt[0] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[0];
+<a name="l00676"></a>00676 <a class="code" href="a00088.html">uip_conn</a>->rcv_nxt[1] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[1];
+<a name="l00677"></a>00677 <a class="code" href="a00088.html">uip_conn</a>->rcv_nxt[2] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[2];
+<a name="l00678"></a>00678 <a class="code" href="a00088.html">uip_conn</a>->rcv_nxt[3] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[3];
+<a name="l00679"></a>00679 }
+<a name="l00680"></a>00680 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00681"></a>00681 <span class="keywordtype">void</span>
+<a name="l00682"></a><a class="code" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">00682</a> <a class="code" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip_process</a>(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flag)
+<a name="l00683"></a>00683 {
+<a name="l00684"></a>00684 <span class="keyword">register</span> <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *uip_connr = <a class="code" href="a00088.html">uip_conn</a>;
+<a name="l00685"></a>00685
+<a name="l00686"></a>00686 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00687"></a>00687 <span class="preprocessor"></span> <span class="keywordflow">if</span>(flag == <a class="code" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">UIP_UDP_SEND_CONN</a>) {
+<a name="l00688"></a>00688 <span class="keywordflow">goto</span> udp_send;
+<a name="l00689"></a>00689 }
+<a name="l00690"></a>00690 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00691"></a>00691
+<a name="l00692"></a>00692 <a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a> = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>];
+<a name="l00693"></a>00693
+<a name="l00694"></a>00694 <span class="comment">/* Check if we were invoked because of a poll request for a</span>
+<a name="l00695"></a>00695 <span class="comment"> particular connection. */</span>
+<a name="l00696"></a>00696 <span class="keywordflow">if</span>(flag == <a class="code" href="a00150.html#gd605357e29affb0d3104294c90f09905">UIP_POLL_REQUEST</a>) {
+<a name="l00697"></a>00697 <span class="keywordflow">if</span>((uip_connr-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>) == <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a> &&
+<a name="l00698"></a>00698 !<a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(uip_connr)) {
+<a name="l00699"></a>00699 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">UIP_POLL</a>;
+<a name="l00700"></a>00700 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l00701"></a>00701 <span class="keywordflow">goto</span> appsend;
+<a name="l00702"></a>00702 }
+<a name="l00703"></a>00703 <span class="keywordflow">goto</span> drop;
+<a name="l00704"></a>00704
+<a name="l00705"></a>00705 <span class="comment">/* Check if we were invoked because of the perodic timer fireing. */</span>
+<a name="l00706"></a>00706 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(flag == <a class="code" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">UIP_TIMER</a>) {
+<a name="l00707"></a>00707 <span class="preprocessor">#if UIP_REASSEMBLY</span>
+<a name="l00708"></a>00708 <span class="preprocessor"></span> <span class="keywordflow">if</span>(uip_reasstmr != 0) {
+<a name="l00709"></a>00709 --uip_reasstmr;
+<a name="l00710"></a>00710 }
+<a name="l00711"></a>00711 <span class="preprocessor">#endif </span><span class="comment">/* UIP_REASSEMBLY */</span>
+<a name="l00712"></a>00712 <span class="comment">/* Increase the initial sequence number. */</span>
+<a name="l00713"></a>00713 <span class="keywordflow">if</span>(++iss[3] == 0) {
+<a name="l00714"></a>00714 <span class="keywordflow">if</span>(++iss[2] == 0) {
+<a name="l00715"></a>00715 <span class="keywordflow">if</span>(++iss[1] == 0) {
+<a name="l00716"></a>00716 ++iss[0];
+<a name="l00717"></a>00717 }
+<a name="l00718"></a>00718 }
+<a name="l00719"></a>00719 }
+<a name="l00720"></a>00720
+<a name="l00721"></a>00721 <span class="comment">/* Reset the length variables. */</span>
+<a name="l00722"></a>00722 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = 0;
+<a name="l00723"></a>00723 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l00724"></a>00724
+<a name="l00725"></a>00725 <span class="comment">/* Check if the connection is in a state in which we simply wait</span>
+<a name="l00726"></a>00726 <span class="comment"> for the connection to time out. If so, we increase the</span>
+<a name="l00727"></a>00727 <span class="comment"> connection's timer and remove the connection if it times</span>
+<a name="l00728"></a>00728 <span class="comment"> out. */</span>
+<a name="l00729"></a>00729 <span class="keywordflow">if</span>(uip_connr-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> == <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a> ||
+<a name="l00730"></a>00730 uip_connr-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> == <a class="code" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">UIP_FIN_WAIT_2</a>) {
+<a name="l00731"></a>00731 ++(uip_connr-><a class="code" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">timer</a>);
+<a name="l00732"></a>00732 <span class="keywordflow">if</span>(uip_connr-><a class="code" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">timer</a> == <a class="code" href="a00153.html#g2bc3b489923793759526a3181eb667fa">UIP_TIME_WAIT_TIMEOUT</a>) {
+<a name="l00733"></a>00733 uip_connr-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l00734"></a>00734 }
+<a name="l00735"></a>00735 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(uip_connr-><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> != <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>) {
+<a name="l00736"></a>00736 <span class="comment">/* If the connection has outstanding data, we increase the</span>
+<a name="l00737"></a>00737 <span class="comment"> connection's timer and see if it has reached the RTO value</span>
+<a name="l00738"></a>00738 <span class="comment"> in which case we retransmit. */</span>
+<a name="l00739"></a>00739 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(uip_connr)) {
+<a name="l00740"></a>00740 <span class="keywordflow">if</span>(uip_connr->timer-- == 0) {
+<a name="l00741"></a>00741 <span class="keywordflow">if</span>(uip_connr->nrtx == <a class="code" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">UIP_MAXRTX</a> ||
+<a name="l00742"></a>00742 ((uip_connr->tcpstateflags == <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a> ||
+<a name="l00743"></a>00743 uip_connr->tcpstateflags == <a class="code" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a>) &&
+<a name="l00744"></a>00744 uip_connr->nrtx == <a class="code" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">UIP_MAXSYNRTX</a>)) {
+<a name="l00745"></a>00745 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l00746"></a>00746
+<a name="l00747"></a>00747 <span class="comment">/* We call UIP_APPCALL() with uip_flags set to</span>
+<a name="l00748"></a>00748 <span class="comment"> UIP_TIMEDOUT to inform the application that the</span>
+<a name="l00749"></a>00749 <span class="comment"> connection has timed out. */</span>
+<a name="l00750"></a>00750 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">UIP_TIMEDOUT</a>;
+<a name="l00751"></a>00751 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l00752"></a>00752
+<a name="l00753"></a>00753 <span class="comment">/* We also send a reset packet to the remote host. */</span>
+<a name="l00754"></a>00754 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l00755"></a>00755 <span class="keywordflow">goto</span> tcp_send_nodata;
+<a name="l00756"></a>00756 }
+<a name="l00757"></a>00757
+<a name="l00758"></a>00758 <span class="comment">/* Exponential backoff. */</span>
+<a name="l00759"></a>00759 uip_connr->timer = <a class="code" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a> << (uip_connr->nrtx > 4?
+<a name="l00760"></a>00760 4:
+<a name="l00761"></a>00761 uip_connr->nrtx);
+<a name="l00762"></a>00762 ++(uip_connr->nrtx);
+<a name="l00763"></a>00763
+<a name="l00764"></a>00764 <span class="comment">/* Ok, so we need to retransmit. We do this differently</span>
+<a name="l00765"></a>00765 <span class="comment"> depending on which state we are in. In ESTABLISHED, we</span>
+<a name="l00766"></a>00766 <span class="comment"> call upon the application so that it may prepare the</span>
+<a name="l00767"></a>00767 <span class="comment"> data for the retransmit. In SYN_RCVD, we resend the</span>
+<a name="l00768"></a>00768 <span class="comment"> SYNACK that we sent earlier and in LAST_ACK we have to</span>
+<a name="l00769"></a>00769 <span class="comment"> retransmit our FINACK. */</span>
+<a name="l00770"></a>00770 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">rexmit</a>);
+<a name="l00771"></a>00771 <span class="keywordflow">switch</span>(uip_connr->tcpstateflags & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>) {
+<a name="l00772"></a>00772 <span class="keywordflow">case</span> <a class="code" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a>:
+<a name="l00773"></a>00773 <span class="comment">/* In the SYN_RCVD state, we should retransmit our</span>
+<a name="l00774"></a>00774 <span class="comment"> SYNACK. */</span>
+<a name="l00775"></a>00775 <span class="keywordflow">goto</span> tcp_send_synack;
+<a name="l00776"></a>00776
+<a name="l00777"></a>00777 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l00778"></a>00778 <span class="preprocessor"></span> <span class="keywordflow">case</span> <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a>:
+<a name="l00779"></a>00779 <span class="comment">/* In the SYN_SENT state, we retransmit out SYN. */</span>
+<a name="l00780"></a>00780 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = 0;
+<a name="l00781"></a>00781 <span class="keywordflow">goto</span> tcp_send_syn;
+<a name="l00782"></a>00782 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l00783"></a>00783
+<a name="l00784"></a>00784 <span class="keywordflow">case</span> <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a>:
+<a name="l00785"></a>00785 <span class="comment">/* In the ESTABLISHED state, we call upon the application</span>
+<a name="l00786"></a>00786 <span class="comment"> to do the actual retransmit after which we jump into</span>
+<a name="l00787"></a>00787 <span class="comment"> the code for sending out the packet (the apprexmit</span>
+<a name="l00788"></a>00788 <span class="comment"> label). */</span>
+<a name="l00789"></a>00789 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">UIP_REXMIT</a>;
+<a name="l00790"></a>00790 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l00791"></a>00791 <span class="keywordflow">goto</span> apprexmit;
+<a name="l00792"></a>00792
+<a name="l00793"></a>00793 <span class="keywordflow">case</span> <a class="code" href="a00150.html#ga533c394b1fa0030205534befa31c525">UIP_FIN_WAIT_1</a>:
+<a name="l00794"></a>00794 <span class="keywordflow">case</span> <a class="code" href="a00150.html#g64d9affc680a445d708234e70450477b">UIP_CLOSING</a>:
+<a name="l00795"></a>00795 <span class="keywordflow">case</span> <a class="code" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">UIP_LAST_ACK</a>:
+<a name="l00796"></a>00796 <span class="comment">/* In all these states we should retransmit a FINACK. */</span>
+<a name="l00797"></a>00797 <span class="keywordflow">goto</span> tcp_send_finack;
+<a name="l00798"></a>00798
+<a name="l00799"></a>00799 }
+<a name="l00800"></a>00800 }
+<a name="l00801"></a>00801 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>((uip_connr->tcpstateflags & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>) == <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a>) {
+<a name="l00802"></a>00802 <span class="comment">/* If there was no need for a retransmission, we poll the</span>
+<a name="l00803"></a>00803 <span class="comment"> application for new data. */</span>
+<a name="l00804"></a>00804 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">UIP_POLL</a>;
+<a name="l00805"></a>00805 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l00806"></a>00806 <span class="keywordflow">goto</span> appsend;
+<a name="l00807"></a>00807 }
+<a name="l00808"></a>00808 }
+<a name="l00809"></a>00809 <span class="keywordflow">goto</span> drop;
+<a name="l00810"></a>00810 }
+<a name="l00811"></a>00811 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00812"></a>00812 <span class="preprocessor"></span> <span class="keywordflow">if</span>(flag == <a class="code" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">UIP_UDP_TIMER</a>) {
+<a name="l00813"></a>00813 <span class="keywordflow">if</span>(<a class="code" href="a00095.html">uip_udp_conn</a>->lport != 0) {
+<a name="l00814"></a>00814 <a class="code" href="a00088.html">uip_conn</a> = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l00815"></a>00815 <a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a> = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a>];
+<a name="l00816"></a>00816 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l00817"></a>00817 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">UIP_POLL</a>;
+<a name="l00818"></a>00818 <a class="code" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">UIP_UDP_APPCALL</a>();
+<a name="l00819"></a>00819 <span class="keywordflow">goto</span> udp_send;
+<a name="l00820"></a>00820 } <span class="keywordflow">else</span> {
+<a name="l00821"></a>00821 <span class="keywordflow">goto</span> drop;
+<a name="l00822"></a>00822 }
+<a name="l00823"></a>00823 }
+<a name="l00824"></a>00824 <span class="preprocessor">#endif</span>
+<a name="l00825"></a>00825 <span class="preprocessor"></span>
+<a name="l00826"></a>00826 <span class="comment">/* This is where the input processing starts. */</span>
+<a name="l00827"></a>00827 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>);
+<a name="l00828"></a>00828
+<a name="l00829"></a>00829 <span class="comment">/* Start of IP input header processing code. */</span>
+<a name="l00830"></a>00830
+<a name="l00831"></a>00831 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00832"></a>00832 <span class="preprocessor"></span> <span class="comment">/* Check validity of the IP header. */</span>
+<a name="l00833"></a>00833 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vtc & 0xf0) != 0x60) { <span class="comment">/* IP version and header length. */</span>
+<a name="l00834"></a>00834 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00835"></a>00835 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">vhlerr</a>);
+<a name="l00836"></a>00836 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ipv6: invalid version."</span>);
+<a name="l00837"></a>00837 <span class="keywordflow">goto</span> drop;
+<a name="l00838"></a>00838 }
+<a name="l00839"></a>00839 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00840"></a>00840 <span class="comment">/* Check validity of the IP header. */</span>
+<a name="l00841"></a>00841 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vhl != 0x45) { <span class="comment">/* IP version and header length. */</span>
+<a name="l00842"></a>00842 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00843"></a>00843 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">vhlerr</a>);
+<a name="l00844"></a>00844 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: invalid version or header length."</span>);
+<a name="l00845"></a>00845 <span class="keywordflow">goto</span> drop;
+<a name="l00846"></a>00846 }
+<a name="l00847"></a>00847 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00848"></a>00848
+<a name="l00849"></a>00849 <span class="comment">/* Check the size of the packet. If the size reported to us in</span>
+<a name="l00850"></a>00850 <span class="comment"> uip_len is smaller the size reported in the IP header, we assume</span>
+<a name="l00851"></a>00851 <span class="comment"> that the packet has been corrupted in transit. If the size of</span>
+<a name="l00852"></a>00852 <span class="comment"> uip_len is larger than the size reported in the IP packet header,</span>
+<a name="l00853"></a>00853 <span class="comment"> the packet has been padded and we set uip_len to the correct</span>
+<a name="l00854"></a>00854 <span class="comment"> value.. */</span>
+<a name="l00855"></a>00855
+<a name="l00856"></a>00856 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] <= <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>) {
+<a name="l00857"></a>00857 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] << 8) + <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1];
+<a name="l00858"></a>00858 #<span class="keywordflow">if</span> UIP_CONF_IPV6
+<a name="l00859"></a>00859 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> += 40; <span class="comment">/* The length reported in the IPv6 header is the</span>
+<a name="l00860"></a>00860 <span class="comment"> length of the payload that follows the</span>
+<a name="l00861"></a>00861 <span class="comment"> header. However, uIP uses the uip_len variable</span>
+<a name="l00862"></a>00862 <span class="comment"> for holding the size of the entire packet,</span>
+<a name="l00863"></a>00863 <span class="comment"> including the IP header. For IPv4 this is not a</span>
+<a name="l00864"></a>00864 <span class="comment"> problem as the length field in the IPv4 header</span>
+<a name="l00865"></a>00865 <span class="comment"> contains the length of the entire packet. But</span>
+<a name="l00866"></a>00866 <span class="comment"> for IPv6 we need to add the size of the IPv6</span>
+<a name="l00867"></a>00867 <span class="comment"> header (40 bytes). */</span>
+<a name="l00868"></a>00868 #endif <span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00869"></a>00869 } <span class="keywordflow">else</span> {
+<a name="l00870"></a>00870 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: packet shorter than reported in IP header."</span>);
+<a name="l00871"></a>00871 <span class="keywordflow">goto</span> drop;
+<a name="l00872"></a>00872 }
+<a name="l00873"></a>00873
+<a name="l00874"></a>00874 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00875"></a>00875 <span class="preprocessor"></span> <span class="comment">/* Check the fragment flag. */</span>
+<a name="l00876"></a>00876 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[0] & 0x3f) != 0 ||
+<a name="l00877"></a>00877 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[1] != 0) {
+<a name="l00878"></a>00878 <span class="preprocessor">#if UIP_REASSEMBLY</span>
+<a name="l00879"></a>00879 <span class="preprocessor"></span> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = uip_reass();
+<a name="l00880"></a>00880 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> == 0) {
+<a name="l00881"></a>00881 <span class="keywordflow">goto</span> drop;
+<a name="l00882"></a>00882 }
+<a name="l00883"></a>00883 <span class="preprocessor">#else </span><span class="comment">/* UIP_REASSEMBLY */</span>
+<a name="l00884"></a>00884 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00885"></a>00885 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">fragerr</a>);
+<a name="l00886"></a>00886 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: fragment dropped."</span>);
+<a name="l00887"></a>00887 <span class="keywordflow">goto</span> drop;
+<a name="l00888"></a>00888 <span class="preprocessor">#endif </span><span class="comment">/* UIP_REASSEMBLY */</span>
+<a name="l00889"></a>00889 }
+<a name="l00890"></a>00890 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00891"></a>00891
+<a name="l00892"></a>00892 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, all_zeroes_addr)) {
+<a name="l00893"></a>00893 <span class="comment">/* If we are configured to use ping IP address configuration and</span>
+<a name="l00894"></a>00894 <span class="comment"> hasn't been assigned an IP address yet, we accept all ICMP</span>
+<a name="l00895"></a>00895 <span class="comment"> packets. */</span>
+<a name="l00896"></a>00896 <span class="preprocessor">#if UIP_PINGADDRCONF && !UIP_CONF_IPV6</span>
+<a name="l00897"></a>00897 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto == <a class="code" href="a00150.html#g359951eecd80541c2101f628a9da9146">UIP_PROTO_ICMP</a>) {
+<a name="l00898"></a>00898 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: possible ping config packet received."</span>);
+<a name="l00899"></a>00899 <span class="keywordflow">goto</span> icmp_input;
+<a name="l00900"></a>00900 } <span class="keywordflow">else</span> {
+<a name="l00901"></a>00901 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: packet dropped since no address assigned."</span>);
+<a name="l00902"></a>00902 <span class="keywordflow">goto</span> drop;
+<a name="l00903"></a>00903 }
+<a name="l00904"></a>00904 <span class="preprocessor">#endif </span><span class="comment">/* UIP_PINGADDRCONF */</span>
+<a name="l00905"></a>00905
+<a name="l00906"></a>00906 } <span class="keywordflow">else</span> {
+<a name="l00907"></a>00907 <span class="comment">/* If IP broadcast support is configured, we check for a broadcast</span>
+<a name="l00908"></a>00908 <span class="comment"> UDP packet, which may be destined to us. */</span>
+<a name="l00909"></a>00909 <span class="preprocessor">#if UIP_BROADCAST</span>
+<a name="l00910"></a>00910 <span class="preprocessor"></span> <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"UDP IP checksum 0x%04x\n"</span>, <a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l00911"></a>00911 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto == <a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a> &&
+<a name="l00912"></a>00912 <a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, all_ones_addr)
+<a name="l00913"></a>00913 <span class="comment">/*&&</span>
+<a name="l00914"></a>00914 <span class="comment"> uip_ipchksum() == 0xffff*/</span>) {
+<a name="l00915"></a>00915 <span class="keywordflow">goto</span> udp_input;
+<a name="l00916"></a>00916 }
+<a name="l00917"></a>00917 <span class="preprocessor">#endif </span><span class="comment">/* UIP_BROADCAST */</span>
+<a name="l00918"></a>00918
+<a name="l00919"></a>00919 <span class="comment">/* Check if the packet is destined for our IP address. */</span>
+<a name="l00920"></a>00920 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00921"></a>00921 <span class="preprocessor"></span> <span class="keywordflow">if</span>(!<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>)) {
+<a name="l00922"></a>00922 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00923"></a>00923 <span class="keywordflow">goto</span> drop;
+<a name="l00924"></a>00924 }
+<a name="l00925"></a>00925 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00926"></a>00926 <span class="comment">/* For IPv6, packet reception is a little trickier as we need to</span>
+<a name="l00927"></a>00927 <span class="comment"> make sure that we listen to certain multicast addresses (all</span>
+<a name="l00928"></a>00928 <span class="comment"> hosts multicast address, and the solicited-node multicast</span>
+<a name="l00929"></a>00929 <span class="comment"> address) as well. However, we will cheat here and accept all</span>
+<a name="l00930"></a>00930 <span class="comment"> multicast packets that are sent to the ff02::/16 addresses. */</span>
+<a name="l00931"></a>00931 <span class="keywordflow">if</span>(!<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>) &&
+<a name="l00932"></a>00932 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr[0] != <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(0xff02)) {
+<a name="l00933"></a>00933 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00934"></a>00934 <span class="keywordflow">goto</span> drop;
+<a name="l00935"></a>00935 }
+<a name="l00936"></a>00936 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00937"></a>00937 }
+<a name="l00938"></a>00938
+<a name="l00939"></a>00939 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00940"></a>00940 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>() != 0xffff) { <span class="comment">/* Compute and check the IP header</span>
+<a name="l00941"></a>00941 <span class="comment"> checksum. */</span>
+<a name="l00942"></a>00942 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00943"></a>00943 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>);
+<a name="l00944"></a>00944 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: bad checksum."</span>);
+<a name="l00945"></a>00945 <span class="keywordflow">goto</span> drop;
+<a name="l00946"></a>00946 }
+<a name="l00947"></a>00947 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00948"></a>00948
+<a name="l00949"></a>00949 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto == <a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a>) { <span class="comment">/* Check for TCP packet. If so,</span>
+<a name="l00950"></a>00950 <span class="comment"> proceed with TCP input</span>
+<a name="l00951"></a>00951 <span class="comment"> processing. */</span>
+<a name="l00952"></a>00952 <span class="keywordflow">goto</span> tcp_input;
+<a name="l00953"></a>00953 }
+<a name="l00954"></a>00954
+<a name="l00955"></a>00955 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00956"></a>00956 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto == <a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a>) {
+<a name="l00957"></a>00957 <span class="keywordflow">goto</span> udp_input;
+<a name="l00958"></a>00958 }
+<a name="l00959"></a>00959 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00960"></a>00960
+<a name="l00961"></a>00961 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00962"></a>00962 <span class="preprocessor"></span> <span class="comment">/* ICMPv4 processing code follows. */</span>
+<a name="l00963"></a>00963 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto != <a class="code" href="a00150.html#g359951eecd80541c2101f628a9da9146">UIP_PROTO_ICMP</a>) { <span class="comment">/* We only allow ICMP packets from</span>
+<a name="l00964"></a>00964 <span class="comment"> here. */</span>
+<a name="l00965"></a>00965 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00966"></a>00966 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#b4622e2599ff3a592db09219b2641682">protoerr</a>);
+<a name="l00967"></a>00967 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: neither tcp nor icmp."</span>);
+<a name="l00968"></a>00968 <span class="keywordflow">goto</span> drop;
+<a name="l00969"></a>00969 }
+<a name="l00970"></a>00970
+<a name="l00971"></a>00971 <span class="preprocessor">#if UIP_PINGADDRCONF</span>
+<a name="l00972"></a>00972 <span class="preprocessor"></span> icmp_input:
+<a name="l00973"></a>00973 <span class="preprocessor">#endif </span><span class="comment">/* UIP_PINGADDRCONF */</span>
+<a name="l00974"></a>00974 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>);
+<a name="l00975"></a>00975
+<a name="l00976"></a>00976 <span class="comment">/* ICMP echo (i.e., ping) processing. This is simple, we only change</span>
+<a name="l00977"></a>00977 <span class="comment"> the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP</span>
+<a name="l00978"></a>00978 <span class="comment"> checksum before we return the packet. */</span>
+<a name="l00979"></a>00979 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type != <a class="code" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a>) {
+<a name="l00980"></a>00980 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l00981"></a>00981 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#8da121d6e50992ec55778f9b2141552d">typeerr</a>);
+<a name="l00982"></a>00982 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"icmp: not icmp echo."</span>);
+<a name="l00983"></a>00983 <span class="keywordflow">goto</span> drop;
+<a name="l00984"></a>00984 }
+<a name="l00985"></a>00985
+<a name="l00986"></a>00986 <span class="comment">/* If we are configured to use ping IP address assignment, we use</span>
+<a name="l00987"></a>00987 <span class="comment"> the destination IP address of this ping packet and assign it to</span>
+<a name="l00988"></a>00988 <span class="comment"> ourself. */</span>
+<a name="l00989"></a>00989 <span class="preprocessor">#if UIP_PINGADDRCONF</span>
+<a name="l00990"></a>00990 <span class="preprocessor"></span> <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[0] | <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[1]) == 0) {
+<a name="l00991"></a>00991 <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr[0];
+<a name="l00992"></a>00992 <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[1] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr[1];
+<a name="l00993"></a>00993 }
+<a name="l00994"></a>00994 <span class="preprocessor">#endif </span><span class="comment">/* UIP_PINGADDRCONF */</span>
+<a name="l00995"></a>00995
+<a name="l00996"></a>00996 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type = <a class="code" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">ICMP_ECHO_REPLY</a>;
+<a name="l00997"></a>00997
+<a name="l00998"></a>00998 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum >= <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(0xffff - (<a class="code" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a> << 8))) {
+<a name="l00999"></a>00999 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum += <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a> << 8) + 1;
+<a name="l01000"></a>01000 } <span class="keywordflow">else</span> {
+<a name="l01001"></a>01001 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum += <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00150.html#gd58231410d58e34b455328b888a9e73c">ICMP_ECHO</a> << 8);
+<a name="l01002"></a>01002 }
+<a name="l01003"></a>01003
+<a name="l01004"></a>01004 <span class="comment">/* Swap IP addresses. */</span>
+<a name="l01005"></a>01005 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr);
+<a name="l01006"></a>01006 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01007"></a>01007
+<a name="l01008"></a>01008 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>);
+<a name="l01009"></a>01009 <span class="keywordflow">goto</span> send;
+<a name="l01010"></a>01010
+<a name="l01011"></a>01011 <span class="comment">/* End of IPv4 input header processing code. */</span>
+<a name="l01012"></a>01012 <span class="preprocessor">#else </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l01013"></a>01013
+<a name="l01014"></a>01014 <span class="comment">/* This is IPv6 ICMPv6 processing code. */</span>
+<a name="l01015"></a>01015 <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"icmp6_input: length %d\n"</span>, <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01016"></a>01016
+<a name="l01017"></a>01017 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto != <a class="code" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">UIP_PROTO_ICMP6</a>) { <span class="comment">/* We only allow ICMPv6 packets from</span>
+<a name="l01018"></a>01018 <span class="comment"> here. */</span>
+<a name="l01019"></a>01019 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l01020"></a>01020 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#b4622e2599ff3a592db09219b2641682">protoerr</a>);
+<a name="l01021"></a>01021 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"ip: neither tcp nor icmp6."</span>);
+<a name="l01022"></a>01022 <span class="keywordflow">goto</span> drop;
+<a name="l01023"></a>01023 }
+<a name="l01024"></a>01024
+<a name="l01025"></a>01025 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>);
+<a name="l01026"></a>01026
+<a name="l01027"></a>01027 <span class="comment">/* If we get a neighbor solicitation for our address we should send</span>
+<a name="l01028"></a>01028 <span class="comment"> a neighbor advertisement message back. */</span>
+<a name="l01029"></a>01029 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type == <a class="code" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">ICMP6_NEIGHBOR_SOLICITATION</a>) {
+<a name="l01030"></a>01030 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmp6data, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>)) {
+<a name="l01031"></a>01031
+<a name="l01032"></a>01032 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->options[0] == <a class="code" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">ICMP6_OPTION_SOURCE_LINK_ADDRESS</a>) {
+<a name="l01033"></a>01033 <span class="comment">/* Save the sender's address in our neighbor list. */</span>
+<a name="l01034"></a>01034 <a class="code" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip_neighbor_add</a>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->srcipaddr, &(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->options[2]));
+<a name="l01035"></a>01035 }
+<a name="l01036"></a>01036
+<a name="l01037"></a>01037 <span class="comment">/* We should now send a neighbor advertisement back to where the</span>
+<a name="l01038"></a>01038 <span class="comment"> neighbor solicication came from. */</span>
+<a name="l01039"></a>01039 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type = <a class="code" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">ICMP6_NEIGHBOR_ADVERTISEMENT</a>;
+<a name="l01040"></a>01040 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->flags = <a class="code" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">ICMP6_FLAG_S</a>; <span class="comment">/* Solicited flag. */</span>
+<a name="l01041"></a>01041
+<a name="l01042"></a>01042 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->reserved1 = <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->reserved2 = <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->reserved3 = 0;
+<a name="l01043"></a>01043
+<a name="l01044"></a>01044 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->destipaddr, <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->srcipaddr);
+<a name="l01045"></a>01045 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01046"></a>01046 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->options[0] = <a class="code" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">ICMP6_OPTION_TARGET_LINK_ADDRESS</a>;
+<a name="l01047"></a>01047 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->options[1] = 1; <span class="comment">/* Options length, 1 = 8 bytes. */</span>
+<a name="l01048"></a>01048 memcpy(&(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->options[2]), &<a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>, <span class="keyword">sizeof</span>(<a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>));
+<a name="l01049"></a>01049 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum = 0;
+<a name="l01050"></a>01050 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum = ~uip_icmp6chksum();
+<a name="l01051"></a>01051 <span class="keywordflow">goto</span> send;
+<a name="l01052"></a>01052
+<a name="l01053"></a>01053 }
+<a name="l01054"></a>01054 <span class="keywordflow">goto</span> drop;
+<a name="l01055"></a>01055 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type == <a class="code" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">ICMP6_ECHO</a>) {
+<a name="l01056"></a>01056 <span class="comment">/* ICMP echo (i.e., ping) processing. This is simple, we only</span>
+<a name="l01057"></a>01057 <span class="comment"> change the ICMP type from ECHO to ECHO_REPLY and update the</span>
+<a name="l01058"></a>01058 <span class="comment"> ICMP checksum before we return the packet. */</span>
+<a name="l01059"></a>01059
+<a name="l01060"></a>01060 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type = <a class="code" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">ICMP6_ECHO_REPLY</a>;
+<a name="l01061"></a>01061
+<a name="l01062"></a>01062 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr);
+<a name="l01063"></a>01063 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01064"></a>01064 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum = 0;
+<a name="l01065"></a>01065 <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->icmpchksum = ~uip_icmp6chksum();
+<a name="l01066"></a>01066
+<a name="l01067"></a>01067 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>);
+<a name="l01068"></a>01068 <span class="keywordflow">goto</span> send;
+<a name="l01069"></a>01069 } <span class="keywordflow">else</span> {
+<a name="l01070"></a>01070 <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"Unknown icmp6 message type %d\n"</span>, <a class="code" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">ICMPBUF</a>->type);
+<a name="l01071"></a>01071 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l01072"></a>01072 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>.<a class="code" href="a00093.html#8da121d6e50992ec55778f9b2141552d">typeerr</a>);
+<a name="l01073"></a>01073 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"icmp: unknown ICMP message."</span>);
+<a name="l01074"></a>01074 <span class="keywordflow">goto</span> drop;
+<a name="l01075"></a>01075 }
+<a name="l01076"></a>01076
+<a name="l01077"></a>01077 <span class="comment">/* End of IPv6 ICMP processing. */</span>
+<a name="l01078"></a>01078
+<a name="l01079"></a>01079 <span class="preprocessor">#endif </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l01080"></a>01080
+<a name="l01081"></a>01081 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l01082"></a>01082 <span class="preprocessor"></span> <span class="comment">/* UDP input processing. */</span>
+<a name="l01083"></a>01083 udp_input:
+<a name="l01084"></a>01084 <span class="comment">/* UDP processing is really just a hack. We don't do anything to the</span>
+<a name="l01085"></a>01085 <span class="comment"> UDP/IP headers, but let the UDP application do all the hard</span>
+<a name="l01086"></a>01086 <span class="comment"> work. If the application sets uip_slen, it has a packet to</span>
+<a name="l01087"></a>01087 <span class="comment"> send. */</span>
+<a name="l01088"></a>01088 <span class="preprocessor">#if UIP_UDP_CHECKSUMS</span>
+<a name="l01089"></a>01089 <span class="preprocessor"></span> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a>;
+<a name="l01090"></a>01090 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + UIP_IPUDPH_LEN];
+<a name="l01091"></a>01091 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udpchksum != 0 && <a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>() != 0xffff) {
+<a name="l01092"></a>01092 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">udp</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l01093"></a>01093 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">udp</a>.<a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>);
+<a name="l01094"></a>01094 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"udp: bad checksum."</span>);
+<a name="l01095"></a>01095 <span class="keywordflow">goto</span> drop;
+<a name="l01096"></a>01096 }
+<a name="l01097"></a>01097 <span class="preprocessor">#else </span><span class="comment">/* UIP_UDP_CHECKSUMS */</span>
+<a name="l01098"></a>01098 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_IPUDPH_LEN;
+<a name="l01099"></a>01099 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP_CHECKSUMS */</span>
+<a name="l01100"></a>01100
+<a name="l01101"></a>01101 <span class="comment">/* Demultiplex this UDP packet between the UDP "connections". */</span>
+<a name="l01102"></a>01102 <span class="keywordflow">for</span>(<a class="code" href="a00095.html">uip_udp_conn</a> = &<a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[0];
+<a name="l01103"></a>01103 <a class="code" href="a00095.html">uip_udp_conn</a> < &<a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[<a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>];
+<a name="l01104"></a>01104 ++<a class="code" href="a00095.html">uip_udp_conn</a>) {
+<a name="l01105"></a>01105 <span class="comment">/* If the local UDP port is non-zero, the connection is considered</span>
+<a name="l01106"></a>01106 <span class="comment"> to be used. If so, the local port number is checked against the</span>
+<a name="l01107"></a>01107 <span class="comment"> destination port number in the received packet. If the two port</span>
+<a name="l01108"></a>01108 <span class="comment"> numbers match, the remote port number is checked if the</span>
+<a name="l01109"></a>01109 <span class="comment"> connection is bound to a remote port. Finally, if the</span>
+<a name="l01110"></a>01110 <span class="comment"> connection is bound to a remote IP address, the source IP</span>
+<a name="l01111"></a>01111 <span class="comment"> address of the packet is checked. */</span>
+<a name="l01112"></a>01112 <span class="keywordflow">if</span>(<a class="code" href="a00095.html">uip_udp_conn</a>->lport != 0 &&
+<a name="l01113"></a>01113 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->destport == <a class="code" href="a00095.html">uip_udp_conn</a>->lport &&
+<a name="l01114"></a>01114 (<a class="code" href="a00095.html">uip_udp_conn</a>->rport == 0 ||
+<a name="l01115"></a>01115 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->srcport == <a class="code" href="a00095.html">uip_udp_conn</a>->rport) &&
+<a name="l01116"></a>01116 (<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00095.html">uip_udp_conn</a>->ripaddr, all_zeroes_addr) ||
+<a name="l01117"></a>01117 <a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00095.html">uip_udp_conn</a>->ripaddr, all_ones_addr) ||
+<a name="l01118"></a>01118 <a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00095.html">uip_udp_conn</a>->ripaddr))) {
+<a name="l01119"></a>01119 <span class="keywordflow">goto</span> udp_found;
+<a name="l01120"></a>01120 }
+<a name="l01121"></a>01121 }
+<a name="l01122"></a>01122 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"udp: no matching connection found"</span>);
+<a name="l01123"></a>01123 <span class="keywordflow">goto</span> drop;
+<a name="l01124"></a>01124
+<a name="l01125"></a>01125 udp_found:
+<a name="l01126"></a>01126 <a class="code" href="a00088.html">uip_conn</a> = <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
+<a name="l01127"></a>01127 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>;
+<a name="l01128"></a>01128 <a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a> = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a>];
+<a name="l01129"></a>01129 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01130"></a>01130 <a class="code" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">UIP_UDP_APPCALL</a>();
+<a name="l01131"></a>01131 udp_send:
+<a name="l01132"></a>01132 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> == 0) {
+<a name="l01133"></a>01133 <span class="keywordflow">goto</span> drop;
+<a name="l01134"></a>01134 }
+<a name="l01135"></a>01135 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> + <a class="code" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">UIP_IPUDPH_LEN</a>;
+<a name="l01136"></a>01136
+<a name="l01137"></a>01137 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01138"></a>01138 <span class="preprocessor"></span> <span class="comment">/* For IPv6, the IP length field does not include the IPv6 IP header</span>
+<a name="l01139"></a>01139 <span class="comment"> length. */</span>
+<a name="l01140"></a>01140 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) >> 8);
+<a name="l01141"></a>01141 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>) & 0xff);
+<a name="l01142"></a>01142 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01143"></a>01143 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = (<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> >> 8);
+<a name="l01144"></a>01144 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = (<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> & 0xff);
+<a name="l01145"></a>01145 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01146"></a>01146
+<a name="l01147"></a>01147 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ttl = <a class="code" href="a00095.html">uip_udp_conn</a>->ttl;
+<a name="l01148"></a>01148 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto = <a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a>;
+<a name="l01149"></a>01149
+<a name="l01150"></a>01150 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udplen = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> + <a class="code" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">UIP_UDPH_LEN</a>);
+<a name="l01151"></a>01151 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udpchksum = 0;
+<a name="l01152"></a>01152
+<a name="l01153"></a>01153 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport = <a class="code" href="a00095.html">uip_udp_conn</a>->lport;
+<a name="l01154"></a>01154 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport = <a class="code" href="a00095.html">uip_udp_conn</a>->rport;
+<a name="l01155"></a>01155
+<a name="l01156"></a>01156 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01157"></a>01157 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00095.html">uip_udp_conn</a>->ripaddr);
+<a name="l01158"></a>01158
+<a name="l01159"></a>01159 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a>];
+<a name="l01160"></a>01160
+<a name="l01161"></a>01161 <span class="preprocessor">#if UIP_UDP_CHECKSUMS</span>
+<a name="l01162"></a>01162 <span class="preprocessor"></span> <span class="comment">/* Calculate UDP checksum. */</span>
+<a name="l01163"></a>01163 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udpchksum = ~(<a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>());
+<a name="l01164"></a>01164 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udpchksum == 0) {
+<a name="l01165"></a>01165 <a class="code" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">UDPBUF</a>->udpchksum = 0xffff;
+<a name="l01166"></a>01166 }
+<a name="l01167"></a>01167 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP_CHECKSUMS */</span>
+<a name="l01168"></a>01168
+<a name="l01169"></a>01169 <span class="keywordflow">goto</span> ip_send_nolen;
+<a name="l01170"></a>01170 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l01171"></a>01171
+<a name="l01172"></a>01172 <span class="comment">/* TCP input processing. */</span>
+<a name="l01173"></a>01173 tcp_input:
+<a name="l01174"></a>01174 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>);
+<a name="l01175"></a>01175
+<a name="l01176"></a>01176 <span class="comment">/* Start of TCP input header processing code. */</span>
+<a name="l01177"></a>01177
+<a name="l01178"></a>01178 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>() != 0xffff) { <span class="comment">/* Compute and check the TCP</span>
+<a name="l01179"></a>01179 <span class="comment"> checksum. */</span>
+<a name="l01180"></a>01180 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>);
+<a name="l01181"></a>01181 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>);
+<a name="l01182"></a>01182 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"tcp: bad checksum."</span>);
+<a name="l01183"></a>01183 <span class="keywordflow">goto</span> drop;
+<a name="l01184"></a>01184 }
+<a name="l01185"></a>01185
+<a name="l01186"></a>01186
+<a name="l01187"></a>01187 <span class="comment">/* Demultiplex this segment. */</span>
+<a name="l01188"></a>01188 <span class="comment">/* First check any active connections. */</span>
+<a name="l01189"></a>01189 <span class="keywordflow">for</span>(uip_connr = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[0]; uip_connr <= &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[<a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a> - 1];
+<a name="l01190"></a>01190 ++uip_connr) {
+<a name="l01191"></a>01191 <span class="keywordflow">if</span>(uip_connr->tcpstateflags != <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a> &&
+<a name="l01192"></a>01192 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport == uip_connr->lport &&
+<a name="l01193"></a>01193 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport == uip_connr->rport &&
+<a name="l01194"></a>01194 <a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, uip_connr->ripaddr)) {
+<a name="l01195"></a>01195 <span class="keywordflow">goto</span> found;
+<a name="l01196"></a>01196 }
+<a name="l01197"></a>01197 }
+<a name="l01198"></a>01198
+<a name="l01199"></a>01199 <span class="comment">/* If we didn't find and active connection that expected the packet,</span>
+<a name="l01200"></a>01200 <span class="comment"> either this packet is an old duplicate, or this is a SYN packet</span>
+<a name="l01201"></a>01201 <span class="comment"> destined for a connection in LISTEN. If the SYN flag isn't set,</span>
+<a name="l01202"></a>01202 <span class="comment"> it is an old packet and we send a RST. */</span>
+<a name="l01203"></a>01203 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">TCP_CTL</a>) != <a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a>) {
+<a name="l01204"></a>01204 <span class="keywordflow">goto</span> reset;
+<a name="l01205"></a>01205 }
+<a name="l01206"></a>01206
+<a name="l01207"></a>01207 tmp16 = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport;
+<a name="l01208"></a>01208 <span class="comment">/* Next, check listening connections. */</span>
+<a name="l01209"></a>01209 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>; ++c) {
+<a name="l01210"></a>01210 <span class="keywordflow">if</span>(tmp16 == <a class="code" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip_listenports</a>[c])
+<a name="l01211"></a>01211 <span class="keywordflow">goto</span> found_listen;
+<a name="l01212"></a>01212 }
+<a name="l01213"></a>01213
+<a name="l01214"></a>01214 <span class="comment">/* No matching connection found, so we send a RST packet. */</span>
+<a name="l01215"></a>01215 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">synrst</a>);
+<a name="l01216"></a>01216 reset:
+<a name="l01217"></a>01217
+<a name="l01218"></a>01218 <span class="comment">/* We do not send resets in response to resets. */</span>
+<a name="l01219"></a>01219 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a>) {
+<a name="l01220"></a>01220 <span class="keywordflow">goto</span> drop;
+<a name="l01221"></a>01221 }
+<a name="l01222"></a>01222
+<a name="l01223"></a>01223 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">rst</a>);
+<a name="l01224"></a>01224
+<a name="l01225"></a>01225 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01226"></a>01226 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a>;
+<a name="l01227"></a>01227 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset = 5 << 4;
+<a name="l01228"></a>01228
+<a name="l01229"></a>01229 <span class="comment">/* Flip the seqno and ackno fields in the TCP header. */</span>
+<a name="l01230"></a>01230 c = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3];
+<a name="l01231"></a>01231 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[3];
+<a name="l01232"></a>01232 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[3] = c;
+<a name="l01233"></a>01233
+<a name="l01234"></a>01234 c = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2];
+<a name="l01235"></a>01235 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[2];
+<a name="l01236"></a>01236 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[2] = c;
+<a name="l01237"></a>01237
+<a name="l01238"></a>01238 c = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1];
+<a name="l01239"></a>01239 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[1];
+<a name="l01240"></a>01240 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[1] = c;
+<a name="l01241"></a>01241
+<a name="l01242"></a>01242 c = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0];
+<a name="l01243"></a>01243 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[0];
+<a name="l01244"></a>01244 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[0] = c;
+<a name="l01245"></a>01245
+<a name="l01246"></a>01246 <span class="comment">/* We also have to increase the sequence number we are</span>
+<a name="l01247"></a>01247 <span class="comment"> acknowledging. If the least significant byte overflowed, we need</span>
+<a name="l01248"></a>01248 <span class="comment"> to propagate the carry to the other bytes as well. */</span>
+<a name="l01249"></a>01249 <span class="keywordflow">if</span>(++<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[3] == 0) {
+<a name="l01250"></a>01250 <span class="keywordflow">if</span>(++<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[2] == 0) {
+<a name="l01251"></a>01251 <span class="keywordflow">if</span>(++<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[1] == 0) {
+<a name="l01252"></a>01252 ++<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[0];
+<a name="l01253"></a>01253 }
+<a name="l01254"></a>01254 }
+<a name="l01255"></a>01255 }
+<a name="l01256"></a>01256
+<a name="l01257"></a>01257 <span class="comment">/* Swap port numbers. */</span>
+<a name="l01258"></a>01258 tmp16 = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport;
+<a name="l01259"></a>01259 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport;
+<a name="l01260"></a>01260 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport = tmp16;
+<a name="l01261"></a>01261
+<a name="l01262"></a>01262 <span class="comment">/* Swap IP addresses. */</span>
+<a name="l01263"></a>01263 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr);
+<a name="l01264"></a>01264 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01265"></a>01265
+<a name="l01266"></a>01266 <span class="comment">/* And send out the RST packet! */</span>
+<a name="l01267"></a>01267 <span class="keywordflow">goto</span> tcp_send_noconn;
+<a name="l01268"></a>01268
+<a name="l01269"></a>01269 <span class="comment">/* This label will be jumped to if we matched the incoming packet</span>
+<a name="l01270"></a>01270 <span class="comment"> with a connection in LISTEN. In that case, we should create a new</span>
+<a name="l01271"></a>01271 <span class="comment"> connection and send a SYNACK in return. */</span>
+<a name="l01272"></a>01272 found_listen:
+<a name="l01273"></a>01273 <span class="comment">/* First we check if there are any connections avaliable. Unused</span>
+<a name="l01274"></a>01274 <span class="comment"> connections are kept in the same table as used connections, but</span>
+<a name="l01275"></a>01275 <span class="comment"> unused ones have the tcpstate set to CLOSED. Also, connections in</span>
+<a name="l01276"></a>01276 <span class="comment"> TIME_WAIT are kept track of and we'll use the oldest one if no</span>
+<a name="l01277"></a>01277 <span class="comment"> CLOSED connections are found. Thanks to Eddie C. Dost for a very</span>
+<a name="l01278"></a>01278 <span class="comment"> nice algorithm for the TIME_WAIT search. */</span>
+<a name="l01279"></a>01279 uip_connr = 0;
+<a name="l01280"></a>01280 <span class="keywordflow">for</span>(c = 0; c < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {
+<a name="l01281"></a>01281 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c].<a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> == <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>) {
+<a name="l01282"></a>01282 uip_connr = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];
+<a name="l01283"></a>01283 <span class="keywordflow">break</span>;
+<a name="l01284"></a>01284 }
+<a name="l01285"></a>01285 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c].<a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> == <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>) {
+<a name="l01286"></a>01286 <span class="keywordflow">if</span>(uip_connr == 0 ||
+<a name="l01287"></a>01287 <a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c].<a class="code" href="a00087.html">timer</a> > uip_connr-><a class="code" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">timer</a>) {
+<a name="l01288"></a>01288 uip_connr = &<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];
+<a name="l01289"></a>01289 }
+<a name="l01290"></a>01290 }
+<a name="l01291"></a>01291 }
+<a name="l01292"></a>01292
+<a name="l01293"></a>01293 <span class="keywordflow">if</span>(uip_connr == 0) {
+<a name="l01294"></a>01294 <span class="comment">/* All connections are used already, we drop packet and hope that</span>
+<a name="l01295"></a>01295 <span class="comment"> the remote end will retransmit the packet at a time when we</span>
+<a name="l01296"></a>01296 <span class="comment"> have more spare connections. */</span>
+<a name="l01297"></a>01297 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">syndrop</a>);
+<a name="l01298"></a>01298 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"tcp: found no unused connections."</span>);
+<a name="l01299"></a>01299 <span class="keywordflow">goto</span> drop;
+<a name="l01300"></a>01300 }
+<a name="l01301"></a>01301 <a class="code" href="a00088.html">uip_conn</a> = uip_connr;
+<a name="l01302"></a>01302
+<a name="l01303"></a>01303 <span class="comment">/* Fill in the necessary fields for the new connection. */</span>
+<a name="l01304"></a>01304 uip_connr->rto = uip_connr->timer = <a class="code" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a>;
+<a name="l01305"></a>01305 uip_connr->sa = 0;
+<a name="l01306"></a>01306 uip_connr->sv = 4;
+<a name="l01307"></a>01307 uip_connr->nrtx = 0;
+<a name="l01308"></a>01308 uip_connr->lport = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport;
+<a name="l01309"></a>01309 uip_connr->rport = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport;
+<a name="l01310"></a>01310 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(uip_connr->ripaddr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr);
+<a name="l01311"></a>01311 uip_connr->tcpstateflags = <a class="code" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a>;
+<a name="l01312"></a>01312
+<a name="l01313"></a>01313 uip_connr->snd_nxt[0] = iss[0];
+<a name="l01314"></a>01314 uip_connr->snd_nxt[1] = iss[1];
+<a name="l01315"></a>01315 uip_connr->snd_nxt[2] = iss[2];
+<a name="l01316"></a>01316 uip_connr->snd_nxt[3] = iss[3];
+<a name="l01317"></a>01317 uip_connr->len = 1;
+<a name="l01318"></a>01318
+<a name="l01319"></a>01319 <span class="comment">/* rcv_nxt should be the seqno from the incoming packet + 1. */</span>
+<a name="l01320"></a>01320 uip_connr->rcv_nxt[3] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3];
+<a name="l01321"></a>01321 uip_connr->rcv_nxt[2] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2];
+<a name="l01322"></a>01322 uip_connr->rcv_nxt[1] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1];
+<a name="l01323"></a>01323 uip_connr->rcv_nxt[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0];
+<a name="l01324"></a>01324 uip_add_rcv_nxt(1);
+<a name="l01325"></a>01325
+<a name="l01326"></a>01326 <span class="comment">/* Parse the TCP MSS option, if present. */</span>
+<a name="l01327"></a>01327 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset & 0xf0) > 0x50) {
+<a name="l01328"></a>01328 <span class="keywordflow">for</span>(c = 0; c < ((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset >> 4) - 5) << 2 ;) {
+<a name="l01329"></a>01329 opt = <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + c];
+<a name="l01330"></a>01330 <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">TCP_OPT_END</a>) {
+<a name="l01331"></a>01331 <span class="comment">/* End of options. */</span>
+<a name="l01332"></a>01332 <span class="keywordflow">break</span>;
+<a name="l01333"></a>01333 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">TCP_OPT_NOOP</a>) {
+<a name="l01334"></a>01334 ++c;
+<a name="l01335"></a>01335 <span class="comment">/* NOP option. */</span>
+<a name="l01336"></a>01336 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g691688604655ea8943d15f14c60027d8">TCP_OPT_MSS</a> &&
+<a name="l01337"></a>01337 <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c] == <a class="code" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">TCP_OPT_MSS_LEN</a>) {
+<a name="l01338"></a>01338 <span class="comment">/* An MSS option with the right option length. */</span>
+<a name="l01339"></a>01339 tmp16 = ((<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 2 + c] << 8) |
+<a name="l01340"></a>01340 (<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 3 + c];
+<a name="l01341"></a>01341 uip_connr->initialmss = uip_connr->mss =
+<a name="l01342"></a>01342 tmp16 > <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>? <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>: tmp16;
+<a name="l01343"></a>01343
+<a name="l01344"></a>01344 <span class="comment">/* And we are done processing options. */</span>
+<a name="l01345"></a>01345 <span class="keywordflow">break</span>;
+<a name="l01346"></a>01346 } <span class="keywordflow">else</span> {
+<a name="l01347"></a>01347 <span class="comment">/* All other options have a length field, so that we easily</span>
+<a name="l01348"></a>01348 <span class="comment"> can skip past them. */</span>
+<a name="l01349"></a>01349 <span class="keywordflow">if</span>(<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c] == 0) {
+<a name="l01350"></a>01350 <span class="comment">/* If the length field is zero, the options are malformed</span>
+<a name="l01351"></a>01351 <span class="comment"> and we don't process them further. */</span>
+<a name="l01352"></a>01352 <span class="keywordflow">break</span>;
+<a name="l01353"></a>01353 }
+<a name="l01354"></a>01354 c += <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c];
+<a name="l01355"></a>01355 }
+<a name="l01356"></a>01356 }
+<a name="l01357"></a>01357 }
+<a name="l01358"></a>01358
+<a name="l01359"></a>01359 <span class="comment">/* Our response will be a SYNACK. */</span>
+<a name="l01360"></a>01360 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l01361"></a>01361 <span class="preprocessor"></span> tcp_send_synack:
+<a name="l01362"></a>01362 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01363"></a>01363
+<a name="l01364"></a>01364 tcp_send_syn:
+<a name="l01365"></a>01365 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags |= <a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a>;
+<a name="l01366"></a>01366 <span class="preprocessor">#else </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l01367"></a>01367 tcp_send_synack:
+<a name="l01368"></a>01368 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01369"></a>01369 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l01370"></a>01370
+<a name="l01371"></a>01371 <span class="comment">/* We send out the TCP Maximum Segment Size option with our</span>
+<a name="l01372"></a>01372 <span class="comment"> SYNACK. */</span>
+<a name="l01373"></a>01373 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->optdata[0] = <a class="code" href="a00150.html#g691688604655ea8943d15f14c60027d8">TCP_OPT_MSS</a>;
+<a name="l01374"></a>01374 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->optdata[1] = <a class="code" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">TCP_OPT_MSS_LEN</a>;
+<a name="l01375"></a>01375 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->optdata[2] = (<a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>) / 256;
+<a name="l01376"></a>01376 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->optdata[3] = (<a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>) & 255;
+<a name="l01377"></a>01377 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> + <a class="code" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">TCP_OPT_MSS_LEN</a>;
+<a name="l01378"></a>01378 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset = ((<a class="code" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">UIP_TCPH_LEN</a> + TCP_OPT_MSS_LEN) / 4) << 4;
+<a name="l01379"></a>01379 <span class="keywordflow">goto</span> tcp_send;
+<a name="l01380"></a>01380
+<a name="l01381"></a>01381 <span class="comment">/* This label will be jumped to if we found an active connection. */</span>
+<a name="l01382"></a>01382 found:
+<a name="l01383"></a>01383 <a class="code" href="a00088.html">uip_conn</a> = uip_connr;
+<a name="l01384"></a>01384 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = 0;
+<a name="l01385"></a>01385 <span class="comment">/* We do a very naive form of TCP reset processing; we just accept</span>
+<a name="l01386"></a>01386 <span class="comment"> any RST and kill our connection. We should in fact check if the</span>
+<a name="l01387"></a>01387 <span class="comment"> sequence number of this reset is wihtin our advertised window</span>
+<a name="l01388"></a>01388 <span class="comment"> before we accept the reset. */</span>
+<a name="l01389"></a>01389 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a>) {
+<a name="l01390"></a>01390 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l01391"></a>01391 <a class="code" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">UIP_LOG</a>(<span class="stringliteral">"tcp: got reset, aborting connection."</span>);
+<a name="l01392"></a>01392 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">UIP_ABORT</a>;
+<a name="l01393"></a>01393 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01394"></a>01394 <span class="keywordflow">goto</span> drop;
+<a name="l01395"></a>01395 }
+<a name="l01396"></a>01396 <span class="comment">/* Calculated the length of the data, if the application has sent</span>
+<a name="l01397"></a>01397 <span class="comment"> any data to us. */</span>
+<a name="l01398"></a>01398 c = (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset >> 4) << 2;
+<a name="l01399"></a>01399 <span class="comment">/* uip_len will contain the length of the actual TCP data. This is</span>
+<a name="l01400"></a>01400 <span class="comment"> calculated by subtracing the length of the TCP header (in</span>
+<a name="l01401"></a>01401 <span class="comment"> c) and the length of the IP header (20 bytes). */</span>
+<a name="l01402"></a>01402 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - c - <a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a>;
+<a name="l01403"></a>01403
+<a name="l01404"></a>01404 <span class="comment">/* First, check if the sequence number of the incoming packet is</span>
+<a name="l01405"></a>01405 <span class="comment"> what we're expecting next. If not, we send out an ACK with the</span>
+<a name="l01406"></a>01406 <span class="comment"> correct numbers in. */</span>
+<a name="l01407"></a>01407 <span class="keywordflow">if</span>(!(((uip_connr->tcpstateflags & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>) == <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a>) &&
+<a name="l01408"></a>01408 ((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">TCP_CTL</a>) == (<a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>)))) {
+<a name="l01409"></a>01409 <span class="keywordflow">if</span>((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0 || ((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & (<a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> | <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a>)) != 0)) &&
+<a name="l01410"></a>01410 (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0] != uip_connr->rcv_nxt[0] ||
+<a name="l01411"></a>01411 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1] != uip_connr->rcv_nxt[1] ||
+<a name="l01412"></a>01412 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2] != uip_connr->rcv_nxt[2] ||
+<a name="l01413"></a>01413 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3] != uip_connr->rcv_nxt[3])) {
+<a name="l01414"></a>01414 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01415"></a>01415 }
+<a name="l01416"></a>01416 }
+<a name="l01417"></a>01417
+<a name="l01418"></a>01418 <span class="comment">/* Next, check if the incoming segment acknowledges any outstanding</span>
+<a name="l01419"></a>01419 <span class="comment"> data. If so, we update the sequence number, reset the length of</span>
+<a name="l01420"></a>01420 <span class="comment"> the outstanding data, calculate RTT estimations, and reset the</span>
+<a name="l01421"></a>01421 <span class="comment"> retransmission timer. */</span>
+<a name="l01422"></a>01422 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>) && <a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(uip_connr)) {
+<a name="l01423"></a>01423 <a class="code" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a>(uip_connr->snd_nxt, uip_connr->len);
+<a name="l01424"></a>01424
+<a name="l01425"></a>01425 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[0] == <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[0] &&
+<a name="l01426"></a>01426 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[1] == <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[1] &&
+<a name="l01427"></a>01427 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[2] == <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[2] &&
+<a name="l01428"></a>01428 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[3] == <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[3]) {
+<a name="l01429"></a>01429 <span class="comment">/* Update sequence number. */</span>
+<a name="l01430"></a>01430 uip_connr->snd_nxt[0] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[0];
+<a name="l01431"></a>01431 uip_connr->snd_nxt[1] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[1];
+<a name="l01432"></a>01432 uip_connr->snd_nxt[2] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[2];
+<a name="l01433"></a>01433 uip_connr->snd_nxt[3] = <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[3];
+<a name="l01434"></a>01434
+<a name="l01435"></a>01435
+<a name="l01436"></a>01436 <span class="comment">/* Do RTT estimation, unless we have done retransmissions. */</span>
+<a name="l01437"></a>01437 <span class="keywordflow">if</span>(uip_connr->nrtx == 0) {
+<a name="l01438"></a>01438 <span class="keywordtype">signed</span> <span class="keywordtype">char</span> m;
+<a name="l01439"></a>01439 m = uip_connr->rto - uip_connr->timer;
+<a name="l01440"></a>01440 <span class="comment">/* This is taken directly from VJs original code in his paper */</span>
+<a name="l01441"></a>01441 m = m - (uip_connr->sa >> 3);
+<a name="l01442"></a>01442 uip_connr->sa += m;
+<a name="l01443"></a>01443 <span class="keywordflow">if</span>(m < 0) {
+<a name="l01444"></a>01444 m = -m;
+<a name="l01445"></a>01445 }
+<a name="l01446"></a>01446 m = m - (uip_connr->sv >> 2);
+<a name="l01447"></a>01447 uip_connr->sv += m;
+<a name="l01448"></a>01448 uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv;
+<a name="l01449"></a>01449
+<a name="l01450"></a>01450 }
+<a name="l01451"></a>01451 <span class="comment">/* Set the acknowledged flag. */</span>
+<a name="l01452"></a>01452 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">UIP_ACKDATA</a>;
+<a name="l01453"></a>01453 <span class="comment">/* Reset the retransmission timer. */</span>
+<a name="l01454"></a>01454 uip_connr->timer = uip_connr->rto;
+<a name="l01455"></a>01455
+<a name="l01456"></a>01456 <span class="comment">/* Reset length of outstanding data. */</span>
+<a name="l01457"></a>01457 uip_connr->len = 0;
+<a name="l01458"></a>01458 }
+<a name="l01459"></a>01459
+<a name="l01460"></a>01460 }
+<a name="l01461"></a>01461
+<a name="l01462"></a>01462 <span class="comment">/* Do different things depending on in what state the connection is. */</span>
+<a name="l01463"></a>01463 <span class="keywordflow">switch</span>(uip_connr->tcpstateflags & <a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">UIP_TS_MASK</a>) {
+<a name="l01464"></a>01464 <span class="comment">/* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not</span>
+<a name="l01465"></a>01465 <span class="comment"> implemented, since we force the application to close when the</span>
+<a name="l01466"></a>01466 <span class="comment"> peer sends a FIN (hence the application goes directly from</span>
+<a name="l01467"></a>01467 <span class="comment"> ESTABLISHED to LAST_ACK). */</span>
+<a name="l01468"></a>01468 <span class="keywordflow">case</span> <a class="code" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">UIP_SYN_RCVD</a>:
+<a name="l01469"></a>01469 <span class="comment">/* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and</span>
+<a name="l01470"></a>01470 <span class="comment"> we are waiting for an ACK that acknowledges the data we sent</span>
+<a name="l01471"></a>01471 <span class="comment"> out the last time. Therefore, we want to have the UIP_ACKDATA</span>
+<a name="l01472"></a>01472 <span class="comment"> flag set. If so, we enter the ESTABLISHED state. */</span>
+<a name="l01473"></a>01473 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & <a class="code" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">UIP_ACKDATA</a>) {
+<a name="l01474"></a>01474 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a>;
+<a name="l01475"></a>01475 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf84316f469ce0726985c0702db49a989">UIP_CONNECTED</a>;
+<a name="l01476"></a>01476 uip_connr->len = 0;
+<a name="l01477"></a>01477 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01478"></a>01478 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> |= <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>;
+<a name="l01479"></a>01479 uip_add_rcv_nxt(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01480"></a>01480 }
+<a name="l01481"></a>01481 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01482"></a>01482 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01483"></a>01483 <span class="keywordflow">goto</span> appsend;
+<a name="l01484"></a>01484 }
+<a name="l01485"></a>01485 <span class="keywordflow">goto</span> drop;
+<a name="l01486"></a>01486 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span>
+<a name="l01487"></a>01487 <span class="preprocessor"></span> <span class="keywordflow">case</span> <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a>:
+<a name="l01488"></a>01488 <span class="comment">/* In SYN_SENT, we wait for a SYNACK that is sent in response to</span>
+<a name="l01489"></a>01489 <span class="comment"> our SYN. The rcv_nxt is set to sequence number in the SYNACK</span>
+<a name="l01490"></a>01490 <span class="comment"> plus one, and we send an ACK. We move into the ESTABLISHED</span>
+<a name="l01491"></a>01491 <span class="comment"> state. */</span>
+<a name="l01492"></a>01492 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) &&
+<a name="l01493"></a>01493 (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">TCP_CTL</a>) == (<a class="code" href="a00150.html#g6020613f5062417d9811cfa837215c83">TCP_SYN</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>)) {
+<a name="l01494"></a>01494
+<a name="l01495"></a>01495 <span class="comment">/* Parse the TCP MSS option, if present. */</span>
+<a name="l01496"></a>01496 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset & 0xf0) > 0x50) {
+<a name="l01497"></a>01497 <span class="keywordflow">for</span>(c = 0; c < ((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset >> 4) - 5) << 2 ;) {
+<a name="l01498"></a>01498 opt = <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + c];
+<a name="l01499"></a>01499 <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">TCP_OPT_END</a>) {
+<a name="l01500"></a>01500 <span class="comment">/* End of options. */</span>
+<a name="l01501"></a>01501 <span class="keywordflow">break</span>;
+<a name="l01502"></a>01502 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">TCP_OPT_NOOP</a>) {
+<a name="l01503"></a>01503 ++c;
+<a name="l01504"></a>01504 <span class="comment">/* NOP option. */</span>
+<a name="l01505"></a>01505 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <a class="code" href="a00150.html#g691688604655ea8943d15f14c60027d8">TCP_OPT_MSS</a> &&
+<a name="l01506"></a>01506 <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c] == TCP_OPT_MSS_LEN) {
+<a name="l01507"></a>01507 <span class="comment">/* An MSS option with the right option length. */</span>
+<a name="l01508"></a>01508 tmp16 = (<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 2 + c] << 8) |
+<a name="l01509"></a>01509 <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 3 + c];
+<a name="l01510"></a>01510 uip_connr->initialmss =
+<a name="l01511"></a>01511 uip_connr->mss = tmp16 > <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>? <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>: tmp16;
+<a name="l01512"></a>01512
+<a name="l01513"></a>01513 <span class="comment">/* And we are done processing options. */</span>
+<a name="l01514"></a>01514 <span class="keywordflow">break</span>;
+<a name="l01515"></a>01515 } <span class="keywordflow">else</span> {
+<a name="l01516"></a>01516 <span class="comment">/* All other options have a length field, so that we easily</span>
+<a name="l01517"></a>01517 <span class="comment"> can skip past them. */</span>
+<a name="l01518"></a>01518 <span class="keywordflow">if</span>(<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c] == 0) {
+<a name="l01519"></a>01519 <span class="comment">/* If the length field is zero, the options are malformed</span>
+<a name="l01520"></a>01520 <span class="comment"> and we don't process them further. */</span>
+<a name="l01521"></a>01521 <span class="keywordflow">break</span>;
+<a name="l01522"></a>01522 }
+<a name="l01523"></a>01523 c += <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + 1 + c];
+<a name="l01524"></a>01524 }
+<a name="l01525"></a>01525 }
+<a name="l01526"></a>01526 }
+<a name="l01527"></a>01527 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a>;
+<a name="l01528"></a>01528 uip_connr->rcv_nxt[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0];
+<a name="l01529"></a>01529 uip_connr->rcv_nxt[1] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1];
+<a name="l01530"></a>01530 uip_connr->rcv_nxt[2] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2];
+<a name="l01531"></a>01531 uip_connr->rcv_nxt[3] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3];
+<a name="l01532"></a>01532 uip_add_rcv_nxt(1);
+<a name="l01533"></a>01533 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#gf84316f469ce0726985c0702db49a989">UIP_CONNECTED</a> | <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>;
+<a name="l01534"></a>01534 uip_connr->len = 0;
+<a name="l01535"></a>01535 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = 0;
+<a name="l01536"></a>01536 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01537"></a>01537 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01538"></a>01538 <span class="keywordflow">goto</span> appsend;
+<a name="l01539"></a>01539 }
+<a name="l01540"></a>01540 <span class="comment">/* Inform the application that the connection failed */</span>
+<a name="l01541"></a>01541 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = <a class="code" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">UIP_ABORT</a>;
+<a name="l01542"></a>01542 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01543"></a>01543 <span class="comment">/* The connection is closed after we send the RST */</span>
+<a name="l01544"></a>01544 <a class="code" href="a00088.html">uip_conn</a>->tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l01545"></a>01545 <span class="keywordflow">goto</span> reset;
+<a name="l01546"></a>01546 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span>
+<a name="l01547"></a>01547
+<a name="l01548"></a>01548 <span class="keywordflow">case</span> <a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">UIP_ESTABLISHED</a>:
+<a name="l01549"></a>01549 <span class="comment">/* In the ESTABLISHED state, we call upon the application to feed</span>
+<a name="l01550"></a>01550 <span class="comment"> data into the uip_buf. If the UIP_ACKDATA flag is set, the</span>
+<a name="l01551"></a>01551 <span class="comment"> application should put new data into the buffer, otherwise we are</span>
+<a name="l01552"></a>01552 <span class="comment"> retransmitting an old segment, and the application should put that</span>
+<a name="l01553"></a>01553 <span class="comment"> data into the buffer.</span>
+<a name="l01554"></a>01554 <span class="comment"></span>
+<a name="l01555"></a>01555 <span class="comment"> If the incoming packet is a FIN, we should close the connection on</span>
+<a name="l01556"></a>01556 <span class="comment"> this side as well, and we send out a FIN and enter the LAST_ACK</span>
+<a name="l01557"></a>01557 <span class="comment"> state. We require that there is no outstanding data; otherwise the</span>
+<a name="l01558"></a>01558 <span class="comment"> sequence numbers will be screwed up. */</span>
+<a name="l01559"></a>01559
+<a name="l01560"></a>01560 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a> && !(uip_connr->tcpstateflags & <a class="code" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">UIP_STOPPED</a>)) {
+<a name="l01561"></a>01561 <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip_outstanding</a>(uip_connr)) {
+<a name="l01562"></a>01562 <span class="keywordflow">goto</span> drop;
+<a name="l01563"></a>01563 }
+<a name="l01564"></a>01564 uip_add_rcv_nxt(1 + <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01565"></a>01565 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> |= <a class="code" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">UIP_CLOSE</a>;
+<a name="l01566"></a>01566 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01567"></a>01567 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> |= <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>;
+<a name="l01568"></a>01568 }
+<a name="l01569"></a>01569 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01570"></a>01570 uip_connr->len = 1;
+<a name="l01571"></a>01571 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">UIP_LAST_ACK</a>;
+<a name="l01572"></a>01572 uip_connr->nrtx = 0;
+<a name="l01573"></a>01573 tcp_send_finack:
+<a name="l01574"></a>01574 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01575"></a>01575 <span class="keywordflow">goto</span> tcp_send_nodata;
+<a name="l01576"></a>01576 }
+<a name="l01577"></a>01577
+<a name="l01578"></a>01578 <span class="comment">/* Check the URG flag. If this is set, the segment carries urgent</span>
+<a name="l01579"></a>01579 <span class="comment"> data that we must pass to the application. */</span>
+<a name="l01580"></a>01580 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">TCP_URG</a>) != 0) {
+<a name="l01581"></a>01581 <span class="preprocessor">#if UIP_URGDATA > 0</span>
+<a name="l01582"></a>01582 <span class="preprocessor"></span> uip_urglen = (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[0] << 8) | <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[1];
+<a name="l01583"></a>01583 <span class="keywordflow">if</span>(uip_urglen > <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>) {
+<a name="l01584"></a>01584 <span class="comment">/* There is more urgent data in the next segment to come. */</span>
+<a name="l01585"></a>01585 uip_urglen = <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>;
+<a name="l01586"></a>01586 }
+<a name="l01587"></a>01587 uip_add_rcv_nxt(uip_urglen);
+<a name="l01588"></a>01588 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> -= uip_urglen;
+<a name="l01589"></a>01589 uip_urgdata = <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l01590"></a>01590 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> += uip_urglen;
+<a name="l01591"></a>01591 } <span class="keywordflow">else</span> {
+<a name="l01592"></a>01592 uip_urglen = 0;
+<a name="l01593"></a>01593 <span class="preprocessor">#else </span><span class="comment">/* UIP_URGDATA > 0 */</span>
+<a name="l01594"></a>01594 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = ((<span class="keywordtype">char</span> *)<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>) + ((<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[0] << 8) | <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[1]);
+<a name="l01595"></a>01595 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> -= (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[0] << 8) | <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[1];
+<a name="l01596"></a>01596 #endif <span class="comment">/* UIP_URGDATA > 0 */</span>
+<a name="l01597"></a>01597 }
+<a name="l01598"></a>01598
+<a name="l01599"></a>01599 <span class="comment">/* If uip_len > 0 we have TCP data in the packet, and we flag this</span>
+<a name="l01600"></a>01600 <span class="comment"> by setting the UIP_NEWDATA flag and update the sequence number</span>
+<a name="l01601"></a>01601 <span class="comment"> we acknowledge. If the application has stopped the dataflow</span>
+<a name="l01602"></a>01602 <span class="comment"> using uip_stop(), we must not accept any data packets from the</span>
+<a name="l01603"></a>01603 <span class="comment"> remote host. */</span>
+<a name="l01604"></a>01604 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0 && !(uip_connr->tcpstateflags & <a class="code" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">UIP_STOPPED</a>)) {
+<a name="l01605"></a>01605 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> |= <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>;
+<a name="l01606"></a>01606 uip_add_rcv_nxt(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01607"></a>01607 }
+<a name="l01608"></a>01608
+<a name="l01609"></a>01609 <span class="comment">/* Check if the available buffer space advertised by the other end</span>
+<a name="l01610"></a>01610 <span class="comment"> is smaller than the initial MSS for this connection. If so, we</span>
+<a name="l01611"></a>01611 <span class="comment"> set the current MSS to the window size to ensure that the</span>
+<a name="l01612"></a>01612 <span class="comment"> application does not send more data than the other end can</span>
+<a name="l01613"></a>01613 <span class="comment"> handle.</span>
+<a name="l01614"></a>01614 <span class="comment"></span>
+<a name="l01615"></a>01615 <span class="comment"> If the remote host advertises a zero window, we set the MSS to</span>
+<a name="l01616"></a>01616 <span class="comment"> the initial MSS so that the application will send an entire MSS</span>
+<a name="l01617"></a>01617 <span class="comment"> of data. This data will not be acknowledged by the receiver,</span>
+<a name="l01618"></a>01618 <span class="comment"> and the application will retransmit it. This is called the</span>
+<a name="l01619"></a>01619 <span class="comment"> "persistent timer" and uses the retransmission mechanim.</span>
+<a name="l01620"></a>01620 <span class="comment"> */</span>
+<a name="l01621"></a>01621 tmp16 = ((<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[0] << 8) + (<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>)<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[1];
+<a name="l01622"></a>01622 <span class="keywordflow">if</span>(tmp16 > uip_connr->initialmss ||
+<a name="l01623"></a>01623 tmp16 == 0) {
+<a name="l01624"></a>01624 tmp16 = uip_connr->initialmss;
+<a name="l01625"></a>01625 }
+<a name="l01626"></a>01626 uip_connr->mss = tmp16;
+<a name="l01627"></a>01627
+<a name="l01628"></a>01628 <span class="comment">/* If this packet constitutes an ACK for outstanding data (flagged</span>
+<a name="l01629"></a>01629 <span class="comment"> by the UIP_ACKDATA flag, we should call the application since it</span>
+<a name="l01630"></a>01630 <span class="comment"> might want to send more data. If the incoming packet had data</span>
+<a name="l01631"></a>01631 <span class="comment"> from the peer (as flagged by the UIP_NEWDATA flag), the</span>
+<a name="l01632"></a>01632 <span class="comment"> application must also be notified.</span>
+<a name="l01633"></a>01633 <span class="comment"></span>
+<a name="l01634"></a>01634 <span class="comment"> When the application is called, the global variable uip_len</span>
+<a name="l01635"></a>01635 <span class="comment"> contains the length of the incoming data. The application can</span>
+<a name="l01636"></a>01636 <span class="comment"> access the incoming data through the global pointer</span>
+<a name="l01637"></a>01637 <span class="comment"> uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN</span>
+<a name="l01638"></a>01638 <span class="comment"> bytes into the uip_buf array.</span>
+<a name="l01639"></a>01639 <span class="comment"></span>
+<a name="l01640"></a>01640 <span class="comment"> If the application wishes to send any data, this data should be</span>
+<a name="l01641"></a>01641 <span class="comment"> put into the uip_appdata and the length of the data should be</span>
+<a name="l01642"></a>01642 <span class="comment"> put into uip_len. If the application don't have any data to</span>
+<a name="l01643"></a>01643 <span class="comment"> send, uip_len must be set to 0. */</span>
+<a name="l01644"></a>01644 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & (<a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a> | UIP_ACKDATA)) {
+<a name="l01645"></a>01645 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01646"></a>01646 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01647"></a>01647
+<a name="l01648"></a>01648 appsend:
+<a name="l01649"></a>01649
+<a name="l01650"></a>01650 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & <a class="code" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">UIP_ABORT</a>) {
+<a name="l01651"></a>01651 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01652"></a>01652 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l01653"></a>01653 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">TCP_RST</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01654"></a>01654 <span class="keywordflow">goto</span> tcp_send_nodata;
+<a name="l01655"></a>01655 }
+<a name="l01656"></a>01656
+<a name="l01657"></a>01657 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & <a class="code" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">UIP_CLOSE</a>) {
+<a name="l01658"></a>01658 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = 0;
+<a name="l01659"></a>01659 uip_connr->len = 1;
+<a name="l01660"></a>01660 uip_connr->tcpstateflags = <a class="code" href="a00150.html#ga533c394b1fa0030205534befa31c525">UIP_FIN_WAIT_1</a>;
+<a name="l01661"></a>01661 uip_connr->nrtx = 0;
+<a name="l01662"></a>01662 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a> | <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01663"></a>01663 <span class="keywordflow">goto</span> tcp_send_nodata;
+<a name="l01664"></a>01664 }
+<a name="l01665"></a>01665
+<a name="l01666"></a>01666 <span class="comment">/* If uip_slen > 0, the application has data to be sent. */</span>
+<a name="l01667"></a>01667 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> > 0) {
+<a name="l01668"></a>01668
+<a name="l01669"></a>01669 <span class="comment">/* If the connection has acknowledged data, the contents of</span>
+<a name="l01670"></a>01670 <span class="comment"> the ->len variable should be discarded. */</span>
+<a name="l01671"></a>01671 <span class="keywordflow">if</span>((<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) != 0) {
+<a name="l01672"></a>01672 uip_connr->len = 0;
+<a name="l01673"></a>01673 }
+<a name="l01674"></a>01674
+<a name="l01675"></a>01675 <span class="comment">/* If the ->len variable is non-zero the connection has</span>
+<a name="l01676"></a>01676 <span class="comment"> already data in transit and cannot send anymore right</span>
+<a name="l01677"></a>01677 <span class="comment"> now. */</span>
+<a name="l01678"></a>01678 <span class="keywordflow">if</span>(uip_connr->len == 0) {
+<a name="l01679"></a>01679
+<a name="l01680"></a>01680 <span class="comment">/* The application cannot send more than what is allowed by</span>
+<a name="l01681"></a>01681 <span class="comment"> the mss (the minumum of the MSS and the available</span>
+<a name="l01682"></a>01682 <span class="comment"> window). */</span>
+<a name="l01683"></a>01683 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> > uip_connr->mss) {
+<a name="l01684"></a>01684 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = uip_connr->mss;
+<a name="l01685"></a>01685 }
+<a name="l01686"></a>01686
+<a name="l01687"></a>01687 <span class="comment">/* Remember how much data we send out now so that we know</span>
+<a name="l01688"></a>01688 <span class="comment"> when everything has been acknowledged. */</span>
+<a name="l01689"></a>01689 uip_connr->len = <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a>;
+<a name="l01690"></a>01690 } <span class="keywordflow">else</span> {
+<a name="l01691"></a>01691
+<a name="l01692"></a>01692 <span class="comment">/* If the application already had unacknowledged data, we</span>
+<a name="l01693"></a>01693 <span class="comment"> make sure that the application does not send (i.e.,</span>
+<a name="l01694"></a>01694 <span class="comment"> retransmit) out more than it previously sent out. */</span>
+<a name="l01695"></a>01695 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = uip_connr->len;
+<a name="l01696"></a>01696 }
+<a name="l01697"></a>01697 }
+<a name="l01698"></a>01698 uip_connr->nrtx = 0;
+<a name="l01699"></a>01699 apprexmit:
+<a name="l01700"></a>01700 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = <a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a>;
+<a name="l01701"></a>01701
+<a name="l01702"></a>01702 <span class="comment">/* If the application has data to be sent, or if the incoming</span>
+<a name="l01703"></a>01703 <span class="comment"> packet had new data in it, we must send out a packet. */</span>
+<a name="l01704"></a>01704 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> > 0 && uip_connr->len > 0) {
+<a name="l01705"></a>01705 <span class="comment">/* Add the length of the IP and TCP headers. */</span>
+<a name="l01706"></a>01706 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = uip_connr->len + <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>;
+<a name="l01707"></a>01707 <span class="comment">/* We always set the ACK flag in response packets. */</span>
+<a name="l01708"></a>01708 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a> | <a class="code" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">TCP_PSH</a>;
+<a name="l01709"></a>01709 <span class="comment">/* Send the packet. */</span>
+<a name="l01710"></a>01710 <span class="keywordflow">goto</span> tcp_send_noopts;
+<a name="l01711"></a>01711 }
+<a name="l01712"></a>01712 <span class="comment">/* If there is no data to send, just send out a pure ACK if</span>
+<a name="l01713"></a>01713 <span class="comment"> there is newdata. */</span>
+<a name="l01714"></a>01714 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & <a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">UIP_NEWDATA</a>) {
+<a name="l01715"></a>01715 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>;
+<a name="l01716"></a>01716 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01717"></a>01717 <span class="keywordflow">goto</span> tcp_send_noopts;
+<a name="l01718"></a>01718 }
+<a name="l01719"></a>01719 }
+<a name="l01720"></a>01720 <span class="keywordflow">goto</span> drop;
+<a name="l01721"></a>01721 <span class="keywordflow">case</span> <a class="code" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">UIP_LAST_ACK</a>:
+<a name="l01722"></a>01722 <span class="comment">/* We can close this connection if the peer has acknowledged our</span>
+<a name="l01723"></a>01723 <span class="comment"> FIN. This is indicated by the UIP_ACKDATA flag. */</span>
+<a name="l01724"></a>01724 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) {
+<a name="l01725"></a>01725 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;
+<a name="l01726"></a>01726 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = UIP_CLOSE;
+<a name="l01727"></a>01727 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01728"></a>01728 }
+<a name="l01729"></a>01729 <span class="keywordflow">break</span>;
+<a name="l01730"></a>01730
+<a name="l01731"></a>01731 <span class="keywordflow">case</span> <a class="code" href="a00150.html#ga533c394b1fa0030205534befa31c525">UIP_FIN_WAIT_1</a>:
+<a name="l01732"></a>01732 <span class="comment">/* The application has closed the connection, but the remote host</span>
+<a name="l01733"></a>01733 <span class="comment"> hasn't closed its end yet. Thus we do nothing but wait for a</span>
+<a name="l01734"></a>01734 <span class="comment"> FIN from the other side. */</span>
+<a name="l01735"></a>01735 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01736"></a>01736 uip_add_rcv_nxt(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01737"></a>01737 }
+<a name="l01738"></a>01738 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a>) {
+<a name="l01739"></a>01739 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) {
+<a name="l01740"></a>01740 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>;
+<a name="l01741"></a>01741 uip_connr->timer = 0;
+<a name="l01742"></a>01742 uip_connr->len = 0;
+<a name="l01743"></a>01743 } <span class="keywordflow">else</span> {
+<a name="l01744"></a>01744 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g64d9affc680a445d708234e70450477b">UIP_CLOSING</a>;
+<a name="l01745"></a>01745 }
+<a name="l01746"></a>01746 uip_add_rcv_nxt(1);
+<a name="l01747"></a>01747 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = UIP_CLOSE;
+<a name="l01748"></a>01748 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01749"></a>01749 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01750"></a>01750 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) {
+<a name="l01751"></a>01751 uip_connr->tcpstateflags = <a class="code" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">UIP_FIN_WAIT_2</a>;
+<a name="l01752"></a>01752 uip_connr->len = 0;
+<a name="l01753"></a>01753 <span class="keywordflow">goto</span> drop;
+<a name="l01754"></a>01754 }
+<a name="l01755"></a>01755 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01756"></a>01756 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01757"></a>01757 }
+<a name="l01758"></a>01758 <span class="keywordflow">goto</span> drop;
+<a name="l01759"></a>01759
+<a name="l01760"></a>01760 <span class="keywordflow">case</span> <a class="code" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">UIP_FIN_WAIT_2</a>:
+<a name="l01761"></a>01761 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01762"></a>01762 uip_add_rcv_nxt(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>);
+<a name="l01763"></a>01763 }
+<a name="l01764"></a>01764 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags & <a class="code" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">TCP_FIN</a>) {
+<a name="l01765"></a>01765 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>;
+<a name="l01766"></a>01766 uip_connr->timer = 0;
+<a name="l01767"></a>01767 uip_add_rcv_nxt(1);
+<a name="l01768"></a>01768 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = UIP_CLOSE;
+<a name="l01769"></a>01769 <a class="code" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL</a>();
+<a name="l01770"></a>01770 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01771"></a>01771 }
+<a name="l01772"></a>01772 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) {
+<a name="l01773"></a>01773 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01774"></a>01774 }
+<a name="l01775"></a>01775 <span class="keywordflow">goto</span> drop;
+<a name="l01776"></a>01776
+<a name="l01777"></a>01777 <span class="keywordflow">case</span> <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>:
+<a name="l01778"></a>01778 <span class="keywordflow">goto</span> tcp_send_ack;
+<a name="l01779"></a>01779
+<a name="l01780"></a>01780 <span class="keywordflow">case</span> <a class="code" href="a00150.html#g64d9affc680a445d708234e70450477b">UIP_CLOSING</a>:
+<a name="l01781"></a>01781 <span class="keywordflow">if</span>(<a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> & UIP_ACKDATA) {
+<a name="l01782"></a>01782 uip_connr->tcpstateflags = <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>;
+<a name="l01783"></a>01783 uip_connr->timer = 0;
+<a name="l01784"></a>01784 }
+<a name="l01785"></a>01785 }
+<a name="l01786"></a>01786 <span class="keywordflow">goto</span> drop;
+<a name="l01787"></a>01787
+<a name="l01788"></a>01788
+<a name="l01789"></a>01789 <span class="comment">/* We jump here when we are ready to send the packet, and just want</span>
+<a name="l01790"></a>01790 <span class="comment"> to set the appropriate TCP sequence numbers in the TCP header. */</span>
+<a name="l01791"></a>01791 tcp_send_ack:
+<a name="l01792"></a>01792 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flags = <a class="code" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">TCP_ACK</a>;
+<a name="l01793"></a>01793 tcp_send_nodata:
+<a name="l01794"></a>01794 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">UIP_IPTCPH_LEN</a>;
+<a name="l01795"></a>01795 tcp_send_noopts:
+<a name="l01796"></a>01796 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpoffset = (<a class="code" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">UIP_TCPH_LEN</a> / 4) << 4;
+<a name="l01797"></a>01797 tcp_send:
+<a name="l01798"></a>01798 <span class="comment">/* We're done with the input processing. We are now ready to send a</span>
+<a name="l01799"></a>01799 <span class="comment"> reply. Our job is to fill in all the fields of the TCP and IP</span>
+<a name="l01800"></a>01800 <span class="comment"> headers before calculating the checksum and finally send the</span>
+<a name="l01801"></a>01801 <span class="comment"> packet. */</span>
+<a name="l01802"></a>01802 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[0] = uip_connr->rcv_nxt[0];
+<a name="l01803"></a>01803 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[1] = uip_connr->rcv_nxt[1];
+<a name="l01804"></a>01804 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[2] = uip_connr->rcv_nxt[2];
+<a name="l01805"></a>01805 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ackno[3] = uip_connr->rcv_nxt[3];
+<a name="l01806"></a>01806
+<a name="l01807"></a>01807 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[0] = uip_connr->snd_nxt[0];
+<a name="l01808"></a>01808 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[1] = uip_connr->snd_nxt[1];
+<a name="l01809"></a>01809 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[2] = uip_connr->snd_nxt[2];
+<a name="l01810"></a>01810 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->seqno[3] = uip_connr->snd_nxt[3];
+<a name="l01811"></a>01811
+<a name="l01812"></a>01812 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->proto = <a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a>;
+<a name="l01813"></a>01813
+<a name="l01814"></a>01814 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcport = uip_connr->lport;
+<a name="l01815"></a>01815 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destport = uip_connr->rport;
+<a name="l01816"></a>01816
+<a name="l01817"></a>01817 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->srcipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l01818"></a>01818 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->destipaddr, uip_connr->ripaddr);
+<a name="l01819"></a>01819
+<a name="l01820"></a>01820 <span class="keywordflow">if</span>(uip_connr->tcpstateflags & <a class="code" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">UIP_STOPPED</a>) {
+<a name="l01821"></a>01821 <span class="comment">/* If the connection has issued uip_stop(), we advertise a zero</span>
+<a name="l01822"></a>01822 <span class="comment"> window so that the remote host will stop sending data. */</span>
+<a name="l01823"></a>01823 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[1] = 0;
+<a name="l01824"></a>01824 } <span class="keywordflow">else</span> {
+<a name="l01825"></a>01825 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[0] = ((<a class="code" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">UIP_RECEIVE_WINDOW</a>) >> 8);
+<a name="l01826"></a>01826 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->wnd[1] = ((<a class="code" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">UIP_RECEIVE_WINDOW</a>) & 0xff);
+<a name="l01827"></a>01827 }
+<a name="l01828"></a>01828
+<a name="l01829"></a>01829 tcp_send_noconn:
+<a name="l01830"></a>01830 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ttl = <a class="code" href="a00153.html#gb61381673de27f31848c5396bf0b338e">UIP_TTL</a>;
+<a name="l01831"></a>01831 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01832"></a>01832 <span class="preprocessor"></span> <span class="comment">/* For IPv6, the IP length field does not include the IPv6 IP header</span>
+<a name="l01833"></a>01833 <span class="comment"> length. */</span>
+<a name="l01834"></a>01834 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_IPH_LEN) >> 8);
+<a name="l01835"></a>01835 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = ((<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_IPH_LEN) & 0xff);
+<a name="l01836"></a>01836 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01837"></a>01837 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] = (<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> >> 8);
+<a name="l01838"></a>01838 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1] = (<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> & 0xff);
+<a name="l01839"></a>01839 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01840"></a>01840
+<a name="l01841"></a>01841 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->urgp[1] = 0;
+<a name="l01842"></a>01842
+<a name="l01843"></a>01843 <span class="comment">/* Calculate TCP checksum. */</span>
+<a name="l01844"></a>01844 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = 0;
+<a name="l01845"></a>01845 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcpchksum = ~(<a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>());
+<a name="l01846"></a>01846
+<a name="l01847"></a>01847 ip_send_nolen:
+<a name="l01848"></a>01848
+<a name="l01849"></a>01849 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01850"></a>01850 <span class="preprocessor"></span> <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vtc = 0x60;
+<a name="l01851"></a>01851 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tcflow = 0x00;
+<a name="l01852"></a>01852 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->flow = 0x00;
+<a name="l01853"></a>01853 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01854"></a>01854 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->vhl = 0x45;
+<a name="l01855"></a>01855 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->tos = 0;
+<a name="l01856"></a>01856 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipoffset[1] = 0;
+<a name="l01857"></a>01857 ++ipid;
+<a name="l01858"></a>01858 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipid[0] = ipid >> 8;
+<a name="l01859"></a>01859 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipid[1] = ipid & 0xff;
+<a name="l01860"></a>01860 <span class="comment">/* Calculate IP checksum. */</span>
+<a name="l01861"></a>01861 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = 0;
+<a name="l01862"></a>01862 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ipchksum = ~(<a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l01863"></a>01863 <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"uip ip_send_nolen: chkecum 0x%04x\n"</span>, <a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>());
+<a name="l01864"></a>01864 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01865"></a>01865
+<a name="l01866"></a>01866 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>.<a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>);
+<a name="l01867"></a>01867 send:
+<a name="l01868"></a>01868 <a class="code" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">DEBUG_PRINTF</a>(<span class="stringliteral">"Sending packet with length %d (%d)\n"</span>, <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>,
+<a name="l01869"></a>01869 (<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[0] << 8) | <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->len[1]);
+<a name="l01870"></a>01870
+<a name="l01871"></a>01871 <a class="code" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">UIP_STAT</a>(++<a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>.<a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>.<a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>);
+<a name="l01872"></a>01872 <span class="comment">/* Return and let the caller do the actual transmission. */</span>
+<a name="l01873"></a>01873 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = 0;
+<a name="l01874"></a>01874 <span class="keywordflow">return</span>;
+<a name="l01875"></a>01875 drop:
+<a name="l01876"></a>01876 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = 0;
+<a name="l01877"></a>01877 <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a> = 0;
+<a name="l01878"></a>01878 <span class="keywordflow">return</span>;
+<a name="l01879"></a>01879 }
+<a name="l01880"></a>01880 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l01881"></a>01881 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>
+<a name="l01882"></a><a class="code" href="a00150.html#ga22b04cac8cf283ca12f028578bebc06">01882</a> <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val)
+<a name="l01883"></a>01883 {
+<a name="l01884"></a>01884 <span class="keywordflow">return</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(val);
+<a name="l01885"></a>01885 }
+<a name="l01886"></a>01886 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l01887"></a>01887 <span class="keywordtype">void</span>
+<a name="l01888"></a><a class="code" href="a00150.html#g04b053a623aac7cd4195157d470661b3">01888</a> <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">int</span> len)
+<a name="l01889"></a>01889 {
+<a name="l01890"></a>01890 <span class="keywordflow">if</span>(len > 0) {
+<a name="l01891"></a>01891 <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a> = len;
+<a name="l01892"></a>01892 <span class="keywordflow">if</span>(data != <a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a>) {
+<a name="l01893"></a>01893 memcpy(<a class="code" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip_sappdata</a>, (data), <a class="code" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip_slen</a>);
+<a name="l01894"></a>01894 }
+<a name="l01895"></a>01895 }
+<a name="l01896"></a>01896 }<span class="comment"></span>
+<a name="l01897"></a>01897 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00202.html b/third_party/uip-1.0/doc/html/a00202.html new file mode 100644 index 0000000..53a41d3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00202.html @@ -0,0 +1,1626 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip.h</h1><a href="a00136.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment"></span>
+<a name="l00002"></a>00002 <span class="comment">/**</span>
+<a name="l00003"></a>00003 <span class="comment"> * \addtogroup uip</span>
+<a name="l00004"></a>00004 <span class="comment"> * @{</span>
+<a name="l00005"></a>00005 <span class="comment"> */</span>
+<a name="l00006"></a>00006 <span class="comment"></span>
+<a name="l00007"></a>00007 <span class="comment">/**</span>
+<a name="l00008"></a>00008 <span class="comment"> * \file</span>
+<a name="l00009"></a>00009 <span class="comment"> * Header file for the uIP TCP/IP stack.</span>
+<a name="l00010"></a>00010 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> * The uIP TCP/IP stack header file contains definitions for a number</span>
+<a name="l00013"></a>00013 <span class="comment"> * of C macros that are used by uIP programs as well as internal uIP</span>
+<a name="l00014"></a>00014 <span class="comment"> * structures, TCP/IP header structures and function declarations.</span>
+<a name="l00015"></a>00015 <span class="comment"> *</span>
+<a name="l00016"></a>00016 <span class="comment"> */</span>
+<a name="l00017"></a>00017
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <span class="comment">/*</span>
+<a name="l00020"></a>00020 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
+<a name="l00021"></a>00021 <span class="comment"> * All rights reserved.</span>
+<a name="l00022"></a>00022 <span class="comment"> *</span>
+<a name="l00023"></a>00023 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00024"></a>00024 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00025"></a>00025 <span class="comment"> * are met:</span>
+<a name="l00026"></a>00026 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00027"></a>00027 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00028"></a>00028 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00029"></a>00029 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00030"></a>00030 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00031"></a>00031 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00032"></a>00032 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00033"></a>00033 <span class="comment"> * written permission.</span>
+<a name="l00034"></a>00034 <span class="comment"> *</span>
+<a name="l00035"></a>00035 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00036"></a>00036 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00037"></a>00037 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00038"></a>00038 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00039"></a>00039 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00040"></a>00040 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00041"></a>00041 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00042"></a>00042 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00043"></a>00043 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00044"></a>00044 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00045"></a>00045 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00046"></a>00046 <span class="comment"> *</span>
+<a name="l00047"></a>00047 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00048"></a>00048 <span class="comment"> *</span>
+<a name="l00049"></a>00049 <span class="comment"> * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $</span>
+<a name="l00050"></a>00050 <span class="comment"> *</span>
+<a name="l00051"></a>00051 <span class="comment"> */</span>
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="preprocessor">#ifndef __UIP_H__</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_H__</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include "<a class="code" href="a00140.html">uipopt.h</a>"</span>
+<a name="l00057"></a>00057 <span class="comment"></span>
+<a name="l00058"></a>00058 <span class="comment">/**</span>
+<a name="l00059"></a>00059 <span class="comment"> * Repressentation of an IP address.</span>
+<a name="l00060"></a>00060 <span class="comment"> *</span>
+<a name="l00061"></a>00061 <span class="comment"> */</span>
+<a name="l00062"></a><a class="code" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">00062</a> <span class="keyword">typedef</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a>[2];
+<a name="l00063"></a><a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">00063</a> <span class="keyword">typedef</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a>[8];
+<a name="l00064"></a>00064 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a>;
+<a name="l00066"></a>00066 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00067"></a><a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">00067</a> <span class="keyword">typedef</span> <a class="code" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip_ip4addr_t</a> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a>;
+<a name="l00068"></a>00068 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l00069"></a>00069
+<a name="l00070"></a>00070 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00071"></a>00071 <span class="comment">/* First, the functions that should be called from the</span>
+<a name="l00072"></a>00072 <span class="comment"> * system. Initialization, the periodic timer and incoming packets are</span>
+<a name="l00073"></a>00073 <span class="comment"> * handled by the following three functions.</span>
+<a name="l00074"></a>00074 <span class="comment"> */</span>
+<a name="l00075"></a>00075 <span class="comment"></span>
+<a name="l00076"></a>00076 <span class="comment">/**</span>
+<a name="l00077"></a>00077 <span class="comment"> * \defgroup uipconffunc uIP configuration functions</span>
+<a name="l00078"></a>00078 <span class="comment"> * @{</span>
+<a name="l00079"></a>00079 <span class="comment"> *</span>
+<a name="l00080"></a>00080 <span class="comment"> * The uIP configuration functions are used for setting run-time</span>
+<a name="l00081"></a>00081 <span class="comment"> * parameters in uIP such as IP addresses.</span>
+<a name="l00082"></a>00082 <span class="comment"> */</span>
+<a name="l00083"></a>00083 <span class="comment"></span>
+<a name="l00084"></a>00084 <span class="comment">/**</span>
+<a name="l00085"></a>00085 <span class="comment"> * Set the IP address of this host.</span>
+<a name="l00086"></a>00086 <span class="comment"> *</span>
+<a name="l00087"></a>00087 <span class="comment"> * The IP address is represented as a 4-byte array where the first</span>
+<a name="l00088"></a>00088 <span class="comment"> * octet of the IP address is put in the first member of the 4-byte</span>
+<a name="l00089"></a>00089 <span class="comment"> * array.</span>
+<a name="l00090"></a>00090 <span class="comment"> *</span>
+<a name="l00091"></a>00091 <span class="comment"> * Example:</span>
+<a name="l00092"></a>00092 <span class="comment"> \code</span>
+<a name="l00093"></a>00093 <span class="comment"></span>
+<a name="l00094"></a>00094 <span class="comment"> uip_ipaddr_t addr;</span>
+<a name="l00095"></a>00095 <span class="comment"></span>
+<a name="l00096"></a>00096 <span class="comment"> uip_ipaddr(&addr, 192,168,1,2);</span>
+<a name="l00097"></a>00097 <span class="comment"> uip_sethostaddr(&addr);</span>
+<a name="l00098"></a>00098 <span class="comment"> </span>
+<a name="l00099"></a>00099 <span class="comment"> \endcode</span>
+<a name="l00100"></a>00100 <span class="comment"> * \param addr A pointer to an IP address of type uip_ipaddr_t;</span>
+<a name="l00101"></a>00101 <span class="comment"> *</span>
+<a name="l00102"></a>00102 <span class="comment"> * \sa uip_ipaddr()</span>
+<a name="l00103"></a>00103 <span class="comment"> *</span>
+<a name="l00104"></a>00104 <span class="comment"> * \hideinitializer</span>
+<a name="l00105"></a>00105 <span class="comment"> */</span>
+<a name="l00106"></a><a class="code" href="a00144.html#g12b467f314489259dd718228d0827a51">00106</a> <span class="preprocessor">#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr))</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00108"></a>00108 <span class="comment">/**</span>
+<a name="l00109"></a>00109 <span class="comment"> * Get the IP address of this host.</span>
+<a name="l00110"></a>00110 <span class="comment"> *</span>
+<a name="l00111"></a>00111 <span class="comment"> * The IP address is represented as a 4-byte array where the first</span>
+<a name="l00112"></a>00112 <span class="comment"> * octet of the IP address is put in the first member of the 4-byte</span>
+<a name="l00113"></a>00113 <span class="comment"> * array.</span>
+<a name="l00114"></a>00114 <span class="comment"> *</span>
+<a name="l00115"></a>00115 <span class="comment"> * Example:</span>
+<a name="l00116"></a>00116 <span class="comment"> \code</span>
+<a name="l00117"></a>00117 <span class="comment"> uip_ipaddr_t hostaddr;</span>
+<a name="l00118"></a>00118 <span class="comment"></span>
+<a name="l00119"></a>00119 <span class="comment"> uip_gethostaddr(&hostaddr);</span>
+<a name="l00120"></a>00120 <span class="comment"> \endcode</span>
+<a name="l00121"></a>00121 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable that will be</span>
+<a name="l00122"></a>00122 <span class="comment"> * filled in with the currently configured IP address.</span>
+<a name="l00123"></a>00123 <span class="comment"> *</span>
+<a name="l00124"></a>00124 <span class="comment"> * \hideinitializer</span>
+<a name="l00125"></a>00125 <span class="comment"> */</span>
+<a name="l00126"></a><a class="code" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">00126</a> <span class="preprocessor">#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr)</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00128"></a>00128 <span class="comment">/**</span>
+<a name="l00129"></a>00129 <span class="comment"> * Set the default router's IP address.</span>
+<a name="l00130"></a>00130 <span class="comment"> *</span>
+<a name="l00131"></a>00131 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable containing the IP</span>
+<a name="l00132"></a>00132 <span class="comment"> * address of the default router.</span>
+<a name="l00133"></a>00133 <span class="comment"> *</span>
+<a name="l00134"></a>00134 <span class="comment"> * \sa uip_ipaddr()</span>
+<a name="l00135"></a>00135 <span class="comment"> *</span>
+<a name="l00136"></a>00136 <span class="comment"> * \hideinitializer</span>
+<a name="l00137"></a>00137 <span class="comment"> */</span>
+<a name="l00138"></a><a class="code" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">00138</a> <span class="preprocessor">#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr))</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00140"></a>00140 <span class="comment">/**</span>
+<a name="l00141"></a>00141 <span class="comment"> * Set the netmask.</span>
+<a name="l00142"></a>00142 <span class="comment"> *</span>
+<a name="l00143"></a>00143 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable containing the IP</span>
+<a name="l00144"></a>00144 <span class="comment"> * address of the netmask.</span>
+<a name="l00145"></a>00145 <span class="comment"> *</span>
+<a name="l00146"></a>00146 <span class="comment"> * \sa uip_ipaddr()</span>
+<a name="l00147"></a>00147 <span class="comment"> *</span>
+<a name="l00148"></a>00148 <span class="comment"> * \hideinitializer</span>
+<a name="l00149"></a>00149 <span class="comment"> */</span>
+<a name="l00150"></a><a class="code" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">00150</a> <span class="preprocessor">#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr))</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00152"></a>00152 <span class="comment"></span>
+<a name="l00153"></a>00153 <span class="comment">/**</span>
+<a name="l00154"></a>00154 <span class="comment"> * Get the default router's IP address.</span>
+<a name="l00155"></a>00155 <span class="comment"> *</span>
+<a name="l00156"></a>00156 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable that will be</span>
+<a name="l00157"></a>00157 <span class="comment"> * filled in with the IP address of the default router.</span>
+<a name="l00158"></a>00158 <span class="comment"> *</span>
+<a name="l00159"></a>00159 <span class="comment"> * \hideinitializer</span>
+<a name="l00160"></a>00160 <span class="comment"> */</span>
+<a name="l00161"></a><a class="code" href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c">00161</a> <span class="preprocessor">#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr)</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00163"></a>00163 <span class="comment">/**</span>
+<a name="l00164"></a>00164 <span class="comment"> * Get the netmask.</span>
+<a name="l00165"></a>00165 <span class="comment"> *</span>
+<a name="l00166"></a>00166 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable that will be</span>
+<a name="l00167"></a>00167 <span class="comment"> * filled in with the value of the netmask.</span>
+<a name="l00168"></a>00168 <span class="comment"> *</span>
+<a name="l00169"></a>00169 <span class="comment"> * \hideinitializer</span>
+<a name="l00170"></a>00170 <span class="comment"> */</span>
+<a name="l00171"></a><a class="code" href="a00144.html#g5323320b7316647042016f17c4e881be">00171</a> <span class="preprocessor">#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask)</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00173"></a>00173 <span class="comment">/** @} */</span>
+<a name="l00174"></a>00174 <span class="comment"></span>
+<a name="l00175"></a>00175 <span class="comment">/**</span>
+<a name="l00176"></a>00176 <span class="comment"> * \defgroup uipinit uIP initialization functions</span>
+<a name="l00177"></a>00177 <span class="comment"> * @{</span>
+<a name="l00178"></a>00178 <span class="comment"> *</span>
+<a name="l00179"></a>00179 <span class="comment"> * The uIP initialization functions are used for booting uIP.</span>
+<a name="l00180"></a>00180 <span class="comment"> */</span>
+<a name="l00181"></a>00181 <span class="comment"></span>
+<a name="l00182"></a>00182 <span class="comment">/**</span>
+<a name="l00183"></a>00183 <span class="comment"> * uIP initialization function.</span>
+<a name="l00184"></a>00184 <span class="comment"> *</span>
+<a name="l00185"></a>00185 <span class="comment"> * This function should be called at boot up to initilize the uIP</span>
+<a name="l00186"></a>00186 <span class="comment"> * TCP/IP stack.</span>
+<a name="l00187"></a>00187 <span class="comment"> */</span>
+<a name="l00188"></a>00188 <span class="keywordtype">void</span> <a class="code" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a>(<span class="keywordtype">void</span>);
+<a name="l00189"></a>00189 <span class="comment"></span>
+<a name="l00190"></a>00190 <span class="comment">/**</span>
+<a name="l00191"></a>00191 <span class="comment"> * uIP initialization function.</span>
+<a name="l00192"></a>00192 <span class="comment"> *</span>
+<a name="l00193"></a>00193 <span class="comment"> * This function may be used at boot time to set the initial ip_id.</span>
+<a name="l00194"></a>00194 <span class="comment"> */</span>
+<a name="l00195"></a>00195 <span class="keywordtype">void</span> <a class="code" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip_setipid</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <span class="keywordtype">id</span>);
+<a name="l00196"></a>00196 <span class="comment"></span>
+<a name="l00197"></a>00197 <span class="comment">/** @} */</span>
+<a name="l00198"></a>00198 <span class="comment"></span>
+<a name="l00199"></a>00199 <span class="comment">/**</span>
+<a name="l00200"></a>00200 <span class="comment"> * \defgroup uipdevfunc uIP device driver functions</span>
+<a name="l00201"></a>00201 <span class="comment"> * @{</span>
+<a name="l00202"></a>00202 <span class="comment"> *</span>
+<a name="l00203"></a>00203 <span class="comment"> * These functions are used by a network device driver for interacting</span>
+<a name="l00204"></a>00204 <span class="comment"> * with uIP.</span>
+<a name="l00205"></a>00205 <span class="comment"> */</span>
+<a name="l00206"></a>00206 <span class="comment"></span>
+<a name="l00207"></a>00207 <span class="comment">/**</span>
+<a name="l00208"></a>00208 <span class="comment"> * Process an incoming packet.</span>
+<a name="l00209"></a>00209 <span class="comment"> *</span>
+<a name="l00210"></a>00210 <span class="comment"> * This function should be called when the device driver has received</span>
+<a name="l00211"></a>00211 <span class="comment"> * a packet from the network. The packet from the device driver must</span>
+<a name="l00212"></a>00212 <span class="comment"> * be present in the uip_buf buffer, and the length of the packet</span>
+<a name="l00213"></a>00213 <span class="comment"> * should be placed in the uip_len variable.</span>
+<a name="l00214"></a>00214 <span class="comment"> *</span>
+<a name="l00215"></a>00215 <span class="comment"> * When the function returns, there may be an outbound packet placed</span>
+<a name="l00216"></a>00216 <span class="comment"> * in the uip_buf packet buffer. If so, the uip_len variable is set to</span>
+<a name="l00217"></a>00217 <span class="comment"> * the length of the packet. If no packet is to be sent out, the</span>
+<a name="l00218"></a>00218 <span class="comment"> * uip_len variable is set to 0.</span>
+<a name="l00219"></a>00219 <span class="comment"> *</span>
+<a name="l00220"></a>00220 <span class="comment"> * The usual way of calling the function is presented by the source</span>
+<a name="l00221"></a>00221 <span class="comment"> * code below.</span>
+<a name="l00222"></a>00222 <span class="comment"> \code</span>
+<a name="l00223"></a>00223 <span class="comment"> uip_len = devicedriver_poll();</span>
+<a name="l00224"></a>00224 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00225"></a>00225 <span class="comment"> uip_input();</span>
+<a name="l00226"></a>00226 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00227"></a>00227 <span class="comment"> devicedriver_send();</span>
+<a name="l00228"></a>00228 <span class="comment"> }</span>
+<a name="l00229"></a>00229 <span class="comment"> }</span>
+<a name="l00230"></a>00230 <span class="comment"> \endcode</span>
+<a name="l00231"></a>00231 <span class="comment"> *</span>
+<a name="l00232"></a>00232 <span class="comment"> * \note If you are writing a uIP device driver that needs ARP</span>
+<a name="l00233"></a>00233 <span class="comment"> * (Address Resolution Protocol), e.g., when running uIP over</span>
+<a name="l00234"></a>00234 <span class="comment"> * Ethernet, you will need to call the uIP ARP code before calling</span>
+<a name="l00235"></a>00235 <span class="comment"> * this function:</span>
+<a name="l00236"></a>00236 <span class="comment"> \code</span>
+<a name="l00237"></a>00237 <span class="comment"> #define BUF ((struct uip_eth_hdr *)&uip_buf[0])</span>
+<a name="l00238"></a>00238 <span class="comment"> uip_len = ethernet_devicedrver_poll();</span>
+<a name="l00239"></a>00239 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00240"></a>00240 <span class="comment"> if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {</span>
+<a name="l00241"></a>00241 <span class="comment"> uip_arp_ipin();</span>
+<a name="l00242"></a>00242 <span class="comment"> uip_input();</span>
+<a name="l00243"></a>00243 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00244"></a>00244 <span class="comment"> uip_arp_out();</span>
+<a name="l00245"></a>00245 <span class="comment"> ethernet_devicedriver_send();</span>
+<a name="l00246"></a>00246 <span class="comment"> }</span>
+<a name="l00247"></a>00247 <span class="comment"> } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {</span>
+<a name="l00248"></a>00248 <span class="comment"> uip_arp_arpin();</span>
+<a name="l00249"></a>00249 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00250"></a>00250 <span class="comment"> ethernet_devicedriver_send();</span>
+<a name="l00251"></a>00251 <span class="comment"> }</span>
+<a name="l00252"></a>00252 <span class="comment"> }</span>
+<a name="l00253"></a>00253 <span class="comment"> \endcode</span>
+<a name="l00254"></a>00254 <span class="comment"> *</span>
+<a name="l00255"></a>00255 <span class="comment"> * \hideinitializer</span>
+<a name="l00256"></a>00256 <span class="comment"> */</span>
+<a name="l00257"></a><a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">00257</a> <span class="preprocessor">#define uip_input() uip_process(UIP_DATA)</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00259"></a>00259 <span class="comment">/**</span>
+<a name="l00260"></a>00260 <span class="comment"> * Periodic processing for a connection identified by its number.</span>
+<a name="l00261"></a>00261 <span class="comment"> *</span>
+<a name="l00262"></a>00262 <span class="comment"> * This function does the necessary periodic processing (timers,</span>
+<a name="l00263"></a>00263 <span class="comment"> * polling) for a uIP TCP conneciton, and should be called when the</span>
+<a name="l00264"></a>00264 <span class="comment"> * periodic uIP timer goes off. It should be called for every</span>
+<a name="l00265"></a>00265 <span class="comment"> * connection, regardless of whether they are open of closed.</span>
+<a name="l00266"></a>00266 <span class="comment"> *</span>
+<a name="l00267"></a>00267 <span class="comment"> * When the function returns, it may have an outbound packet waiting</span>
+<a name="l00268"></a>00268 <span class="comment"> * for service in the uIP packet buffer, and if so the uip_len</span>
+<a name="l00269"></a>00269 <span class="comment"> * variable is set to a value larger than zero. The device driver</span>
+<a name="l00270"></a>00270 <span class="comment"> * should be called to send out the packet.</span>
+<a name="l00271"></a>00271 <span class="comment"> *</span>
+<a name="l00272"></a>00272 <span class="comment"> * The ususal way of calling the function is through a for() loop like</span>
+<a name="l00273"></a>00273 <span class="comment"> * this:</span>
+<a name="l00274"></a>00274 <span class="comment"> \code</span>
+<a name="l00275"></a>00275 <span class="comment"> for(i = 0; i < UIP_CONNS; ++i) {</span>
+<a name="l00276"></a>00276 <span class="comment"> uip_periodic(i);</span>
+<a name="l00277"></a>00277 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00278"></a>00278 <span class="comment"> devicedriver_send();</span>
+<a name="l00279"></a>00279 <span class="comment"> }</span>
+<a name="l00280"></a>00280 <span class="comment"> }</span>
+<a name="l00281"></a>00281 <span class="comment"> \endcode</span>
+<a name="l00282"></a>00282 <span class="comment"> *</span>
+<a name="l00283"></a>00283 <span class="comment"> * \note If you are writing a uIP device driver that needs ARP</span>
+<a name="l00284"></a>00284 <span class="comment"> * (Address Resolution Protocol), e.g., when running uIP over</span>
+<a name="l00285"></a>00285 <span class="comment"> * Ethernet, you will need to call the uip_arp_out() function before</span>
+<a name="l00286"></a>00286 <span class="comment"> * calling the device driver:</span>
+<a name="l00287"></a>00287 <span class="comment"> \code</span>
+<a name="l00288"></a>00288 <span class="comment"> for(i = 0; i < UIP_CONNS; ++i) {</span>
+<a name="l00289"></a>00289 <span class="comment"> uip_periodic(i);</span>
+<a name="l00290"></a>00290 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00291"></a>00291 <span class="comment"> uip_arp_out();</span>
+<a name="l00292"></a>00292 <span class="comment"> ethernet_devicedriver_send();</span>
+<a name="l00293"></a>00293 <span class="comment"> }</span>
+<a name="l00294"></a>00294 <span class="comment"> }</span>
+<a name="l00295"></a>00295 <span class="comment"> \endcode</span>
+<a name="l00296"></a>00296 <span class="comment"> *</span>
+<a name="l00297"></a>00297 <span class="comment"> * \param conn The number of the connection which is to be periodically polled.</span>
+<a name="l00298"></a>00298 <span class="comment"> *</span>
+<a name="l00299"></a>00299 <span class="comment"> * \hideinitializer</span>
+<a name="l00300"></a>00300 <span class="comment"> */</span>
+<a name="l00301"></a><a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">00301</a> <span class="preprocessor">#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \</span>
+<a name="l00302"></a>00302 <span class="preprocessor"> uip_process(UIP_TIMER); } while (0)</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00304"></a>00304 <span class="comment">/**</span>
+<a name="l00305"></a>00305 <span class="comment"> *</span>
+<a name="l00306"></a>00306 <span class="comment"> *</span>
+<a name="l00307"></a>00307 <span class="comment"> */</span>
+<a name="l00308"></a><a class="code" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">00308</a> <span class="preprocessor">#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00310"></a>00310 <span class="comment">/**</span>
+<a name="l00311"></a>00311 <span class="comment"> * Perform periodic processing for a connection identified by a pointer</span>
+<a name="l00312"></a>00312 <span class="comment"> * to its structure.</span>
+<a name="l00313"></a>00313 <span class="comment"> *</span>
+<a name="l00314"></a>00314 <span class="comment"> * Same as uip_periodic() but takes a pointer to the actual uip_conn</span>
+<a name="l00315"></a>00315 <span class="comment"> * struct instead of an integer as its argument. This function can be</span>
+<a name="l00316"></a>00316 <span class="comment"> * used to force periodic processing of a specific connection.</span>
+<a name="l00317"></a>00317 <span class="comment"> *</span>
+<a name="l00318"></a>00318 <span class="comment"> * \param conn A pointer to the uip_conn struct for the connection to</span>
+<a name="l00319"></a>00319 <span class="comment"> * be processed.</span>
+<a name="l00320"></a>00320 <span class="comment"> *</span>
+<a name="l00321"></a>00321 <span class="comment"> * \hideinitializer</span>
+<a name="l00322"></a>00322 <span class="comment"> */</span>
+<a name="l00323"></a><a class="code" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">00323</a> <span class="preprocessor">#define uip_periodic_conn(conn) do { uip_conn = conn; \</span>
+<a name="l00324"></a>00324 <span class="preprocessor"> uip_process(UIP_TIMER); } while (0)</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00326"></a>00326 <span class="comment">/**</span>
+<a name="l00327"></a>00327 <span class="comment"> * Reuqest that a particular connection should be polled.</span>
+<a name="l00328"></a>00328 <span class="comment"> *</span>
+<a name="l00329"></a>00329 <span class="comment"> * Similar to uip_periodic_conn() but does not perform any timer</span>
+<a name="l00330"></a>00330 <span class="comment"> * processing. The application is polled for new data.</span>
+<a name="l00331"></a>00331 <span class="comment"> *</span>
+<a name="l00332"></a>00332 <span class="comment"> * \param conn A pointer to the uip_conn struct for the connection to</span>
+<a name="l00333"></a>00333 <span class="comment"> * be processed.</span>
+<a name="l00334"></a>00334 <span class="comment"> *</span>
+<a name="l00335"></a>00335 <span class="comment"> * \hideinitializer</span>
+<a name="l00336"></a>00336 <span class="comment"> */</span>
+<a name="l00337"></a><a class="code" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">00337</a> <span class="preprocessor">#define uip_poll_conn(conn) do { uip_conn = conn; \</span>
+<a name="l00338"></a>00338 <span class="preprocessor"> uip_process(UIP_POLL_REQUEST); } while (0)</span>
+<a name="l00339"></a>00339 <span class="preprocessor"></span>
+<a name="l00340"></a>00340
+<a name="l00341"></a>00341 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span><span class="comment">/**</span>
+<a name="l00343"></a>00343 <span class="comment"> * Periodic processing for a UDP connection identified by its number.</span>
+<a name="l00344"></a>00344 <span class="comment"> *</span>
+<a name="l00345"></a>00345 <span class="comment"> * This function is essentially the same as uip_periodic(), but for</span>
+<a name="l00346"></a>00346 <span class="comment"> * UDP connections. It is called in a similar fashion as the</span>
+<a name="l00347"></a>00347 <span class="comment"> * uip_periodic() function:</span>
+<a name="l00348"></a>00348 <span class="comment"> \code</span>
+<a name="l00349"></a>00349 <span class="comment"> for(i = 0; i < UIP_UDP_CONNS; i++) {</span>
+<a name="l00350"></a>00350 <span class="comment"> uip_udp_periodic(i);</span>
+<a name="l00351"></a>00351 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00352"></a>00352 <span class="comment"> devicedriver_send();</span>
+<a name="l00353"></a>00353 <span class="comment"> }</span>
+<a name="l00354"></a>00354 <span class="comment"> }</span>
+<a name="l00355"></a>00355 <span class="comment"> \endcode</span>
+<a name="l00356"></a>00356 <span class="comment"> *</span>
+<a name="l00357"></a>00357 <span class="comment"> * \note As for the uip_periodic() function, special care has to be</span>
+<a name="l00358"></a>00358 <span class="comment"> * taken when using uIP together with ARP and Ethernet:</span>
+<a name="l00359"></a>00359 <span class="comment"> \code</span>
+<a name="l00360"></a>00360 <span class="comment"> for(i = 0; i < UIP_UDP_CONNS; i++) {</span>
+<a name="l00361"></a>00361 <span class="comment"> uip_udp_periodic(i);</span>
+<a name="l00362"></a>00362 <span class="comment"> if(uip_len > 0) {</span>
+<a name="l00363"></a>00363 <span class="comment"> uip_arp_out();</span>
+<a name="l00364"></a>00364 <span class="comment"> ethernet_devicedriver_send();</span>
+<a name="l00365"></a>00365 <span class="comment"> }</span>
+<a name="l00366"></a>00366 <span class="comment"> }</span>
+<a name="l00367"></a>00367 <span class="comment"> \endcode</span>
+<a name="l00368"></a>00368 <span class="comment"> *</span>
+<a name="l00369"></a>00369 <span class="comment"> * \param conn The number of the UDP connection to be processed.</span>
+<a name="l00370"></a>00370 <span class="comment"> *</span>
+<a name="l00371"></a>00371 <span class="comment"> * \hideinitializer</span>
+<a name="l00372"></a>00372 <span class="comment"> */</span>
+<a name="l00373"></a><a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">00373</a> <span class="preprocessor">#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \</span>
+<a name="l00374"></a>00374 <span class="preprocessor"> uip_process(UIP_UDP_TIMER); } while (0)</span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00376"></a>00376 <span class="comment">/**</span>
+<a name="l00377"></a>00377 <span class="comment"> * Periodic processing for a UDP connection identified by a pointer to</span>
+<a name="l00378"></a>00378 <span class="comment"> * its structure.</span>
+<a name="l00379"></a>00379 <span class="comment"> *</span>
+<a name="l00380"></a>00380 <span class="comment"> * Same as uip_udp_periodic() but takes a pointer to the actual</span>
+<a name="l00381"></a>00381 <span class="comment"> * uip_conn struct instead of an integer as its argument. This</span>
+<a name="l00382"></a>00382 <span class="comment"> * function can be used to force periodic processing of a specific</span>
+<a name="l00383"></a>00383 <span class="comment"> * connection.</span>
+<a name="l00384"></a>00384 <span class="comment"> *</span>
+<a name="l00385"></a>00385 <span class="comment"> * \param conn A pointer to the uip_udp_conn struct for the connection</span>
+<a name="l00386"></a>00386 <span class="comment"> * to be processed.</span>
+<a name="l00387"></a>00387 <span class="comment"> *</span>
+<a name="l00388"></a>00388 <span class="comment"> * \hideinitializer</span>
+<a name="l00389"></a>00389 <span class="comment"> */</span>
+<a name="l00390"></a><a class="code" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">00390</a> <span class="preprocessor">#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \</span>
+<a name="l00391"></a>00391 <span class="preprocessor"> uip_process(UIP_UDP_TIMER); } while (0)</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span>
+<a name="l00393"></a>00393
+<a name="l00394"></a>00394 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l00395"></a>00395 <span class="comment"></span>
+<a name="l00396"></a>00396 <span class="comment">/**</span>
+<a name="l00397"></a>00397 <span class="comment"> * The uIP packet buffer.</span>
+<a name="l00398"></a>00398 <span class="comment"> *</span>
+<a name="l00399"></a>00399 <span class="comment"> * The uip_buf array is used to hold incoming and outgoing</span>
+<a name="l00400"></a>00400 <span class="comment"> * packets. The device driver should place incoming data into this</span>
+<a name="l00401"></a>00401 <span class="comment"> * buffer. When sending data, the device driver should read the link</span>
+<a name="l00402"></a>00402 <span class="comment"> * level headers and the TCP/IP headers from this buffer. The size of</span>
+<a name="l00403"></a>00403 <span class="comment"> * the link level headers is configured by the UIP_LLH_LEN define.</span>
+<a name="l00404"></a>00404 <span class="comment"> *</span>
+<a name="l00405"></a>00405 <span class="comment"> * \note The application data need not be placed in this buffer, so</span>
+<a name="l00406"></a>00406 <span class="comment"> * the device driver must read it from the place pointed to by the</span>
+<a name="l00407"></a>00407 <span class="comment"> * uip_appdata pointer as illustrated by the following example:</span>
+<a name="l00408"></a>00408 <span class="comment"> \code</span>
+<a name="l00409"></a>00409 <span class="comment"> void</span>
+<a name="l00410"></a>00410 <span class="comment"> devicedriver_send(void)</span>
+<a name="l00411"></a>00411 <span class="comment"> {</span>
+<a name="l00412"></a>00412 <span class="comment"> hwsend(&uip_buf[0], UIP_LLH_LEN);</span>
+<a name="l00413"></a>00413 <span class="comment"> if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {</span>
+<a name="l00414"></a>00414 <span class="comment"> hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);</span>
+<a name="l00415"></a>00415 <span class="comment"> } else {</span>
+<a name="l00416"></a>00416 <span class="comment"> hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);</span>
+<a name="l00417"></a>00417 <span class="comment"> hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);</span>
+<a name="l00418"></a>00418 <span class="comment"> }</span>
+<a name="l00419"></a>00419 <span class="comment"> }</span>
+<a name="l00420"></a>00420 <span class="comment"> \endcode</span>
+<a name="l00421"></a>00421 <span class="comment"> */</span>
+<a name="l00422"></a>00422 <span class="keyword">extern</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">UIP_BUFSIZE</a>+2];
+<a name="l00423"></a>00423 <span class="comment"></span>
+<a name="l00424"></a>00424 <span class="comment">/** @} */</span>
+<a name="l00425"></a>00425
+<a name="l00426"></a>00426 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l00427"></a>00427 <span class="comment">/* Functions that are used by the uIP application program. Opening and</span>
+<a name="l00428"></a>00428 <span class="comment"> * closing connections, sending and receiving data, etc. is all</span>
+<a name="l00429"></a>00429 <span class="comment"> * handled by the functions below.</span>
+<a name="l00430"></a>00430 <span class="comment">*/</span><span class="comment"></span>
+<a name="l00431"></a>00431 <span class="comment">/**</span>
+<a name="l00432"></a>00432 <span class="comment"> * \defgroup uipappfunc uIP application functions</span>
+<a name="l00433"></a>00433 <span class="comment"> * @{</span>
+<a name="l00434"></a>00434 <span class="comment"> *</span>
+<a name="l00435"></a>00435 <span class="comment"> * Functions used by an application running of top of uIP.</span>
+<a name="l00436"></a>00436 <span class="comment"> */</span>
+<a name="l00437"></a>00437 <span class="comment"></span>
+<a name="l00438"></a>00438 <span class="comment">/**</span>
+<a name="l00439"></a>00439 <span class="comment"> * Start listening to the specified port.</span>
+<a name="l00440"></a>00440 <span class="comment"> *</span>
+<a name="l00441"></a>00441 <span class="comment"> * \note Since this function expects the port number in network byte</span>
+<a name="l00442"></a>00442 <span class="comment"> * order, a conversion using HTONS() or htons() is necessary.</span>
+<a name="l00443"></a>00443 <span class="comment"> *</span>
+<a name="l00444"></a>00444 <span class="comment"> \code</span>
+<a name="l00445"></a>00445 <span class="comment"> uip_listen(HTONS(80));</span>
+<a name="l00446"></a>00446 <span class="comment"> \endcode</span>
+<a name="l00447"></a>00447 <span class="comment"> *</span>
+<a name="l00448"></a>00448 <span class="comment"> * \param port A 16-bit port number in network byte order.</span>
+<a name="l00449"></a>00449 <span class="comment"> */</span>
+<a name="l00450"></a>00450 <span class="keywordtype">void</span> <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port);
+<a name="l00451"></a>00451 <span class="comment"></span>
+<a name="l00452"></a>00452 <span class="comment">/**</span>
+<a name="l00453"></a>00453 <span class="comment"> * Stop listening to the specified port.</span>
+<a name="l00454"></a>00454 <span class="comment"> *</span>
+<a name="l00455"></a>00455 <span class="comment"> * \note Since this function expects the port number in network byte</span>
+<a name="l00456"></a>00456 <span class="comment"> * order, a conversion using HTONS() or htons() is necessary.</span>
+<a name="l00457"></a>00457 <span class="comment"> *</span>
+<a name="l00458"></a>00458 <span class="comment"> \code</span>
+<a name="l00459"></a>00459 <span class="comment"> uip_unlisten(HTONS(80));</span>
+<a name="l00460"></a>00460 <span class="comment"> \endcode</span>
+<a name="l00461"></a>00461 <span class="comment"> *</span>
+<a name="l00462"></a>00462 <span class="comment"> * \param port A 16-bit port number in network byte order.</span>
+<a name="l00463"></a>00463 <span class="comment"> */</span>
+<a name="l00464"></a>00464 <span class="keywordtype">void</span> <a class="code" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip_unlisten</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port);
+<a name="l00465"></a>00465 <span class="comment"></span>
+<a name="l00466"></a>00466 <span class="comment">/**</span>
+<a name="l00467"></a>00467 <span class="comment"> * Connect to a remote host using TCP.</span>
+<a name="l00468"></a>00468 <span class="comment"> *</span>
+<a name="l00469"></a>00469 <span class="comment"> * This function is used to start a new connection to the specified</span>
+<a name="l00470"></a>00470 <span class="comment"> * port on the specied host. It allocates a new connection identifier,</span>
+<a name="l00471"></a>00471 <span class="comment"> * sets the connection to the SYN_SENT state and sets the</span>
+<a name="l00472"></a>00472 <span class="comment"> * retransmission timer to 0. This will cause a TCP SYN segment to be</span>
+<a name="l00473"></a>00473 <span class="comment"> * sent out the next time this connection is periodically processed,</span>
+<a name="l00474"></a>00474 <span class="comment"> * which usually is done within 0.5 seconds after the call to</span>
+<a name="l00475"></a>00475 <span class="comment"> * uip_connect().</span>
+<a name="l00476"></a>00476 <span class="comment"> *</span>
+<a name="l00477"></a>00477 <span class="comment"> * \note This function is avaliable only if support for active open</span>
+<a name="l00478"></a>00478 <span class="comment"> * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.</span>
+<a name="l00479"></a>00479 <span class="comment"> *</span>
+<a name="l00480"></a>00480 <span class="comment"> * \note Since this function requires the port number to be in network</span>
+<a name="l00481"></a>00481 <span class="comment"> * byte order, a conversion using HTONS() or htons() is necessary.</span>
+<a name="l00482"></a>00482 <span class="comment"> *</span>
+<a name="l00483"></a>00483 <span class="comment"> \code</span>
+<a name="l00484"></a>00484 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l00485"></a>00485 <span class="comment"></span>
+<a name="l00486"></a>00486 <span class="comment"> uip_ipaddr(&ipaddr, 192,168,1,2);</span>
+<a name="l00487"></a>00487 <span class="comment"> uip_connect(&ipaddr, HTONS(80));</span>
+<a name="l00488"></a>00488 <span class="comment"> \endcode</span>
+<a name="l00489"></a>00489 <span class="comment"> *</span>
+<a name="l00490"></a>00490 <span class="comment"> * \param ripaddr The IP address of the remote hot.</span>
+<a name="l00491"></a>00491 <span class="comment"> *</span>
+<a name="l00492"></a>00492 <span class="comment"> * \param port A 16-bit port number in network byte order.</span>
+<a name="l00493"></a>00493 <span class="comment"> *</span>
+<a name="l00494"></a>00494 <span class="comment"> * \return A pointer to the uIP connection identifier for the new connection,</span>
+<a name="l00495"></a>00495 <span class="comment"> * or NULL if no connection could be allocated.</span>
+<a name="l00496"></a>00496 <span class="comment"> *</span>
+<a name="l00497"></a>00497 <span class="comment"> */</span>
+<a name="l00498"></a>00498 <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *<a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *<a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> port);
+<a name="l00499"></a>00499
+<a name="l00500"></a>00500
+<a name="l00501"></a>00501 <span class="comment"></span>
+<a name="l00502"></a>00502 <span class="comment">/**</span>
+<a name="l00503"></a>00503 <span class="comment"> * \internal</span>
+<a name="l00504"></a>00504 <span class="comment"> *</span>
+<a name="l00505"></a>00505 <span class="comment"> * Check if a connection has outstanding (i.e., unacknowledged) data.</span>
+<a name="l00506"></a>00506 <span class="comment"> *</span>
+<a name="l00507"></a>00507 <span class="comment"> * \param conn A pointer to the uip_conn structure for the connection.</span>
+<a name="l00508"></a>00508 <span class="comment"> *</span>
+<a name="l00509"></a>00509 <span class="comment"> * \hideinitializer</span>
+<a name="l00510"></a>00510 <span class="comment"> */</span>
+<a name="l00511"></a><a class="code" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">00511</a> <span class="preprocessor">#define uip_outstanding(conn) ((conn)->len)</span>
+<a name="l00512"></a>00512 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00513"></a>00513 <span class="comment">/**</span>
+<a name="l00514"></a>00514 <span class="comment"> * Send data on the current connection.</span>
+<a name="l00515"></a>00515 <span class="comment"> *</span>
+<a name="l00516"></a>00516 <span class="comment"> * This function is used to send out a single segment of TCP</span>
+<a name="l00517"></a>00517 <span class="comment"> * data. Only applications that have been invoked by uIP for event</span>
+<a name="l00518"></a>00518 <span class="comment"> * processing can send data.</span>
+<a name="l00519"></a>00519 <span class="comment"> *</span>
+<a name="l00520"></a>00520 <span class="comment"> * The amount of data that actually is sent out after a call to this</span>
+<a name="l00521"></a>00521 <span class="comment"> * funcion is determined by the maximum amount of data TCP allows. uIP</span>
+<a name="l00522"></a>00522 <span class="comment"> * will automatically crop the data so that only the appropriate</span>
+<a name="l00523"></a>00523 <span class="comment"> * amount of data is sent. The function uip_mss() can be used to query</span>
+<a name="l00524"></a>00524 <span class="comment"> * uIP for the amount of data that actually will be sent.</span>
+<a name="l00525"></a>00525 <span class="comment"> *</span>
+<a name="l00526"></a>00526 <span class="comment"> * \note This function does not guarantee that the sent data will</span>
+<a name="l00527"></a>00527 <span class="comment"> * arrive at the destination. If the data is lost in the network, the</span>
+<a name="l00528"></a>00528 <span class="comment"> * application will be invoked with the uip_rexmit() event being</span>
+<a name="l00529"></a>00529 <span class="comment"> * set. The application will then have to resend the data using this</span>
+<a name="l00530"></a>00530 <span class="comment"> * function.</span>
+<a name="l00531"></a>00531 <span class="comment"> *</span>
+<a name="l00532"></a>00532 <span class="comment"> * \param data A pointer to the data which is to be sent.</span>
+<a name="l00533"></a>00533 <span class="comment"> *</span>
+<a name="l00534"></a>00534 <span class="comment"> * \param len The maximum amount of data bytes to be sent.</span>
+<a name="l00535"></a>00535 <span class="comment"> *</span>
+<a name="l00536"></a>00536 <span class="comment"> * \hideinitializer</span>
+<a name="l00537"></a>00537 <span class="comment"> */</span>
+<a name="l00538"></a>00538 <span class="keywordtype">void</span> <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">int</span> <a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>);
+<a name="l00539"></a>00539 <span class="comment"></span>
+<a name="l00540"></a>00540 <span class="comment">/**</span>
+<a name="l00541"></a>00541 <span class="comment"> * The length of any incoming data that is currently avaliable (if avaliable)</span>
+<a name="l00542"></a>00542 <span class="comment"> * in the uip_appdata buffer.</span>
+<a name="l00543"></a>00543 <span class="comment"> *</span>
+<a name="l00544"></a>00544 <span class="comment"> * The test function uip_data() must first be used to check if there</span>
+<a name="l00545"></a>00545 <span class="comment"> * is any data available at all.</span>
+<a name="l00546"></a>00546 <span class="comment"> *</span>
+<a name="l00547"></a>00547 <span class="comment"> * \hideinitializer</span>
+<a name="l00548"></a>00548 <span class="comment"> */</span>
+<a name="l00549"></a>00549 <span class="comment">/*void uip_datalen(void);*/</span>
+<a name="l00550"></a><a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">00550</a> <span class="preprocessor">#define uip_datalen() uip_len</span>
+<a name="l00551"></a>00551 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00552"></a>00552 <span class="comment">/**</span>
+<a name="l00553"></a>00553 <span class="comment"> * The length of any out-of-band data (urgent data) that has arrived</span>
+<a name="l00554"></a>00554 <span class="comment"> * on the connection.</span>
+<a name="l00555"></a>00555 <span class="comment"> *</span>
+<a name="l00556"></a>00556 <span class="comment"> * \note The configuration parameter UIP_URGDATA must be set for this</span>
+<a name="l00557"></a>00557 <span class="comment"> * function to be enabled.</span>
+<a name="l00558"></a>00558 <span class="comment"> *</span>
+<a name="l00559"></a>00559 <span class="comment"> * \hideinitializer</span>
+<a name="l00560"></a>00560 <span class="comment"> */</span>
+<a name="l00561"></a><a class="code" href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537">00561</a> <span class="preprocessor">#define uip_urgdatalen() uip_urglen</span>
+<a name="l00562"></a>00562 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00563"></a>00563 <span class="comment">/**</span>
+<a name="l00564"></a>00564 <span class="comment"> * Close the current connection.</span>
+<a name="l00565"></a>00565 <span class="comment"> *</span>
+<a name="l00566"></a>00566 <span class="comment"> * This function will close the current connection in a nice way.</span>
+<a name="l00567"></a>00567 <span class="comment"> *</span>
+<a name="l00568"></a>00568 <span class="comment"> * \hideinitializer</span>
+<a name="l00569"></a>00569 <span class="comment"> */</span>
+<a name="l00570"></a><a class="code" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">00570</a> <span class="preprocessor">#define uip_close() (uip_flags = UIP_CLOSE)</span>
+<a name="l00571"></a>00571 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00572"></a>00572 <span class="comment">/**</span>
+<a name="l00573"></a>00573 <span class="comment"> * Abort the current connection.</span>
+<a name="l00574"></a>00574 <span class="comment"> *</span>
+<a name="l00575"></a>00575 <span class="comment"> * This function will abort (reset) the current connection, and is</span>
+<a name="l00576"></a>00576 <span class="comment"> * usually used when an error has occured that prevents using the</span>
+<a name="l00577"></a>00577 <span class="comment"> * uip_close() function.</span>
+<a name="l00578"></a>00578 <span class="comment"> *</span>
+<a name="l00579"></a>00579 <span class="comment"> * \hideinitializer</span>
+<a name="l00580"></a>00580 <span class="comment"> */</span>
+<a name="l00581"></a><a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">00581</a> <span class="preprocessor">#define uip_abort() (uip_flags = UIP_ABORT)</span>
+<a name="l00582"></a>00582 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00583"></a>00583 <span class="comment">/**</span>
+<a name="l00584"></a>00584 <span class="comment"> * Tell the sending host to stop sending data.</span>
+<a name="l00585"></a>00585 <span class="comment"> *</span>
+<a name="l00586"></a>00586 <span class="comment"> * This function will close our receiver's window so that we stop</span>
+<a name="l00587"></a>00587 <span class="comment"> * receiving data for the current connection.</span>
+<a name="l00588"></a>00588 <span class="comment"> *</span>
+<a name="l00589"></a>00589 <span class="comment"> * \hideinitializer</span>
+<a name="l00590"></a>00590 <span class="comment"> */</span>
+<a name="l00591"></a><a class="code" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">00591</a> <span class="preprocessor">#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED)</span>
+<a name="l00592"></a>00592 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00593"></a>00593 <span class="comment">/**</span>
+<a name="l00594"></a>00594 <span class="comment"> * Find out if the current connection has been previously stopped with</span>
+<a name="l00595"></a>00595 <span class="comment"> * uip_stop().</span>
+<a name="l00596"></a>00596 <span class="comment"> *</span>
+<a name="l00597"></a>00597 <span class="comment"> * \hideinitializer</span>
+<a name="l00598"></a>00598 <span class="comment"> */</span>
+<a name="l00599"></a><a class="code" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">00599</a> <span class="preprocessor">#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED)</span>
+<a name="l00600"></a>00600 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00601"></a>00601 <span class="comment">/**</span>
+<a name="l00602"></a>00602 <span class="comment"> * Restart the current connection, if is has previously been stopped</span>
+<a name="l00603"></a>00603 <span class="comment"> * with uip_stop().</span>
+<a name="l00604"></a>00604 <span class="comment"> *</span>
+<a name="l00605"></a>00605 <span class="comment"> * This function will open the receiver's window again so that we</span>
+<a name="l00606"></a>00606 <span class="comment"> * start receiving data for the current connection.</span>
+<a name="l00607"></a>00607 <span class="comment"> *</span>
+<a name="l00608"></a>00608 <span class="comment"> * \hideinitializer</span>
+<a name="l00609"></a>00609 <span class="comment"> */</span>
+<a name="l00610"></a><a class="code" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">00610</a> <span class="preprocessor">#define uip_restart() do { uip_flags |= UIP_NEWDATA; \</span>
+<a name="l00611"></a>00611 <span class="preprocessor"> uip_conn->tcpstateflags &= ~UIP_STOPPED; \</span>
+<a name="l00612"></a>00612 <span class="preprocessor"> } while(0)</span>
+<a name="l00613"></a>00613 <span class="preprocessor"></span>
+<a name="l00614"></a>00614
+<a name="l00615"></a>00615 <span class="comment">/* uIP tests that can be made to determine in what state the current</span>
+<a name="l00616"></a>00616 <span class="comment"> connection is, and what the application function should do. */</span>
+<a name="l00617"></a>00617 <span class="comment"></span>
+<a name="l00618"></a>00618 <span class="comment">/**</span>
+<a name="l00619"></a>00619 <span class="comment"> * Is the current connection a UDP connection?</span>
+<a name="l00620"></a>00620 <span class="comment"> *</span>
+<a name="l00621"></a>00621 <span class="comment"> * This function checks whether the current connection is a UDP connection.</span>
+<a name="l00622"></a>00622 <span class="comment"> *</span>
+<a name="l00623"></a>00623 <span class="comment"> * \hideinitializer</span>
+<a name="l00624"></a>00624 <span class="comment"> *</span>
+<a name="l00625"></a>00625 <span class="comment"> */</span>
+<a name="l00626"></a><a class="code" href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2">00626</a> <span class="preprocessor">#define uip_udpconnection() (uip_conn == NULL)</span>
+<a name="l00627"></a>00627 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00628"></a>00628 <span class="comment">/**</span>
+<a name="l00629"></a>00629 <span class="comment"> * Is new incoming data available?</span>
+<a name="l00630"></a>00630 <span class="comment"> *</span>
+<a name="l00631"></a>00631 <span class="comment"> * Will reduce to non-zero if there is new data for the application</span>
+<a name="l00632"></a>00632 <span class="comment"> * present at the uip_appdata pointer. The size of the data is</span>
+<a name="l00633"></a>00633 <span class="comment"> * avaliable through the uip_len variable.</span>
+<a name="l00634"></a>00634 <span class="comment"> *</span>
+<a name="l00635"></a>00635 <span class="comment"> * \hideinitializer</span>
+<a name="l00636"></a>00636 <span class="comment"> */</span>
+<a name="l00637"></a><a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">00637</a> <span class="preprocessor">#define uip_newdata() (uip_flags & UIP_NEWDATA)</span>
+<a name="l00638"></a>00638 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00639"></a>00639 <span class="comment">/**</span>
+<a name="l00640"></a>00640 <span class="comment"> * Has previously sent data been acknowledged?</span>
+<a name="l00641"></a>00641 <span class="comment"> *</span>
+<a name="l00642"></a>00642 <span class="comment"> * Will reduce to non-zero if the previously sent data has been</span>
+<a name="l00643"></a>00643 <span class="comment"> * acknowledged by the remote host. This means that the application</span>
+<a name="l00644"></a>00644 <span class="comment"> * can send new data.</span>
+<a name="l00645"></a>00645 <span class="comment"> *</span>
+<a name="l00646"></a>00646 <span class="comment"> * \hideinitializer</span>
+<a name="l00647"></a>00647 <span class="comment"> */</span>
+<a name="l00648"></a><a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">00648</a> <span class="preprocessor">#define uip_acked() (uip_flags & UIP_ACKDATA)</span>
+<a name="l00649"></a>00649 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00650"></a>00650 <span class="comment">/**</span>
+<a name="l00651"></a>00651 <span class="comment"> * Has the connection just been connected?</span>
+<a name="l00652"></a>00652 <span class="comment"> *</span>
+<a name="l00653"></a>00653 <span class="comment"> * Reduces to non-zero if the current connection has been connected to</span>
+<a name="l00654"></a>00654 <span class="comment"> * a remote host. This will happen both if the connection has been</span>
+<a name="l00655"></a>00655 <span class="comment"> * actively opened (with uip_connect()) or passively opened (with</span>
+<a name="l00656"></a>00656 <span class="comment"> * uip_listen()).</span>
+<a name="l00657"></a>00657 <span class="comment"> *</span>
+<a name="l00658"></a>00658 <span class="comment"> * \hideinitializer</span>
+<a name="l00659"></a>00659 <span class="comment"> */</span>
+<a name="l00660"></a><a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">00660</a> <span class="preprocessor">#define uip_connected() (uip_flags & UIP_CONNECTED)</span>
+<a name="l00661"></a>00661 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00662"></a>00662 <span class="comment">/**</span>
+<a name="l00663"></a>00663 <span class="comment"> * Has the connection been closed by the other end?</span>
+<a name="l00664"></a>00664 <span class="comment"> *</span>
+<a name="l00665"></a>00665 <span class="comment"> * Is non-zero if the connection has been closed by the remote</span>
+<a name="l00666"></a>00666 <span class="comment"> * host. The application may then do the necessary clean-ups.</span>
+<a name="l00667"></a>00667 <span class="comment"> *</span>
+<a name="l00668"></a>00668 <span class="comment"> * \hideinitializer</span>
+<a name="l00669"></a>00669 <span class="comment"> */</span>
+<a name="l00670"></a><a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">00670</a> <span class="preprocessor">#define uip_closed() (uip_flags & UIP_CLOSE)</span>
+<a name="l00671"></a>00671 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00672"></a>00672 <span class="comment">/**</span>
+<a name="l00673"></a>00673 <span class="comment"> * Has the connection been aborted by the other end?</span>
+<a name="l00674"></a>00674 <span class="comment"> *</span>
+<a name="l00675"></a>00675 <span class="comment"> * Non-zero if the current connection has been aborted (reset) by the</span>
+<a name="l00676"></a>00676 <span class="comment"> * remote host.</span>
+<a name="l00677"></a>00677 <span class="comment"> *</span>
+<a name="l00678"></a>00678 <span class="comment"> * \hideinitializer</span>
+<a name="l00679"></a>00679 <span class="comment"> */</span>
+<a name="l00680"></a><a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">00680</a> <span class="preprocessor">#define uip_aborted() (uip_flags & UIP_ABORT)</span>
+<a name="l00681"></a>00681 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00682"></a>00682 <span class="comment">/**</span>
+<a name="l00683"></a>00683 <span class="comment"> * Has the connection timed out?</span>
+<a name="l00684"></a>00684 <span class="comment"> *</span>
+<a name="l00685"></a>00685 <span class="comment"> * Non-zero if the current connection has been aborted due to too many</span>
+<a name="l00686"></a>00686 <span class="comment"> * retransmissions.</span>
+<a name="l00687"></a>00687 <span class="comment"> *</span>
+<a name="l00688"></a>00688 <span class="comment"> * \hideinitializer</span>
+<a name="l00689"></a>00689 <span class="comment"> */</span>
+<a name="l00690"></a><a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">00690</a> <span class="preprocessor">#define uip_timedout() (uip_flags & UIP_TIMEDOUT)</span>
+<a name="l00691"></a>00691 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00692"></a>00692 <span class="comment">/**</span>
+<a name="l00693"></a>00693 <span class="comment"> * Do we need to retransmit previously data?</span>
+<a name="l00694"></a>00694 <span class="comment"> *</span>
+<a name="l00695"></a>00695 <span class="comment"> * Reduces to non-zero if the previously sent data has been lost in</span>
+<a name="l00696"></a>00696 <span class="comment"> * the network, and the application should retransmit it. The</span>
+<a name="l00697"></a>00697 <span class="comment"> * application should send the exact same data as it did the last</span>
+<a name="l00698"></a>00698 <span class="comment"> * time, using the uip_send() function.</span>
+<a name="l00699"></a>00699 <span class="comment"> *</span>
+<a name="l00700"></a>00700 <span class="comment"> * \hideinitializer</span>
+<a name="l00701"></a>00701 <span class="comment"> */</span>
+<a name="l00702"></a><a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">00702</a> <span class="preprocessor">#define uip_rexmit() (uip_flags & UIP_REXMIT)</span>
+<a name="l00703"></a>00703 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00704"></a>00704 <span class="comment">/**</span>
+<a name="l00705"></a>00705 <span class="comment"> * Is the connection being polled by uIP?</span>
+<a name="l00706"></a>00706 <span class="comment"> *</span>
+<a name="l00707"></a>00707 <span class="comment"> * Is non-zero if the reason the application is invoked is that the</span>
+<a name="l00708"></a>00708 <span class="comment"> * current connection has been idle for a while and should be</span>
+<a name="l00709"></a>00709 <span class="comment"> * polled.</span>
+<a name="l00710"></a>00710 <span class="comment"> *</span>
+<a name="l00711"></a>00711 <span class="comment"> * The polling event can be used for sending data without having to</span>
+<a name="l00712"></a>00712 <span class="comment"> * wait for the remote host to send data.</span>
+<a name="l00713"></a>00713 <span class="comment"> *</span>
+<a name="l00714"></a>00714 <span class="comment"> * \hideinitializer</span>
+<a name="l00715"></a>00715 <span class="comment"> */</span>
+<a name="l00716"></a><a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">00716</a> <span class="preprocessor">#define uip_poll() (uip_flags & UIP_POLL)</span>
+<a name="l00717"></a>00717 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00718"></a>00718 <span class="comment">/**</span>
+<a name="l00719"></a>00719 <span class="comment"> * Get the initial maxium segment size (MSS) of the current</span>
+<a name="l00720"></a>00720 <span class="comment"> * connection.</span>
+<a name="l00721"></a>00721 <span class="comment"> *</span>
+<a name="l00722"></a>00722 <span class="comment"> * \hideinitializer</span>
+<a name="l00723"></a>00723 <span class="comment"> */</span>
+<a name="l00724"></a><a class="code" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">00724</a> <span class="preprocessor">#define uip_initialmss() (uip_conn->initialmss)</span>
+<a name="l00725"></a>00725 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00726"></a>00726 <span class="comment">/**</span>
+<a name="l00727"></a>00727 <span class="comment"> * Get the current maxium segment size that can be sent on the current</span>
+<a name="l00728"></a>00728 <span class="comment"> * connection.</span>
+<a name="l00729"></a>00729 <span class="comment"> *</span>
+<a name="l00730"></a>00730 <span class="comment"> * The current maxiumum segment size that can be sent on the</span>
+<a name="l00731"></a>00731 <span class="comment"> * connection is computed from the receiver's window and the MSS of</span>
+<a name="l00732"></a>00732 <span class="comment"> * the connection (which also is available by calling</span>
+<a name="l00733"></a>00733 <span class="comment"> * uip_initialmss()).</span>
+<a name="l00734"></a>00734 <span class="comment"> *</span>
+<a name="l00735"></a>00735 <span class="comment"> * \hideinitializer</span>
+<a name="l00736"></a>00736 <span class="comment"> */</span>
+<a name="l00737"></a><a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">00737</a> <span class="preprocessor">#define uip_mss() (uip_conn->mss)</span>
+<a name="l00738"></a>00738 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00739"></a>00739 <span class="comment">/**</span>
+<a name="l00740"></a>00740 <span class="comment"> * Set up a new UDP connection.</span>
+<a name="l00741"></a>00741 <span class="comment"> *</span>
+<a name="l00742"></a>00742 <span class="comment"> * This function sets up a new UDP connection. The function will</span>
+<a name="l00743"></a>00743 <span class="comment"> * automatically allocate an unused local port for the new</span>
+<a name="l00744"></a>00744 <span class="comment"> * connection. However, another port can be chosen by using the</span>
+<a name="l00745"></a>00745 <span class="comment"> * uip_udp_bind() call, after the uip_udp_new() function has been</span>
+<a name="l00746"></a>00746 <span class="comment"> * called.</span>
+<a name="l00747"></a>00747 <span class="comment"> *</span>
+<a name="l00748"></a>00748 <span class="comment"> * Example:</span>
+<a name="l00749"></a>00749 <span class="comment"> \code</span>
+<a name="l00750"></a>00750 <span class="comment"> uip_ipaddr_t addr;</span>
+<a name="l00751"></a>00751 <span class="comment"> struct uip_udp_conn *c;</span>
+<a name="l00752"></a>00752 <span class="comment"> </span>
+<a name="l00753"></a>00753 <span class="comment"> uip_ipaddr(&addr, 192,168,2,1);</span>
+<a name="l00754"></a>00754 <span class="comment"> c = uip_udp_new(&addr, HTONS(12345));</span>
+<a name="l00755"></a>00755 <span class="comment"> if(c != NULL) {</span>
+<a name="l00756"></a>00756 <span class="comment"> uip_udp_bind(c, HTONS(12344));</span>
+<a name="l00757"></a>00757 <span class="comment"> }</span>
+<a name="l00758"></a>00758 <span class="comment"> \endcode</span>
+<a name="l00759"></a>00759 <span class="comment"> * \param ripaddr The IP address of the remote host.</span>
+<a name="l00760"></a>00760 <span class="comment"> *</span>
+<a name="l00761"></a>00761 <span class="comment"> * \param rport The remote port number in network byte order.</span>
+<a name="l00762"></a>00762 <span class="comment"> *</span>
+<a name="l00763"></a>00763 <span class="comment"> * \return The uip_udp_conn structure for the new connection or NULL</span>
+<a name="l00764"></a>00764 <span class="comment"> * if no connection could be allocated.</span>
+<a name="l00765"></a>00765 <span class="comment"> */</span>
+<a name="l00766"></a>00766 <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</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="l00767"></a>00767 <span class="comment"></span>
+<a name="l00768"></a>00768 <span class="comment">/**</span>
+<a name="l00769"></a>00769 <span class="comment"> * Removed a UDP connection.</span>
+<a name="l00770"></a>00770 <span class="comment"> *</span>
+<a name="l00771"></a>00771 <span class="comment"> * \param conn A pointer to the uip_udp_conn structure for the connection.</span>
+<a name="l00772"></a>00772 <span class="comment"> *</span>
+<a name="l00773"></a>00773 <span class="comment"> * \hideinitializer</span>
+<a name="l00774"></a>00774 <span class="comment"> */</span>
+<a name="l00775"></a><a class="code" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">00775</a> <span class="preprocessor">#define uip_udp_remove(conn) (conn)->lport = 0</span>
+<a name="l00776"></a>00776 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00777"></a>00777 <span class="comment">/**</span>
+<a name="l00778"></a>00778 <span class="comment"> * Bind a UDP connection to a local port.</span>
+<a name="l00779"></a>00779 <span class="comment"> *</span>
+<a name="l00780"></a>00780 <span class="comment"> * \param conn A pointer to the uip_udp_conn structure for the</span>
+<a name="l00781"></a>00781 <span class="comment"> * connection.</span>
+<a name="l00782"></a>00782 <span class="comment"> *</span>
+<a name="l00783"></a>00783 <span class="comment"> * \param port The local port number, in network byte order.</span>
+<a name="l00784"></a>00784 <span class="comment"> *</span>
+<a name="l00785"></a>00785 <span class="comment"> * \hideinitializer</span>
+<a name="l00786"></a>00786 <span class="comment"> */</span>
+<a name="l00787"></a><a class="code" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">00787</a> <span class="preprocessor">#define uip_udp_bind(conn, port) (conn)->lport = port</span>
+<a name="l00788"></a>00788 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00789"></a>00789 <span class="comment">/**</span>
+<a name="l00790"></a>00790 <span class="comment"> * Send a UDP datagram of length len on the current connection.</span>
+<a name="l00791"></a>00791 <span class="comment"> *</span>
+<a name="l00792"></a>00792 <span class="comment"> * This function can only be called in response to a UDP event (poll</span>
+<a name="l00793"></a>00793 <span class="comment"> * or newdata). The data must be present in the uip_buf buffer, at the</span>
+<a name="l00794"></a>00794 <span class="comment"> * place pointed to by the uip_appdata pointer.</span>
+<a name="l00795"></a>00795 <span class="comment"> *</span>
+<a name="l00796"></a>00796 <span class="comment"> * \param len The length of the data in the uip_buf buffer.</span>
+<a name="l00797"></a>00797 <span class="comment"> *</span>
+<a name="l00798"></a>00798 <span class="comment"> * \hideinitializer</span>
+<a name="l00799"></a>00799 <span class="comment"> */</span>
+<a name="l00800"></a><a class="code" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">00800</a> <span class="preprocessor">#define uip_udp_send(len) uip_send((char *)uip_appdata, len)</span>
+<a name="l00801"></a>00801 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00802"></a>00802 <span class="comment">/** @} */</span>
+<a name="l00803"></a>00803
+<a name="l00804"></a>00804 <span class="comment">/* uIP convenience and converting functions. */</span>
+<a name="l00805"></a>00805 <span class="comment"></span>
+<a name="l00806"></a>00806 <span class="comment">/**</span>
+<a name="l00807"></a>00807 <span class="comment"> * \defgroup uipconvfunc uIP conversion functions</span>
+<a name="l00808"></a>00808 <span class="comment"> * @{</span>
+<a name="l00809"></a>00809 <span class="comment"> *</span>
+<a name="l00810"></a>00810 <span class="comment"> * These functions can be used for converting between different data</span>
+<a name="l00811"></a>00811 <span class="comment"> * formats used by uIP.</span>
+<a name="l00812"></a>00812 <span class="comment"> */</span>
+<a name="l00813"></a>00813 <span class="comment"></span>
+<a name="l00814"></a>00814 <span class="comment">/**</span>
+<a name="l00815"></a>00815 <span class="comment"> * Construct an IP address from four bytes.</span>
+<a name="l00816"></a>00816 <span class="comment"> *</span>
+<a name="l00817"></a>00817 <span class="comment"> * This function constructs an IP address of the type that uIP handles</span>
+<a name="l00818"></a>00818 <span class="comment"> * internally from four bytes. The function is handy for specifying IP</span>
+<a name="l00819"></a>00819 <span class="comment"> * addresses to use with e.g. the uip_connect() function.</span>
+<a name="l00820"></a>00820 <span class="comment"> *</span>
+<a name="l00821"></a>00821 <span class="comment"> * Example:</span>
+<a name="l00822"></a>00822 <span class="comment"> \code</span>
+<a name="l00823"></a>00823 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l00824"></a>00824 <span class="comment"> struct uip_conn *c;</span>
+<a name="l00825"></a>00825 <span class="comment"> </span>
+<a name="l00826"></a>00826 <span class="comment"> uip_ipaddr(&ipaddr, 192,168,1,2);</span>
+<a name="l00827"></a>00827 <span class="comment"> c = uip_connect(&ipaddr, HTONS(80));</span>
+<a name="l00828"></a>00828 <span class="comment"> \endcode</span>
+<a name="l00829"></a>00829 <span class="comment"> *</span>
+<a name="l00830"></a>00830 <span class="comment"> * \param addr A pointer to a uip_ipaddr_t variable that will be</span>
+<a name="l00831"></a>00831 <span class="comment"> * filled in with the IP address.</span>
+<a name="l00832"></a>00832 <span class="comment"> *</span>
+<a name="l00833"></a>00833 <span class="comment"> * \param addr0 The first octet of the IP address.</span>
+<a name="l00834"></a>00834 <span class="comment"> * \param addr1 The second octet of the IP address.</span>
+<a name="l00835"></a>00835 <span class="comment"> * \param addr2 The third octet of the IP address.</span>
+<a name="l00836"></a>00836 <span class="comment"> * \param addr3 The forth octet of the IP address.</span>
+<a name="l00837"></a>00837 <span class="comment"> *</span>
+<a name="l00838"></a>00838 <span class="comment"> * \hideinitializer</span>
+<a name="l00839"></a>00839 <span class="comment"> */</span>
+<a name="l00840"></a><a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">00840</a> <span class="preprocessor">#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \</span>
+<a name="l00841"></a>00841 <span class="preprocessor"> ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \</span>
+<a name="l00842"></a>00842 <span class="preprocessor"> ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \</span>
+<a name="l00843"></a>00843 <span class="preprocessor"> } while(0)</span>
+<a name="l00844"></a>00844 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00845"></a>00845 <span class="comment">/**</span>
+<a name="l00846"></a>00846 <span class="comment"> * Construct an IPv6 address from eight 16-bit words.</span>
+<a name="l00847"></a>00847 <span class="comment"> *</span>
+<a name="l00848"></a>00848 <span class="comment"> * This function constructs an IPv6 address.</span>
+<a name="l00849"></a>00849 <span class="comment"> *</span>
+<a name="l00850"></a>00850 <span class="comment"> * \hideinitializer</span>
+<a name="l00851"></a>00851 <span class="comment"> */</span>
+<a name="l00852"></a><a class="code" href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487">00852</a> <span class="preprocessor">#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \</span>
+<a name="l00853"></a>00853 <span class="preprocessor"> ((u16_t *)(addr))[0] = HTONS((addr0)); \</span>
+<a name="l00854"></a>00854 <span class="preprocessor"> ((u16_t *)(addr))[1] = HTONS((addr1)); \</span>
+<a name="l00855"></a>00855 <span class="preprocessor"> ((u16_t *)(addr))[2] = HTONS((addr2)); \</span>
+<a name="l00856"></a>00856 <span class="preprocessor"> ((u16_t *)(addr))[3] = HTONS((addr3)); \</span>
+<a name="l00857"></a>00857 <span class="preprocessor"> ((u16_t *)(addr))[4] = HTONS((addr4)); \</span>
+<a name="l00858"></a>00858 <span class="preprocessor"> ((u16_t *)(addr))[5] = HTONS((addr5)); \</span>
+<a name="l00859"></a>00859 <span class="preprocessor"> ((u16_t *)(addr))[6] = HTONS((addr6)); \</span>
+<a name="l00860"></a>00860 <span class="preprocessor"> ((u16_t *)(addr))[7] = HTONS((addr7)); \</span>
+<a name="l00861"></a>00861 <span class="preprocessor"> } while(0)</span>
+<a name="l00862"></a>00862 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00863"></a>00863 <span class="comment">/**</span>
+<a name="l00864"></a>00864 <span class="comment"> * Copy an IP address to another IP address.</span>
+<a name="l00865"></a>00865 <span class="comment"> *</span>
+<a name="l00866"></a>00866 <span class="comment"> * Copies an IP address from one place to another.</span>
+<a name="l00867"></a>00867 <span class="comment"> *</span>
+<a name="l00868"></a>00868 <span class="comment"> * Example:</span>
+<a name="l00869"></a>00869 <span class="comment"> \code</span>
+<a name="l00870"></a>00870 <span class="comment"> uip_ipaddr_t ipaddr1, ipaddr2;</span>
+<a name="l00871"></a>00871 <span class="comment"></span>
+<a name="l00872"></a>00872 <span class="comment"> uip_ipaddr(&ipaddr1, 192,16,1,2);</span>
+<a name="l00873"></a>00873 <span class="comment"> uip_ipaddr_copy(&ipaddr2, &ipaddr1);</span>
+<a name="l00874"></a>00874 <span class="comment"> \endcode</span>
+<a name="l00875"></a>00875 <span class="comment"> *</span>
+<a name="l00876"></a>00876 <span class="comment"> * \param dest The destination for the copy.</span>
+<a name="l00877"></a>00877 <span class="comment"> * \param src The source from where to copy.</span>
+<a name="l00878"></a>00878 <span class="comment"> *</span>
+<a name="l00879"></a>00879 <span class="comment"> * \hideinitializer</span>
+<a name="l00880"></a>00880 <span class="comment"> */</span>
+<a name="l00881"></a>00881 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00882"></a><a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">00882</a> <span class="preprocessor"></span><span class="preprocessor">#define uip_ipaddr_copy(dest, src) do { \</span>
+<a name="l00883"></a>00883 <span class="preprocessor"> ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \</span>
+<a name="l00884"></a>00884 <span class="preprocessor"> ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \</span>
+<a name="l00885"></a>00885 <span class="preprocessor"> } while(0)</span>
+<a name="l00886"></a>00886 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l00887"></a>00887 <span class="preprocessor">#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t))</span>
+<a name="l00888"></a>00888 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l00889"></a>00889 <span class="comment"></span>
+<a name="l00890"></a>00890 <span class="comment">/**</span>
+<a name="l00891"></a>00891 <span class="comment"> * Compare two IP addresses</span>
+<a name="l00892"></a>00892 <span class="comment"> *</span>
+<a name="l00893"></a>00893 <span class="comment"> * Compares two IP addresses.</span>
+<a name="l00894"></a>00894 <span class="comment"> *</span>
+<a name="l00895"></a>00895 <span class="comment"> * Example:</span>
+<a name="l00896"></a>00896 <span class="comment"> \code</span>
+<a name="l00897"></a>00897 <span class="comment"> uip_ipaddr_t ipaddr1, ipaddr2;</span>
+<a name="l00898"></a>00898 <span class="comment"></span>
+<a name="l00899"></a>00899 <span class="comment"> uip_ipaddr(&ipaddr1, 192,16,1,2);</span>
+<a name="l00900"></a>00900 <span class="comment"> if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {</span>
+<a name="l00901"></a>00901 <span class="comment"> printf("They are the same");</span>
+<a name="l00902"></a>00902 <span class="comment"> }</span>
+<a name="l00903"></a>00903 <span class="comment"> \endcode</span>
+<a name="l00904"></a>00904 <span class="comment"> *</span>
+<a name="l00905"></a>00905 <span class="comment"> * \param addr1 The first IP address.</span>
+<a name="l00906"></a>00906 <span class="comment"> * \param addr2 The second IP address.</span>
+<a name="l00907"></a>00907 <span class="comment"> *</span>
+<a name="l00908"></a>00908 <span class="comment"> * \hideinitializer</span>
+<a name="l00909"></a>00909 <span class="comment"> */</span>
+<a name="l00910"></a>00910 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l00911"></a><a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">00911</a> <span class="preprocessor"></span><span class="preprocessor">#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \</span>
+<a name="l00912"></a>00912 <span class="preprocessor"> ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1])</span>
+<a name="l00913"></a>00913 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l00914"></a>00914 <span class="preprocessor">#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0)</span>
+<a name="l00915"></a>00915 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l00916"></a>00916 <span class="comment"></span>
+<a name="l00917"></a>00917 <span class="comment">/**</span>
+<a name="l00918"></a>00918 <span class="comment"> * Compare two IP addresses with netmasks</span>
+<a name="l00919"></a>00919 <span class="comment"> *</span>
+<a name="l00920"></a>00920 <span class="comment"> * Compares two IP addresses with netmasks. The masks are used to mask</span>
+<a name="l00921"></a>00921 <span class="comment"> * out the bits that are to be compared.</span>
+<a name="l00922"></a>00922 <span class="comment"> *</span>
+<a name="l00923"></a>00923 <span class="comment"> * Example:</span>
+<a name="l00924"></a>00924 <span class="comment"> \code</span>
+<a name="l00925"></a>00925 <span class="comment"> uip_ipaddr_t ipaddr1, ipaddr2, mask;</span>
+<a name="l00926"></a>00926 <span class="comment"></span>
+<a name="l00927"></a>00927 <span class="comment"> uip_ipaddr(&mask, 255,255,255,0);</span>
+<a name="l00928"></a>00928 <span class="comment"> uip_ipaddr(&ipaddr1, 192,16,1,2);</span>
+<a name="l00929"></a>00929 <span class="comment"> uip_ipaddr(&ipaddr2, 192,16,1,3);</span>
+<a name="l00930"></a>00930 <span class="comment"> if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {</span>
+<a name="l00931"></a>00931 <span class="comment"> printf("They are the same");</span>
+<a name="l00932"></a>00932 <span class="comment"> }</span>
+<a name="l00933"></a>00933 <span class="comment"> \endcode</span>
+<a name="l00934"></a>00934 <span class="comment"> *</span>
+<a name="l00935"></a>00935 <span class="comment"> * \param addr1 The first IP address.</span>
+<a name="l00936"></a>00936 <span class="comment"> * \param addr2 The second IP address.</span>
+<a name="l00937"></a>00937 <span class="comment"> * \param mask The netmask.</span>
+<a name="l00938"></a>00938 <span class="comment"> *</span>
+<a name="l00939"></a>00939 <span class="comment"> * \hideinitializer</span>
+<a name="l00940"></a>00940 <span class="comment"> */</span>
+<a name="l00941"></a><a class="code" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">00941</a> <span class="preprocessor">#define uip_ipaddr_maskcmp(addr1, addr2, mask) \</span>
+<a name="l00942"></a>00942 <span class="preprocessor"> (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \</span>
+<a name="l00943"></a>00943 <span class="preprocessor"> (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \</span>
+<a name="l00944"></a>00944 <span class="preprocessor"> ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \</span>
+<a name="l00945"></a>00945 <span class="preprocessor"> (((u16_t *)addr2)[1] & ((u16_t *)mask)[1])))</span>
+<a name="l00946"></a>00946 <span class="preprocessor"></span>
+<a name="l00947"></a>00947 <span class="comment"></span>
+<a name="l00948"></a>00948 <span class="comment">/**</span>
+<a name="l00949"></a>00949 <span class="comment"> * Mask out the network part of an IP address.</span>
+<a name="l00950"></a>00950 <span class="comment"> *</span>
+<a name="l00951"></a>00951 <span class="comment"> * Masks out the network part of an IP address, given the address and</span>
+<a name="l00952"></a>00952 <span class="comment"> * the netmask.</span>
+<a name="l00953"></a>00953 <span class="comment"> *</span>
+<a name="l00954"></a>00954 <span class="comment"> * Example:</span>
+<a name="l00955"></a>00955 <span class="comment"> \code</span>
+<a name="l00956"></a>00956 <span class="comment"> uip_ipaddr_t ipaddr1, ipaddr2, netmask;</span>
+<a name="l00957"></a>00957 <span class="comment"></span>
+<a name="l00958"></a>00958 <span class="comment"> uip_ipaddr(&ipaddr1, 192,16,1,2);</span>
+<a name="l00959"></a>00959 <span class="comment"> uip_ipaddr(&netmask, 255,255,255,0);</span>
+<a name="l00960"></a>00960 <span class="comment"> uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);</span>
+<a name="l00961"></a>00961 <span class="comment"> \endcode</span>
+<a name="l00962"></a>00962 <span class="comment"> *</span>
+<a name="l00963"></a>00963 <span class="comment"> * In the example above, the variable "ipaddr2" will contain the IP</span>
+<a name="l00964"></a>00964 <span class="comment"> * address 192.168.1.0.</span>
+<a name="l00965"></a>00965 <span class="comment"> *</span>
+<a name="l00966"></a>00966 <span class="comment"> * \param dest Where the result is to be placed.</span>
+<a name="l00967"></a>00967 <span class="comment"> * \param src The IP address.</span>
+<a name="l00968"></a>00968 <span class="comment"> * \param mask The netmask.</span>
+<a name="l00969"></a>00969 <span class="comment"> *</span>
+<a name="l00970"></a>00970 <span class="comment"> * \hideinitializer</span>
+<a name="l00971"></a>00971 <span class="comment"> */</span>
+<a name="l00972"></a><a class="code" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">00972</a> <span class="preprocessor">#define uip_ipaddr_mask(dest, src, mask) do { \</span>
+<a name="l00973"></a>00973 <span class="preprocessor"> ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \</span>
+<a name="l00974"></a>00974 <span class="preprocessor"> ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \</span>
+<a name="l00975"></a>00975 <span class="preprocessor"> } while(0)</span>
+<a name="l00976"></a>00976 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00977"></a>00977 <span class="comment">/**</span>
+<a name="l00978"></a>00978 <span class="comment"> * Pick the first octet of an IP address.</span>
+<a name="l00979"></a>00979 <span class="comment"> *</span>
+<a name="l00980"></a>00980 <span class="comment"> * Picks out the first octet of an IP address.</span>
+<a name="l00981"></a>00981 <span class="comment"> *</span>
+<a name="l00982"></a>00982 <span class="comment"> * Example:</span>
+<a name="l00983"></a>00983 <span class="comment"> \code</span>
+<a name="l00984"></a>00984 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l00985"></a>00985 <span class="comment"> u8_t octet;</span>
+<a name="l00986"></a>00986 <span class="comment"></span>
+<a name="l00987"></a>00987 <span class="comment"> uip_ipaddr(&ipaddr, 1,2,3,4);</span>
+<a name="l00988"></a>00988 <span class="comment"> octet = uip_ipaddr1(&ipaddr);</span>
+<a name="l00989"></a>00989 <span class="comment"> \endcode</span>
+<a name="l00990"></a>00990 <span class="comment"> *</span>
+<a name="l00991"></a>00991 <span class="comment"> * In the example above, the variable "octet" will contain the value 1.</span>
+<a name="l00992"></a>00992 <span class="comment"> *</span>
+<a name="l00993"></a>00993 <span class="comment"> * \hideinitializer</span>
+<a name="l00994"></a>00994 <span class="comment"> */</span>
+<a name="l00995"></a><a class="code" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">00995</a> <span class="preprocessor">#define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8)</span>
+<a name="l00996"></a>00996 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00997"></a>00997 <span class="comment">/**</span>
+<a name="l00998"></a>00998 <span class="comment"> * Pick the second octet of an IP address.</span>
+<a name="l00999"></a>00999 <span class="comment"> *</span>
+<a name="l01000"></a>01000 <span class="comment"> * Picks out the second octet of an IP address.</span>
+<a name="l01001"></a>01001 <span class="comment"> *</span>
+<a name="l01002"></a>01002 <span class="comment"> * Example:</span>
+<a name="l01003"></a>01003 <span class="comment"> \code</span>
+<a name="l01004"></a>01004 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l01005"></a>01005 <span class="comment"> u8_t octet;</span>
+<a name="l01006"></a>01006 <span class="comment"></span>
+<a name="l01007"></a>01007 <span class="comment"> uip_ipaddr(&ipaddr, 1,2,3,4);</span>
+<a name="l01008"></a>01008 <span class="comment"> octet = uip_ipaddr2(&ipaddr);</span>
+<a name="l01009"></a>01009 <span class="comment"> \endcode</span>
+<a name="l01010"></a>01010 <span class="comment"> *</span>
+<a name="l01011"></a>01011 <span class="comment"> * In the example above, the variable "octet" will contain the value 2.</span>
+<a name="l01012"></a>01012 <span class="comment"> *</span>
+<a name="l01013"></a>01013 <span class="comment"> * \hideinitializer</span>
+<a name="l01014"></a>01014 <span class="comment"> */</span>
+<a name="l01015"></a><a class="code" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">01015</a> <span class="preprocessor">#define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff)</span>
+<a name="l01016"></a>01016 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l01017"></a>01017 <span class="comment">/**</span>
+<a name="l01018"></a>01018 <span class="comment"> * Pick the third octet of an IP address.</span>
+<a name="l01019"></a>01019 <span class="comment"> *</span>
+<a name="l01020"></a>01020 <span class="comment"> * Picks out the third octet of an IP address.</span>
+<a name="l01021"></a>01021 <span class="comment"> *</span>
+<a name="l01022"></a>01022 <span class="comment"> * Example:</span>
+<a name="l01023"></a>01023 <span class="comment"> \code</span>
+<a name="l01024"></a>01024 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l01025"></a>01025 <span class="comment"> u8_t octet;</span>
+<a name="l01026"></a>01026 <span class="comment"></span>
+<a name="l01027"></a>01027 <span class="comment"> uip_ipaddr(&ipaddr, 1,2,3,4);</span>
+<a name="l01028"></a>01028 <span class="comment"> octet = uip_ipaddr3(&ipaddr);</span>
+<a name="l01029"></a>01029 <span class="comment"> \endcode</span>
+<a name="l01030"></a>01030 <span class="comment"> *</span>
+<a name="l01031"></a>01031 <span class="comment"> * In the example above, the variable "octet" will contain the value 3.</span>
+<a name="l01032"></a>01032 <span class="comment"> *</span>
+<a name="l01033"></a>01033 <span class="comment"> * \hideinitializer</span>
+<a name="l01034"></a>01034 <span class="comment"> */</span>
+<a name="l01035"></a><a class="code" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">01035</a> <span class="preprocessor">#define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8)</span>
+<a name="l01036"></a>01036 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l01037"></a>01037 <span class="comment">/**</span>
+<a name="l01038"></a>01038 <span class="comment"> * Pick the fourth octet of an IP address.</span>
+<a name="l01039"></a>01039 <span class="comment"> *</span>
+<a name="l01040"></a>01040 <span class="comment"> * Picks out the fourth octet of an IP address.</span>
+<a name="l01041"></a>01041 <span class="comment"> *</span>
+<a name="l01042"></a>01042 <span class="comment"> * Example:</span>
+<a name="l01043"></a>01043 <span class="comment"> \code</span>
+<a name="l01044"></a>01044 <span class="comment"> uip_ipaddr_t ipaddr;</span>
+<a name="l01045"></a>01045 <span class="comment"> u8_t octet;</span>
+<a name="l01046"></a>01046 <span class="comment"></span>
+<a name="l01047"></a>01047 <span class="comment"> uip_ipaddr(&ipaddr, 1,2,3,4);</span>
+<a name="l01048"></a>01048 <span class="comment"> octet = uip_ipaddr4(&ipaddr);</span>
+<a name="l01049"></a>01049 <span class="comment"> \endcode</span>
+<a name="l01050"></a>01050 <span class="comment"> *</span>
+<a name="l01051"></a>01051 <span class="comment"> * In the example above, the variable "octet" will contain the value 4.</span>
+<a name="l01052"></a>01052 <span class="comment"> *</span>
+<a name="l01053"></a>01053 <span class="comment"> * \hideinitializer</span>
+<a name="l01054"></a>01054 <span class="comment"> */</span>
+<a name="l01055"></a><a class="code" href="a00148.html#g165b603ec150e26efec7be199c9c2901">01055</a> <span class="preprocessor">#define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff)</span>
+<a name="l01056"></a>01056 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l01057"></a>01057 <span class="comment">/**</span>
+<a name="l01058"></a>01058 <span class="comment"> * Convert 16-bit quantity from host byte order to network byte order.</span>
+<a name="l01059"></a>01059 <span class="comment"> *</span>
+<a name="l01060"></a>01060 <span class="comment"> * This macro is primarily used for converting constants from host</span>
+<a name="l01061"></a>01061 <span class="comment"> * byte order to network byte order. For converting variables to</span>
+<a name="l01062"></a>01062 <span class="comment"> * network byte order, use the htons() function instead.</span>
+<a name="l01063"></a>01063 <span class="comment"> *</span>
+<a name="l01064"></a>01064 <span class="comment"> * \hideinitializer</span>
+<a name="l01065"></a>01065 <span class="comment"> */</span>
+<a name="l01066"></a>01066 <span class="preprocessor">#ifndef HTONS</span>
+<a name="l01067"></a>01067 <span class="preprocessor"></span><span class="preprocessor"># if UIP_BYTE_ORDER == UIP_BIG_ENDIAN</span>
+<a name="l01068"></a>01068 <span class="preprocessor"></span><span class="preprocessor"># define HTONS(n) (n)</span>
+<a name="l01069"></a>01069 <span class="preprocessor"></span><span class="preprocessor"># else </span><span class="comment">/* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */</span>
+<a name="l01070"></a><a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">01070</a> <span class="preprocessor"># define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8))</span>
+<a name="l01071"></a>01071 <span class="preprocessor"></span><span class="preprocessor"># endif </span><span class="comment">/* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */</span>
+<a name="l01072"></a>01072 <span class="preprocessor">#else</span>
+<a name="l01073"></a>01073 <span class="preprocessor"></span><span class="preprocessor">#error "HTONS already defined!"</span>
+<a name="l01074"></a>01074 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* HTONS */</span>
+<a name="l01075"></a>01075 <span class="comment"></span>
+<a name="l01076"></a>01076 <span class="comment">/**</span>
+<a name="l01077"></a>01077 <span class="comment"> * Convert 16-bit quantity from host byte order to network byte order.</span>
+<a name="l01078"></a>01078 <span class="comment"> *</span>
+<a name="l01079"></a>01079 <span class="comment"> * This function is primarily used for converting variables from host</span>
+<a name="l01080"></a>01080 <span class="comment"> * byte order to network byte order. For converting constants to</span>
+<a name="l01081"></a>01081 <span class="comment"> * network byte order, use the HTONS() macro instead.</span>
+<a name="l01082"></a>01082 <span class="comment"> */</span>
+<a name="l01083"></a>01083 <span class="preprocessor">#ifndef htons</span>
+<a name="l01084"></a>01084 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> val);
+<a name="l01085"></a>01085 <span class="preprocessor">#endif </span><span class="comment">/* htons */</span>
+<a name="l01086"></a>01086 <span class="preprocessor">#ifndef ntohs</span>
+<a name="l01087"></a><a class="code" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">01087</a> <span class="preprocessor"></span><span class="preprocessor">#define ntohs htons</span>
+<a name="l01088"></a>01088 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l01089"></a>01089 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l01090"></a>01090 <span class="comment">/** @} */</span>
+<a name="l01091"></a>01091 <span class="comment"></span>
+<a name="l01092"></a>01092 <span class="comment">/**</span>
+<a name="l01093"></a>01093 <span class="comment"> * Pointer to the application data in the packet buffer.</span>
+<a name="l01094"></a>01094 <span class="comment"> *</span>
+<a name="l01095"></a>01095 <span class="comment"> * This pointer points to the application data when the application is</span>
+<a name="l01096"></a>01096 <span class="comment"> * called. If the application wishes to send data, the application may</span>
+<a name="l01097"></a>01097 <span class="comment"> * use this space to write the data into before calling uip_send().</span>
+<a name="l01098"></a>01098 <span class="comment"> */</span>
+<a name="l01099"></a>01099 <span class="keyword">extern</span> <span class="keywordtype">void</span> *<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>;
+<a name="l01100"></a>01100
+<a name="l01101"></a>01101 <span class="preprocessor">#if UIP_URGDATA > 0</span>
+<a name="l01102"></a>01102 <span class="preprocessor"></span><span class="comment">/* u8_t *uip_urgdata:</span>
+<a name="l01103"></a>01103 <span class="comment"> *</span>
+<a name="l01104"></a>01104 <span class="comment"> * This pointer points to any urgent data that has been received. Only</span>
+<a name="l01105"></a>01105 <span class="comment"> * present if compiled with support for urgent data (UIP_URGDATA).</span>
+<a name="l01106"></a>01106 <span class="comment"> */</span>
+<a name="l01107"></a>01107 <span class="keyword">extern</span> <span class="keywordtype">void</span> *uip_urgdata;
+<a name="l01108"></a>01108 <span class="preprocessor">#endif </span><span class="comment">/* UIP_URGDATA > 0 */</span>
+<a name="l01109"></a>01109
+<a name="l01110"></a>01110 <span class="comment"></span>
+<a name="l01111"></a>01111 <span class="comment">/**</span>
+<a name="l01112"></a>01112 <span class="comment"> * \defgroup uipdrivervars Variables used in uIP device drivers</span>
+<a name="l01113"></a>01113 <span class="comment"> * @{</span>
+<a name="l01114"></a>01114 <span class="comment"> *</span>
+<a name="l01115"></a>01115 <span class="comment"> * uIP has a few global variables that are used in device drivers for</span>
+<a name="l01116"></a>01116 <span class="comment"> * uIP.</span>
+<a name="l01117"></a>01117 <span class="comment"> */</span>
+<a name="l01118"></a>01118 <span class="comment"></span>
+<a name="l01119"></a>01119 <span class="comment">/**</span>
+<a name="l01120"></a>01120 <span class="comment"> * The length of the packet in the uip_buf buffer.</span>
+<a name="l01121"></a>01121 <span class="comment"> *</span>
+<a name="l01122"></a>01122 <span class="comment"> * The global variable uip_len holds the length of the packet in the</span>
+<a name="l01123"></a>01123 <span class="comment"> * uip_buf buffer.</span>
+<a name="l01124"></a>01124 <span class="comment"> *</span>
+<a name="l01125"></a>01125 <span class="comment"> * When the network device driver calls the uIP input function,</span>
+<a name="l01126"></a>01126 <span class="comment"> * uip_len should be set to the length of the packet in the uip_buf</span>
+<a name="l01127"></a>01127 <span class="comment"> * buffer.</span>
+<a name="l01128"></a>01128 <span class="comment"> *</span>
+<a name="l01129"></a>01129 <span class="comment"> * When sending packets, the device driver should use the contents of</span>
+<a name="l01130"></a>01130 <span class="comment"> * the uip_len variable to determine the length of the outgoing</span>
+<a name="l01131"></a>01131 <span class="comment"> * packet.</span>
+<a name="l01132"></a>01132 <span class="comment"> *</span>
+<a name="l01133"></a>01133 <span class="comment"> */</span>
+<a name="l01134"></a>01134 <span class="keyword">extern</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a>;
+<a name="l01135"></a>01135 <span class="comment"></span>
+<a name="l01136"></a>01136 <span class="comment">/** @} */</span>
+<a name="l01137"></a>01137
+<a name="l01138"></a>01138 <span class="preprocessor">#if UIP_URGDATA > 0</span>
+<a name="l01139"></a>01139 <span class="preprocessor"></span><span class="keyword">extern</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_urglen, uip_surglen;
+<a name="l01140"></a>01140 <span class="preprocessor">#endif </span><span class="comment">/* UIP_URGDATA > 0 */</span>
+<a name="l01141"></a>01141
+<a name="l01142"></a>01142 <span class="comment"></span>
+<a name="l01143"></a>01143 <span class="comment">/**</span>
+<a name="l01144"></a>01144 <span class="comment"> * Representation of a uIP TCP connection.</span>
+<a name="l01145"></a>01145 <span class="comment"> *</span>
+<a name="l01146"></a>01146 <span class="comment"> * The uip_conn structure is used for identifying a connection. All</span>
+<a name="l01147"></a>01147 <span class="comment"> * but one field in the structure are to be considered read-only by an</span>
+<a name="l01148"></a>01148 <span class="comment"> * application. The only exception is the appstate field whos purpose</span>
+<a name="l01149"></a>01149 <span class="comment"> * is to let the application store application-specific state (e.g.,</span>
+<a name="l01150"></a>01150 <span class="comment"> * file pointers) for the connection. The type of this field is</span>
+<a name="l01151"></a>01151 <span class="comment"> * configured in the "uipopt.h" header file.</span>
+<a name="l01152"></a>01152 <span class="comment"> */</span>
+<a name="l01153"></a><a class="code" href="a00088.html">01153</a> <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> {
+<a name="l01154"></a><a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">01154</a> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>; <span class="comment">/**< The IP address of the remote host. */</span>
+<a name="l01155"></a>01155
+<a name="l01156"></a><a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">01156</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a>; <span class="comment">/**< The local TCP port, in network byte order. */</span>
+<a name="l01157"></a><a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">01157</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>; <span class="comment">/**< The local remote TCP port, in network byte</span>
+<a name="l01158"></a>01158 <span class="comment"> order. */</span>
+<a name="l01159"></a>01159
+<a name="l01160"></a><a class="code" href="a00088.html#70297b3e6d4eaae7bd828cb50bd1efe3">01160</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#70297b3e6d4eaae7bd828cb50bd1efe3">rcv_nxt</a>[4]; <span class="comment">/**< The sequence number that we expect to</span>
+<a name="l01161"></a>01161 <span class="comment"> receive next. */</span>
+<a name="l01162"></a><a class="code" href="a00088.html#8f6b08a5ba2a8d75ca7279e2056aa8c6">01162</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#8f6b08a5ba2a8d75ca7279e2056aa8c6">snd_nxt</a>[4]; <span class="comment">/**< The sequence number that was last sent by</span>
+<a name="l01163"></a>01163 <span class="comment"> us. */</span>
+<a name="l01164"></a><a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">01164</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>; <span class="comment">/**< Length of the data that was previously sent. */</span>
+<a name="l01165"></a><a class="code" href="a00088.html#3347ef1b6e8581402445d1a0280c7a14">01165</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#3347ef1b6e8581402445d1a0280c7a14">mss</a>; <span class="comment">/**< Current maximum segment size for the</span>
+<a name="l01166"></a>01166 <span class="comment"> connection. */</span>
+<a name="l01167"></a><a class="code" href="a00088.html#db7a3fadb68df5fdd37e8b91a2c751ea">01167</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#db7a3fadb68df5fdd37e8b91a2c751ea">initialmss</a>; <span class="comment">/**< Initial maximum segment size for the</span>
+<a name="l01168"></a>01168 <span class="comment"> connection. */</span>
+<a name="l01169"></a><a class="code" href="a00088.html#ef661afb3aa82f0437d2ed8d3c20be76">01169</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#ef661afb3aa82f0437d2ed8d3c20be76">sa</a>; <span class="comment">/**< Retransmission time-out calculation state</span>
+<a name="l01170"></a>01170 <span class="comment"> variable. */</span>
+<a name="l01171"></a><a class="code" href="a00088.html#eb9fcbd3c9b0a795dcd63f33c323d65c">01171</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#eb9fcbd3c9b0a795dcd63f33c323d65c">sv</a>; <span class="comment">/**< Retransmission time-out calculation state</span>
+<a name="l01172"></a>01172 <span class="comment"> variable. */</span>
+<a name="l01173"></a><a class="code" href="a00088.html#e3aa9cc25e45b663e6aabc54c013019e">01173</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#e3aa9cc25e45b663e6aabc54c013019e">rto</a>; <span class="comment">/**< Retransmission time-out. */</span>
+<a name="l01174"></a><a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">01174</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a>; <span class="comment">/**< TCP state and flags. */</span>
+<a name="l01175"></a><a class="code" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">01175</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00087.html">timer</a>; <span class="comment">/**< The retransmission timer. */</span>
+<a name="l01176"></a><a class="code" href="a00088.html#4289c59840b128f2f6526e9da2711d47">01176</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00088.html#4289c59840b128f2f6526e9da2711d47">nrtx</a>; <span class="comment">/**< The number of retransmissions for the last</span>
+<a name="l01177"></a>01177 <span class="comment"> segment sent. */</span>
+<a name="l01178"></a>01178 <span class="comment"></span>
+<a name="l01179"></a>01179 <span class="comment"> /** The application state. */</span>
+<a name="l01180"></a><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">01180</a> <a class="code" href="a00085.html">uip_tcp_appstate_t</a> <a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>;
+<a name="l01181"></a>01181 };
+<a name="l01182"></a>01182
+<a name="l01183"></a>01183 <span class="comment"></span>
+<a name="l01184"></a>01184 <span class="comment">/**</span>
+<a name="l01185"></a>01185 <span class="comment"> * Pointer to the current TCP connection.</span>
+<a name="l01186"></a>01186 <span class="comment"> *</span>
+<a name="l01187"></a>01187 <span class="comment"> * The uip_conn pointer can be used to access the current TCP</span>
+<a name="l01188"></a>01188 <span class="comment"> * connection.</span>
+<a name="l01189"></a>01189 <span class="comment"> */</span>
+<a name="l01190"></a>01190 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00088.html">uip_conn</a> *<a class="code" href="a00088.html">uip_conn</a>;
+<a name="l01191"></a>01191 <span class="comment">/* The array containing all uIP connections. */</span>
+<a name="l01192"></a>01192 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> <a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[<a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>];<span class="comment"></span>
+<a name="l01193"></a>01193 <span class="comment">/**</span>
+<a name="l01194"></a>01194 <span class="comment"> * \addtogroup uiparch</span>
+<a name="l01195"></a>01195 <span class="comment"> * @{</span>
+<a name="l01196"></a>01196 <span class="comment"> */</span>
+<a name="l01197"></a>01197 <span class="comment"></span>
+<a name="l01198"></a>01198 <span class="comment">/**</span>
+<a name="l01199"></a>01199 <span class="comment"> * 4-byte array used for the 32-bit sequence number calculations.</span>
+<a name="l01200"></a>01200 <span class="comment"> */</span>
+<a name="l01201"></a>01201 <span class="keyword">extern</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a>[4];
+<a name="l01202"></a>01202 <span class="comment"></span>
+<a name="l01203"></a>01203 <span class="comment">/** @} */</span>
+<a name="l01204"></a>01204
+<a name="l01205"></a>01205
+<a name="l01206"></a>01206 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l01207"></a>01207 <span class="preprocessor"></span><span class="comment">/**</span>
+<a name="l01208"></a>01208 <span class="comment"> * Representation of a uIP UDP connection.</span>
+<a name="l01209"></a>01209 <span class="comment"> */</span>
+<a name="l01210"></a><a class="code" href="a00095.html">01210</a> <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> {
+<a name="l01211"></a><a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">01211</a> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">ripaddr</a>; <span class="comment">/**< The IP address of the remote peer. */</span>
+<a name="l01212"></a><a class="code" href="a00095.html#981392e295db4d024eea95805c51c371">01212</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00095.html#981392e295db4d024eea95805c51c371">lport</a>; <span class="comment">/**< The local port number in network byte order. */</span>
+<a name="l01213"></a><a class="code" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">01213</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">rport</a>; <span class="comment">/**< The remote port number in network byte order. */</span>
+<a name="l01214"></a><a class="code" href="a00095.html#4da1d7815516cd2b5bda3a66fdf05198">01214</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00095.html#4da1d7815516cd2b5bda3a66fdf05198">ttl</a>; <span class="comment">/**< Default time-to-live. */</span>
+<a name="l01215"></a>01215 <span class="comment"></span>
+<a name="l01216"></a>01216 <span class="comment"> /** The application state. */</span>
+<a name="l01217"></a><a class="code" href="a00095.html#c8afa29e0aa5e789d6929b366d98ba56">01217</a> <a class="code" href="a00153.html#ga92afb113e122f860392bfbd385f842e">uip_udp_appstate_t</a> <a class="code" href="a00095.html#c8afa29e0aa5e789d6929b366d98ba56">appstate</a>;
+<a name="l01218"></a>01218 };
+<a name="l01219"></a>01219 <span class="comment"></span>
+<a name="l01220"></a>01220 <span class="comment">/**</span>
+<a name="l01221"></a>01221 <span class="comment"> * The current UDP connection.</span>
+<a name="l01222"></a>01222 <span class="comment"> */</span>
+<a name="l01223"></a>01223 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00095.html">uip_udp_conn</a> *<a class="code" href="a00095.html">uip_udp_conn</a>;
+<a name="l01224"></a>01224 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip_udp_conn</a> <a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[<a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>];
+<a name="l01225"></a>01225 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l01226"></a>01226 <span class="comment"></span>
+<a name="l01227"></a>01227 <span class="comment">/**</span>
+<a name="l01228"></a>01228 <span class="comment"> * The structure holding the TCP/IP statistics that are gathered if</span>
+<a name="l01229"></a>01229 <span class="comment"> * UIP_STATISTICS is set to 1.</span>
+<a name="l01230"></a>01230 <span class="comment"> *</span>
+<a name="l01231"></a>01231 <span class="comment"> */</span>
+<a name="l01232"></a><a class="code" href="a00093.html">01232</a> <span class="keyword">struct </span><a class="code" href="a00093.html">uip_stats</a> {
+<a name="l01233"></a>01233 <span class="keyword">struct </span>{
+<a name="l01234"></a><a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">01234</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>; <span class="comment">/**< Number of dropped packets at the IP</span>
+<a name="l01235"></a>01235 <span class="comment"> layer. */</span>
+<a name="l01236"></a><a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">01236</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>; <span class="comment">/**< Number of received packets at the IP</span>
+<a name="l01237"></a>01237 <span class="comment"> layer. */</span>
+<a name="l01238"></a><a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">01238</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>; <span class="comment">/**< Number of sent packets at the IP</span>
+<a name="l01239"></a>01239 <span class="comment"> layer. */</span>
+<a name="l01240"></a><a class="code" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">01240</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">vhlerr</a>; <span class="comment">/**< Number of packets dropped due to wrong</span>
+<a name="l01241"></a>01241 <span class="comment"> IP version or header length. */</span>
+<a name="l01242"></a><a class="code" href="a00093.html#0c816f34c0187f2154c91a18d3ad87c8">01242</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#0c816f34c0187f2154c91a18d3ad87c8">hblenerr</a>; <span class="comment">/**< Number of packets dropped due to wrong</span>
+<a name="l01243"></a>01243 <span class="comment"> IP length, high byte. */</span>
+<a name="l01244"></a><a class="code" href="a00093.html#6157452bdc9921f44b2e22e4b5969258">01244</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#6157452bdc9921f44b2e22e4b5969258">lblenerr</a>; <span class="comment">/**< Number of packets dropped due to wrong</span>
+<a name="l01245"></a>01245 <span class="comment"> IP length, low byte. */</span>
+<a name="l01246"></a><a class="code" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">01246</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">fragerr</a>; <span class="comment">/**< Number of packets dropped since they</span>
+<a name="l01247"></a>01247 <span class="comment"> were IP fragments. */</span>
+<a name="l01248"></a><a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">01248</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>; <span class="comment">/**< Number of packets dropped due to IP</span>
+<a name="l01249"></a>01249 <span class="comment"> checksum errors. */</span>
+<a name="l01250"></a><a class="code" href="a00093.html#b4622e2599ff3a592db09219b2641682">01250</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#b4622e2599ff3a592db09219b2641682">protoerr</a>; <span class="comment">/**< Number of packets dropped since they</span>
+<a name="l01251"></a>01251 <span class="comment"> were neither ICMP, UDP nor TCP. */</span>
+<a name="l01252"></a>01252 } <a class="code" href="a00093.html#1deb2899508216804823498a69378118">ip</a>; <span class="comment">/**< IP statistics. */</span>
+<a name="l01253"></a>01253 <span class="keyword">struct </span>{
+<a name="l01254"></a>01254 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>; <span class="comment">/**< Number of dropped ICMP packets. */</span>
+<a name="l01255"></a>01255 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>; <span class="comment">/**< Number of received ICMP packets. */</span>
+<a name="l01256"></a>01256 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>; <span class="comment">/**< Number of sent ICMP packets. */</span>
+<a name="l01257"></a><a class="code" href="a00093.html#8da121d6e50992ec55778f9b2141552d">01257</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#8da121d6e50992ec55778f9b2141552d">typeerr</a>; <span class="comment">/**< Number of ICMP packets with a wrong</span>
+<a name="l01258"></a>01258 <span class="comment"> type. */</span>
+<a name="l01259"></a>01259 } <a class="code" href="a00093.html#3983b45977630418d3038231aa8b68ed">icmp</a>; <span class="comment">/**< ICMP statistics. */</span>
+<a name="l01260"></a>01260 <span class="keyword">struct </span>{
+<a name="l01261"></a>01261 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>; <span class="comment">/**< Number of dropped TCP segments. */</span>
+<a name="l01262"></a>01262 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>; <span class="comment">/**< Number of recived TCP segments. */</span>
+<a name="l01263"></a>01263 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>; <span class="comment">/**< Number of sent TCP segments. */</span>
+<a name="l01264"></a>01264 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>; <span class="comment">/**< Number of TCP segments with a bad</span>
+<a name="l01265"></a>01265 <span class="comment"> checksum. */</span>
+<a name="l01266"></a><a class="code" href="a00093.html#7a58d95f7f7827789ff52500e3d16c34">01266</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7a58d95f7f7827789ff52500e3d16c34">ackerr</a>; <span class="comment">/**< Number of TCP segments with a bad ACK</span>
+<a name="l01267"></a>01267 <span class="comment"> number. */</span>
+<a name="l01268"></a><a class="code" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">01268</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">rst</a>; <span class="comment">/**< Number of recevied TCP RST (reset) segments. */</span>
+<a name="l01269"></a><a class="code" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">01269</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">rexmit</a>; <span class="comment">/**< Number of retransmitted TCP segments. */</span>
+<a name="l01270"></a><a class="code" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">01270</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">syndrop</a>; <span class="comment">/**< Number of dropped SYNs due to too few</span>
+<a name="l01271"></a>01271 <span class="comment"> connections was avaliable. */</span>
+<a name="l01272"></a><a class="code" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">01272</a> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">synrst</a>; <span class="comment">/**< Number of SYNs for closed ports,</span>
+<a name="l01273"></a>01273 <span class="comment"> triggering a RST. */</span>
+<a name="l01274"></a>01274 } <a class="code" href="a00093.html#e292b8977f6b81265bf14e1676face3e">tcp</a>; <span class="comment">/**< TCP statistics. */</span>
+<a name="l01275"></a>01275 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l01276"></a>01276 <span class="preprocessor"></span> <span class="keyword">struct </span>{
+<a name="l01277"></a>01277 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">drop</a>; <span class="comment">/**< Number of dropped UDP segments. */</span>
+<a name="l01278"></a>01278 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">recv</a>; <span class="comment">/**< Number of recived UDP segments. */</span>
+<a name="l01279"></a>01279 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">sent</a>; <span class="comment">/**< Number of sent UDP segments. */</span>
+<a name="l01280"></a>01280 <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a> <a class="code" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">chkerr</a>; <span class="comment">/**< Number of UDP segments with a bad</span>
+<a name="l01281"></a>01281 <span class="comment"> checksum. */</span>
+<a name="l01282"></a>01282 } <a class="code" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">udp</a>; <span class="comment">/**< UDP statistics. */</span>
+<a name="l01283"></a>01283 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l01284"></a>01284 };
+<a name="l01285"></a>01285 <span class="comment"></span>
+<a name="l01286"></a>01286 <span class="comment">/**</span>
+<a name="l01287"></a>01287 <span class="comment"> * The uIP TCP/IP statistics.</span>
+<a name="l01288"></a>01288 <span class="comment"> *</span>
+<a name="l01289"></a>01289 <span class="comment"> * This is the variable in which the uIP TCP/IP statistics are gathered.</span>
+<a name="l01290"></a>01290 <span class="comment"> */</span>
+<a name="l01291"></a>01291 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00093.html">uip_stats</a> <a class="code" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip_stat</a>;
+<a name="l01292"></a>01292
+<a name="l01293"></a>01293
+<a name="l01294"></a>01294 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l01295"></a>01295 <span class="comment">/* All the stuff below this point is internal to uIP and should not be</span>
+<a name="l01296"></a>01296 <span class="comment"> * used directly by an application or by a device driver.</span>
+<a name="l01297"></a>01297 <span class="comment"> */</span>
+<a name="l01298"></a>01298 <span class="comment">/*---------------------------------------------------------------------------*/</span>
+<a name="l01299"></a>01299 <span class="comment">/* u8_t uip_flags:</span>
+<a name="l01300"></a>01300 <span class="comment"> *</span>
+<a name="l01301"></a>01301 <span class="comment"> * When the application is called, uip_flags will contain the flags</span>
+<a name="l01302"></a>01302 <span class="comment"> * that are defined in this file. Please read below for more</span>
+<a name="l01303"></a>01303 <span class="comment"> * infomation.</span>
+<a name="l01304"></a>01304 <span class="comment"> */</span>
+<a name="l01305"></a>01305 <span class="keyword">extern</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip_flags</a>;
+<a name="l01306"></a>01306
+<a name="l01307"></a>01307 <span class="comment">/* The following flags may be set in the global variable uip_flags</span>
+<a name="l01308"></a>01308 <span class="comment"> before calling the application callback. The UIP_ACKDATA,</span>
+<a name="l01309"></a>01309 <span class="comment"> UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time,</span>
+<a name="l01310"></a>01310 <span class="comment"> whereas the others are mutualy exclusive. Note that these flags</span>
+<a name="l01311"></a>01311 <span class="comment"> should *NOT* be accessed directly, but only through the uIP</span>
+<a name="l01312"></a>01312 <span class="comment"> functions/macros. */</span>
+<a name="l01313"></a>01313
+<a name="l01314"></a><a class="code" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">01314</a> <span class="preprocessor">#define UIP_ACKDATA 1 </span><span class="comment">/* Signifies that the outstanding data was</span>
+<a name="l01315"></a>01315 <span class="comment"> acked and the application should send</span>
+<a name="l01316"></a>01316 <span class="comment"> out new data instead of retransmitting</span>
+<a name="l01317"></a>01317 <span class="comment"> the last data. */</span>
+<a name="l01318"></a><a class="code" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">01318</a> <span class="preprocessor">#define UIP_NEWDATA 2 </span><span class="comment">/* Flags the fact that the peer has sent</span>
+<a name="l01319"></a>01319 <span class="comment"> us new data. */</span>
+<a name="l01320"></a><a class="code" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">01320</a> <span class="preprocessor">#define UIP_REXMIT 4 </span><span class="comment">/* Tells the application to retransmit the</span>
+<a name="l01321"></a>01321 <span class="comment"> data that was last sent. */</span>
+<a name="l01322"></a><a class="code" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">01322</a> <span class="preprocessor">#define UIP_POLL 8 </span><span class="comment">/* Used for polling the application, to</span>
+<a name="l01323"></a>01323 <span class="comment"> check if the application has data that</span>
+<a name="l01324"></a>01324 <span class="comment"> it wants to send. */</span>
+<a name="l01325"></a><a class="code" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">01325</a> <span class="preprocessor">#define UIP_CLOSE 16 </span><span class="comment">/* The remote host has closed the</span>
+<a name="l01326"></a>01326 <span class="comment"> connection, thus the connection has</span>
+<a name="l01327"></a>01327 <span class="comment"> gone away. Or the application signals</span>
+<a name="l01328"></a>01328 <span class="comment"> that it wants to close the</span>
+<a name="l01329"></a>01329 <span class="comment"> connection. */</span>
+<a name="l01330"></a><a class="code" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">01330</a> <span class="preprocessor">#define UIP_ABORT 32 </span><span class="comment">/* The remote host has aborted the</span>
+<a name="l01331"></a>01331 <span class="comment"> connection, thus the connection has</span>
+<a name="l01332"></a>01332 <span class="comment"> gone away. Or the application signals</span>
+<a name="l01333"></a>01333 <span class="comment"> that it wants to abort the</span>
+<a name="l01334"></a>01334 <span class="comment"> connection. */</span>
+<a name="l01335"></a><a class="code" href="a00150.html#gf84316f469ce0726985c0702db49a989">01335</a> <span class="preprocessor">#define UIP_CONNECTED 64 </span><span class="comment">/* We have got a connection from a remote</span>
+<a name="l01336"></a>01336 <span class="comment"> host and have set up a new connection</span>
+<a name="l01337"></a>01337 <span class="comment"> for it, or an active connection has</span>
+<a name="l01338"></a>01338 <span class="comment"> been successfully established. */</span>
+<a name="l01339"></a>01339
+<a name="l01340"></a><a class="code" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">01340</a> <span class="preprocessor">#define UIP_TIMEDOUT 128 </span><span class="comment">/* The connection has been aborted due to</span>
+<a name="l01341"></a>01341 <span class="comment"> too many retransmissions. */</span>
+<a name="l01342"></a>01342
+<a name="l01343"></a>01343 <span class="comment">/* uip_process(flag):</span>
+<a name="l01344"></a>01344 <span class="comment"> *</span>
+<a name="l01345"></a>01345 <span class="comment"> * The actual uIP function which does all the work.</span>
+<a name="l01346"></a>01346 <span class="comment"> */</span>
+<a name="l01347"></a>01347 <span class="keywordtype">void</span> <a class="code" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip_process</a>(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flag);
+<a name="l01348"></a>01348
+<a name="l01349"></a>01349 <span class="comment">/* The following flags are passed as an argument to the uip_process()</span>
+<a name="l01350"></a>01350 <span class="comment"> function. They are used to distinguish between the two cases where</span>
+<a name="l01351"></a>01351 <span class="comment"> uip_process() is called. It can be called either because we have</span>
+<a name="l01352"></a>01352 <span class="comment"> incoming data that should be processed, or because the periodic</span>
+<a name="l01353"></a>01353 <span class="comment"> timer has fired. These values are never used directly, but only in</span>
+<a name="l01354"></a>01354 <span class="comment"> the macrose defined in this file. */</span>
+<a name="l01355"></a>01355
+<a name="l01356"></a><a class="code" href="a00150.html#gabc40c09f49d15acb1b1a7f02bb3a807">01356</a> <span class="preprocessor">#define UIP_DATA 1 </span><span class="comment">/* Tells uIP that there is incoming</span>
+<a name="l01357"></a>01357 <span class="comment"> data in the uip_buf buffer. The</span>
+<a name="l01358"></a>01358 <span class="comment"> length of the data is stored in the</span>
+<a name="l01359"></a>01359 <span class="comment"> global variable uip_len. */</span>
+<a name="l01360"></a><a class="code" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">01360</a> <span class="preprocessor">#define UIP_TIMER 2 </span><span class="comment">/* Tells uIP that the periodic timer</span>
+<a name="l01361"></a>01361 <span class="comment"> has fired. */</span>
+<a name="l01362"></a><a class="code" href="a00150.html#gd605357e29affb0d3104294c90f09905">01362</a> <span class="preprocessor">#define UIP_POLL_REQUEST 3 </span><span class="comment">/* Tells uIP that a connection should</span>
+<a name="l01363"></a>01363 <span class="comment"> be polled. */</span>
+<a name="l01364"></a><a class="code" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">01364</a> <span class="preprocessor">#define UIP_UDP_SEND_CONN 4 </span><span class="comment">/* Tells uIP that a UDP datagram</span>
+<a name="l01365"></a>01365 <span class="comment"> should be constructed in the</span>
+<a name="l01366"></a>01366 <span class="comment"> uip_buf buffer. */</span>
+<a name="l01367"></a>01367 <span class="preprocessor">#if UIP_UDP</span>
+<a name="l01368"></a><a class="code" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">01368</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_UDP_TIMER 5</span>
+<a name="l01369"></a>01369 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span>
+<a name="l01370"></a>01370
+<a name="l01371"></a>01371 <span class="comment">/* The TCP states used in the uip_conn->tcpstateflags. */</span>
+<a name="l01372"></a><a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">01372</a> <span class="preprocessor">#define UIP_CLOSED 0</span>
+<a name="l01373"></a><a class="code" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">01373</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_SYN_RCVD 1</span>
+<a name="l01374"></a><a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">01374</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_SYN_SENT 2</span>
+<a name="l01375"></a><a class="code" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">01375</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ESTABLISHED 3</span>
+<a name="l01376"></a><a class="code" href="a00150.html#ga533c394b1fa0030205534befa31c525">01376</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_FIN_WAIT_1 4</span>
+<a name="l01377"></a><a class="code" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">01377</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_FIN_WAIT_2 5</span>
+<a name="l01378"></a><a class="code" href="a00150.html#g64d9affc680a445d708234e70450477b">01378</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_CLOSING 6</span>
+<a name="l01379"></a><a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">01379</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_TIME_WAIT 7</span>
+<a name="l01380"></a><a class="code" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">01380</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_LAST_ACK 8</span>
+<a name="l01381"></a><a class="code" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">01381</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_TS_MASK 15</span>
+<a name="l01382"></a>01382 <span class="preprocessor"></span>
+<a name="l01383"></a><a class="code" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">01383</a> <span class="preprocessor">#define UIP_STOPPED 16</span>
+<a name="l01384"></a>01384 <span class="preprocessor"></span>
+<a name="l01385"></a>01385 <span class="comment">/* The TCP and IP headers. */</span>
+<a name="l01386"></a><a class="code" href="a00094.html">01386</a> <span class="keyword">struct </span><a class="code" href="a00094.html">uip_tcpip_hdr</a> {
+<a name="l01387"></a>01387 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01388"></a>01388 <span class="preprocessor"></span> <span class="comment">/* IPv6 header. */</span>
+<a name="l01389"></a>01389 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> vtc,
+<a name="l01390"></a>01390 tcflow;
+<a name="l01391"></a>01391 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> flow;
+<a name="l01392"></a>01392 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#e57281f5bef284bc9545834ef8ed4a96">len</a>[2];
+<a name="l01393"></a>01393 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#e45b31a0a277dd5325ad2a332358b21b">proto</a>, <a class="code" href="a00094.html#0f27e16ddcf7199d514968204966f559">ttl</a>;
+<a name="l01394"></a>01394 <a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> <a class="code" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">srcipaddr</a>, <a class="code" href="a00094.html#8d4e08d051b35b1c710c3be5b8bbfa05">destipaddr</a>;
+<a name="l01395"></a>01395 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01396"></a>01396 <span class="comment">/* IPv4 header. */</span>
+<a name="l01397"></a><a class="code" href="a00094.html#e1e60d56ea87dfa09230e25ca5ecf2fc">01397</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#e1e60d56ea87dfa09230e25ca5ecf2fc">vhl</a>,
+<a name="l01398"></a>01398 <a class="code" href="a00094.html#8cf0ca17b115ff2e3071b3fabcc43b53">tos</a>,
+<a name="l01399"></a>01399 <a class="code" href="a00094.html#e57281f5bef284bc9545834ef8ed4a96">len</a>[2],
+<a name="l01400"></a>01400 <a class="code" href="a00094.html#7a59f0dad059786238d8ab604630e7f3">ipid</a>[2],
+<a name="l01401"></a>01401 <a class="code" href="a00094.html#85d7f35662f7be20cd84e789a290dd4b">ipoffset</a>[2],
+<a name="l01402"></a>01402 <a class="code" href="a00094.html#0f27e16ddcf7199d514968204966f559">ttl</a>,
+<a name="l01403"></a>01403 <a class="code" href="a00094.html#e45b31a0a277dd5325ad2a332358b21b">proto</a>;
+<a name="l01404"></a><a class="code" href="a00094.html#af7a8a5310ad945de38f5b3ac755ae7d">01404</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00094.html#af7a8a5310ad945de38f5b3ac755ae7d">ipchksum</a>;
+<a name="l01405"></a><a class="code" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">01405</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">srcipaddr</a>[2],
+<a name="l01406"></a>01406 <a class="code" href="a00094.html#8d4e08d051b35b1c710c3be5b8bbfa05">destipaddr</a>[2];
+<a name="l01407"></a>01407 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01408"></a>01408
+<a name="l01409"></a>01409 <span class="comment">/* TCP header. */</span>
+<a name="l01410"></a><a class="code" href="a00094.html#a81fff4836049cb3c018304d77337554">01410</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00094.html#a81fff4836049cb3c018304d77337554">srcport</a>,
+<a name="l01411"></a>01411 <a class="code" href="a00094.html#025ffa46b799fa6952719c499a3ae17c">destport</a>;
+<a name="l01412"></a><a class="code" href="a00094.html#7f0ab3fe3bcf1e3ed9f5950cb4474ec1">01412</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#2541fae506eb111ff1be2372e0919839">seqno</a>[4],
+<a name="l01413"></a>01413 <a class="code" href="a00094.html#71721395f1c7c42b8bcc111b339bea7c">ackno</a>[4],
+<a name="l01414"></a>01414 <a class="code" href="a00094.html#6af8a59d0ab8967aacea749d6e59ac90">tcpoffset</a>,
+<a name="l01415"></a>01415 <a class="code" href="a00094.html#619d9755a5d4aaabdb2e5e6ea4c1e0bf">flags</a>,
+<a name="l01416"></a>01416 <a class="code" href="a00094.html#7f0ab3fe3bcf1e3ed9f5950cb4474ec1">wnd</a>[2];
+<a name="l01417"></a><a class="code" href="a00094.html#f4a1d8cfbe270393a2de02b0c743e474">01417</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00094.html#f4a1d8cfbe270393a2de02b0c743e474">tcpchksum</a>;
+<a name="l01418"></a><a class="code" href="a00094.html#dc7001682017599549f57771f4cd1b9a">01418</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#dc7001682017599549f57771f4cd1b9a">urgp</a>[2];
+<a name="l01419"></a><a class="code" href="a00094.html#dde3cf9a57445814d01b3c67da08afdb">01419</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00094.html#dde3cf9a57445814d01b3c67da08afdb">optdata</a>[4];
+<a name="l01420"></a>01420 };
+<a name="l01421"></a>01421
+<a name="l01422"></a>01422 <span class="comment">/* The ICMP and IP headers. */</span>
+<a name="l01423"></a><a class="code" href="a00091.html">01423</a> <span class="keyword">struct </span><a class="code" href="a00091.html">uip_icmpip_hdr</a> {
+<a name="l01424"></a>01424 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01425"></a>01425 <span class="preprocessor"></span> <span class="comment">/* IPv6 header. */</span>
+<a name="l01426"></a>01426 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> vtc,
+<a name="l01427"></a>01427 tcf;
+<a name="l01428"></a>01428 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> flow;
+<a name="l01429"></a>01429 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00091.html#b15853725b233d526b291db0347d4ecd">len</a>[2];
+<a name="l01430"></a>01430 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00091.html#55e7764a9f6ed05aaa98076b9f6770a5">proto</a>, <a class="code" href="a00091.html#55be3d5413ce49c5c4f5576def12d7ec">ttl</a>;
+<a name="l01431"></a>01431 <a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> <a class="code" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">srcipaddr</a>, <a class="code" href="a00091.html#e27f4949613fe3c1de5a839af01d99dd">destipaddr</a>;
+<a name="l01432"></a>01432 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01433"></a>01433 <span class="comment">/* IPv4 header. */</span>
+<a name="l01434"></a><a class="code" href="a00091.html#7d472d8b3c41618d39c93c4ca92fb3f4">01434</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00091.html#7d472d8b3c41618d39c93c4ca92fb3f4">vhl</a>,
+<a name="l01435"></a>01435 <a class="code" href="a00091.html#a3f2d9cb20290019b2743e8df31a2f8b">tos</a>,
+<a name="l01436"></a>01436 <a class="code" href="a00091.html#b15853725b233d526b291db0347d4ecd">len</a>[2],
+<a name="l01437"></a>01437 <a class="code" href="a00091.html#308463cc7b3d45d2dbcdcedd4cde9bb9">ipid</a>[2],
+<a name="l01438"></a>01438 <a class="code" href="a00091.html#4619e69ec86a47f6abe945b39ec7f63a">ipoffset</a>[2],
+<a name="l01439"></a>01439 <a class="code" href="a00091.html#55be3d5413ce49c5c4f5576def12d7ec">ttl</a>,
+<a name="l01440"></a>01440 <a class="code" href="a00091.html#55e7764a9f6ed05aaa98076b9f6770a5">proto</a>;
+<a name="l01441"></a><a class="code" href="a00091.html#babb9c2be394477af97f79507bcb4c86">01441</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00091.html#babb9c2be394477af97f79507bcb4c86">ipchksum</a>;
+<a name="l01442"></a><a class="code" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">01442</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">srcipaddr</a>[2],
+<a name="l01443"></a>01443 <a class="code" href="a00091.html#e27f4949613fe3c1de5a839af01d99dd">destipaddr</a>[2];
+<a name="l01444"></a>01444 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01445"></a>01445
+<a name="l01446"></a>01446 <span class="comment">/* ICMP (echo) header. */</span>
+<a name="l01447"></a><a class="code" href="a00091.html#fa0fe6ca88f692d22af70ff007411252">01447</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00091.html#fa0fe6ca88f692d22af70ff007411252">type</a>, <a class="code" href="a00091.html#266ea23d75c83f15b915ce54100e51c5">icode</a>;
+<a name="l01448"></a><a class="code" href="a00091.html#805f8fd5533a6d4b6793e0645005da4c">01448</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00091.html#805f8fd5533a6d4b6793e0645005da4c">icmpchksum</a>;
+<a name="l01449"></a>01449 <span class="preprocessor">#if !UIP_CONF_IPV6</span>
+<a name="l01450"></a><a class="code" href="a00091.html#967def494c68cfc8a08d5a6c4dbbc25d">01450</a> <span class="preprocessor"></span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00091.html#a6d51f3fa5da9b7f9cd37ae69600c04a">id</a>, <a class="code" href="a00091.html#967def494c68cfc8a08d5a6c4dbbc25d">seqno</a>;
+<a name="l01451"></a>01451 <span class="preprocessor">#else </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l01452"></a>01452 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> flags, reserved1, reserved2, reserved3;
+<a name="l01453"></a>01453 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> icmp6data[16];
+<a name="l01454"></a>01454 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> options[1];
+<a name="l01455"></a>01455 <span class="preprocessor">#endif </span><span class="comment">/* !UIP_CONF_IPV6 */</span>
+<a name="l01456"></a>01456 };
+<a name="l01457"></a>01457
+<a name="l01458"></a>01458
+<a name="l01459"></a>01459 <span class="comment">/* The UDP and IP headers. */</span>
+<a name="l01460"></a><a class="code" href="a00096.html">01460</a> <span class="keyword">struct </span><a class="code" href="a00096.html">uip_udpip_hdr</a> {
+<a name="l01461"></a>01461 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01462"></a>01462 <span class="preprocessor"></span> <span class="comment">/* IPv6 header. */</span>
+<a name="l01463"></a>01463 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> vtc,
+<a name="l01464"></a>01464 tcf;
+<a name="l01465"></a>01465 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> flow;
+<a name="l01466"></a>01466 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00096.html#47140aa52cb9e6a2de38fdfc5da08df1">len</a>[2];
+<a name="l01467"></a>01467 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00096.html#51bbbe3099c10ef26119ddc2aa51e35e">proto</a>, <a class="code" href="a00096.html#6f8c65cfc8242197bcc3cb5b4735b16f">ttl</a>;
+<a name="l01468"></a>01468 <a class="code" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip_ip6addr_t</a> <a class="code" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">srcipaddr</a>, <a class="code" href="a00096.html#be2c98748e180c1747823cd2fb8ecf0e">destipaddr</a>;
+<a name="l01469"></a>01469 <span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01470"></a>01470 <span class="comment">/* IP header. */</span>
+<a name="l01471"></a><a class="code" href="a00096.html#f1684ad96b8acf54154688df3883b801">01471</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00096.html#f1684ad96b8acf54154688df3883b801">vhl</a>,
+<a name="l01472"></a>01472 <a class="code" href="a00096.html#ed119a030ebd3bf7c30a12071c27d441">tos</a>,
+<a name="l01473"></a>01473 <a class="code" href="a00096.html#47140aa52cb9e6a2de38fdfc5da08df1">len</a>[2],
+<a name="l01474"></a>01474 <a class="code" href="a00096.html#569382bc53aa64c227e57efe88fe13ac">ipid</a>[2],
+<a name="l01475"></a>01475 <a class="code" href="a00096.html#8587178a29882482be20c2822b402b96">ipoffset</a>[2],
+<a name="l01476"></a>01476 <a class="code" href="a00096.html#6f8c65cfc8242197bcc3cb5b4735b16f">ttl</a>,
+<a name="l01477"></a>01477 <a class="code" href="a00096.html#51bbbe3099c10ef26119ddc2aa51e35e">proto</a>;
+<a name="l01478"></a><a class="code" href="a00096.html#f20186ef441ef5b600e8544a0f2d8d81">01478</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00096.html#f20186ef441ef5b600e8544a0f2d8d81">ipchksum</a>;
+<a name="l01479"></a><a class="code" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">01479</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">srcipaddr</a>[2],
+<a name="l01480"></a>01480 <a class="code" href="a00096.html#be2c98748e180c1747823cd2fb8ecf0e">destipaddr</a>[2];
+<a name="l01481"></a>01481 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01482"></a>01482
+<a name="l01483"></a>01483 <span class="comment">/* UDP header. */</span>
+<a name="l01484"></a><a class="code" href="a00096.html#b20096ae4953caaa42f6bb2373c4494c">01484</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00096.html#b20096ae4953caaa42f6bb2373c4494c">srcport</a>,
+<a name="l01485"></a>01485 <a class="code" href="a00096.html#e82f68cb91d8688a619d55d2a8572979">destport</a>;
+<a name="l01486"></a><a class="code" href="a00096.html#c92d2f194f096e84791f95d7e8f0ba92">01486</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00096.html#c92d2f194f096e84791f95d7e8f0ba92">udplen</a>;
+<a name="l01487"></a><a class="code" href="a00096.html#858f970feb7462871c814953697a8ad7">01487</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00096.html#858f970feb7462871c814953697a8ad7">udpchksum</a>;
+<a name="l01488"></a>01488 };
+<a name="l01489"></a>01489
+<a name="l01490"></a>01490
+<a name="l01491"></a>01491 <span class="comment"></span>
+<a name="l01492"></a>01492 <span class="comment">/**</span>
+<a name="l01493"></a>01493 <span class="comment"> * The buffer size available for user data in the \ref uip_buf buffer.</span>
+<a name="l01494"></a>01494 <span class="comment"> *</span>
+<a name="l01495"></a>01495 <span class="comment"> * This macro holds the available size for user data in the \ref</span>
+<a name="l01496"></a>01496 <span class="comment"> * uip_buf buffer. The macro is intended to be used for checking</span>
+<a name="l01497"></a>01497 <span class="comment"> * bounds of available user data.</span>
+<a name="l01498"></a>01498 <span class="comment"> *</span>
+<a name="l01499"></a>01499 <span class="comment"> * Example:</span>
+<a name="l01500"></a>01500 <span class="comment"> \code</span>
+<a name="l01501"></a>01501 <span class="comment"> snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);</span>
+<a name="l01502"></a>01502 <span class="comment"> \endcode</span>
+<a name="l01503"></a>01503 <span class="comment"> *</span>
+<a name="l01504"></a>01504 <span class="comment"> * \hideinitializer</span>
+<a name="l01505"></a>01505 <span class="comment"> */</span>
+<a name="l01506"></a><a class="code" href="a00150.html#ge0825474feee11b4e038bfe71757875f">01506</a> <span class="preprocessor">#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)</span>
+<a name="l01507"></a>01507 <span class="preprocessor"></span>
+<a name="l01508"></a>01508
+<a name="l01509"></a><a class="code" href="a00150.html#g359951eecd80541c2101f628a9da9146">01509</a> <span class="preprocessor">#define UIP_PROTO_ICMP 1</span>
+<a name="l01510"></a><a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">01510</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_PROTO_TCP 6</span>
+<a name="l01511"></a><a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">01511</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_PROTO_UDP 17</span>
+<a name="l01512"></a><a class="code" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">01512</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_PROTO_ICMP6 58</span>
+<a name="l01513"></a>01513 <span class="preprocessor"></span>
+<a name="l01514"></a>01514 <span class="comment">/* Header sizes. */</span>
+<a name="l01515"></a>01515 <span class="preprocessor">#if UIP_CONF_IPV6</span>
+<a name="l01516"></a>01516 <span class="preprocessor"></span><span class="preprocessor">#define UIP_IPH_LEN 40</span>
+<a name="l01517"></a>01517 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01518"></a><a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">01518</a> <span class="preprocessor">#define UIP_IPH_LEN 20 </span><span class="comment">/* Size of IP header */</span>
+<a name="l01519"></a>01519 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span>
+<a name="l01520"></a><a class="code" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">01520</a> <span class="preprocessor">#define UIP_UDPH_LEN 8 </span><span class="comment">/* Size of UDP header */</span>
+<a name="l01521"></a><a class="code" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">01521</a> <span class="preprocessor">#define UIP_TCPH_LEN 20 </span><span class="comment">/* Size of TCP header */</span>
+<a name="l01522"></a><a class="code" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">01522</a> <span class="preprocessor">#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) </span><span class="comment">/* Size of IP +</span>
+<a name="l01523"></a>01523 <span class="comment"> UDP</span>
+<a name="l01524"></a>01524 <span class="comment"> header */</span>
+<a name="l01525"></a><a class="code" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">01525</a> <span class="preprocessor">#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) </span><span class="comment">/* Size of IP +</span>
+<a name="l01526"></a>01526 <span class="comment"> TCP</span>
+<a name="l01527"></a>01527 <span class="comment"> header */</span>
+<a name="l01528"></a><a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">01528</a> <span class="preprocessor">#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN</span>
+<a name="l01529"></a>01529 <span class="preprocessor"></span>
+<a name="l01530"></a>01530
+<a name="l01531"></a>01531 <span class="preprocessor">#if UIP_FIXEDADDR</span>
+<a name="l01532"></a>01532 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, <a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a>, <a class="code" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a>;
+<a name="l01533"></a>01533 <span class="preprocessor">#else </span><span class="comment">/* UIP_FIXEDADDR */</span>
+<a name="l01534"></a>01534 <span class="keyword">extern</span> <a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, <a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a>, <a class="code" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a>;
+<a name="l01535"></a>01535 <span class="preprocessor">#endif </span><span class="comment">/* UIP_FIXEDADDR */</span>
+<a name="l01536"></a>01536
+<a name="l01537"></a>01537
+<a name="l01538"></a>01538 <span class="comment"></span>
+<a name="l01539"></a>01539 <span class="comment">/**</span>
+<a name="l01540"></a>01540 <span class="comment"> * Representation of a 48-bit Ethernet address.</span>
+<a name="l01541"></a>01541 <span class="comment"> */</span>
+<a name="l01542"></a><a class="code" href="a00089.html">01542</a> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> {
+<a name="l01543"></a><a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">01543</a> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>[6];
+<a name="l01544"></a>01544 };
+<a name="l01545"></a>01545 <span class="comment"></span>
+<a name="l01546"></a>01546 <span class="comment">/**</span>
+<a name="l01547"></a>01547 <span class="comment"> * Calculate the Internet checksum over a buffer.</span>
+<a name="l01548"></a>01548 <span class="comment"> *</span>
+<a name="l01549"></a>01549 <span class="comment"> * The Internet checksum is the one's complement of the one's</span>
+<a name="l01550"></a>01550 <span class="comment"> * complement sum of all 16-bit words in the buffer.</span>
+<a name="l01551"></a>01551 <span class="comment"> *</span>
+<a name="l01552"></a>01552 <span class="comment"> * See RFC1071.</span>
+<a name="l01553"></a>01553 <span class="comment"> *</span>
+<a name="l01554"></a>01554 <span class="comment"> * \param buf A pointer to the buffer over which the checksum is to be</span>
+<a name="l01555"></a>01555 <span class="comment"> * computed.</span>
+<a name="l01556"></a>01556 <span class="comment"> *</span>
+<a name="l01557"></a>01557 <span class="comment"> * \param len The length of the buffer over which the checksum is to</span>
+<a name="l01558"></a>01558 <span class="comment"> * be computed.</span>
+<a name="l01559"></a>01559 <span class="comment"> *</span>
+<a name="l01560"></a>01560 <span class="comment"> * \return The Internet checksum of the buffer.</span>
+<a name="l01561"></a>01561 <span class="comment"> */</span>
+<a name="l01562"></a>01562 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len);
+<a name="l01563"></a>01563 <span class="comment"></span>
+<a name="l01564"></a>01564 <span class="comment">/**</span>
+<a name="l01565"></a>01565 <span class="comment"> * Calculate the IP header checksum of the packet header in uip_buf.</span>
+<a name="l01566"></a>01566 <span class="comment"> *</span>
+<a name="l01567"></a>01567 <span class="comment"> * The IP header checksum is the Internet checksum of the 20 bytes of</span>
+<a name="l01568"></a>01568 <span class="comment"> * the IP header.</span>
+<a name="l01569"></a>01569 <span class="comment"> *</span>
+<a name="l01570"></a>01570 <span class="comment"> * \return The IP header checksum of the IP header in the uip_buf</span>
+<a name="l01571"></a>01571 <span class="comment"> * buffer.</span>
+<a name="l01572"></a>01572 <span class="comment"> */</span>
+<a name="l01573"></a>01573 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>(<span class="keywordtype">void</span>);
+<a name="l01574"></a>01574 <span class="comment"></span>
+<a name="l01575"></a>01575 <span class="comment">/**</span>
+<a name="l01576"></a>01576 <span class="comment"> * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.</span>
+<a name="l01577"></a>01577 <span class="comment"> *</span>
+<a name="l01578"></a>01578 <span class="comment"> * The TCP checksum is the Internet checksum of data contents of the</span>
+<a name="l01579"></a>01579 <span class="comment"> * TCP segment, and a pseudo-header as defined in RFC793.</span>
+<a name="l01580"></a>01580 <span class="comment"> *</span>
+<a name="l01581"></a>01581 <span class="comment"> * \return The TCP checksum of the TCP segment in uip_buf and pointed</span>
+<a name="l01582"></a>01582 <span class="comment"> * to by uip_appdata.</span>
+<a name="l01583"></a>01583 <span class="comment"> */</span>
+<a name="l01584"></a>01584 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>(<span class="keywordtype">void</span>);
+<a name="l01585"></a>01585 <span class="comment"></span>
+<a name="l01586"></a>01586 <span class="comment">/**</span>
+<a name="l01587"></a>01587 <span class="comment"> * Calculate the UDP checksum of the packet in uip_buf and uip_appdata.</span>
+<a name="l01588"></a>01588 <span class="comment"> *</span>
+<a name="l01589"></a>01589 <span class="comment"> * The UDP checksum is the Internet checksum of data contents of the</span>
+<a name="l01590"></a>01590 <span class="comment"> * UDP segment, and a pseudo-header as defined in RFC768.</span>
+<a name="l01591"></a>01591 <span class="comment"> *</span>
+<a name="l01592"></a>01592 <span class="comment"> * \return The UDP checksum of the UDP segment in uip_buf and pointed</span>
+<a name="l01593"></a>01593 <span class="comment"> * to by uip_appdata.</span>
+<a name="l01594"></a>01594 <span class="comment"> */</span>
+<a name="l01595"></a>01595 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>(<span class="keywordtype">void</span>);
+<a name="l01596"></a>01596
+<a name="l01597"></a>01597
+<a name="l01598"></a>01598 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_H__ */</span>
+<a name="l01599"></a>01599
+<a name="l01600"></a>01600 <span class="comment"></span>
+<a name="l01601"></a>01601 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00203.html b/third_party/uip-1.0/doc/html/a00203.html new file mode 100644 index 0000000..5a50644 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00203.html @@ -0,0 +1,163 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arch.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arch.h</h1><a href="a00137.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uip</span>
+<a name="l00003"></a>00003 <span class="comment"> * {@</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup uiparch Architecture specific uIP functions</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The functions in the architecture specific module implement the IP</span>
+<a name="l00011"></a>00011 <span class="comment"> * check sum and 32-bit additions.</span>
+<a name="l00012"></a>00012 <span class="comment"> *</span>
+<a name="l00013"></a>00013 <span class="comment"> * The IP checksum calculation is the most computationally expensive</span>
+<a name="l00014"></a>00014 <span class="comment"> * operation in the TCP/IP stack and it therefore pays off to</span>
+<a name="l00015"></a>00015 <span class="comment"> * implement this in efficient assembler. The purpose of the uip-arch</span>
+<a name="l00016"></a>00016 <span class="comment"> * module is to let the checksum functions to be implemented in</span>
+<a name="l00017"></a>00017 <span class="comment"> * architecture specific assembler.</span>
+<a name="l00018"></a>00018 <span class="comment"> *</span>
+<a name="l00019"></a>00019 <span class="comment"> */</span>
+<a name="l00020"></a>00020 <span class="comment"></span>
+<a name="l00021"></a>00021 <span class="comment">/**</span>
+<a name="l00022"></a>00022 <span class="comment"> * \file</span>
+<a name="l00023"></a>00023 <span class="comment"> * Declarations of architecture specific functions.</span>
+<a name="l00024"></a>00024 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00025"></a>00025 <span class="comment"> */</span>
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 <span class="comment">/*</span>
+<a name="l00028"></a>00028 <span class="comment"> * Copyright (c) 2001, Adam Dunkels.</span>
+<a name="l00029"></a>00029 <span class="comment"> * All rights reserved.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00032"></a>00032 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00033"></a>00033 <span class="comment"> * are met:</span>
+<a name="l00034"></a>00034 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00035"></a>00035 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00036"></a>00036 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00037"></a>00037 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00038"></a>00038 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00039"></a>00039 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00040"></a>00040 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00041"></a>00041 <span class="comment"> * written permission.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00044"></a>00044 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00045"></a>00045 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00046"></a>00046 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00047"></a>00047 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00048"></a>00048 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00049"></a>00049 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00050"></a>00050 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00051"></a>00051 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00052"></a>00052 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00053"></a>00053 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> */</span>
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 <span class="preprocessor">#ifndef __UIP_ARCH_H__</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_ARCH_H__</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00065"></a>00065 <span class="comment"></span>
+<a name="l00066"></a>00066 <span class="comment">/**</span>
+<a name="l00067"></a>00067 <span class="comment"> * Carry out a 32-bit addition.</span>
+<a name="l00068"></a>00068 <span class="comment"> *</span>
+<a name="l00069"></a>00069 <span class="comment"> * Because not all architectures for which uIP is intended has native</span>
+<a name="l00070"></a>00070 <span class="comment"> * 32-bit arithmetic, uIP uses an external C function for doing the</span>
+<a name="l00071"></a>00071 <span class="comment"> * required 32-bit additions in the TCP protocol processing. This</span>
+<a name="l00072"></a>00072 <span class="comment"> * function should add the two arguments and place the result in the</span>
+<a name="l00073"></a>00073 <span class="comment"> * global variable uip_acc32.</span>
+<a name="l00074"></a>00074 <span class="comment"> *</span>
+<a name="l00075"></a>00075 <span class="comment"> * \note The 32-bit integer pointed to by the op32 parameter and the</span>
+<a name="l00076"></a>00076 <span class="comment"> * result in the uip_acc32 variable are in network byte order (big</span>
+<a name="l00077"></a>00077 <span class="comment"> * endian).</span>
+<a name="l00078"></a>00078 <span class="comment"> *</span>
+<a name="l00079"></a>00079 <span class="comment"> * \param op32 A pointer to a 4-byte array representing a 32-bit</span>
+<a name="l00080"></a>00080 <span class="comment"> * integer in network byte order (big endian).</span>
+<a name="l00081"></a>00081 <span class="comment"> *</span>
+<a name="l00082"></a>00082 <span class="comment"> * \param op16 A 16-bit integer in host byte order.</span>
+<a name="l00083"></a>00083 <span class="comment"> */</span>
+<a name="l00084"></a>00084 <span class="keywordtype">void</span> <a class="code" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a>(<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16);
+<a name="l00085"></a>00085 <span class="comment"></span>
+<a name="l00086"></a>00086 <span class="comment">/**</span>
+<a name="l00087"></a>00087 <span class="comment"> * Calculate the Internet checksum over a buffer.</span>
+<a name="l00088"></a>00088 <span class="comment"> *</span>
+<a name="l00089"></a>00089 <span class="comment"> * The Internet checksum is the one's complement of the one's</span>
+<a name="l00090"></a>00090 <span class="comment"> * complement sum of all 16-bit words in the buffer.</span>
+<a name="l00091"></a>00091 <span class="comment"> *</span>
+<a name="l00092"></a>00092 <span class="comment"> * See RFC1071.</span>
+<a name="l00093"></a>00093 <span class="comment"> *</span>
+<a name="l00094"></a>00094 <span class="comment"> * \note This function is not called in the current version of uIP,</span>
+<a name="l00095"></a>00095 <span class="comment"> * but future versions might make use of it.</span>
+<a name="l00096"></a>00096 <span class="comment"> *</span>
+<a name="l00097"></a>00097 <span class="comment"> * \param buf A pointer to the buffer over which the checksum is to be</span>
+<a name="l00098"></a>00098 <span class="comment"> * computed.</span>
+<a name="l00099"></a>00099 <span class="comment"> *</span>
+<a name="l00100"></a>00100 <span class="comment"> * \param len The length of the buffer over which the checksum is to</span>
+<a name="l00101"></a>00101 <span class="comment"> * be computed.</span>
+<a name="l00102"></a>00102 <span class="comment"> *</span>
+<a name="l00103"></a>00103 <span class="comment"> * \return The Internet checksum of the buffer.</span>
+<a name="l00104"></a>00104 <span class="comment"> */</span>
+<a name="l00105"></a>00105 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a>(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len);
+<a name="l00106"></a>00106 <span class="comment"></span>
+<a name="l00107"></a>00107 <span class="comment">/**</span>
+<a name="l00108"></a>00108 <span class="comment"> * Calculate the IP header checksum of the packet header in uip_buf.</span>
+<a name="l00109"></a>00109 <span class="comment"> *</span>
+<a name="l00110"></a>00110 <span class="comment"> * The IP header checksum is the Internet checksum of the 20 bytes of</span>
+<a name="l00111"></a>00111 <span class="comment"> * the IP header.</span>
+<a name="l00112"></a>00112 <span class="comment"> *</span>
+<a name="l00113"></a>00113 <span class="comment"> * \return The IP header checksum of the IP header in the uip_buf</span>
+<a name="l00114"></a>00114 <span class="comment"> * buffer.</span>
+<a name="l00115"></a>00115 <span class="comment"> */</span>
+<a name="l00116"></a>00116 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a>(<span class="keywordtype">void</span>);
+<a name="l00117"></a>00117 <span class="comment"></span>
+<a name="l00118"></a>00118 <span class="comment">/**</span>
+<a name="l00119"></a>00119 <span class="comment"> * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.</span>
+<a name="l00120"></a>00120 <span class="comment"> *</span>
+<a name="l00121"></a>00121 <span class="comment"> * The TCP checksum is the Internet checksum of data contents of the</span>
+<a name="l00122"></a>00122 <span class="comment"> * TCP segment, and a pseudo-header as defined in RFC793.</span>
+<a name="l00123"></a>00123 <span class="comment"> *</span>
+<a name="l00124"></a>00124 <span class="comment"> * \note The uip_appdata pointer that points to the packet data may</span>
+<a name="l00125"></a>00125 <span class="comment"> * point anywhere in memory, so it is not possible to simply calculate</span>
+<a name="l00126"></a>00126 <span class="comment"> * the Internet checksum of the contents of the uip_buf buffer.</span>
+<a name="l00127"></a>00127 <span class="comment"> *</span>
+<a name="l00128"></a>00128 <span class="comment"> * \return The TCP checksum of the TCP segment in uip_buf and pointed</span>
+<a name="l00129"></a>00129 <span class="comment"> * to by uip_appdata.</span>
+<a name="l00130"></a>00130 <span class="comment"> */</span>
+<a name="l00131"></a>00131 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>(<span class="keywordtype">void</span>);
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>(<span class="keywordtype">void</span>);
+<a name="l00134"></a>00134 <span class="comment"></span>
+<a name="l00135"></a>00135 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00136"></a>00136 <span class="comment">/** @} */</span>
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_ARCH_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00204.html b/third_party/uip-1.0/doc/html/a00204.html new file mode 100644 index 0000000..3b8a0ae --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00204.html @@ -0,0 +1,448 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arp.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arp.c</h1><a href="a00138.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uip</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \defgroup uiparp uIP Address Resolution Protocol</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * The Address Resolution Protocol ARP is used for mapping between IP</span>
+<a name="l00011"></a>00011 <span class="comment"> * addresses and link level addresses such as the Ethernet MAC</span>
+<a name="l00012"></a>00012 <span class="comment"> * addresses. ARP uses broadcast queries to ask for the link level</span>
+<a name="l00013"></a>00013 <span class="comment"> * address of a known IP address and the host which is configured with</span>
+<a name="l00014"></a>00014 <span class="comment"> * the IP address for which the query was meant, will respond with its</span>
+<a name="l00015"></a>00015 <span class="comment"> * link level address.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * \note This ARP implementation only supports Ethernet.</span>
+<a name="l00018"></a>00018 <span class="comment"> */</span>
+<a name="l00019"></a>00019 <span class="comment"></span>
+<a name="l00020"></a>00020 <span class="comment">/**</span>
+<a name="l00021"></a>00021 <span class="comment"> * \file</span>
+<a name="l00022"></a>00022 <span class="comment"> * Implementation of the ARP Address Resolution Protocol.</span>
+<a name="l00023"></a>00023 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00024"></a>00024 <span class="comment"> *</span>
+<a name="l00025"></a>00025 <span class="comment"> */</span>
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 <span class="comment">/*</span>
+<a name="l00028"></a>00028 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
+<a name="l00029"></a>00029 <span class="comment"> * All rights reserved.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00032"></a>00032 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00033"></a>00033 <span class="comment"> * are met:</span>
+<a name="l00034"></a>00034 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00035"></a>00035 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00036"></a>00036 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00037"></a>00037 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00038"></a>00038 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00039"></a>00039 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00040"></a>00040 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00041"></a>00041 <span class="comment"> * written permission.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00044"></a>00044 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00045"></a>00045 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00046"></a>00046 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00047"></a>00047 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00048"></a>00048 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00049"></a>00049 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00050"></a>00050 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00051"></a>00051 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00052"></a>00052 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00053"></a>00053 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00054"></a>00054 <span class="comment"> *</span>
+<a name="l00055"></a>00055 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00056"></a>00056 <span class="comment"> *</span>
+<a name="l00057"></a>00057 <span class="comment"> * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $</span>
+<a name="l00058"></a>00058 <span class="comment"> *</span>
+<a name="l00059"></a>00059 <span class="comment"> */</span>
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="preprocessor">#include "<a class="code" href="a00139.html">uip_arp.h</a>"</span>
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="preprocessor">#include <string.h></span>
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="keyword">struct </span>arp_hdr {
+<a name="l00067"></a>00067 <span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a> ethhdr;
+<a name="l00068"></a>00068 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> hwtype;
+<a name="l00069"></a>00069 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> protocol;
+<a name="l00070"></a>00070 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> hwlen;
+<a name="l00071"></a>00071 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> protolen;
+<a name="l00072"></a>00072 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> opcode;
+<a name="l00073"></a>00073 <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> shwaddr;
+<a name="l00074"></a>00074 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> sipaddr[2];
+<a name="l00075"></a>00075 <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> dhwaddr;
+<a name="l00076"></a>00076 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> dipaddr[2];
+<a name="l00077"></a>00077 };
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="keyword">struct </span>ethip_hdr {
+<a name="l00080"></a>00080 <span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a> ethhdr;
+<a name="l00081"></a>00081 <span class="comment">/* IP header. */</span>
+<a name="l00082"></a>00082 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> vhl,
+<a name="l00083"></a>00083 tos,
+<a name="l00084"></a>00084 len[2],
+<a name="l00085"></a>00085 ipid[2],
+<a name="l00086"></a>00086 ipoffset[2],
+<a name="l00087"></a>00087 ttl,
+<a name="l00088"></a>00088 proto;
+<a name="l00089"></a>00089 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipchksum;
+<a name="l00090"></a>00090 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> srcipaddr[2],
+<a name="l00091"></a>00091 destipaddr[2];
+<a name="l00092"></a>00092 };
+<a name="l00093"></a>00093
+<a name="l00094"></a><a class="code" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">00094</a> <span class="preprocessor">#define ARP_REQUEST 1</span>
+<a name="l00095"></a><a class="code" href="a00152.html#g06ba7b414e718081998f2814090debf1">00095</a> <span class="preprocessor"></span><span class="preprocessor">#define ARP_REPLY 2</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00097"></a><a class="code" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">00097</a> <span class="preprocessor">#define ARP_HWTYPE_ETH 1</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span>
+<a name="l00099"></a>00099 <span class="keyword">struct </span>arp_entry {
+<a name="l00100"></a>00100 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+<a name="l00101"></a>00101 <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> ethaddr;
+<a name="l00102"></a>00102 <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> time;
+<a name="l00103"></a>00103 };
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> broadcast_ethaddr =
+<a name="l00106"></a>00106 {{0xff,0xff,0xff,0xff,0xff,0xff}};
+<a name="l00107"></a>00107 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> broadcast_ipaddr[2] = {0xffff,0xffff};
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="keyword">static</span> <span class="keyword">struct </span>arp_entry arp_table[<a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>];
+<a name="l00110"></a>00110 <span class="keyword">static</span> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+<a name="l00111"></a>00111 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> i, c;
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> arptime;
+<a name="l00114"></a>00114 <span class="keyword">static</span> <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> tmpage;
+<a name="l00115"></a>00115
+<a name="l00116"></a><a class="code" href="a00152.html#g24f52ac52d6e714cb04a5aa01be3bdd0">00116</a> <span class="preprocessor">#define BUF ((struct arp_hdr *)&uip_buf[0])</span>
+<a name="l00117"></a><a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">00117</a> <span class="preprocessor"></span><span class="preprocessor">#define IPBUF ((struct ethip_hdr *)&uip_buf[0])</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00119"></a>00119 <span class="comment">/**</span>
+<a name="l00120"></a>00120 <span class="comment"> * Initialize the ARP module.</span>
+<a name="l00121"></a>00121 <span class="comment"> *</span>
+<a name="l00122"></a>00122 <span class="comment"> */</span>
+<a name="l00123"></a>00123 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00124"></a>00124 <span class="keywordtype">void</span>
+<a name="l00125"></a><a class="code" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">00125</a> <a class="code" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a>(<span class="keywordtype">void</span>)
+<a name="l00126"></a>00126 {
+<a name="l00127"></a>00127 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00128"></a>00128 memset(arp_table[i].ipaddr, 0, 4);
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 <span class="comment">/*-----------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00132"></a>00132 <span class="comment">/**</span>
+<a name="l00133"></a>00133 <span class="comment"> * Periodic ARP processing function.</span>
+<a name="l00134"></a>00134 <span class="comment"> *</span>
+<a name="l00135"></a>00135 <span class="comment"> * This function performs periodic timer processing in the ARP module</span>
+<a name="l00136"></a>00136 <span class="comment"> * and should be called at regular intervals. The recommended interval</span>
+<a name="l00137"></a>00137 <span class="comment"> * is 10 seconds between the calls.</span>
+<a name="l00138"></a>00138 <span class="comment"> *</span>
+<a name="l00139"></a>00139 <span class="comment"> */</span>
+<a name="l00140"></a>00140 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00141"></a>00141 <span class="keywordtype">void</span>
+<a name="l00142"></a><a class="code" href="a00152.html#g058a8e6025f67b021862281f1911fcef">00142</a> <a class="code" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a>(<span class="keywordtype">void</span>)
+<a name="l00143"></a>00143 {
+<a name="l00144"></a>00144 <span class="keyword">struct </span>arp_entry *tabptr;
+<a name="l00145"></a>00145
+<a name="l00146"></a>00146 ++arptime;
+<a name="l00147"></a>00147 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00148"></a>00148 tabptr = &arp_table[i];
+<a name="l00149"></a>00149 <span class="keywordflow">if</span>((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
+<a name="l00150"></a>00150 arptime - tabptr->time >= <a class="code" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">UIP_ARP_MAXAGE</a>) {
+<a name="l00151"></a>00151 memset(tabptr->ipaddr, 0, 4);
+<a name="l00152"></a>00152 }
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155 }
+<a name="l00156"></a>00156 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00157"></a>00157 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00158"></a>00158 uip_arp_update(<a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *ipaddr, <span class="keyword">struct</span> <a class="code" href="a00089.html">uip_eth_addr</a> *ethaddr)
+<a name="l00159"></a>00159 {
+<a name="l00160"></a>00160 <span class="keyword">register</span> <span class="keyword">struct </span>arp_entry *tabptr;
+<a name="l00161"></a>00161 <span class="comment">/* Walk through the ARP mapping table and try to find an entry to</span>
+<a name="l00162"></a>00162 <span class="comment"> update. If none is found, the IP -> MAC address mapping is</span>
+<a name="l00163"></a>00163 <span class="comment"> inserted in the ARP table. */</span>
+<a name="l00164"></a>00164 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 tabptr = &arp_table[i];
+<a name="l00167"></a>00167 <span class="comment">/* Only check those entries that are actually in use. */</span>
+<a name="l00168"></a>00168 <span class="keywordflow">if</span>(tabptr->ipaddr[0] != 0 &&
+<a name="l00169"></a>00169 tabptr->ipaddr[1] != 0) {
+<a name="l00170"></a>00170
+<a name="l00171"></a>00171 <span class="comment">/* Check if the source IP address of the incoming packet matches</span>
+<a name="l00172"></a>00172 <span class="comment"> the IP address in this ARP table entry. */</span>
+<a name="l00173"></a>00173 <span class="keywordflow">if</span>(ipaddr[0] == tabptr->ipaddr[0] &&
+<a name="l00174"></a>00174 ipaddr[1] == tabptr->ipaddr[1]) {
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="comment">/* An old entry found, update this and return. */</span>
+<a name="l00177"></a>00177 memcpy(tabptr->ethaddr.addr, ethaddr-><a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00178"></a>00178 tabptr->time = arptime;
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180 <span class="keywordflow">return</span>;
+<a name="l00181"></a>00181 }
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 }
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="comment">/* If we get here, no existing ARP table entry was found, so we</span>
+<a name="l00186"></a>00186 <span class="comment"> create one. */</span>
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 <span class="comment">/* First, we try to find an unused entry in the ARP table. */</span>
+<a name="l00189"></a>00189 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00190"></a>00190 tabptr = &arp_table[i];
+<a name="l00191"></a>00191 <span class="keywordflow">if</span>(tabptr->ipaddr[0] == 0 &&
+<a name="l00192"></a>00192 tabptr->ipaddr[1] == 0) {
+<a name="l00193"></a>00193 <span class="keywordflow">break</span>;
+<a name="l00194"></a>00194 }
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="comment">/* If no unused entry is found, we try to find the oldest entry and</span>
+<a name="l00198"></a>00198 <span class="comment"> throw it away. */</span>
+<a name="l00199"></a>00199 <span class="keywordflow">if</span>(i == <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>) {
+<a name="l00200"></a>00200 tmpage = 0;
+<a name="l00201"></a>00201 c = 0;
+<a name="l00202"></a>00202 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00203"></a>00203 tabptr = &arp_table[i];
+<a name="l00204"></a>00204 <span class="keywordflow">if</span>(arptime - tabptr->time > tmpage) {
+<a name="l00205"></a>00205 tmpage = arptime - tabptr->time;
+<a name="l00206"></a>00206 c = i;
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 }
+<a name="l00209"></a>00209 i = c;
+<a name="l00210"></a>00210 tabptr = &arp_table[i];
+<a name="l00211"></a>00211 }
+<a name="l00212"></a>00212
+<a name="l00213"></a>00213 <span class="comment">/* Now, i is the ARP table entry which we will fill with the new</span>
+<a name="l00214"></a>00214 <span class="comment"> information. */</span>
+<a name="l00215"></a>00215 memcpy(tabptr->ipaddr, ipaddr, 4);
+<a name="l00216"></a>00216 memcpy(tabptr->ethaddr.addr, ethaddr-><a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00217"></a>00217 tabptr->time = arptime;
+<a name="l00218"></a>00218 }
+<a name="l00219"></a>00219 <span class="comment">/*-----------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00220"></a>00220 <span class="comment">/**</span>
+<a name="l00221"></a>00221 <span class="comment"> * ARP processing for incoming IP packets</span>
+<a name="l00222"></a>00222 <span class="comment"> *</span>
+<a name="l00223"></a>00223 <span class="comment"> * This function should be called by the device driver when an IP</span>
+<a name="l00224"></a>00224 <span class="comment"> * packet has been received. The function will check if the address is</span>
+<a name="l00225"></a>00225 <span class="comment"> * in the ARP cache, and if so the ARP cache entry will be</span>
+<a name="l00226"></a>00226 <span class="comment"> * refreshed. If no ARP cache entry was found, a new one is created.</span>
+<a name="l00227"></a>00227 <span class="comment"> *</span>
+<a name="l00228"></a>00228 <span class="comment"> * This function expects an IP packet with a prepended Ethernet header</span>
+<a name="l00229"></a>00229 <span class="comment"> * in the uip_buf[] buffer, and the length of the packet in the global</span>
+<a name="l00230"></a>00230 <span class="comment"> * variable uip_len.</span>
+<a name="l00231"></a>00231 <span class="comment"> */</span>
+<a name="l00232"></a>00232 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00233"></a>00233 <span class="preprocessor">#if 0</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="keywordtype">void</span>
+<a name="l00235"></a>00235 <a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>(<span class="keywordtype">void</span>)
+<a name="l00236"></a>00236 {
+<a name="l00237"></a>00237 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> -= <span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a>);
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239 <span class="comment">/* Only insert/update an entry if the source IP address of the</span>
+<a name="l00240"></a>00240 <span class="comment"> incoming IP packet comes from a host on the local network. */</span>
+<a name="l00241"></a>00241 <span class="keywordflow">if</span>((<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->srcipaddr[0] & <a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a>[0]) !=
+<a name="l00242"></a>00242 (<a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[0] & <a class="code" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip_netmask</a>[0])) {
+<a name="l00243"></a>00243 <span class="keywordflow">return</span>;
+<a name="l00244"></a>00244 }
+<a name="l00245"></a>00245 <span class="keywordflow">if</span>((<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->srcipaddr[1] & uip_netmask[1]) !=
+<a name="l00246"></a>00246 (<a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[1] & uip_netmask[1])) {
+<a name="l00247"></a>00247 <span class="keywordflow">return</span>;
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249 uip_arp_update(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->srcipaddr, &(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->ethhdr.src));
+<a name="l00250"></a>00250
+<a name="l00251"></a>00251 <span class="keywordflow">return</span>;
+<a name="l00252"></a>00252 }
+<a name="l00253"></a>00253 <span class="preprocessor">#endif </span><span class="comment">/* 0 */</span>
+<a name="l00254"></a>00254 <span class="comment">/*-----------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00255"></a>00255 <span class="comment">/**</span>
+<a name="l00256"></a>00256 <span class="comment"> * ARP processing for incoming ARP packets.</span>
+<a name="l00257"></a>00257 <span class="comment"> *</span>
+<a name="l00258"></a>00258 <span class="comment"> * This function should be called by the device driver when an ARP</span>
+<a name="l00259"></a>00259 <span class="comment"> * packet has been received. The function will act differently</span>
+<a name="l00260"></a>00260 <span class="comment"> * depending on the ARP packet type: if it is a reply for a request</span>
+<a name="l00261"></a>00261 <span class="comment"> * that we previously sent out, the ARP cache will be filled in with</span>
+<a name="l00262"></a>00262 <span class="comment"> * the values from the ARP reply. If the incoming ARP packet is an ARP</span>
+<a name="l00263"></a>00263 <span class="comment"> * request for our IP address, an ARP reply packet is created and put</span>
+<a name="l00264"></a>00264 <span class="comment"> * into the uip_buf[] buffer.</span>
+<a name="l00265"></a>00265 <span class="comment"> *</span>
+<a name="l00266"></a>00266 <span class="comment"> * When the function returns, the value of the global variable uip_len</span>
+<a name="l00267"></a>00267 <span class="comment"> * indicates whether the device driver should send out a packet or</span>
+<a name="l00268"></a>00268 <span class="comment"> * not. If uip_len is zero, no packet should be sent. If uip_len is</span>
+<a name="l00269"></a>00269 <span class="comment"> * non-zero, it contains the length of the outbound packet that is</span>
+<a name="l00270"></a>00270 <span class="comment"> * present in the uip_buf[] buffer.</span>
+<a name="l00271"></a>00271 <span class="comment"> *</span>
+<a name="l00272"></a>00272 <span class="comment"> * This function expects an ARP packet with a prepended Ethernet</span>
+<a name="l00273"></a>00273 <span class="comment"> * header in the uip_buf[] buffer, and the length of the packet in the</span>
+<a name="l00274"></a>00274 <span class="comment"> * global variable uip_len.</span>
+<a name="l00275"></a>00275 <span class="comment"> */</span>
+<a name="l00276"></a>00276 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00277"></a>00277 <span class="keywordtype">void</span>
+<a name="l00278"></a><a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">00278</a> <a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>(<span class="keywordtype">void</span>)
+<a name="l00279"></a>00279 {
+<a name="l00280"></a>00280
+<a name="l00281"></a>00281 <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> < <span class="keyword">sizeof</span>(<span class="keyword">struct</span> arp_hdr)) {
+<a name="l00282"></a>00282 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = 0;
+<a name="l00283"></a>00283 <span class="keywordflow">return</span>;
+<a name="l00284"></a>00284 }
+<a name="l00285"></a>00285 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = 0;
+<a name="l00286"></a>00286
+<a name="l00287"></a>00287 <span class="keywordflow">switch</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->opcode) {
+<a name="l00288"></a>00288 <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">ARP_REQUEST</a>):
+<a name="l00289"></a>00289 <span class="comment">/* ARP request. If it asked for our address, we send out a</span>
+<a name="l00290"></a>00290 <span class="comment"> reply. */</span>
+<a name="l00291"></a>00291 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>)) {
+<a name="l00292"></a>00292 <span class="comment">/* First, we register the one who made the request in our ARP</span>
+<a name="l00293"></a>00293 <span class="comment"> table, since it is likely that we will do more communication</span>
+<a name="l00294"></a>00294 <span class="comment"> with this host in the future. */</span>
+<a name="l00295"></a>00295 uip_arp_update(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr, &<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->shwaddr);
+<a name="l00296"></a>00296
+<a name="l00297"></a>00297 <span class="comment">/* The reply opcode is 2. */</span>
+<a name="l00298"></a>00298 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->opcode = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(2);
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dhwaddr.addr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->shwaddr.addr, 6);
+<a name="l00301"></a>00301 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->shwaddr.addr, <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00302"></a>00302 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.src.addr, <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00303"></a>00303 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.dest.addr, <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dhwaddr.addr, 6);
+<a name="l00304"></a>00304
+<a name="l00305"></a>00305 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dipaddr[0] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr[0];
+<a name="l00306"></a>00306 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dipaddr[1] = <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr[1];
+<a name="l00307"></a>00307 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr[0] = <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[0];
+<a name="l00308"></a>00308 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr[1] = <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>[1];
+<a name="l00309"></a>00309
+<a name="l00310"></a>00310 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.type = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a>);
+<a name="l00311"></a>00311 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <span class="keyword">sizeof</span>(<span class="keyword">struct </span>arp_hdr);
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313 <span class="keywordflow">break</span>;
+<a name="l00314"></a>00314 <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g06ba7b414e718081998f2814090debf1">ARP_REPLY</a>):
+<a name="l00315"></a>00315 <span class="comment">/* ARP reply. We insert or update the ARP table if it was meant</span>
+<a name="l00316"></a>00316 <span class="comment"> for us. */</span>
+<a name="l00317"></a>00317 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>)) {
+<a name="l00318"></a>00318 uip_arp_update(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr, &<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->shwaddr);
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 <span class="keywordflow">break</span>;
+<a name="l00321"></a>00321 }
+<a name="l00322"></a>00322
+<a name="l00323"></a>00323 <span class="keywordflow">return</span>;
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 <span class="comment">/*-----------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00326"></a>00326 <span class="comment">/**</span>
+<a name="l00327"></a>00327 <span class="comment"> * Prepend Ethernet header to an outbound IP packet and see if we need</span>
+<a name="l00328"></a>00328 <span class="comment"> * to send out an ARP request.</span>
+<a name="l00329"></a>00329 <span class="comment"> *</span>
+<a name="l00330"></a>00330 <span class="comment"> * This function should be called before sending out an IP packet. The</span>
+<a name="l00331"></a>00331 <span class="comment"> * function checks the destination IP address of the IP packet to see</span>
+<a name="l00332"></a>00332 <span class="comment"> * what Ethernet MAC address that should be used as a destination MAC</span>
+<a name="l00333"></a>00333 <span class="comment"> * address on the Ethernet.</span>
+<a name="l00334"></a>00334 <span class="comment"> *</span>
+<a name="l00335"></a>00335 <span class="comment"> * If the destination IP address is in the local network (determined</span>
+<a name="l00336"></a>00336 <span class="comment"> * by logical ANDing of netmask and our IP address), the function</span>
+<a name="l00337"></a>00337 <span class="comment"> * checks the ARP cache to see if an entry for the destination IP</span>
+<a name="l00338"></a>00338 <span class="comment"> * address is found. If so, an Ethernet header is prepended and the</span>
+<a name="l00339"></a>00339 <span class="comment"> * function returns. If no ARP cache entry is found for the</span>
+<a name="l00340"></a>00340 <span class="comment"> * destination IP address, the packet in the uip_buf[] is replaced by</span>
+<a name="l00341"></a>00341 <span class="comment"> * an ARP request packet for the IP address. The IP packet is dropped</span>
+<a name="l00342"></a>00342 <span class="comment"> * and it is assumed that they higher level protocols (e.g., TCP)</span>
+<a name="l00343"></a>00343 <span class="comment"> * eventually will retransmit the dropped packet.</span>
+<a name="l00344"></a>00344 <span class="comment"> *</span>
+<a name="l00345"></a>00345 <span class="comment"> * If the destination IP address is not on the local network, the IP</span>
+<a name="l00346"></a>00346 <span class="comment"> * address of the default router is used instead.</span>
+<a name="l00347"></a>00347 <span class="comment"> *</span>
+<a name="l00348"></a>00348 <span class="comment"> * When the function returns, a packet is present in the uip_buf[]</span>
+<a name="l00349"></a>00349 <span class="comment"> * buffer, and the length of the packet is in the global variable</span>
+<a name="l00350"></a>00350 <span class="comment"> * uip_len.</span>
+<a name="l00351"></a>00351 <span class="comment"> */</span>
+<a name="l00352"></a>00352 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00353"></a>00353 <span class="keywordtype">void</span>
+<a name="l00354"></a><a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">00354</a> <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(<span class="keywordtype">void</span>)
+<a name="l00355"></a>00355 {
+<a name="l00356"></a>00356 <span class="keyword">struct </span>arp_entry *tabptr;
+<a name="l00357"></a>00357
+<a name="l00358"></a>00358 <span class="comment">/* Find the destination IP address in the ARP table and construct</span>
+<a name="l00359"></a>00359 <span class="comment"> the Ethernet header. If the destination IP addres isn't on the</span>
+<a name="l00360"></a>00360 <span class="comment"> local network, we use the default router's IP address instead.</span>
+<a name="l00361"></a>00361 <span class="comment"></span>
+<a name="l00362"></a>00362 <span class="comment"> If not ARP table entry is found, we overwrite the original IP</span>
+<a name="l00363"></a>00363 <span class="comment"> packet with an ARP request for the IP address. */</span>
+<a name="l00364"></a>00364
+<a name="l00365"></a>00365 <span class="comment">/* First check if destination is a local broadcast. */</span>
+<a name="l00366"></a>00366 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->destipaddr, broadcast_ipaddr)) {
+<a name="l00367"></a>00367 memcpy(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->ethhdr.dest.addr, broadcast_ethaddr.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00368"></a>00368 } <span class="keywordflow">else</span> {
+<a name="l00369"></a>00369 <span class="comment">/* Check if the destination address is on the local network. */</span>
+<a name="l00370"></a>00370 <span class="keywordflow">if</span>(!<a class="code" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip_ipaddr_maskcmp</a>(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->destipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>, uip_netmask)) {
+<a name="l00371"></a>00371 <span class="comment">/* Destination address was not on the local network, so we need to</span>
+<a name="l00372"></a>00372 <span class="comment"> use the default router's IP address instead of the destination</span>
+<a name="l00373"></a>00373 <span class="comment"> address when determining the MAC address. */</span>
+<a name="l00374"></a>00374 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(ipaddr, <a class="code" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip_draddr</a>);
+<a name="l00375"></a>00375 } <span class="keywordflow">else</span> {
+<a name="l00376"></a>00376 <span class="comment">/* Else, we use the destination IP address. */</span>
+<a name="l00377"></a>00377 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(ipaddr, <a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->destipaddr);
+<a name="l00378"></a>00378 }
+<a name="l00379"></a>00379
+<a name="l00380"></a>00380 <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>; ++i) {
+<a name="l00381"></a>00381 tabptr = &arp_table[i];
+<a name="l00382"></a>00382 <span class="keywordflow">if</span>(<a class="code" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip_ipaddr_cmp</a>(ipaddr, tabptr->ipaddr)) {
+<a name="l00383"></a>00383 <span class="keywordflow">break</span>;
+<a name="l00384"></a>00384 }
+<a name="l00385"></a>00385 }
+<a name="l00386"></a>00386
+<a name="l00387"></a>00387 <span class="keywordflow">if</span>(i == <a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">UIP_ARPTAB_SIZE</a>) {
+<a name="l00388"></a>00388 <span class="comment">/* The destination address was not in our ARP table, so we</span>
+<a name="l00389"></a>00389 <span class="comment"> overwrite the IP packet with an ARP request. */</span>
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 memset(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.dest.addr, 0xff, 6);
+<a name="l00392"></a>00392 memset(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dhwaddr.addr, 0x00, 6);
+<a name="l00393"></a>00393 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.src.addr, <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00394"></a>00394 memcpy(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->shwaddr.addr, <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00395"></a>00395
+<a name="l00396"></a>00396 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->dipaddr, ipaddr);
+<a name="l00397"></a>00397 <a class="code" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip_ipaddr_copy</a>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->sipaddr, <a class="code" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip_hostaddr</a>);
+<a name="l00398"></a>00398 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->opcode = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">ARP_REQUEST</a>); <span class="comment">/* ARP request. */</span>
+<a name="l00399"></a>00399 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->hwtype = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">ARP_HWTYPE_ETH</a>);
+<a name="l00400"></a>00400 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->protocol = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a>);
+<a name="l00401"></a>00401 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->hwlen = 6;
+<a name="l00402"></a>00402 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->protolen = 4;
+<a name="l00403"></a>00403 <a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->ethhdr.type = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a>);
+<a name="l00404"></a>00404
+<a name="l00405"></a>00405 <a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a> = &<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>];
+<a name="l00406"></a>00406
+<a name="l00407"></a>00407 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = <span class="keyword">sizeof</span>(<span class="keyword">struct </span>arp_hdr);
+<a name="l00408"></a>00408 <span class="keywordflow">return</span>;
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410
+<a name="l00411"></a>00411 <span class="comment">/* Build an ethernet header. */</span>
+<a name="l00412"></a>00412 memcpy(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
+<a name="l00413"></a>00413 }
+<a name="l00414"></a>00414 memcpy(<a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->ethhdr.src.addr, <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>.<a class="code" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">addr</a>, 6);
+<a name="l00415"></a>00415
+<a name="l00416"></a>00416 <a class="code" href="a00152.html#g9f2196e2705036869611962425e404bf">IPBUF</a>->ethhdr.type = <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a>);
+<a name="l00417"></a>00417
+<a name="l00418"></a>00418 <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> += <span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a>);
+<a name="l00419"></a>00419 }
+<a name="l00420"></a>00420 <span class="comment">/*-----------------------------------------------------------------------------------*/</span>
+<a name="l00421"></a>00421 <span class="comment"></span>
+<a name="l00422"></a>00422 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00423"></a>00423 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00205.html b/third_party/uip-1.0/doc/html/a00205.html new file mode 100644 index 0000000..aef434f --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00205.html @@ -0,0 +1,169 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uip_arp.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uip_arp.h</h1><a href="a00139.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uip</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \addtogroup uiparp</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> */</span>
+<a name="l00010"></a>00010 <span class="comment"></span>
+<a name="l00011"></a>00011 <span class="comment">/**</span>
+<a name="l00012"></a>00012 <span class="comment"> * \file</span>
+<a name="l00013"></a>00013 <span class="comment"> * Macros and definitions for the ARP module.</span>
+<a name="l00014"></a>00014 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00017"></a>00017
+<a name="l00018"></a>00018 <span class="comment">/*</span>
+<a name="l00019"></a>00019 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
+<a name="l00020"></a>00020 <span class="comment"> * All rights reserved.</span>
+<a name="l00021"></a>00021 <span class="comment"> *</span>
+<a name="l00022"></a>00022 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00023"></a>00023 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00024"></a>00024 <span class="comment"> * are met:</span>
+<a name="l00025"></a>00025 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00026"></a>00026 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00027"></a>00027 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00028"></a>00028 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00029"></a>00029 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00030"></a>00030 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00031"></a>00031 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00032"></a>00032 <span class="comment"> * written permission.</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00035"></a>00035 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00036"></a>00036 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00037"></a>00037 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00038"></a>00038 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00039"></a>00039 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00040"></a>00040 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00041"></a>00041 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00042"></a>00042 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00043"></a>00043 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00044"></a>00044 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00045"></a>00045 <span class="comment"> *</span>
+<a name="l00046"></a>00046 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00047"></a>00047 <span class="comment"> *</span>
+<a name="l00048"></a>00048 <span class="comment"> * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $</span>
+<a name="l00049"></a>00049 <span class="comment"> *</span>
+<a name="l00050"></a>00050 <span class="comment"> */</span>
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 <span class="preprocessor">#ifndef __UIP_ARP_H__</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_ARP_H__</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>;
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00060"></a>00060 <span class="comment">/**</span>
+<a name="l00061"></a>00061 <span class="comment"> * The Ethernet header.</span>
+<a name="l00062"></a>00062 <span class="comment"> */</span>
+<a name="l00063"></a><a class="code" href="a00090.html">00063</a> <span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a> {
+<a name="l00064"></a><a class="code" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">00064</a> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">dest</a>;
+<a name="l00065"></a><a class="code" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">00065</a> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">src</a>;
+<a name="l00066"></a><a class="code" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">00066</a> <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">type</a>;
+<a name="l00067"></a>00067 };
+<a name="l00068"></a>00068
+<a name="l00069"></a><a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">00069</a> <span class="preprocessor">#define UIP_ETHTYPE_ARP 0x0806</span>
+<a name="l00070"></a><a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ETHTYPE_IP 0x0800</span>
+<a name="l00071"></a><a class="code" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ETHTYPE_IP6 0x86dd</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="comment">/* The uip_arp_init() function must be called before any of the other</span>
+<a name="l00075"></a>00075 <span class="comment"> ARP functions. */</span>
+<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a>(<span class="keywordtype">void</span>);
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="comment">/* The uip_arp_ipin() function should be called whenever an IP packet</span>
+<a name="l00079"></a>00079 <span class="comment"> arrives from the Ethernet. This function refreshes the ARP table or</span>
+<a name="l00080"></a>00080 <span class="comment"> inserts a new mapping if none exists. The function assumes that an</span>
+<a name="l00081"></a>00081 <span class="comment"> IP packet with an Ethernet header is present in the uip_buf buffer</span>
+<a name="l00082"></a>00082 <span class="comment"> and that the length of the packet is in the uip_len variable. */</span>
+<a name="l00083"></a>00083 <span class="comment">/*void uip_arp_ipin(void);*/</span>
+<a name="l00084"></a><a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">00084</a> <span class="preprocessor">#define uip_arp_ipin()</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="comment">/* The uip_arp_arpin() should be called when an ARP packet is received</span>
+<a name="l00087"></a>00087 <span class="comment"> by the Ethernet driver. This function also assumes that the</span>
+<a name="l00088"></a>00088 <span class="comment"> Ethernet frame is present in the uip_buf buffer. When the</span>
+<a name="l00089"></a>00089 <span class="comment"> uip_arp_arpin() function returns, the contents of the uip_buf</span>
+<a name="l00090"></a>00090 <span class="comment"> buffer should be sent out on the Ethernet if the uip_len variable</span>
+<a name="l00091"></a>00091 <span class="comment"> is > 0. */</span>
+<a name="l00092"></a>00092 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>(<span class="keywordtype">void</span>);
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094 <span class="comment">/* The uip_arp_out() function should be called when an IP packet</span>
+<a name="l00095"></a>00095 <span class="comment"> should be sent out on the Ethernet. This function creates an</span>
+<a name="l00096"></a>00096 <span class="comment"> Ethernet header before the IP header in the uip_buf buffer. The</span>
+<a name="l00097"></a>00097 <span class="comment"> Ethernet header will have the correct Ethernet MAC destination</span>
+<a name="l00098"></a>00098 <span class="comment"> address filled in if an ARP table entry for the destination IP</span>
+<a name="l00099"></a>00099 <span class="comment"> address (or the IP address of the default router) is present. If no</span>
+<a name="l00100"></a>00100 <span class="comment"> such table entry is found, the IP packet is overwritten with an ARP</span>
+<a name="l00101"></a>00101 <span class="comment"> request and we rely on TCP to retransmit the packet that was</span>
+<a name="l00102"></a>00102 <span class="comment"> overwritten. In any case, the uip_len variable holds the length of</span>
+<a name="l00103"></a>00103 <span class="comment"> the Ethernet frame that should be transmitted. */</span>
+<a name="l00104"></a>00104 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(<span class="keywordtype">void</span>);
+<a name="l00105"></a>00105
+<a name="l00106"></a>00106 <span class="comment">/* The uip_arp_timer() function should be called every ten seconds. It</span>
+<a name="l00107"></a>00107 <span class="comment"> is responsible for flushing old entries in the ARP table. */</span>
+<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a>(<span class="keywordtype">void</span>);
+<a name="l00109"></a>00109 <span class="comment"></span>
+<a name="l00110"></a>00110 <span class="comment">/** @} */</span>
+<a name="l00111"></a>00111 <span class="comment"></span>
+<a name="l00112"></a>00112 <span class="comment">/**</span>
+<a name="l00113"></a>00113 <span class="comment"> * \addtogroup uipconffunc</span>
+<a name="l00114"></a>00114 <span class="comment"> * @{</span>
+<a name="l00115"></a>00115 <span class="comment"> */</span>
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="comment"></span>
+<a name="l00118"></a>00118 <span class="comment">/**</span>
+<a name="l00119"></a>00119 <span class="comment"> * Specifiy the Ethernet MAC address.</span>
+<a name="l00120"></a>00120 <span class="comment"> *</span>
+<a name="l00121"></a>00121 <span class="comment"> * The ARP code needs to know the MAC address of the Ethernet card in</span>
+<a name="l00122"></a>00122 <span class="comment"> * order to be able to respond to ARP queries and to generate working</span>
+<a name="l00123"></a>00123 <span class="comment"> * Ethernet headers.</span>
+<a name="l00124"></a>00124 <span class="comment"> *</span>
+<a name="l00125"></a>00125 <span class="comment"> * \note This macro only specifies the Ethernet MAC address to the ARP</span>
+<a name="l00126"></a>00126 <span class="comment"> * code. It cannot be used to change the MAC address of the Ethernet</span>
+<a name="l00127"></a>00127 <span class="comment"> * card.</span>
+<a name="l00128"></a>00128 <span class="comment"> *</span>
+<a name="l00129"></a>00129 <span class="comment"> * \param eaddr A pointer to a struct uip_eth_addr containing the</span>
+<a name="l00130"></a>00130 <span class="comment"> * Ethernet MAC address of the Ethernet card.</span>
+<a name="l00131"></a>00131 <span class="comment"> *</span>
+<a name="l00132"></a>00132 <span class="comment"> * \hideinitializer</span>
+<a name="l00133"></a>00133 <span class="comment"> */</span>
+<a name="l00134"></a><a class="code" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">00134</a> <span class="preprocessor">#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \</span>
+<a name="l00135"></a>00135 <span class="preprocessor"> uip_ethaddr.addr[1] = eaddr.addr[1];\</span>
+<a name="l00136"></a>00136 <span class="preprocessor"> uip_ethaddr.addr[2] = eaddr.addr[2];\</span>
+<a name="l00137"></a>00137 <span class="preprocessor"> uip_ethaddr.addr[3] = eaddr.addr[3];\</span>
+<a name="l00138"></a>00138 <span class="preprocessor"> uip_ethaddr.addr[4] = eaddr.addr[4];\</span>
+<a name="l00139"></a>00139 <span class="preprocessor"> uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00141"></a>00141 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00142"></a>00142 <span class="comment">/** @} */</span>
+<a name="l00143"></a>00143
+<a name="l00144"></a>00144 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_ARP_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00206.html b/third_party/uip-1.0/doc/html/a00206.html new file mode 100644 index 0000000..346c58a --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00206.html @@ -0,0 +1,564 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: uip/uipopt.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uip/uipopt.h</h1><a href="a00140.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \defgroup uipopt Configuration options for uIP</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * uIP is configured using the per-project configuration file</span>
+<a name="l00006"></a>00006 <span class="comment"> * uipopt.h. This file contains all compile-time options for uIP and</span>
+<a name="l00007"></a>00007 <span class="comment"> * should be tweaked to match each specific project. The uIP</span>
+<a name="l00008"></a>00008 <span class="comment"> * distribution contains a documented example "uipopt.h" that can be</span>
+<a name="l00009"></a>00009 <span class="comment"> * copied and modified for each project.</span>
+<a name="l00010"></a>00010 <span class="comment"> *</span>
+<a name="l00011"></a>00011 <span class="comment"> * \note Most of the configuration options in the uipopt.h should not</span>
+<a name="l00012"></a>00012 <span class="comment"> * be changed, but rather the per-project uip-conf.h file.</span>
+<a name="l00013"></a>00013 <span class="comment"> */</span>
+<a name="l00014"></a>00014 <span class="comment"></span>
+<a name="l00015"></a>00015 <span class="comment">/**</span>
+<a name="l00016"></a>00016 <span class="comment"> * \file</span>
+<a name="l00017"></a>00017 <span class="comment"> * Configuration options for uIP.</span>
+<a name="l00018"></a>00018 <span class="comment"> * \author Adam Dunkels <adam@dunkels.com></span>
+<a name="l00019"></a>00019 <span class="comment"> *</span>
+<a name="l00020"></a>00020 <span class="comment"> * This file is used for tweaking various configuration options for</span>
+<a name="l00021"></a>00021 <span class="comment"> * uIP. You should make a copy of this file into one of your project's</span>
+<a name="l00022"></a>00022 <span class="comment"> * directories instead of editing this example "uipopt.h" file that</span>
+<a name="l00023"></a>00023 <span class="comment"> * comes with the uIP distribution.</span>
+<a name="l00024"></a>00024 <span class="comment"> */</span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="comment">/*</span>
+<a name="l00027"></a>00027 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
+<a name="l00028"></a>00028 <span class="comment"> * All rights reserved.</span>
+<a name="l00029"></a>00029 <span class="comment"> *</span>
+<a name="l00030"></a>00030 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00031"></a>00031 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00032"></a>00032 <span class="comment"> * are met:</span>
+<a name="l00033"></a>00033 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00034"></a>00034 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00035"></a>00035 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00036"></a>00036 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00037"></a>00037 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00038"></a>00038 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
+<a name="l00039"></a>00039 <span class="comment"> * products derived from this software without specific prior</span>
+<a name="l00040"></a>00040 <span class="comment"> * written permission.</span>
+<a name="l00041"></a>00041 <span class="comment"> *</span>
+<a name="l00042"></a>00042 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
+<a name="l00043"></a>00043 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
+<a name="l00044"></a>00044 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00045"></a>00045 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
+<a name="l00046"></a>00046 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00047"></a>00047 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
+<a name="l00048"></a>00048 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
+<a name="l00049"></a>00049 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
+<a name="l00050"></a>00050 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
+<a name="l00051"></a>00051 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
+<a name="l00052"></a>00052 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
+<a name="l00053"></a>00053 <span class="comment"> *</span>
+<a name="l00054"></a>00054 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $</span>
+<a name="l00057"></a>00057 <span class="comment"> *</span>
+<a name="l00058"></a>00058 <span class="comment"> */</span>
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="preprocessor">#ifndef __UIPOPT_H__</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define __UIPOPT_H__</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a>00063 <span class="preprocessor">#ifndef UIP_LITTLE_ENDIAN</span>
+<a name="l00064"></a><a class="code" href="a00153.html#gb6e04358481bd2057524fb874cfa472b">00064</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_LITTLE_ENDIAN 3412</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_LITTLE_ENDIAN */</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#ifndef UIP_BIG_ENDIAN</span>
+<a name="l00067"></a><a class="code" href="a00153.html#g6836f92f3692f3a4429eb599db40cbae">00067</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_BIG_ENDIAN 1234</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_BIG_ENDIAN */</span>
+<a name="l00069"></a>00069
+<a name="l00070"></a>00070 <span class="preprocessor">#include "<a class="code" href="a00141.html">uip-conf.h</a>"</span>
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="comment">/*------------------------------------------------------------------------------*/</span>
+<a name="l00073"></a>00073 <span class="comment"></span>
+<a name="l00074"></a>00074 <span class="comment">/**</span>
+<a name="l00075"></a>00075 <span class="comment"> * \name Static configuration options</span>
+<a name="l00076"></a>00076 <span class="comment"> * @{</span>
+<a name="l00077"></a>00077 <span class="comment"> *</span>
+<a name="l00078"></a>00078 <span class="comment"> * These configuration options can be used for setting the IP address</span>
+<a name="l00079"></a>00079 <span class="comment"> * settings statically, but only if UIP_FIXEDADDR is set to 1. The</span>
+<a name="l00080"></a>00080 <span class="comment"> * configuration options for a specific node includes IP address,</span>
+<a name="l00081"></a>00081 <span class="comment"> * netmask and default router as well as the Ethernet address. The</span>
+<a name="l00082"></a>00082 <span class="comment"> * netmask, default router and Ethernet address are appliciable only</span>
+<a name="l00083"></a>00083 <span class="comment"> * if uIP should be run over Ethernet.</span>
+<a name="l00084"></a>00084 <span class="comment"> *</span>
+<a name="l00085"></a>00085 <span class="comment"> * All of these should be changed to suit your project.</span>
+<a name="l00086"></a>00086 <span class="comment">*/</span>
+<a name="l00087"></a>00087 <span class="comment"></span>
+<a name="l00088"></a>00088 <span class="comment">/**</span>
+<a name="l00089"></a>00089 <span class="comment"> * Determines if uIP should use a fixed IP address or not.</span>
+<a name="l00090"></a>00090 <span class="comment"> *</span>
+<a name="l00091"></a>00091 <span class="comment"> * If uIP should use a fixed IP address, the settings are set in the</span>
+<a name="l00092"></a>00092 <span class="comment"> * uipopt.h file. If not, the macros uip_sethostaddr(),</span>
+<a name="l00093"></a>00093 <span class="comment"> * uip_setdraddr() and uip_setnetmask() should be used instead.</span>
+<a name="l00094"></a>00094 <span class="comment"> *</span>
+<a name="l00095"></a>00095 <span class="comment"> * \hideinitializer</span>
+<a name="l00096"></a>00096 <span class="comment"> */</span>
+<a name="l00097"></a><a class="code" href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62">00097</a> <span class="preprocessor">#define UIP_FIXEDADDR 0</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00099"></a>00099 <span class="comment">/**</span>
+<a name="l00100"></a>00100 <span class="comment"> * Ping IP address asignment.</span>
+<a name="l00101"></a>00101 <span class="comment"> *</span>
+<a name="l00102"></a>00102 <span class="comment"> * uIP uses a "ping" packets for setting its own IP address if this</span>
+<a name="l00103"></a>00103 <span class="comment"> * option is set. If so, uIP will start with an empty IP address and</span>
+<a name="l00104"></a>00104 <span class="comment"> * the destination IP address of the first incoming "ping" (ICMP echo)</span>
+<a name="l00105"></a>00105 <span class="comment"> * packet will be used for setting the hosts IP address.</span>
+<a name="l00106"></a>00106 <span class="comment"> *</span>
+<a name="l00107"></a>00107 <span class="comment"> * \note This works only if UIP_FIXEDADDR is 0.</span>
+<a name="l00108"></a>00108 <span class="comment"> *</span>
+<a name="l00109"></a>00109 <span class="comment"> * \hideinitializer</span>
+<a name="l00110"></a>00110 <span class="comment"> */</span>
+<a name="l00111"></a>00111 <span class="preprocessor">#ifdef UIP_CONF_PINGADDRCONF</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_PINGADDRCONF */</span>
+<a name="l00114"></a><a class="code" href="a00153.html#g9069474ea570fd78c481aa164317dbaf">00114</a> <span class="preprocessor">#define UIP_PINGADDRCONF 0</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_PINGADDRCONF */</span>
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="comment"></span>
+<a name="l00118"></a>00118 <span class="comment">/**</span>
+<a name="l00119"></a>00119 <span class="comment"> * Specifies if the uIP ARP module should be compiled with a fixed</span>
+<a name="l00120"></a>00120 <span class="comment"> * Ethernet MAC address or not.</span>
+<a name="l00121"></a>00121 <span class="comment"> *</span>
+<a name="l00122"></a>00122 <span class="comment"> * If this configuration option is 0, the macro uip_setethaddr() can</span>
+<a name="l00123"></a>00123 <span class="comment"> * be used to specify the Ethernet address at run-time.</span>
+<a name="l00124"></a>00124 <span class="comment"> *</span>
+<a name="l00125"></a>00125 <span class="comment"> * \hideinitializer</span>
+<a name="l00126"></a>00126 <span class="comment"> */</span>
+<a name="l00127"></a><a class="code" href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893">00127</a> <span class="preprocessor">#define UIP_FIXEDETHADDR 0</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00129"></a>00129 <span class="comment">/** @} */</span>
+<a name="l00130"></a>00130 <span class="comment">/*------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00131"></a>00131 <span class="comment">/**</span>
+<a name="l00132"></a>00132 <span class="comment"> * \name IP configuration options</span>
+<a name="l00133"></a>00133 <span class="comment"> * @{</span>
+<a name="l00134"></a>00134 <span class="comment"> *</span>
+<a name="l00135"></a>00135 <span class="comment"> */</span><span class="comment"></span>
+<a name="l00136"></a>00136 <span class="comment">/**</span>
+<a name="l00137"></a>00137 <span class="comment"> * The IP TTL (time to live) of IP packets sent by uIP.</span>
+<a name="l00138"></a>00138 <span class="comment"> *</span>
+<a name="l00139"></a>00139 <span class="comment"> * This should normally not be changed.</span>
+<a name="l00140"></a>00140 <span class="comment"> */</span>
+<a name="l00141"></a><a class="code" href="a00153.html#gb61381673de27f31848c5396bf0b338e">00141</a> <span class="preprocessor">#define UIP_TTL 64</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00143"></a>00143 <span class="comment">/**</span>
+<a name="l00144"></a>00144 <span class="comment"> * Turn on support for IP packet reassembly.</span>
+<a name="l00145"></a>00145 <span class="comment"> *</span>
+<a name="l00146"></a>00146 <span class="comment"> * uIP supports reassembly of fragmented IP packets. This features</span>
+<a name="l00147"></a>00147 <span class="comment"> * requires an additonal amount of RAM to hold the reassembly buffer</span>
+<a name="l00148"></a>00148 <span class="comment"> * and the reassembly code size is approximately 700 bytes. The</span>
+<a name="l00149"></a>00149 <span class="comment"> * reassembly buffer is of the same size as the uip_buf buffer</span>
+<a name="l00150"></a>00150 <span class="comment"> * (configured by UIP_BUFSIZE).</span>
+<a name="l00151"></a>00151 <span class="comment"> *</span>
+<a name="l00152"></a>00152 <span class="comment"> * \note IP packet reassembly is not heavily tested.</span>
+<a name="l00153"></a>00153 <span class="comment"> *</span>
+<a name="l00154"></a>00154 <span class="comment"> * \hideinitializer</span>
+<a name="l00155"></a>00155 <span class="comment"> */</span>
+<a name="l00156"></a><a class="code" href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee">00156</a> <span class="preprocessor">#define UIP_REASSEMBLY 0</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00158"></a>00158 <span class="comment">/**</span>
+<a name="l00159"></a>00159 <span class="comment"> * The maximum time an IP fragment should wait in the reassembly</span>
+<a name="l00160"></a>00160 <span class="comment"> * buffer before it is dropped.</span>
+<a name="l00161"></a>00161 <span class="comment"> *</span>
+<a name="l00162"></a>00162 <span class="comment"> */</span>
+<a name="l00163"></a><a class="code" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">00163</a> <span class="preprocessor">#define UIP_REASS_MAXAGE 40</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00165"></a>00165 <span class="comment">/** @} */</span>
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 <span class="comment">/*------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00168"></a>00168 <span class="comment">/**</span>
+<a name="l00169"></a>00169 <span class="comment"> * \name UDP configuration options</span>
+<a name="l00170"></a>00170 <span class="comment"> * @{</span>
+<a name="l00171"></a>00171 <span class="comment"> */</span>
+<a name="l00172"></a>00172 <span class="comment"></span>
+<a name="l00173"></a>00173 <span class="comment">/**</span>
+<a name="l00174"></a>00174 <span class="comment"> * Toggles wether UDP support should be compiled in or not.</span>
+<a name="l00175"></a>00175 <span class="comment"> *</span>
+<a name="l00176"></a>00176 <span class="comment"> * \hideinitializer</span>
+<a name="l00177"></a>00177 <span class="comment"> */</span>
+<a name="l00178"></a>00178 <span class="preprocessor">#ifdef UIP_CONF_UDP</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">#define UIP_UDP UIP_CONF_UDP</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_UDP */</span>
+<a name="l00181"></a><a class="code" href="a00153.html#gdcf372ff9748996f7c05e9822a615384">00181</a> <span class="preprocessor">#define UIP_UDP 0</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_UDP */</span>
+<a name="l00183"></a>00183 <span class="comment"></span>
+<a name="l00184"></a>00184 <span class="comment">/**</span>
+<a name="l00185"></a>00185 <span class="comment"> * Toggles if UDP checksums should be used or not.</span>
+<a name="l00186"></a>00186 <span class="comment"> *</span>
+<a name="l00187"></a>00187 <span class="comment"> * \note Support for UDP checksums is currently not included in uIP,</span>
+<a name="l00188"></a>00188 <span class="comment"> * so this option has no function.</span>
+<a name="l00189"></a>00189 <span class="comment"> *</span>
+<a name="l00190"></a>00190 <span class="comment"> * \hideinitializer</span>
+<a name="l00191"></a>00191 <span class="comment"> */</span>
+<a name="l00192"></a>00192 <span class="preprocessor">#ifdef UIP_CONF_UDP_CHECKSUMS</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span><span class="preprocessor">#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00195"></a><a class="code" href="a00153.html#g92f3344ec8ca46893163399c89fafed5">00195</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_UDP_CHECKSUMS 0</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00198"></a>00198 <span class="comment">/**</span>
+<a name="l00199"></a>00199 <span class="comment"> * The maximum amount of concurrent UDP connections.</span>
+<a name="l00200"></a>00200 <span class="comment"> *</span>
+<a name="l00201"></a>00201 <span class="comment"> * \hideinitializer</span>
+<a name="l00202"></a>00202 <span class="comment"> */</span>
+<a name="l00203"></a>00203 <span class="preprocessor">#ifdef UIP_CONF_UDP_CONNS</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS</span>
+<a name="l00205"></a>00205 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_UDP_CONNS */</span>
+<a name="l00206"></a><a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">00206</a> <span class="preprocessor">#define UIP_UDP_CONNS 10</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_UDP_CONNS */</span>
+<a name="l00208"></a>00208 <span class="comment"></span>
+<a name="l00209"></a>00209 <span class="comment">/**</span>
+<a name="l00210"></a>00210 <span class="comment"> * The name of the function that should be called when UDP datagrams arrive.</span>
+<a name="l00211"></a>00211 <span class="comment"> *</span>
+<a name="l00212"></a>00212 <span class="comment"> * \hideinitializer</span>
+<a name="l00213"></a>00213 <span class="comment"> */</span>
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 <span class="comment"></span>
+<a name="l00216"></a>00216 <span class="comment">/** @} */</span>
+<a name="l00217"></a>00217 <span class="comment">/*------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00218"></a>00218 <span class="comment">/**</span>
+<a name="l00219"></a>00219 <span class="comment"> * \name TCP configuration options</span>
+<a name="l00220"></a>00220 <span class="comment"> * @{</span>
+<a name="l00221"></a>00221 <span class="comment"> */</span>
+<a name="l00222"></a>00222 <span class="comment"></span>
+<a name="l00223"></a>00223 <span class="comment">/**</span>
+<a name="l00224"></a>00224 <span class="comment"> * Determines if support for opening connections from uIP should be</span>
+<a name="l00225"></a>00225 <span class="comment"> * compiled in.</span>
+<a name="l00226"></a>00226 <span class="comment"> *</span>
+<a name="l00227"></a>00227 <span class="comment"> * If the applications that are running on top of uIP for this project</span>
+<a name="l00228"></a>00228 <span class="comment"> * do not need to open outgoing TCP connections, this configration</span>
+<a name="l00229"></a>00229 <span class="comment"> * option can be turned off to reduce the code size of uIP.</span>
+<a name="l00230"></a>00230 <span class="comment"> *</span>
+<a name="l00231"></a>00231 <span class="comment"> * \hideinitializer</span>
+<a name="l00232"></a>00232 <span class="comment"> */</span>
+<a name="l00233"></a><a class="code" href="a00153.html#gac0de06236b02659460445de30776e00">00233</a> <span class="preprocessor">#define UIP_ACTIVE_OPEN 1</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00235"></a>00235 <span class="comment">/**</span>
+<a name="l00236"></a>00236 <span class="comment"> * The maximum number of simultaneously open TCP connections.</span>
+<a name="l00237"></a>00237 <span class="comment"> *</span>
+<a name="l00238"></a>00238 <span class="comment"> * Since the TCP connections are statically allocated, turning this</span>
+<a name="l00239"></a>00239 <span class="comment"> * configuration knob down results in less RAM used. Each TCP</span>
+<a name="l00240"></a>00240 <span class="comment"> * connection requires approximatly 30 bytes of memory.</span>
+<a name="l00241"></a>00241 <span class="comment"> *</span>
+<a name="l00242"></a>00242 <span class="comment"> * \hideinitializer</span>
+<a name="l00243"></a>00243 <span class="comment"> */</span>
+<a name="l00244"></a>00244 <span class="preprocessor">#ifndef UIP_CONF_MAX_CONNECTIONS</span>
+<a name="l00245"></a><a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">00245</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_CONNS 10</span>
+<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_MAX_CONNECTIONS */</span>
+<a name="l00247"></a>00247 <span class="preprocessor">#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_MAX_CONNECTIONS */</span>
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <span class="comment"></span>
+<a name="l00251"></a>00251 <span class="comment">/**</span>
+<a name="l00252"></a>00252 <span class="comment"> * The maximum number of simultaneously listening TCP ports.</span>
+<a name="l00253"></a>00253 <span class="comment"> *</span>
+<a name="l00254"></a>00254 <span class="comment"> * Each listening TCP port requires 2 bytes of memory.</span>
+<a name="l00255"></a>00255 <span class="comment"> *</span>
+<a name="l00256"></a>00256 <span class="comment"> * \hideinitializer</span>
+<a name="l00257"></a>00257 <span class="comment"> */</span>
+<a name="l00258"></a>00258 <span class="preprocessor">#ifndef UIP_CONF_MAX_LISTENPORTS</span>
+<a name="l00259"></a><a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">00259</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_LISTENPORTS 20</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_MAX_LISTENPORTS */</span>
+<a name="l00261"></a>00261 <span class="preprocessor">#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS</span>
+<a name="l00262"></a>00262 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_MAX_LISTENPORTS */</span>
+<a name="l00263"></a>00263 <span class="comment"></span>
+<a name="l00264"></a>00264 <span class="comment">/**</span>
+<a name="l00265"></a>00265 <span class="comment"> * Determines if support for TCP urgent data notification should be</span>
+<a name="l00266"></a>00266 <span class="comment"> * compiled in.</span>
+<a name="l00267"></a>00267 <span class="comment"> *</span>
+<a name="l00268"></a>00268 <span class="comment"> * Urgent data (out-of-band data) is a rarely used TCP feature that</span>
+<a name="l00269"></a>00269 <span class="comment"> * very seldom would be required.</span>
+<a name="l00270"></a>00270 <span class="comment"> *</span>
+<a name="l00271"></a>00271 <span class="comment"> * \hideinitializer</span>
+<a name="l00272"></a>00272 <span class="comment"> */</span>
+<a name="l00273"></a><a class="code" href="a00153.html#g51c1cd531ff0afb81620151f2248cd21">00273</a> <span class="preprocessor">#define UIP_URGDATA 0</span>
+<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00275"></a>00275 <span class="comment">/**</span>
+<a name="l00276"></a>00276 <span class="comment"> * The initial retransmission timeout counted in timer pulses.</span>
+<a name="l00277"></a>00277 <span class="comment"> *</span>
+<a name="l00278"></a>00278 <span class="comment"> * This should not be changed.</span>
+<a name="l00279"></a>00279 <span class="comment"> */</span>
+<a name="l00280"></a><a class="code" href="a00153.html#g15de27b044603284f68db05a378235a7">00280</a> <span class="preprocessor">#define UIP_RTO 3</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00282"></a>00282 <span class="comment">/**</span>
+<a name="l00283"></a>00283 <span class="comment"> * The maximum number of times a segment should be retransmitted</span>
+<a name="l00284"></a>00284 <span class="comment"> * before the connection should be aborted.</span>
+<a name="l00285"></a>00285 <span class="comment"> *</span>
+<a name="l00286"></a>00286 <span class="comment"> * This should not be changed.</span>
+<a name="l00287"></a>00287 <span class="comment"> */</span>
+<a name="l00288"></a><a class="code" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">00288</a> <span class="preprocessor">#define UIP_MAXRTX 8</span>
+<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00290"></a>00290 <span class="comment">/**</span>
+<a name="l00291"></a>00291 <span class="comment"> * The maximum number of times a SYN segment should be retransmitted</span>
+<a name="l00292"></a>00292 <span class="comment"> * before a connection request should be deemed to have been</span>
+<a name="l00293"></a>00293 <span class="comment"> * unsuccessful.</span>
+<a name="l00294"></a>00294 <span class="comment"> *</span>
+<a name="l00295"></a>00295 <span class="comment"> * This should not need to be changed.</span>
+<a name="l00296"></a>00296 <span class="comment"> */</span>
+<a name="l00297"></a><a class="code" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">00297</a> <span class="preprocessor">#define UIP_MAXSYNRTX 5</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00299"></a>00299 <span class="comment">/**</span>
+<a name="l00300"></a>00300 <span class="comment"> * The TCP maximum segment size.</span>
+<a name="l00301"></a>00301 <span class="comment"> *</span>
+<a name="l00302"></a>00302 <span class="comment"> * This is should not be to set to more than</span>
+<a name="l00303"></a>00303 <span class="comment"> * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.</span>
+<a name="l00304"></a>00304 <span class="comment"> */</span>
+<a name="l00305"></a><a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">00305</a> <span class="preprocessor">#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00307"></a>00307 <span class="comment">/**</span>
+<a name="l00308"></a>00308 <span class="comment"> * The size of the advertised receiver's window.</span>
+<a name="l00309"></a>00309 <span class="comment"> *</span>
+<a name="l00310"></a>00310 <span class="comment"> * Should be set low (i.e., to the size of the uip_buf buffer) is the</span>
+<a name="l00311"></a>00311 <span class="comment"> * application is slow to process incoming data, or high (32768 bytes)</span>
+<a name="l00312"></a>00312 <span class="comment"> * if the application processes data quickly.</span>
+<a name="l00313"></a>00313 <span class="comment"> *</span>
+<a name="l00314"></a>00314 <span class="comment"> * \hideinitializer</span>
+<a name="l00315"></a>00315 <span class="comment"> */</span>
+<a name="l00316"></a>00316 <span class="preprocessor">#ifndef UIP_CONF_RECEIVE_WINDOW</span>
+<a name="l00317"></a><a class="code" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">00317</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_RECEIVE_WINDOW UIP_TCP_MSS</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="preprocessor">#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00322"></a>00322 <span class="comment">/**</span>
+<a name="l00323"></a>00323 <span class="comment"> * How long a connection should stay in the TIME_WAIT state.</span>
+<a name="l00324"></a>00324 <span class="comment"> *</span>
+<a name="l00325"></a>00325 <span class="comment"> * This configiration option has no real implication, and it should be</span>
+<a name="l00326"></a>00326 <span class="comment"> * left untouched.</span>
+<a name="l00327"></a>00327 <span class="comment"> */</span>
+<a name="l00328"></a><a class="code" href="a00153.html#g2bc3b489923793759526a3181eb667fa">00328</a> <span class="preprocessor">#define UIP_TIME_WAIT_TIMEOUT 120</span>
+<a name="l00329"></a>00329 <span class="preprocessor"></span>
+<a name="l00330"></a>00330 <span class="comment"></span>
+<a name="l00331"></a>00331 <span class="comment">/** @} */</span>
+<a name="l00332"></a>00332 <span class="comment">/*------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00333"></a>00333 <span class="comment">/**</span>
+<a name="l00334"></a>00334 <span class="comment"> * \name ARP configuration options</span>
+<a name="l00335"></a>00335 <span class="comment"> * @{</span>
+<a name="l00336"></a>00336 <span class="comment"> */</span>
+<a name="l00337"></a>00337 <span class="comment"></span>
+<a name="l00338"></a>00338 <span class="comment">/**</span>
+<a name="l00339"></a>00339 <span class="comment"> * The size of the ARP table.</span>
+<a name="l00340"></a>00340 <span class="comment"> *</span>
+<a name="l00341"></a>00341 <span class="comment"> * This option should be set to a larger value if this uIP node will</span>
+<a name="l00342"></a>00342 <span class="comment"> * have many connections from the local network.</span>
+<a name="l00343"></a>00343 <span class="comment"> *</span>
+<a name="l00344"></a>00344 <span class="comment"> * \hideinitializer</span>
+<a name="l00345"></a>00345 <span class="comment"> */</span>
+<a name="l00346"></a>00346 <span class="preprocessor">#ifdef UIP_CONF_ARPTAB_SIZE</span>
+<a name="l00347"></a>00347 <span class="preprocessor"></span><span class="preprocessor">#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE</span>
+<a name="l00348"></a>00348 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00349"></a><a class="code" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">00349</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ARPTAB_SIZE 8</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00351"></a>00351 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00352"></a>00352 <span class="comment">/**</span>
+<a name="l00353"></a>00353 <span class="comment"> * The maxium age of ARP table entries measured in 10ths of seconds.</span>
+<a name="l00354"></a>00354 <span class="comment"> *</span>
+<a name="l00355"></a>00355 <span class="comment"> * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD</span>
+<a name="l00356"></a>00356 <span class="comment"> * default).</span>
+<a name="l00357"></a>00357 <span class="comment"> */</span>
+<a name="l00358"></a><a class="code" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">00358</a> <span class="preprocessor">#define UIP_ARP_MAXAGE 120</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00360"></a>00360 <span class="comment">/** @} */</span>
+<a name="l00361"></a>00361
+<a name="l00362"></a>00362 <span class="comment">/*------------------------------------------------------------------------------*/</span>
+<a name="l00363"></a>00363 <span class="comment"></span>
+<a name="l00364"></a>00364 <span class="comment">/**</span>
+<a name="l00365"></a>00365 <span class="comment"> * \name General configuration options</span>
+<a name="l00366"></a>00366 <span class="comment"> * @{</span>
+<a name="l00367"></a>00367 <span class="comment"> */</span>
+<a name="l00368"></a>00368 <span class="comment"></span>
+<a name="l00369"></a>00369 <span class="comment">/**</span>
+<a name="l00370"></a>00370 <span class="comment"> * The size of the uIP packet buffer.</span>
+<a name="l00371"></a>00371 <span class="comment"> *</span>
+<a name="l00372"></a>00372 <span class="comment"> * The uIP packet buffer should not be smaller than 60 bytes, and does</span>
+<a name="l00373"></a>00373 <span class="comment"> * not need to be larger than 1500 bytes. Lower size results in lower</span>
+<a name="l00374"></a>00374 <span class="comment"> * TCP throughput, larger size results in higher TCP throughput.</span>
+<a name="l00375"></a>00375 <span class="comment"> *</span>
+<a name="l00376"></a>00376 <span class="comment"> * \hideinitializer</span>
+<a name="l00377"></a>00377 <span class="comment"> */</span>
+<a name="l00378"></a>00378 <span class="preprocessor">#ifndef UIP_CONF_BUFFER_SIZE</span>
+<a name="l00379"></a><a class="code" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">00379</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_BUFSIZE 400</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_BUFFER_SIZE */</span>
+<a name="l00381"></a>00381 <span class="preprocessor">#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_BUFFER_SIZE */</span>
+<a name="l00383"></a>00383
+<a name="l00384"></a>00384 <span class="comment"></span>
+<a name="l00385"></a>00385 <span class="comment">/**</span>
+<a name="l00386"></a>00386 <span class="comment"> * Determines if statistics support should be compiled in.</span>
+<a name="l00387"></a>00387 <span class="comment"> *</span>
+<a name="l00388"></a>00388 <span class="comment"> * The statistics is useful for debugging and to show the user.</span>
+<a name="l00389"></a>00389 <span class="comment"> *</span>
+<a name="l00390"></a>00390 <span class="comment"> * \hideinitializer</span>
+<a name="l00391"></a>00391 <span class="comment"> */</span>
+<a name="l00392"></a>00392 <span class="preprocessor">#ifndef UIP_CONF_STATISTICS</span>
+<a name="l00393"></a><a class="code" href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6">00393</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_STATISTICS 0</span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_STATISTICS */</span>
+<a name="l00395"></a>00395 <span class="preprocessor">#define UIP_STATISTICS UIP_CONF_STATISTICS</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_STATISTICS */</span>
+<a name="l00397"></a>00397 <span class="comment"></span>
+<a name="l00398"></a>00398 <span class="comment">/**</span>
+<a name="l00399"></a>00399 <span class="comment"> * Determines if logging of certain events should be compiled in.</span>
+<a name="l00400"></a>00400 <span class="comment"> *</span>
+<a name="l00401"></a>00401 <span class="comment"> * This is useful mostly for debugging. The function uip_log()</span>
+<a name="l00402"></a>00402 <span class="comment"> * must be implemented to suit the architecture of the project, if</span>
+<a name="l00403"></a>00403 <span class="comment"> * logging is turned on.</span>
+<a name="l00404"></a>00404 <span class="comment"> *</span>
+<a name="l00405"></a>00405 <span class="comment"> * \hideinitializer</span>
+<a name="l00406"></a>00406 <span class="comment"> */</span>
+<a name="l00407"></a>00407 <span class="preprocessor">#ifndef UIP_CONF_LOGGING</span>
+<a name="l00408"></a><a class="code" href="a00153.html#g21664b7441cfa37d280228d23316d609">00408</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_LOGGING 0</span>
+<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_LOGGING */</span>
+<a name="l00410"></a>00410 <span class="preprocessor">#define UIP_LOGGING UIP_CONF_LOGGING</span>
+<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_LOGGING */</span>
+<a name="l00412"></a>00412 <span class="comment"></span>
+<a name="l00413"></a>00413 <span class="comment">/**</span>
+<a name="l00414"></a>00414 <span class="comment"> * Broadcast support.</span>
+<a name="l00415"></a>00415 <span class="comment"> *</span>
+<a name="l00416"></a>00416 <span class="comment"> * This flag configures IP broadcast support. This is useful only</span>
+<a name="l00417"></a>00417 <span class="comment"> * together with UDP.</span>
+<a name="l00418"></a>00418 <span class="comment"> *</span>
+<a name="l00419"></a>00419 <span class="comment"> * \hideinitializer</span>
+<a name="l00420"></a>00420 <span class="comment"> *</span>
+<a name="l00421"></a>00421 <span class="comment"> */</span>
+<a name="l00422"></a>00422 <span class="preprocessor">#ifndef UIP_CONF_BROADCAST</span>
+<a name="l00423"></a><a class="code" href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf">00423</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_BROADCAST 0</span>
+<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_BROADCAST */</span>
+<a name="l00425"></a>00425 <span class="preprocessor">#define UIP_BROADCAST UIP_CONF_BROADCAST</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_BROADCAST */</span>
+<a name="l00427"></a>00427 <span class="comment"></span>
+<a name="l00428"></a>00428 <span class="comment">/**</span>
+<a name="l00429"></a>00429 <span class="comment"> * Print out a uIP log message.</span>
+<a name="l00430"></a>00430 <span class="comment"> *</span>
+<a name="l00431"></a>00431 <span class="comment"> * This function must be implemented by the module that uses uIP, and</span>
+<a name="l00432"></a>00432 <span class="comment"> * is called by uIP whenever a log message is generated.</span>
+<a name="l00433"></a>00433 <span class="comment"> */</span>
+<a name="l00434"></a>00434 <span class="keywordtype">void</span> <a class="code" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uip_log</a>(<span class="keywordtype">char</span> *msg);
+<a name="l00435"></a>00435 <span class="comment"></span>
+<a name="l00436"></a>00436 <span class="comment">/**</span>
+<a name="l00437"></a>00437 <span class="comment"> * The link level header length.</span>
+<a name="l00438"></a>00438 <span class="comment"> *</span>
+<a name="l00439"></a>00439 <span class="comment"> * This is the offset into the uip_buf where the IP header can be</span>
+<a name="l00440"></a>00440 <span class="comment"> * found. For Ethernet, this should be set to 14. For SLIP, this</span>
+<a name="l00441"></a>00441 <span class="comment"> * should be set to 0.</span>
+<a name="l00442"></a>00442 <span class="comment"> *</span>
+<a name="l00443"></a>00443 <span class="comment"> * \hideinitializer</span>
+<a name="l00444"></a>00444 <span class="comment"> */</span>
+<a name="l00445"></a>00445 <span class="preprocessor">#ifdef UIP_CONF_LLH_LEN</span>
+<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#define UIP_LLH_LEN UIP_CONF_LLH_LEN</span>
+<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_LLH_LEN */</span>
+<a name="l00448"></a><a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">00448</a> <span class="preprocessor">#define UIP_LLH_LEN 14</span>
+<a name="l00449"></a>00449 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_LLH_LEN */</span>
+<a name="l00450"></a>00450 <span class="comment"></span>
+<a name="l00451"></a>00451 <span class="comment">/** @} */</span>
+<a name="l00452"></a>00452 <span class="comment">/*------------------------------------------------------------------------------*/</span><span class="comment"></span>
+<a name="l00453"></a>00453 <span class="comment">/**</span>
+<a name="l00454"></a>00454 <span class="comment"> * \name CPU architecture configuration</span>
+<a name="l00455"></a>00455 <span class="comment"> * @{</span>
+<a name="l00456"></a>00456 <span class="comment"> *</span>
+<a name="l00457"></a>00457 <span class="comment"> * The CPU architecture configuration is where the endianess of the</span>
+<a name="l00458"></a>00458 <span class="comment"> * CPU on which uIP is to be run is specified. Most CPUs today are</span>
+<a name="l00459"></a>00459 <span class="comment"> * little endian, and the most notable exception are the Motorolas</span>
+<a name="l00460"></a>00460 <span class="comment"> * which are big endian. The BYTE_ORDER macro should be changed to</span>
+<a name="l00461"></a>00461 <span class="comment"> * reflect the CPU architecture on which uIP is to be run.</span>
+<a name="l00462"></a>00462 <span class="comment"> */</span>
+<a name="l00463"></a>00463 <span class="comment"></span>
+<a name="l00464"></a>00464 <span class="comment">/**</span>
+<a name="l00465"></a>00465 <span class="comment"> * The byte order of the CPU architecture on which uIP is to be run.</span>
+<a name="l00466"></a>00466 <span class="comment"> *</span>
+<a name="l00467"></a>00467 <span class="comment"> * This option can be either BIG_ENDIAN (Motorola byte order) or</span>
+<a name="l00468"></a>00468 <span class="comment"> * LITTLE_ENDIAN (Intel byte order).</span>
+<a name="l00469"></a>00469 <span class="comment"> *</span>
+<a name="l00470"></a>00470 <span class="comment"> * \hideinitializer</span>
+<a name="l00471"></a>00471 <span class="comment"> */</span>
+<a name="l00472"></a>00472 <span class="preprocessor">#ifdef UIP_CONF_BYTE_ORDER</span>
+<a name="l00473"></a>00473 <span class="preprocessor"></span><span class="preprocessor">#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER</span>
+<a name="l00474"></a>00474 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* UIP_CONF_BYTE_ORDER */</span>
+<a name="l00475"></a><a class="code" href="a00153.html#g285a80366aed9428f64282b8d13c918b">00475</a> <span class="preprocessor">#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN</span>
+<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_BYTE_ORDER */</span>
+<a name="l00477"></a>00477 <span class="comment"></span>
+<a name="l00478"></a>00478 <span class="comment">/** @} */</span>
+<a name="l00479"></a>00479 <span class="comment">/*------------------------------------------------------------------------------*/</span>
+<a name="l00480"></a>00480 <span class="comment"></span>
+<a name="l00481"></a>00481 <span class="comment">/**</span>
+<a name="l00482"></a>00482 <span class="comment"> * \name Appication specific configurations</span>
+<a name="l00483"></a>00483 <span class="comment"> * @{</span>
+<a name="l00484"></a>00484 <span class="comment"> *</span>
+<a name="l00485"></a>00485 <span class="comment"> * An uIP application is implemented using a single application</span>
+<a name="l00486"></a>00486 <span class="comment"> * function that is called by uIP whenever a TCP/IP event occurs. The</span>
+<a name="l00487"></a>00487 <span class="comment"> * name of this function must be registered with uIP at compile time</span>
+<a name="l00488"></a>00488 <span class="comment"> * using the UIP_APPCALL definition.</span>
+<a name="l00489"></a>00489 <span class="comment"> *</span>
+<a name="l00490"></a>00490 <span class="comment"> * uIP applications can store the application state within the</span>
+<a name="l00491"></a>00491 <span class="comment"> * uip_conn structure by specifying the type of the application</span>
+<a name="l00492"></a>00492 <span class="comment"> * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.</span>
+<a name="l00493"></a>00493 <span class="comment"> *</span>
+<a name="l00494"></a>00494 <span class="comment"> * The file containing the definitions must be included in the</span>
+<a name="l00495"></a>00495 <span class="comment"> * uipopt.h file.</span>
+<a name="l00496"></a>00496 <span class="comment"> *</span>
+<a name="l00497"></a>00497 <span class="comment"> * The following example illustrates how this can look.</span>
+<a name="l00498"></a>00498 <span class="comment"> \code</span>
+<a name="l00499"></a>00499 <span class="comment"></span>
+<a name="l00500"></a>00500 <span class="comment">void httpd_appcall(void);</span>
+<a name="l00501"></a>00501 <span class="comment">#define UIP_APPCALL httpd_appcall</span>
+<a name="l00502"></a>00502 <span class="comment"></span>
+<a name="l00503"></a>00503 <span class="comment">struct httpd_state {</span>
+<a name="l00504"></a>00504 <span class="comment"> u8_t state;</span>
+<a name="l00505"></a>00505 <span class="comment"> u16_t count;</span>
+<a name="l00506"></a>00506 <span class="comment"> char *dataptr;</span>
+<a name="l00507"></a>00507 <span class="comment"> char *script;</span>
+<a name="l00508"></a>00508 <span class="comment">};</span>
+<a name="l00509"></a>00509 <span class="comment">typedef struct httpd_state uip_tcp_appstate_t</span>
+<a name="l00510"></a>00510 <span class="comment"> \endcode</span>
+<a name="l00511"></a>00511 <span class="comment"> */</span>
+<a name="l00512"></a>00512 <span class="comment"></span>
+<a name="l00513"></a>00513 <span class="comment">/**</span>
+<a name="l00514"></a>00514 <span class="comment"> * \var #define UIP_APPCALL</span>
+<a name="l00515"></a>00515 <span class="comment"> *</span>
+<a name="l00516"></a>00516 <span class="comment"> * The name of the application function that uIP should call in</span>
+<a name="l00517"></a>00517 <span class="comment"> * response to TCP/IP events.</span>
+<a name="l00518"></a>00518 <span class="comment"> *</span>
+<a name="l00519"></a>00519 <span class="comment"> */</span>
+<a name="l00520"></a>00520 <span class="comment"></span>
+<a name="l00521"></a>00521 <span class="comment">/**</span>
+<a name="l00522"></a>00522 <span class="comment"> * \var typedef uip_tcp_appstate_t</span>
+<a name="l00523"></a>00523 <span class="comment"> *</span>
+<a name="l00524"></a>00524 <span class="comment"> * The type of the application state that is to be stored in the</span>
+<a name="l00525"></a>00525 <span class="comment"> * uip_conn structure. This usually is typedef:ed to a struct holding</span>
+<a name="l00526"></a>00526 <span class="comment"> * application state information.</span>
+<a name="l00527"></a>00527 <span class="comment"> */</span>
+<a name="l00528"></a>00528 <span class="comment"></span>
+<a name="l00529"></a>00529 <span class="comment">/**</span>
+<a name="l00530"></a>00530 <span class="comment"> * \var typedef uip_udp_appstate_t</span>
+<a name="l00531"></a>00531 <span class="comment"> *</span>
+<a name="l00532"></a>00532 <span class="comment"> * The type of the application state that is to be stored in the</span>
+<a name="l00533"></a>00533 <span class="comment"> * uip_conn structure. This usually is typedef:ed to a struct holding</span>
+<a name="l00534"></a>00534 <span class="comment"> * application state information.</span>
+<a name="l00535"></a>00535 <span class="comment"> */</span><span class="comment"></span>
+<a name="l00536"></a>00536 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00537"></a>00537 <span class="comment">/** @} */</span>
+<a name="l00538"></a>00538
+<a name="l00539"></a>00539 <span class="preprocessor">#endif </span><span class="comment">/* __UIPOPT_H__ */</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
+<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>
diff --git a/third_party/uip-1.0/doc/html/a00207.html b/third_party/uip-1.0/doc/html/a00207.html new file mode 100644 index 0000000..1bf1c51 --- /dev/null +++ b/third_party/uip-1.0/doc/html/a00207.html @@ -0,0 +1,182 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: unix/uip-conf.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>unix/uip-conf.h</h1><a href="a00141.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
+<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uipopt</span>
+<a name="l00003"></a>00003 <span class="comment"> * @{</span>
+<a name="l00004"></a>00004 <span class="comment"> */</span>
+<a name="l00005"></a>00005 <span class="comment"></span>
+<a name="l00006"></a>00006 <span class="comment">/**</span>
+<a name="l00007"></a>00007 <span class="comment"> * \name Project-specific configuration options</span>
+<a name="l00008"></a>00008 <span class="comment"> * @{</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * uIP has a number of configuration options that can be overridden</span>
+<a name="l00011"></a>00011 <span class="comment"> * for each project. These are kept in a project-specific uip-conf.h</span>
+<a name="l00012"></a>00012 <span class="comment"> * file and all configuration names have the prefix UIP_CONF.</span>
+<a name="l00013"></a>00013 <span class="comment"> */</span>
+<a name="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="comment">/*</span>
+<a name="l00016"></a>00016 <span class="comment"> * Copyright (c) 2006, Swedish Institute of Computer Science.</span>
+<a name="l00017"></a>00017 <span class="comment"> * All rights reserved.</span>
+<a name="l00018"></a>00018 <span class="comment"> *</span>
+<a name="l00019"></a>00019 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
+<a name="l00020"></a>00020 <span class="comment"> * modification, are permitted provided that the following conditions</span>
+<a name="l00021"></a>00021 <span class="comment"> * are met:</span>
+<a name="l00022"></a>00022 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
+<a name="l00023"></a>00023 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
+<a name="l00024"></a>00024 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
+<a name="l00025"></a>00025 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
+<a name="l00026"></a>00026 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
+<a name="l00027"></a>00027 <span class="comment"> * 3. Neither the name of the Institute nor the names of its contributors</span>
+<a name="l00028"></a>00028 <span class="comment"> * may be used to endorse or promote products derived from this software</span>
+<a name="l00029"></a>00029 <span class="comment"> * without specific prior written permission.</span>
+<a name="l00030"></a>00030 <span class="comment"> *</span>
+<a name="l00031"></a>00031 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND</span>
+<a name="l00032"></a>00032 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
+<a name="l00033"></a>00033 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
+<a name="l00034"></a>00034 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE</span>
+<a name="l00035"></a>00035 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
+<a name="l00036"></a>00036 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
+<a name="l00037"></a>00037 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
+<a name="l00038"></a>00038 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
+<a name="l00039"></a>00039 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
+<a name="l00040"></a>00040 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
+<a name="l00041"></a>00041 <span class="comment"> * SUCH DAMAGE.</span>
+<a name="l00042"></a>00042 <span class="comment"> *</span>
+<a name="l00043"></a>00043 <span class="comment"> * This file is part of the uIP TCP/IP stack</span>
+<a name="l00044"></a>00044 <span class="comment"> *</span>
+<a name="l00045"></a>00045 <span class="comment"> * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $</span>
+<a name="l00046"></a>00046 <span class="comment"> */</span>
+<a name="l00047"></a>00047 <span class="comment"></span>
+<a name="l00048"></a>00048 <span class="comment">/**</span>
+<a name="l00049"></a>00049 <span class="comment"> * \file</span>
+<a name="l00050"></a>00050 <span class="comment"> * An example uIP configuration file</span>
+<a name="l00051"></a>00051 <span class="comment"> * \author</span>
+<a name="l00052"></a>00052 <span class="comment"> * Adam Dunkels <adam@sics.se></span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef __UIP_CONF_H__</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_CONF_H__</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="preprocessor">#include <inttypes.h></span>
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00060"></a>00060 <span class="comment">/**</span>
+<a name="l00061"></a>00061 <span class="comment"> * 8 bit datatype</span>
+<a name="l00062"></a>00062 <span class="comment"> *</span>
+<a name="l00063"></a>00063 <span class="comment"> * This typedef defines the 8-bit type used throughout uIP.</span>
+<a name="l00064"></a>00064 <span class="comment"> *</span>
+<a name="l00065"></a>00065 <span class="comment"> * \hideinitializer</span>
+<a name="l00066"></a>00066 <span class="comment"> */</span>
+<a name="l00067"></a><a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">00067</a> <span class="keyword">typedef</span> uint8_t <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>;
+<a name="l00068"></a>00068 <span class="comment"></span>
+<a name="l00069"></a>00069 <span class="comment">/**</span>
+<a name="l00070"></a>00070 <span class="comment"> * 16 bit datatype</span>
+<a name="l00071"></a>00071 <span class="comment"> *</span>
+<a name="l00072"></a>00072 <span class="comment"> * This typedef defines the 16-bit type used throughout uIP.</span>
+<a name="l00073"></a>00073 <span class="comment"> *</span>
+<a name="l00074"></a>00074 <span class="comment"> * \hideinitializer</span>
+<a name="l00075"></a>00075 <span class="comment"> */</span>
+<a name="l00076"></a><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">00076</a> <span class="keyword">typedef</span> uint16_t <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>;
+<a name="l00077"></a>00077 <span class="comment"></span>
+<a name="l00078"></a>00078 <span class="comment">/**</span>
+<a name="l00079"></a>00079 <span class="comment"> * Statistics datatype</span>
+<a name="l00080"></a>00080 <span class="comment"> *</span>
+<a name="l00081"></a>00081 <span class="comment"> * This typedef defines the dataype used for keeping statistics in</span>
+<a name="l00082"></a>00082 <span class="comment"> * uIP.</span>
+<a name="l00083"></a>00083 <span class="comment"> *</span>
+<a name="l00084"></a>00084 <span class="comment"> * \hideinitializer</span>
+<a name="l00085"></a>00085 <span class="comment"> */</span>
+<a name="l00086"></a><a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">00086</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip_stats_t</a>;
+<a name="l00087"></a>00087 <span class="comment"></span>
+<a name="l00088"></a>00088 <span class="comment">/**</span>
+<a name="l00089"></a>00089 <span class="comment"> * Maximum number of TCP connections.</span>
+<a name="l00090"></a>00090 <span class="comment"> *</span>
+<a name="l00091"></a>00091 <span class="comment"> * \hideinitializer</span>
+<a name="l00092"></a>00092 <span class="comment"> */</span>
+<a name="l00093"></a><a class="code" href="a00153.html#g3f6f1f6f98431f2d33ed30a30d2ccc35">00093</a> <span class="preprocessor">#define UIP_CONF_MAX_CONNECTIONS 40</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00095"></a>00095 <span class="comment">/**</span>
+<a name="l00096"></a>00096 <span class="comment"> * Maximum number of listening TCP ports.</span>
+<a name="l00097"></a>00097 <span class="comment"> *</span>
+<a name="l00098"></a>00098 <span class="comment"> * \hideinitializer</span>
+<a name="l00099"></a>00099 <span class="comment"> */</span>
+<a name="l00100"></a><a class="code" href="a00153.html#g974c9b4bbe6b07cc1d64ac4fad278030">00100</a> <span class="preprocessor">#define UIP_CONF_MAX_LISTENPORTS 40</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00102"></a>00102 <span class="comment">/**</span>
+<a name="l00103"></a>00103 <span class="comment"> * uIP buffer size.</span>
+<a name="l00104"></a>00104 <span class="comment"> *</span>
+<a name="l00105"></a>00105 <span class="comment"> * \hideinitializer</span>
+<a name="l00106"></a>00106 <span class="comment"> */</span>
+<a name="l00107"></a><a class="code" href="a00153.html#gcacc406c3bf7d0e00412e4c946252739">00107</a> <span class="preprocessor">#define UIP_CONF_BUFFER_SIZE 420</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00109"></a>00109 <span class="comment">/**</span>
+<a name="l00110"></a>00110 <span class="comment"> * CPU byte order.</span>
+<a name="l00111"></a>00111 <span class="comment"> *</span>
+<a name="l00112"></a>00112 <span class="comment"> * \hideinitializer</span>
+<a name="l00113"></a>00113 <span class="comment"> */</span>
+<a name="l00114"></a><a class="code" href="a00153.html#gca1240bba5dd57f8c7c27123c84a1f6d">00114</a> <span class="preprocessor">#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00116"></a>00116 <span class="comment">/**</span>
+<a name="l00117"></a>00117 <span class="comment"> * Logging on or off</span>
+<a name="l00118"></a>00118 <span class="comment"> *</span>
+<a name="l00119"></a>00119 <span class="comment"> * \hideinitializer</span>
+<a name="l00120"></a>00120 <span class="comment"> */</span>
+<a name="l00121"></a><a class="code" href="a00153.html#g3001114ddadc1f2ada5cc9a780e866fc">00121</a> <span class="preprocessor">#define UIP_CONF_LOGGING 1</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00123"></a>00123 <span class="comment">/**</span>
+<a name="l00124"></a>00124 <span class="comment"> * UDP support on or off</span>
+<a name="l00125"></a>00125 <span class="comment"> *</span>
+<a name="l00126"></a>00126 <span class="comment"> * \hideinitializer</span>
+<a name="l00127"></a>00127 <span class="comment"> */</span>
+<a name="l00128"></a><a class="code" href="a00153.html#g763f12007aad8cc0e483bf50f8a8d9b4">00128</a> <span class="preprocessor">#define UIP_CONF_UDP 0</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00130"></a>00130 <span class="comment">/**</span>
+<a name="l00131"></a>00131 <span class="comment"> * UDP checksums on or off</span>
+<a name="l00132"></a>00132 <span class="comment"> *</span>
+<a name="l00133"></a>00133 <span class="comment"> * \hideinitializer</span>
+<a name="l00134"></a>00134 <span class="comment"> */</span>
+<a name="l00135"></a><a class="code" href="a00153.html#g9dd44616d41cef74d3beb51d8be5ecec">00135</a> <span class="preprocessor">#define UIP_CONF_UDP_CHECKSUMS 1</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">/**</span>
+<a name="l00138"></a>00138 <span class="comment"> * uIP statistics on or off</span>
+<a name="l00139"></a>00139 <span class="comment"> *</span>
+<a name="l00140"></a>00140 <span class="comment"> * \hideinitializer</span>
+<a name="l00141"></a>00141 <span class="comment"> */</span>
+<a name="l00142"></a><a class="code" href="a00153.html#g529648ad3b0b327a43689b0f1779ff55">00142</a> <span class="preprocessor">#define UIP_CONF_STATISTICS 1</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00144"></a>00144 <span class="comment">/* Here we include the header file for the application(s) we use in</span>
+<a name="l00145"></a>00145 <span class="comment"> our project. */</span>
+<a name="l00146"></a>00146 <span class="comment">/*#include "smtp.h"*/</span>
+<a name="l00147"></a>00147 <span class="comment">/*#include "hello-world.h"*/</span>
+<a name="l00148"></a>00148 <span class="comment">/*#include "telnetd.h"*/</span>
+<a name="l00149"></a>00149 <span class="preprocessor">#include "webserver.h"</span>
+<a name="l00150"></a>00150 <span class="comment">/*#include "dhcpc.h"*/</span>
+<a name="l00151"></a>00151 <span class="comment">/*#include "resolv.h"*/</span>
+<a name="l00152"></a>00152 <span class="comment">/*#include "webclient.h"*/</span>
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_CONF_H__ */</span>
+<a name="l00155"></a>00155 <span class="comment"></span>
+<a name="l00156"></a>00156 <span class="comment">/** @} */</span><span class="comment"></span>
+<a name="l00157"></a>00157 <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
+<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>
diff --git a/third_party/uip-1.0/doc/html/annotated.html b/third_party/uip-1.0/doc/html/annotated.html new file mode 100644 index 0000000..0753c5b --- /dev/null +++ b/third_party/uip-1.0/doc/html/annotated.html @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Structures</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li id="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 Data Structures</h1>Here are the data structures with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="a00077.html">dhcpc_state</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00078.html">hello_world_state</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00079.html">httpd_cgi_call</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00080.html">httpd_state</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00081.html">memb_blocks</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00082.html">psock</a></td><td class="indexvalue">The representation of a protosocket </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00083.html">psock_buf</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00084.html">pt</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00085.html">smtp_state</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00086.html">telnetd_state</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00087.html">timer</a></td><td class="indexvalue">A timer </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00088.html">uip_conn</a></td><td class="indexvalue">Representation of a uIP TCP connection </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00089.html">uip_eth_addr</a></td><td class="indexvalue">Representation of a 48-bit Ethernet address </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00090.html">uip_eth_hdr</a></td><td class="indexvalue">The Ethernet header </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00091.html">uip_icmpip_hdr</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00092.html">uip_neighbor_addr</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00093.html">uip_stats</a></td><td class="indexvalue">The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00094.html">uip_tcpip_hdr</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00095.html">uip_udp_conn</a></td><td class="indexvalue">Representation of a uIP UDP connection </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00096.html">uip_udpip_hdr</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00097.html">webclient_state</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/classes.html b/third_party/uip-1.0/doc/html/classes.html new file mode 100644 index 0000000..5ada66e --- /dev/null +++ b/third_party/uip-1.0/doc/html/classes.html @@ -0,0 +1,38 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Alphabetical List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 Data Structure Index</h1><p><div class="qindex"><a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_H">H</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_U">U</a> | <a class="qindex" href="#letter_W">W</a></div><p>
+<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> D </div></td></tr></table>
+</td><td><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> M </div></td></tr></table>
+</td><td><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
+</td><td><a class="el" href="a00088.html">uip_conn</a> </td><td><a class="el" href="a00094.html">uip_tcpip_hdr</a> </td></tr><tr><td><a class="el" href="a00077.html">dhcpc_state</a> </td><td><a class="el" href="a00081.html">memb_blocks</a> </td><td><a class="el" href="a00085.html">smtp_state</a> </td><td><a class="el" href="a00089.html">uip_eth_addr</a> </td><td><a class="el" href="a00095.html">uip_udp_conn</a> </td></tr><tr><td><a name="letter_H"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> H </div></td></tr></table>
+</td><td><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
+</td><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> T </div></td></tr></table>
+</td><td><a class="el" href="a00090.html">uip_eth_hdr</a> </td><td><a class="el" href="a00096.html">uip_udpip_hdr</a> </td></tr><tr><td><a class="el" href="a00078.html">hello_world_state</a> </td><td><a class="el" href="a00082.html">psock</a> </td><td><a class="el" href="a00086.html">telnetd_state</a> </td><td><a class="el" href="a00091.html">uip_icmpip_hdr</a> </td><td><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> W </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="a00079.html">httpd_cgi_call</a> </td><td><a class="el" href="a00083.html">psock_buf</a> </td><td><a class="el" href="a00087.html">timer</a> </td><td><a class="el" href="a00092.html">uip_neighbor_addr</a> </td><td><a class="el" href="a00097.html">webclient_state</a> </td></tr><tr><td><a class="el" href="a00080.html">httpd_state</a> </td><td><a class="el" href="a00084.html">pt</a> </td><td><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> U </div></td></tr></table>
+</td><td><a class="el" href="a00093.html">uip_stats</a> </td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_H">H</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_U">U</a> | <a class="qindex" href="#letter_W">W</a></div><p>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/doxygen.css b/third_party/uip-1.0/doc/html/doxygen.css new file mode 100644 index 0000000..17790f3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/doxygen.css @@ -0,0 +1,310 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword { color: #008000 }
+SPAN.keywordtype { color: #604020 }
+SPAN.keywordflow { color: #e08000 }
+SPAN.comment { color: #800000 }
+SPAN.preprocessor { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral { color: #008080 }
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search { color: #003399;
+ font-weight: bold;
+}
+FORM.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+TD.tiny { font-size: 75%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
diff --git a/third_party/uip-1.0/doc/html/doxygen.png b/third_party/uip-1.0/doc/html/doxygen.png Binary files differnew file mode 100644 index 0000000..f0a274b --- /dev/null +++ b/third_party/uip-1.0/doc/html/doxygen.png diff --git a/third_party/uip-1.0/doc/html/examples.html b/third_party/uip-1.0/doc/html/examples.html new file mode 100644 index 0000000..0eedf17 --- /dev/null +++ b/third_party/uip-1.0/doc/html/examples.html @@ -0,0 +1,38 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Examples</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li id="current"><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 Examples</h1>Here is a list of all examples:<ul>
+<li><a class="el" href="a00048.html">dhcpc.c</a>
+<li><a class="el" href="a00049.html">dhcpc.h</a>
+<li><a class="el" href="a00042.html">example-mainloop-with-arp.c</a>
+<li><a class="el" href="a00043.html">example-mainloop-without-arp.c</a>
+<li><a class="el" href="a00036.html">hello-world.c</a>
+<li><a class="el" href="a00037.html">hello-world.h</a>
+<li><a class="el" href="a00046.html">resolv.c</a>
+<li><a class="el" href="a00047.html">resolv.h</a>
+<li><a class="el" href="a00038.html">smtp.c</a>
+<li><a class="el" href="a00039.html">smtp.h</a>
+<li><a class="el" href="a00044.html">telnetd.c</a>
+<li><a class="el" href="a00045.html">telnetd.h</a>
+<li><a class="el" href="a00051.html">uip-code-style.c</a>
+<li><a class="el" href="a00050.html">uip-conf.h</a>
+<li><a class="el" href="a00040.html">webclient.c</a>
+<li><a class="el" href="a00041.html">webclient.h</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/files.html b/third_party/uip-1.0/doc/html/files.html new file mode 100644 index 0000000..e7023f8 --- /dev/null +++ b/third_party/uip-1.0/doc/html/files.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey">apps/dhcpc/<b>dhcpc.c</b> <a href="a00168.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">apps/dhcpc/<b>dhcpc.h</b> <a href="a00169.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">apps/hello-world/<a class="el" href="a00100.html">hello-world.c</a> <a href="a00170.html">[code]</a></td><td class="indexvalue">An example of how to write uIP applications with protosockets </td></tr>
+ <tr><td class="indexkey">apps/hello-world/<a class="el" href="a00101.html">hello-world.h</a> <a href="a00171.html">[code]</a></td><td class="indexvalue">Header file for an example of how to write uIP applications with protosockets </td></tr>
+ <tr><td class="indexkey">apps/resolv/<a class="el" href="a00102.html">resolv.c</a> <a href="a00172.html">[code]</a></td><td class="indexvalue">DNS host name to IP address resolver </td></tr>
+ <tr><td class="indexkey">apps/resolv/<a class="el" href="a00103.html">resolv.h</a> <a href="a00173.html">[code]</a></td><td class="indexvalue">DNS resolver code header file </td></tr>
+ <tr><td class="indexkey">apps/smtp/<a class="el" href="a00104.html">smtp.c</a> <a href="a00174.html">[code]</a></td><td class="indexvalue">SMTP example implementation </td></tr>
+ <tr><td class="indexkey">apps/smtp/<a class="el" href="a00105.html">smtp.h</a> <a href="a00175.html">[code]</a></td><td class="indexvalue">SMTP header file </td></tr>
+ <tr><td class="indexkey">apps/telnetd/<b>shell.c</b> <a href="a00176.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">apps/telnetd/<a class="el" href="a00107.html">shell.h</a> <a href="a00177.html">[code]</a></td><td class="indexvalue">Interface for the Contiki shell </td></tr>
+ <tr><td class="indexkey">apps/telnetd/<b>telnetd.c</b> <a href="a00178.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">apps/telnetd/<b>telnetd.h</b> <a href="a00179.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">apps/webclient/<a class="el" href="a00110.html">webclient.c</a> <a href="a00180.html">[code]</a></td><td class="indexvalue">Implementation of the HTTP client </td></tr>
+ <tr><td class="indexkey">apps/webclient/<a class="el" href="a00111.html">webclient.h</a> <a href="a00181.html">[code]</a></td><td class="indexvalue">Header file for the HTTP client </td></tr>
+ <tr><td class="indexkey">apps/webserver/<a class="el" href="a00112.html">httpd-cgi.c</a> <a href="a00182.html">[code]</a></td><td class="indexvalue">Web server script interface </td></tr>
+ <tr><td class="indexkey">apps/webserver/<a class="el" href="a00113.html">httpd-cgi.h</a> <a href="a00183.html">[code]</a></td><td class="indexvalue">Web server script interface header file </td></tr>
+ <tr><td class="indexkey">apps/webserver/<a class="el" href="a00114.html">httpd.c</a> <a href="a00184.html">[code]</a></td><td class="indexvalue">Web server </td></tr>
+ <tr><td class="indexkey">apps/webserver/<b>httpd.h</b> <a href="a00185.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">lib/<a class="el" href="a00120.html">memb.c</a> <a href="a00186.html">[code]</a></td><td class="indexvalue">Memory block allocation routines </td></tr>
+ <tr><td class="indexkey">lib/<a class="el" href="a00121.html">memb.h</a> <a href="a00187.html">[code]</a></td><td class="indexvalue">Memory block allocation routines </td></tr>
+ <tr><td class="indexkey">uip/<b>clock.h</b> <a href="a00188.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00123.html">lc-addrlabels.h</a> <a href="a00189.html">[code]</a></td><td class="indexvalue">Implementation of local continuations based on the "Labels as values" feature of gcc </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00124.html">lc-switch.h</a> <a href="a00190.html">[code]</a></td><td class="indexvalue">Implementation of local continuations based on switch() statment </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00125.html">lc.h</a> <a href="a00191.html">[code]</a></td><td class="indexvalue">Local continuations </td></tr>
+ <tr><td class="indexkey">uip/<b>psock.c</b> <a href="a00192.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00127.html">psock.h</a> <a href="a00193.html">[code]</a></td><td class="indexvalue">Protosocket library header file </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00128.html">pt.h</a> <a href="a00194.html">[code]</a></td><td class="indexvalue">Protothreads implementation </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00129.html">timer.c</a> <a href="a00195.html">[code]</a></td><td class="indexvalue">Timer library implementation </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00130.html">timer.h</a> <a href="a00196.html">[code]</a></td><td class="indexvalue">Timer library header file </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00131.html">uip-neighbor.c</a> <a href="a00197.html">[code]</a></td><td class="indexvalue">Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00132.html">uip-neighbor.h</a> <a href="a00198.html">[code]</a></td><td class="indexvalue">Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code </td></tr>
+ <tr><td class="indexkey">uip/<b>uip-split.c</b> <a href="a00199.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00134.html">uip-split.h</a> <a href="a00200.html">[code]</a></td><td class="indexvalue">Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00135.html">uip.c</a> <a href="a00201.html">[code]</a></td><td class="indexvalue">The uIP TCP/IP stack code </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00136.html">uip.h</a> <a href="a00202.html">[code]</a></td><td class="indexvalue">Header file for the uIP TCP/IP stack </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00137.html">uip_arch.h</a> <a href="a00203.html">[code]</a></td><td class="indexvalue">Declarations of architecture specific functions </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00138.html">uip_arp.c</a> <a href="a00204.html">[code]</a></td><td class="indexvalue">Implementation of the ARP Address Resolution Protocol </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00139.html">uip_arp.h</a> <a href="a00205.html">[code]</a></td><td class="indexvalue">Macros and definitions for the ARP module </td></tr>
+ <tr><td class="indexkey">uip/<a class="el" href="a00140.html">uipopt.h</a> <a href="a00206.html">[code]</a></td><td class="indexvalue">Configuration options for uIP </td></tr>
+ <tr><td class="indexkey">unix/<a class="el" href="a00141.html">uip-conf.h</a> <a href="a00207.html">[code]</a></td><td class="indexvalue">An example uIP configuration file </td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/ftv2blank.png b/third_party/uip-1.0/doc/html/ftv2blank.png Binary files differnew file mode 100644 index 0000000..493c3c0 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2blank.png diff --git a/third_party/uip-1.0/doc/html/ftv2doc.png b/third_party/uip-1.0/doc/html/ftv2doc.png Binary files differnew file mode 100644 index 0000000..f72999f --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2doc.png diff --git a/third_party/uip-1.0/doc/html/ftv2folderclosed.png b/third_party/uip-1.0/doc/html/ftv2folderclosed.png Binary files differnew file mode 100644 index 0000000..d6d0634 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2folderclosed.png diff --git a/third_party/uip-1.0/doc/html/ftv2folderopen.png b/third_party/uip-1.0/doc/html/ftv2folderopen.png Binary files differnew file mode 100644 index 0000000..bbe2c91 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2folderopen.png diff --git a/third_party/uip-1.0/doc/html/ftv2lastnode.png b/third_party/uip-1.0/doc/html/ftv2lastnode.png Binary files differnew file mode 100644 index 0000000..e7b9ba9 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2lastnode.png diff --git a/third_party/uip-1.0/doc/html/ftv2link.png b/third_party/uip-1.0/doc/html/ftv2link.png Binary files differnew file mode 100644 index 0000000..14f3fed --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2link.png diff --git a/third_party/uip-1.0/doc/html/ftv2mlastnode.png b/third_party/uip-1.0/doc/html/ftv2mlastnode.png Binary files differnew file mode 100644 index 0000000..09ceb6a --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2mlastnode.png diff --git a/third_party/uip-1.0/doc/html/ftv2mnode.png b/third_party/uip-1.0/doc/html/ftv2mnode.png Binary files differnew file mode 100644 index 0000000..3254c05 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2mnode.png diff --git a/third_party/uip-1.0/doc/html/ftv2node.png b/third_party/uip-1.0/doc/html/ftv2node.png Binary files differnew file mode 100644 index 0000000..c9f06a5 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2node.png diff --git a/third_party/uip-1.0/doc/html/ftv2plastnode.png b/third_party/uip-1.0/doc/html/ftv2plastnode.png Binary files differnew file mode 100644 index 0000000..0b07e00 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2plastnode.png diff --git a/third_party/uip-1.0/doc/html/ftv2pnode.png b/third_party/uip-1.0/doc/html/ftv2pnode.png Binary files differnew file mode 100644 index 0000000..2001b79 --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2pnode.png diff --git a/third_party/uip-1.0/doc/html/ftv2vertline.png b/third_party/uip-1.0/doc/html/ftv2vertline.png Binary files differnew file mode 100644 index 0000000..b330f3a --- /dev/null +++ b/third_party/uip-1.0/doc/html/ftv2vertline.png diff --git a/third_party/uip-1.0/doc/html/functions.html b/third_party/uip-1.0/doc/html/functions.html new file mode 100644 index 0000000..ba50548 --- /dev/null +++ b/third_party/uip-1.0/doc/html/functions.html @@ -0,0 +1,217 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li id="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ackerr
+: <a class="el" href="a00093.html#7a58d95f7f7827789ff52500e3d16c34">uip_stats</a><li>ackno
+: <a class="el" href="a00094.html#71721395f1c7c42b8bcc111b339bea7c">uip_tcpip_hdr</a><li>addr
+: <a class="el" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">uip_neighbor_addr</a>, <a class="el" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">uip_eth_addr</a><li>appstate
+: <a class="el" href="a00095.html#c8afa29e0aa5e789d6929b366d98ba56">uip_udp_conn</a>, <a class="el" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">uip_conn</a></ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>buf
+: <a class="el" href="a00086.html#54a466311575a727830a92a6c3621cb2">telnetd_state</a>, <a class="el" href="a00082.html#d6bd03239291629676e4c0286ebb650f">psock</a><li>bufptr
+: <a class="el" href="a00086.html#5eced097547fd3fac4ba2a255493d921">telnetd_state</a>, <a class="el" href="a00082.html#c3d1bfbb1abde31973c015de97ce2f84">psock</a><li>bufsize
+: <a class="el" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">psock</a></ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>chkerr
+: <a class="el" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">uip_stats</a><li>conn
+: <a class="el" href="a00077.html#cfd36e02c7498d766ff802575e981612">dhcpc_state</a><li>count
+: <a class="el" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">httpd_state</a>, <a class="el" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">memb_blocks</a></ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>default_router
+: <a class="el" href="a00077.html#5e16ca335dfd7394527f602da879fca2">dhcpc_state</a><li>dest
+: <a class="el" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">uip_eth_hdr</a><li>destipaddr
+: <a class="el" href="a00096.html#be2c98748e180c1747823cd2fb8ecf0e">uip_udpip_hdr</a>, <a class="el" href="a00091.html#e27f4949613fe3c1de5a839af01d99dd">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#8d4e08d051b35b1c710c3be5b8bbfa05">uip_tcpip_hdr</a><li>destport
+: <a class="el" href="a00096.html#e82f68cb91d8688a619d55d2a8572979">uip_udpip_hdr</a>, <a class="el" href="a00094.html#025ffa46b799fa6952719c499a3ae17c">uip_tcpip_hdr</a><li>dnsaddr
+: <a class="el" href="a00077.html#27df2817055bc099821d96eb60a40b34">dhcpc_state</a><li>drop
+: <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">uip_stats</a></ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>file
+: <a class="el" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">httpd_state</a>, <a class="el" href="a00097.html#e87913860c6b05c6e6b060639b950098">webclient_state</a><li>filename
+: <a class="el" href="a00080.html#447eb700ea7a185e0f155934995d49e5">httpd_state</a><li>flags
+: <a class="el" href="a00094.html#619d9755a5d4aaabdb2e5e6ea4c1e0bf">uip_tcpip_hdr</a><li>fragerr
+: <a class="el" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">uip_stats</a><li>from
+: <a class="el" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">smtp_state</a><li>function
+: <a class="el" href="a00079.html#1513a9e88921750d2a611b518f6fc207">httpd_cgi_call</a></ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>getrequestleft
+: <a class="el" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">webclient_state</a><li>getrequestptr
+: <a class="el" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">webclient_state</a></ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hblenerr
+: <a class="el" href="a00093.html#0c816f34c0187f2154c91a18d3ad87c8">uip_stats</a><li>host
+: <a class="el" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">webclient_state</a><li>httpflag
+: <a class="el" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">webclient_state</a><li>httpheaderline
+: <a class="el" href="a00097.html#606d2729bf411ade69044828403a72af">webclient_state</a><li>httpheaderlineptr
+: <a class="el" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">webclient_state</a></ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>icmp
+: <a class="el" href="a00093.html#3983b45977630418d3038231aa8b68ed">uip_stats</a><li>icmpchksum
+: <a class="el" href="a00091.html#805f8fd5533a6d4b6793e0645005da4c">uip_icmpip_hdr</a><li>icode
+: <a class="el" href="a00091.html#266ea23d75c83f15b915ce54100e51c5">uip_icmpip_hdr</a><li>id
+: <a class="el" href="a00091.html#a6d51f3fa5da9b7f9cd37ae69600c04a">uip_icmpip_hdr</a><li>initialmss
+: <a class="el" href="a00088.html#db7a3fadb68df5fdd37e8b91a2c751ea">uip_conn</a><li>inputbuf
+: <a class="el" href="a00080.html#4c6f843219271d25766ee5969e435d1a">httpd_state</a><li>inputbuffer
+: <a class="el" href="a00078.html#4b1b1436b50ed7638aece35f41421196">hello_world_state</a><li>interval
+: <a class="el" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">timer</a><li>ip
+: <a class="el" href="a00093.html#1deb2899508216804823498a69378118">uip_stats</a><li>ipaddr
+: <a class="el" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">dhcpc_state</a><li>ipchksum
+: <a class="el" href="a00096.html#f20186ef441ef5b600e8544a0f2d8d81">uip_udpip_hdr</a>, <a class="el" href="a00091.html#babb9c2be394477af97f79507bcb4c86">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#af7a8a5310ad945de38f5b3ac755ae7d">uip_tcpip_hdr</a><li>ipid
+: <a class="el" href="a00096.html#569382bc53aa64c227e57efe88fe13ac">uip_udpip_hdr</a>, <a class="el" href="a00091.html#308463cc7b3d45d2dbcdcedd4cde9bb9">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#7a59f0dad059786238d8ab604630e7f3">uip_tcpip_hdr</a><li>ipoffset
+: <a class="el" href="a00096.html#8587178a29882482be20c2822b402b96">uip_udpip_hdr</a>, <a class="el" href="a00091.html#4619e69ec86a47f6abe945b39ec7f63a">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#85d7f35662f7be20cd84e789a290dd4b">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lblenerr
+: <a class="el" href="a00093.html#6157452bdc9921f44b2e22e4b5969258">uip_stats</a><li>lc
+: <a class="el" href="a00084.html#c3fa0fa86689e3e7c039a16c16861dbe">pt</a><li>lease_time
+: <a class="el" href="a00077.html#7a520a57d7d0541524f34a7685635597">dhcpc_state</a><li>left
+: <a class="el" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">psock_buf</a><li>len
+: <a class="el" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">httpd_state</a>, <a class="el" href="a00096.html#47140aa52cb9e6a2de38fdfc5da08df1">uip_udpip_hdr</a>, <a class="el" href="a00091.html#b15853725b233d526b291db0347d4ecd">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e57281f5bef284bc9545834ef8ed4a96">uip_tcpip_hdr</a>, <a class="el" href="a00088.html#0ef3ae2764714bf90620075c374c262e">uip_conn</a><li>lines
+: <a class="el" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">telnetd_state</a><li>lport
+: <a class="el" href="a00095.html#981392e295db4d024eea95805c51c371">uip_udp_conn</a>, <a class="el" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">uip_conn</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>mac_addr
+: <a class="el" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">dhcpc_state</a><li>mac_len
+: <a class="el" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">dhcpc_state</a><li>mem
+: <a class="el" href="a00081.html#b5801722740492e69bcc73687476009f">memb_blocks</a><li>mimetype
+: <a class="el" href="a00097.html#fb60f42593d305ea36d9b4303722696e">webclient_state</a><li>msg
+: <a class="el" href="a00085.html#04833004cec509a41c502429df308e35">smtp_state</a><li>msglen
+: <a class="el" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">smtp_state</a><li>mss
+: <a class="el" href="a00088.html#3347ef1b6e8581402445d1a0280c7a14">uip_conn</a></ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name
+: <a class="el" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">httpd_cgi_call</a>, <a class="el" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">hello_world_state</a><li>netmask
+: <a class="el" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">dhcpc_state</a><li>nrtx
+: <a class="el" href="a00088.html#4289c59840b128f2f6526e9da2711d47">uip_conn</a><li>num
+: <a class="el" href="a00081.html#164124d48fe85bc98d9a300382a5245d">memb_blocks</a><li>numsent
+: <a class="el" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">telnetd_state</a></ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>optdata
+: <a class="el" href="a00094.html#dde3cf9a57445814d01b3c67da08afdb">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>p
+: <a class="el" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">hello_world_state</a><li>port
+: <a class="el" href="a00097.html#7092781c50dcad50f473888585c85b83">webclient_state</a><li>proto
+: <a class="el" href="a00096.html#51bbbe3099c10ef26119ddc2aa51e35e">uip_udpip_hdr</a>, <a class="el" href="a00091.html#55e7764a9f6ed05aaa98076b9f6770a5">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e45b31a0a277dd5325ad2a332358b21b">uip_tcpip_hdr</a><li>protoerr
+: <a class="el" href="a00093.html#b4622e2599ff3a592db09219b2641682">uip_stats</a><li>psockpt
+: <a class="el" href="a00082.html#17aacf7c5e2046c1f3ab50faa1b2f7eb">psock</a><li>pt
+: <a class="el" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">dhcpc_state</a><li>ptr
+: <a class="el" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">psock_buf</a></ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>rcv_nxt
+: <a class="el" href="a00088.html#70297b3e6d4eaae7bd828cb50bd1efe3">uip_conn</a><li>readlen
+: <a class="el" href="a00082.html#a408ca8630154ebd039f37a828399f7b">psock</a><li>readptr
+: <a class="el" href="a00082.html#b973f2e16c2883a8a0164d716cce5a31">psock</a><li>recv
+: <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">uip_stats</a><li>rexmit
+: <a class="el" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">uip_stats</a><li>ripaddr
+: <a class="el" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">uip_udp_conn</a>, <a class="el" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">uip_conn</a><li>rport
+: <a class="el" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">uip_udp_conn</a>, <a class="el" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">uip_conn</a><li>rst
+: <a class="el" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">uip_stats</a><li>rto
+: <a class="el" href="a00088.html#e3aa9cc25e45b663e6aabc54c013019e">uip_conn</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sa
+: <a class="el" href="a00088.html#ef661afb3aa82f0437d2ed8d3c20be76">uip_conn</a><li>scriptlen
+: <a class="el" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">httpd_state</a><li>scriptpt
+: <a class="el" href="a00080.html#e261f08e1556287d241764fb2e99fc26">httpd_state</a><li>scriptptr
+: <a class="el" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">httpd_state</a><li>sendlen
+: <a class="el" href="a00082.html#19b82696bd84a803250cbf9812f2f125">psock</a><li>sendptr
+: <a class="el" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">smtp_state</a>, <a class="el" href="a00082.html#31f25efccba9fd043047133d0d0ba5ab">psock</a><li>sent
+: <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">uip_stats</a><li>sentlen
+: <a class="el" href="a00085.html#68204df6bde3e3c27271ebde10579a57">smtp_state</a><li>seqno
+: <a class="el" href="a00091.html#967def494c68cfc8a08d5a6c4dbbc25d">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#2541fae506eb111ff1be2372e0919839">uip_tcpip_hdr</a><li>serverid
+: <a class="el" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">dhcpc_state</a><li>size
+: <a class="el" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">memb_blocks</a><li>snd_nxt
+: <a class="el" href="a00088.html#8f6b08a5ba2a8d75ca7279e2056aa8c6">uip_conn</a><li>sout
+: <a class="el" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">httpd_state</a><li>src
+: <a class="el" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">uip_eth_hdr</a><li>srcipaddr
+: <a class="el" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">uip_udpip_hdr</a>, <a class="el" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">uip_tcpip_hdr</a><li>srcport
+: <a class="el" href="a00096.html#b20096ae4953caaa42f6bb2373c4494c">uip_udpip_hdr</a>, <a class="el" href="a00094.html#a81fff4836049cb3c018304d77337554">uip_tcpip_hdr</a><li>start
+: <a class="el" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">timer</a><li>state
+: <a class="el" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">httpd_state</a>, <a class="el" href="a00097.html#8ae6395641b7752dce47881e20cee970">webclient_state</a>, <a class="el" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">telnetd_state</a>, <a class="el" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">smtp_state</a>, <a class="el" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">dhcpc_state</a>, <a class="el" href="a00082.html#fda184638130452f3570966acc5b97f9">psock</a><li>subject
+: <a class="el" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">smtp_state</a><li>sv
+: <a class="el" href="a00088.html#eb9fcbd3c9b0a795dcd63f33c323d65c">uip_conn</a><li>syndrop
+: <a class="el" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">uip_stats</a><li>synrst
+: <a class="el" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">uip_stats</a></ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>tcp
+: <a class="el" href="a00093.html#e292b8977f6b81265bf14e1676face3e">uip_stats</a><li>tcpchksum
+: <a class="el" href="a00094.html#f4a1d8cfbe270393a2de02b0c743e474">uip_tcpip_hdr</a><li>tcpoffset
+: <a class="el" href="a00094.html#6af8a59d0ab8967aacea749d6e59ac90">uip_tcpip_hdr</a><li>tcpstateflags
+: <a class="el" href="a00088.html#a5f58074435cdc180f17de69651beebd">uip_conn</a><li>textlen
+: <a class="el" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">smtp_state</a><li>ticks
+: <a class="el" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">dhcpc_state</a><li>timer
+: <a class="el" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">httpd_state</a>, <a class="el" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">webclient_state</a>, <a class="el" href="a00077.html#e80af46ceef63eab3c786525370ae720">dhcpc_state</a>, <a class="el" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">uip_conn</a><li>to
+: <a class="el" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">smtp_state</a><li>tos
+: <a class="el" href="a00096.html#ed119a030ebd3bf7c30a12071c27d441">uip_udpip_hdr</a>, <a class="el" href="a00091.html#a3f2d9cb20290019b2743e8df31a2f8b">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#8cf0ca17b115ff2e3071b3fabcc43b53">uip_tcpip_hdr</a><li>ttl
+: <a class="el" href="a00096.html#6f8c65cfc8242197bcc3cb5b4735b16f">uip_udpip_hdr</a>, <a class="el" href="a00091.html#55be3d5413ce49c5c4f5576def12d7ec">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#0f27e16ddcf7199d514968204966f559">uip_tcpip_hdr</a>, <a class="el" href="a00095.html#4da1d7815516cd2b5bda3a66fdf05198">uip_udp_conn</a><li>type
+: <a class="el" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">uip_eth_hdr</a>, <a class="el" href="a00091.html#fa0fe6ca88f692d22af70ff007411252">uip_icmpip_hdr</a><li>typeerr
+: <a class="el" href="a00093.html#8da121d6e50992ec55778f9b2141552d">uip_stats</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>udp
+: <a class="el" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">uip_stats</a><li>udpchksum
+: <a class="el" href="a00096.html#858f970feb7462871c814953697a8ad7">uip_udpip_hdr</a><li>udplen
+: <a class="el" href="a00096.html#c92d2f194f096e84791f95d7e8f0ba92">uip_udpip_hdr</a><li>urgp
+: <a class="el" href="a00094.html#dc7001682017599549f57771f4cd1b9a">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>vhl
+: <a class="el" href="a00096.html#f1684ad96b8acf54154688df3883b801">uip_udpip_hdr</a>, <a class="el" href="a00091.html#7d472d8b3c41618d39c93c4ca92fb3f4">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e1e60d56ea87dfa09230e25ca5ecf2fc">uip_tcpip_hdr</a><li>vhlerr
+: <a class="el" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">uip_stats</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wnd
+: <a class="el" href="a00094.html#7f0ab3fe3bcf1e3ed9f5950cb4474ec1">uip_tcpip_hdr</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/functions_vars.html b/third_party/uip-1.0/doc/html/functions_vars.html new file mode 100644 index 0000000..979215f --- /dev/null +++ b/third_party/uip-1.0/doc/html/functions_vars.html @@ -0,0 +1,217 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields - Variables</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li id="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li id="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ackerr
+: <a class="el" href="a00093.html#7a58d95f7f7827789ff52500e3d16c34">uip_stats</a><li>ackno
+: <a class="el" href="a00094.html#71721395f1c7c42b8bcc111b339bea7c">uip_tcpip_hdr</a><li>addr
+: <a class="el" href="a00092.html#4dc3294d67d705f7248ef57e4259424f">uip_neighbor_addr</a>, <a class="el" href="a00089.html#aacd5fa1806e0f0dd0bc96dd36507ad8">uip_eth_addr</a><li>appstate
+: <a class="el" href="a00095.html#c8afa29e0aa5e789d6929b366d98ba56">uip_udp_conn</a>, <a class="el" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">uip_conn</a></ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>buf
+: <a class="el" href="a00086.html#54a466311575a727830a92a6c3621cb2">telnetd_state</a>, <a class="el" href="a00082.html#d6bd03239291629676e4c0286ebb650f">psock</a><li>bufptr
+: <a class="el" href="a00086.html#5eced097547fd3fac4ba2a255493d921">telnetd_state</a>, <a class="el" href="a00082.html#c3d1bfbb1abde31973c015de97ce2f84">psock</a><li>bufsize
+: <a class="el" href="a00082.html#a6bfaf327ce839ba70accd71014398d0">psock</a></ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>chkerr
+: <a class="el" href="a00093.html#7675e6b9adbddbd545d3aac8ca092fbb">uip_stats</a><li>conn
+: <a class="el" href="a00077.html#cfd36e02c7498d766ff802575e981612">dhcpc_state</a><li>count
+: <a class="el" href="a00080.html#6df929b448ea98bc44d41f5e96237bda">httpd_state</a>, <a class="el" href="a00081.html#5595902fd42d874e35a70206fad8f6d0">memb_blocks</a></ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>default_router
+: <a class="el" href="a00077.html#5e16ca335dfd7394527f602da879fca2">dhcpc_state</a><li>dest
+: <a class="el" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">uip_eth_hdr</a><li>destipaddr
+: <a class="el" href="a00096.html#be2c98748e180c1747823cd2fb8ecf0e">uip_udpip_hdr</a>, <a class="el" href="a00091.html#e27f4949613fe3c1de5a839af01d99dd">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#8d4e08d051b35b1c710c3be5b8bbfa05">uip_tcpip_hdr</a><li>destport
+: <a class="el" href="a00096.html#e82f68cb91d8688a619d55d2a8572979">uip_udpip_hdr</a>, <a class="el" href="a00094.html#025ffa46b799fa6952719c499a3ae17c">uip_tcpip_hdr</a><li>dnsaddr
+: <a class="el" href="a00077.html#27df2817055bc099821d96eb60a40b34">dhcpc_state</a><li>drop
+: <a class="el" href="a00093.html#5d8996950cdf3d8130cc3ad340eb9dff">uip_stats</a></ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>file
+: <a class="el" href="a00080.html#5e274a8f8b5fb2b3999c54fe27c76e46">httpd_state</a>, <a class="el" href="a00097.html#e87913860c6b05c6e6b060639b950098">webclient_state</a><li>filename
+: <a class="el" href="a00080.html#447eb700ea7a185e0f155934995d49e5">httpd_state</a><li>flags
+: <a class="el" href="a00094.html#619d9755a5d4aaabdb2e5e6ea4c1e0bf">uip_tcpip_hdr</a><li>fragerr
+: <a class="el" href="a00093.html#8082509468b2ac80ed7746aa1a5bc4f7">uip_stats</a><li>from
+: <a class="el" href="a00085.html#668cab7d54ff0a2fc2a2179ca06b0798">smtp_state</a><li>function
+: <a class="el" href="a00079.html#1513a9e88921750d2a611b518f6fc207">httpd_cgi_call</a></ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>getrequestleft
+: <a class="el" href="a00097.html#5a3116623c6a7da7c82db6c301ae0da3">webclient_state</a><li>getrequestptr
+: <a class="el" href="a00097.html#134ec55c3d5abaebfed4ff8edfedf1ea">webclient_state</a></ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hblenerr
+: <a class="el" href="a00093.html#0c816f34c0187f2154c91a18d3ad87c8">uip_stats</a><li>host
+: <a class="el" href="a00097.html#a6487b9c1c773b32656065d0e19bf142">webclient_state</a><li>httpflag
+: <a class="el" href="a00097.html#6925d46b2819adb474a5f0036f02dd7d">webclient_state</a><li>httpheaderline
+: <a class="el" href="a00097.html#606d2729bf411ade69044828403a72af">webclient_state</a><li>httpheaderlineptr
+: <a class="el" href="a00097.html#2fca02673894f222b01ad2d3a4d7dd79">webclient_state</a></ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>icmp
+: <a class="el" href="a00093.html#3983b45977630418d3038231aa8b68ed">uip_stats</a><li>icmpchksum
+: <a class="el" href="a00091.html#805f8fd5533a6d4b6793e0645005da4c">uip_icmpip_hdr</a><li>icode
+: <a class="el" href="a00091.html#266ea23d75c83f15b915ce54100e51c5">uip_icmpip_hdr</a><li>id
+: <a class="el" href="a00091.html#a6d51f3fa5da9b7f9cd37ae69600c04a">uip_icmpip_hdr</a><li>initialmss
+: <a class="el" href="a00088.html#db7a3fadb68df5fdd37e8b91a2c751ea">uip_conn</a><li>inputbuf
+: <a class="el" href="a00080.html#4c6f843219271d25766ee5969e435d1a">httpd_state</a><li>inputbuffer
+: <a class="el" href="a00078.html#4b1b1436b50ed7638aece35f41421196">hello_world_state</a><li>interval
+: <a class="el" href="a00087.html#fe557d333c06cf65f52023f45f5b0a3a">timer</a><li>ip
+: <a class="el" href="a00093.html#1deb2899508216804823498a69378118">uip_stats</a><li>ipaddr
+: <a class="el" href="a00077.html#1d2f2751b0865045486c9aa59d0d0971">dhcpc_state</a><li>ipchksum
+: <a class="el" href="a00096.html#f20186ef441ef5b600e8544a0f2d8d81">uip_udpip_hdr</a>, <a class="el" href="a00091.html#babb9c2be394477af97f79507bcb4c86">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#af7a8a5310ad945de38f5b3ac755ae7d">uip_tcpip_hdr</a><li>ipid
+: <a class="el" href="a00096.html#569382bc53aa64c227e57efe88fe13ac">uip_udpip_hdr</a>, <a class="el" href="a00091.html#308463cc7b3d45d2dbcdcedd4cde9bb9">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#7a59f0dad059786238d8ab604630e7f3">uip_tcpip_hdr</a><li>ipoffset
+: <a class="el" href="a00096.html#8587178a29882482be20c2822b402b96">uip_udpip_hdr</a>, <a class="el" href="a00091.html#4619e69ec86a47f6abe945b39ec7f63a">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#85d7f35662f7be20cd84e789a290dd4b">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lblenerr
+: <a class="el" href="a00093.html#6157452bdc9921f44b2e22e4b5969258">uip_stats</a><li>lc
+: <a class="el" href="a00084.html#c3fa0fa86689e3e7c039a16c16861dbe">pt</a><li>lease_time
+: <a class="el" href="a00077.html#7a520a57d7d0541524f34a7685635597">dhcpc_state</a><li>left
+: <a class="el" href="a00083.html#20fae11b540a561c622a0d74cb4b9f97">psock_buf</a><li>len
+: <a class="el" href="a00080.html#468c04fff28e784f93ebc3f0849211dd">httpd_state</a>, <a class="el" href="a00096.html#47140aa52cb9e6a2de38fdfc5da08df1">uip_udpip_hdr</a>, <a class="el" href="a00091.html#b15853725b233d526b291db0347d4ecd">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e57281f5bef284bc9545834ef8ed4a96">uip_tcpip_hdr</a>, <a class="el" href="a00088.html#0ef3ae2764714bf90620075c374c262e">uip_conn</a><li>lines
+: <a class="el" href="a00086.html#cca775e46d4405b7775b328f7694f7e7">telnetd_state</a><li>lport
+: <a class="el" href="a00095.html#981392e295db4d024eea95805c51c371">uip_udp_conn</a>, <a class="el" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">uip_conn</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>mac_addr
+: <a class="el" href="a00077.html#2391bb18db5f620e0e9fb848ae5ba5e9">dhcpc_state</a><li>mac_len
+: <a class="el" href="a00077.html#5361ef75bfbdb469b5cc31f0060a2670">dhcpc_state</a><li>mem
+: <a class="el" href="a00081.html#b5801722740492e69bcc73687476009f">memb_blocks</a><li>mimetype
+: <a class="el" href="a00097.html#fb60f42593d305ea36d9b4303722696e">webclient_state</a><li>msg
+: <a class="el" href="a00085.html#04833004cec509a41c502429df308e35">smtp_state</a><li>msglen
+: <a class="el" href="a00085.html#a312da7b5f6441140721ec7e55f345a8">smtp_state</a><li>mss
+: <a class="el" href="a00088.html#3347ef1b6e8581402445d1a0280c7a14">uip_conn</a></ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name
+: <a class="el" href="a00079.html#9a84c69ec5a4705ccb1ca99fcd120add">httpd_cgi_call</a>, <a class="el" href="a00078.html#4da86e9feb5e5835eb15163c2cb61116">hello_world_state</a><li>netmask
+: <a class="el" href="a00077.html#20541305548441e5dcb2e1e7e6f300eb">dhcpc_state</a><li>nrtx
+: <a class="el" href="a00088.html#4289c59840b128f2f6526e9da2711d47">uip_conn</a><li>num
+: <a class="el" href="a00081.html#164124d48fe85bc98d9a300382a5245d">memb_blocks</a><li>numsent
+: <a class="el" href="a00086.html#d85fc90c30d1fc37c63c4844be5fe09d">telnetd_state</a></ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>optdata
+: <a class="el" href="a00094.html#dde3cf9a57445814d01b3c67da08afdb">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>p
+: <a class="el" href="a00078.html#a9825b5977b2d4dec66e6bd09e6ae6ea">hello_world_state</a><li>port
+: <a class="el" href="a00097.html#7092781c50dcad50f473888585c85b83">webclient_state</a><li>proto
+: <a class="el" href="a00096.html#51bbbe3099c10ef26119ddc2aa51e35e">uip_udpip_hdr</a>, <a class="el" href="a00091.html#55e7764a9f6ed05aaa98076b9f6770a5">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e45b31a0a277dd5325ad2a332358b21b">uip_tcpip_hdr</a><li>protoerr
+: <a class="el" href="a00093.html#b4622e2599ff3a592db09219b2641682">uip_stats</a><li>psockpt
+: <a class="el" href="a00082.html#17aacf7c5e2046c1f3ab50faa1b2f7eb">psock</a><li>pt
+: <a class="el" href="a00077.html#31471b5e27bda51832d0fa49bd6d9b54">dhcpc_state</a><li>ptr
+: <a class="el" href="a00083.html#5e8637b1514d03eb3eb12dc9a502e27e">psock_buf</a></ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>rcv_nxt
+: <a class="el" href="a00088.html#70297b3e6d4eaae7bd828cb50bd1efe3">uip_conn</a><li>readlen
+: <a class="el" href="a00082.html#a408ca8630154ebd039f37a828399f7b">psock</a><li>readptr
+: <a class="el" href="a00082.html#b973f2e16c2883a8a0164d716cce5a31">psock</a><li>recv
+: <a class="el" href="a00093.html#7f7bb2145afba5df00c6e10ddefa8ae1">uip_stats</a><li>rexmit
+: <a class="el" href="a00093.html#3ad48284f7a91f78bb24096aad89056e">uip_stats</a><li>ripaddr
+: <a class="el" href="a00095.html#8a661a2d544100b82d0d14a1985083d5">uip_udp_conn</a>, <a class="el" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">uip_conn</a><li>rport
+: <a class="el" href="a00095.html#280a0c2a93544e597f92bbacf36ee1dc">uip_udp_conn</a>, <a class="el" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">uip_conn</a><li>rst
+: <a class="el" href="a00093.html#b6e9a75167bdddd561373bc5b6ef501c">uip_stats</a><li>rto
+: <a class="el" href="a00088.html#e3aa9cc25e45b663e6aabc54c013019e">uip_conn</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sa
+: <a class="el" href="a00088.html#ef661afb3aa82f0437d2ed8d3c20be76">uip_conn</a><li>scriptlen
+: <a class="el" href="a00080.html#16a3a3056f44b7245ce085b937a269dd">httpd_state</a><li>scriptpt
+: <a class="el" href="a00080.html#e261f08e1556287d241764fb2e99fc26">httpd_state</a><li>scriptptr
+: <a class="el" href="a00080.html#78f82878f3fd0e7401c7d7d3b3fefbef">httpd_state</a><li>sendlen
+: <a class="el" href="a00082.html#19b82696bd84a803250cbf9812f2f125">psock</a><li>sendptr
+: <a class="el" href="a00085.html#5ed2615cec9e633d90ac5968771976eb">smtp_state</a>, <a class="el" href="a00082.html#31f25efccba9fd043047133d0d0ba5ab">psock</a><li>sent
+: <a class="el" href="a00093.html#dc69abadd5aa07c7d74f9292db2cd93c">uip_stats</a><li>sentlen
+: <a class="el" href="a00085.html#68204df6bde3e3c27271ebde10579a57">smtp_state</a><li>seqno
+: <a class="el" href="a00091.html#967def494c68cfc8a08d5a6c4dbbc25d">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#2541fae506eb111ff1be2372e0919839">uip_tcpip_hdr</a><li>serverid
+: <a class="el" href="a00077.html#564bab93ef6a268a5de2fab885c1d32a">dhcpc_state</a><li>size
+: <a class="el" href="a00081.html#b42c7af6114fde5d21206a2e18a7d3ee">memb_blocks</a><li>snd_nxt
+: <a class="el" href="a00088.html#8f6b08a5ba2a8d75ca7279e2056aa8c6">uip_conn</a><li>sout
+: <a class="el" href="a00080.html#9dd8edeece221c853a4c4516bf1b01c2">httpd_state</a><li>src
+: <a class="el" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">uip_eth_hdr</a><li>srcipaddr
+: <a class="el" href="a00096.html#a80e8d0fc768525fa3bfb3d4e4cf260d">uip_udpip_hdr</a>, <a class="el" href="a00091.html#0ec6a6cbcbfd191d393738c16d54e5e1">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#c8f124419a231f38bb6cdf5041757a27">uip_tcpip_hdr</a><li>srcport
+: <a class="el" href="a00096.html#b20096ae4953caaa42f6bb2373c4494c">uip_udpip_hdr</a>, <a class="el" href="a00094.html#a81fff4836049cb3c018304d77337554">uip_tcpip_hdr</a><li>start
+: <a class="el" href="a00087.html#e8eb428c05bc1dee022246a3063d277c">timer</a><li>state
+: <a class="el" href="a00080.html#94fcc9f5c47f419040d849ce58beae35">httpd_state</a>, <a class="el" href="a00097.html#8ae6395641b7752dce47881e20cee970">webclient_state</a>, <a class="el" href="a00086.html#41bf109b6a45328d5744c0a76563fb6c">telnetd_state</a>, <a class="el" href="a00085.html#0bb4f34164e7207c2db26b77f23ccfff">smtp_state</a>, <a class="el" href="a00077.html#e0b137a3875ad12a99e5e3e0e177fd12">dhcpc_state</a>, <a class="el" href="a00082.html#fda184638130452f3570966acc5b97f9">psock</a><li>subject
+: <a class="el" href="a00085.html#503c2994a4e52300516e2b820f0fc65b">smtp_state</a><li>sv
+: <a class="el" href="a00088.html#eb9fcbd3c9b0a795dcd63f33c323d65c">uip_conn</a><li>syndrop
+: <a class="el" href="a00093.html#494ea6767a8a8fab7abe96b799d6c3b3">uip_stats</a><li>synrst
+: <a class="el" href="a00093.html#e9205a565ea3c911a785fc4e87c91a58">uip_stats</a></ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>tcp
+: <a class="el" href="a00093.html#e292b8977f6b81265bf14e1676face3e">uip_stats</a><li>tcpchksum
+: <a class="el" href="a00094.html#f4a1d8cfbe270393a2de02b0c743e474">uip_tcpip_hdr</a><li>tcpoffset
+: <a class="el" href="a00094.html#6af8a59d0ab8967aacea749d6e59ac90">uip_tcpip_hdr</a><li>tcpstateflags
+: <a class="el" href="a00088.html#a5f58074435cdc180f17de69651beebd">uip_conn</a><li>textlen
+: <a class="el" href="a00085.html#0560495c60c68d62617ff1f3d0c424a4">smtp_state</a><li>ticks
+: <a class="el" href="a00077.html#e707c39412e09d3a47f0b3c5dad33725">dhcpc_state</a><li>timer
+: <a class="el" href="a00080.html#c39694ece9526b84012f90f2bb00af9f">httpd_state</a>, <a class="el" href="a00097.html#5960d82e7aca2986b8509a0d87d6cbc8">webclient_state</a>, <a class="el" href="a00077.html#e80af46ceef63eab3c786525370ae720">dhcpc_state</a>, <a class="el" href="a00088.html#2d9732cf5752d30bd11cb25dc7d0c8d3">uip_conn</a><li>to
+: <a class="el" href="a00085.html#3592a1f5ae100db2ed9c0810b41c7bc7">smtp_state</a><li>tos
+: <a class="el" href="a00096.html#ed119a030ebd3bf7c30a12071c27d441">uip_udpip_hdr</a>, <a class="el" href="a00091.html#a3f2d9cb20290019b2743e8df31a2f8b">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#8cf0ca17b115ff2e3071b3fabcc43b53">uip_tcpip_hdr</a><li>ttl
+: <a class="el" href="a00096.html#6f8c65cfc8242197bcc3cb5b4735b16f">uip_udpip_hdr</a>, <a class="el" href="a00091.html#55be3d5413ce49c5c4f5576def12d7ec">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#0f27e16ddcf7199d514968204966f559">uip_tcpip_hdr</a>, <a class="el" href="a00095.html#4da1d7815516cd2b5bda3a66fdf05198">uip_udp_conn</a><li>type
+: <a class="el" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">uip_eth_hdr</a>, <a class="el" href="a00091.html#fa0fe6ca88f692d22af70ff007411252">uip_icmpip_hdr</a><li>typeerr
+: <a class="el" href="a00093.html#8da121d6e50992ec55778f9b2141552d">uip_stats</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>udp
+: <a class="el" href="a00093.html#4f39f0fe6a820d260fe6cddf9ccaa832">uip_stats</a><li>udpchksum
+: <a class="el" href="a00096.html#858f970feb7462871c814953697a8ad7">uip_udpip_hdr</a><li>udplen
+: <a class="el" href="a00096.html#c92d2f194f096e84791f95d7e8f0ba92">uip_udpip_hdr</a><li>urgp
+: <a class="el" href="a00094.html#dc7001682017599549f57771f4cd1b9a">uip_tcpip_hdr</a></ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>vhl
+: <a class="el" href="a00096.html#f1684ad96b8acf54154688df3883b801">uip_udpip_hdr</a>, <a class="el" href="a00091.html#7d472d8b3c41618d39c93c4ca92fb3f4">uip_icmpip_hdr</a>, <a class="el" href="a00094.html#e1e60d56ea87dfa09230e25ca5ecf2fc">uip_tcpip_hdr</a><li>vhlerr
+: <a class="el" href="a00093.html#b93e351c3abba0c700b26b7b07e9527d">uip_stats</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wnd
+: <a class="el" href="a00094.html#7f0ab3fe3bcf1e3ed9f5950cb4474ec1">uip_tcpip_hdr</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals.html b/third_party/uip-1.0/doc/html/globals.html new file mode 100644 index 0000000..d397465 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>__LC_SWTICH_H__
+: <a class="el" href="a00155.html#g44311ecc30759ca38b4069182247bdae">lc-switch.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x61.html b/third_party/uip-1.0/doc/html/globals_0x61.html new file mode 100644 index 0000000..a17d6ed --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x61.html @@ -0,0 +1,64 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li id="current"><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ARP_HWTYPE_ETH
+: <a class="el" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">uip_arp.c</a><li>ARP_REPLY
+: <a class="el" href="a00152.html#g06ba7b414e718081998f2814090debf1">uip_arp.c</a><li>ARP_REQUEST
+: <a class="el" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">uip_arp.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x62.html b/third_party/uip-1.0/doc/html/globals_0x62.html new file mode 100644 index 0000000..19cadd6 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x62.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li id="current"><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BUF
+: <a class="el" href="a00152.html#g24f52ac52d6e714cb04a5aa01be3bdd0">uip_arp.c</a>, <a class="el" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">uip.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x64.html b/third_party/uip-1.0/doc/html/globals_0x64.html new file mode 100644 index 0000000..748e08e --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x64.html @@ -0,0 +1,73 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li id="current"><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DEBUG_PRINTF
+: <a class="el" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">uip.c</a><li>DNS_FLAG1_AUTHORATIVE
+: <a class="el" href="a00102.html#dd685a0f8b5e76a2687cc0f306813bfb">resolv.c</a><li>DNS_FLAG1_OPCODE_INVERSE
+: <a class="el" href="a00102.html#e7250008b68d1909d54040515eef8ebb">resolv.c</a><li>DNS_FLAG1_OPCODE_STANDARD
+: <a class="el" href="a00102.html#6a327c0ffd40f69fbcd5f01f12e5745c">resolv.c</a><li>DNS_FLAG1_OPCODE_STATUS
+: <a class="el" href="a00102.html#4350350ce0d4595876743d4c0a720bcc">resolv.c</a><li>DNS_FLAG1_RD
+: <a class="el" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">resolv.c</a><li>DNS_FLAG1_RESPONSE
+: <a class="el" href="a00102.html#96eb4534b574ece96ed36806039f73d3">resolv.c</a><li>DNS_FLAG1_TRUNC
+: <a class="el" href="a00102.html#2e52037249bb98d7bbecf42e275beb07">resolv.c</a><li>DNS_FLAG2_ERR_MASK
+: <a class="el" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">resolv.c</a><li>DNS_FLAG2_ERR_NAME
+: <a class="el" href="a00102.html#8ee5e2c8e517d6e4f2198057f81e93c6">resolv.c</a><li>DNS_FLAG2_ERR_NONE
+: <a class="el" href="a00102.html#6aaa9da3d0f8d4c0799516d46d939942">resolv.c</a><li>DNS_FLAG2_RA
+: <a class="el" href="a00102.html#c72f8777ccc45ae274449ea7a9f3de04">resolv.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x65.html b/third_party/uip-1.0/doc/html/globals_0x65.html new file mode 100644 index 0000000..4fbc9b7 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x65.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li id="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>ENTRIES
+: <a class="el" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">uip-neighbor.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x66.html b/third_party/uip-1.0/doc/html/globals_0x66.html new file mode 100644 index 0000000..68e8d6c --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x66.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li id="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FBUF
+: <a class="el" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">uip.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x68.html b/third_party/uip-1.0/doc/html/globals_0x68.html new file mode 100644 index 0000000..b72fb76 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x68.html @@ -0,0 +1,73 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li id="current"><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hello_world_appcall()
+: <a class="el" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello-world.h</a><li>hello_world_init()
+: <a class="el" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello-world.h</a><li>HTONS
+: <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">uip.h</a><li>htons()
+: <a class="el" href="a00150.html#ga22b04cac8cf283ca12f028578bebc06">uip.c</a>, <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">uip.h</a><li>httpd_appcall()
+: <a class="el" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd.c</a><li>httpd_cgi()
+: <a class="el" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd-cgi.h</a><li>HTTPD_CGI_CALL
+: <a class="el" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">httpd-cgi.h</a><li>httpd_init()
+: <a class="el" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd.c</a><li>HTTPFLAG_ERROR
+: <a class="el" href="a00163.html#g38af81a4c9884ce89803fc3e52383112">webclient.c</a><li>HTTPFLAG_MOVED
+: <a class="el" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">webclient.c</a><li>HTTPFLAG_NONE
+: <a class="el" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">webclient.c</a><li>HTTPFLAG_OK
+: <a class="el" href="a00163.html#gda99954e0f6905091885934e86c278cc">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x69.html b/third_party/uip-1.0/doc/html/globals_0x69.html new file mode 100644 index 0000000..e48d02a --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x69.html @@ -0,0 +1,84 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li id="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>ICMP6_ECHO
+: <a class="el" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">uip.c</a><li>ICMP6_ECHO_REPLY
+: <a class="el" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">uip.c</a><li>ICMP6_FLAG_S
+: <a class="el" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">uip.c</a><li>ICMP6_NEIGHBOR_ADVERTISEMENT
+: <a class="el" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">uip.c</a><li>ICMP6_NEIGHBOR_SOLICITATION
+: <a class="el" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">uip.c</a><li>ICMP6_OPTION_SOURCE_LINK_ADDRESS
+: <a class="el" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">uip.c</a><li>ICMP6_OPTION_TARGET_LINK_ADDRESS
+: <a class="el" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">uip.c</a><li>ICMP_ECHO
+: <a class="el" href="a00150.html#gd58231410d58e34b455328b888a9e73c">uip.c</a><li>ICMP_ECHO_REPLY
+: <a class="el" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">uip.c</a><li>ICMPBUF
+: <a class="el" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">uip.c</a><li>IPBUF
+: <a class="el" href="a00152.html#g9f2196e2705036869611962425e404bf">uip_arp.c</a><li>ISO_2
+: <a class="el" href="a00161.html#g34b924954ba5707d536df28d71a80d39">smtp.c</a><li>ISO_3
+: <a class="el" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">smtp.c</a><li>ISO_4
+: <a class="el" href="a00161.html#g28cf9765e4b57451af559ab988ad7160">smtp.c</a><li>ISO_5
+: <a class="el" href="a00161.html#g17ccd786400fd08b941e11046df1668f">smtp.c</a><li>ISO_bang
+: <a class="el" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">httpd.c</a><li>ISO_colon
+: <a class="el" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">httpd.c</a><li>ISO_cr
+: <a class="el" href="a00163.html#g6cda47c85ce1b58b501b44ac9cccc50e">webclient.c</a>, <a class="el" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">smtp.c</a><li>ISO_nl
+: <a class="el" href="a00164.html#g3212e70c55244608ac16316888c354f0">httpd.c</a>, <a class="el" href="a00163.html#g3212e70c55244608ac16316888c354f0">webclient.c</a>, <a class="el" href="a00161.html#g3212e70c55244608ac16316888c354f0">smtp.c</a><li>ISO_percent
+: <a class="el" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">httpd.c</a><li>ISO_period
+: <a class="el" href="a00164.html#gf7dd2757d1e766f65b01ba7c91c660a0">httpd.c</a>, <a class="el" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">smtp.c</a><li>ISO_slash
+: <a class="el" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">httpd.c</a><li>ISO_space
+: <a class="el" href="a00164.html#g71e1b022f7b7fa3a154f19372b239935">httpd.c</a>, <a class="el" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x6c.html b/third_party/uip-1.0/doc/html/globals_0x6c.html new file mode 100644 index 0000000..ef2c180 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x6c.html @@ -0,0 +1,66 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li id="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LC_END
+: <a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">lc-addrlabels.h</a>, <a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">lc-switch.h</a><li>LC_INIT
+: <a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">lc-switch.h</a><li>LC_RESUME
+: <a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">lc-switch.h</a><li>LC_SET
+: <a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">lc-addrlabels.h</a>, <a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">lc-switch.h</a><li>lc_t
+: <a class="el" href="a00155.html#g2bdc4b7b4038454a79f1b2a94a6d2a98">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc-switch.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x6d.html b/third_party/uip-1.0/doc/html/globals_0x6d.html new file mode 100644 index 0000000..58da80d --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x6d.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li id="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MAX_RETRIES
+: <a class="el" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">resolv.c</a><li>MAX_TIME
+: <a class="el" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">uip-neighbor.c</a><li>MEMB
+: <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">memb.h</a><li>memb_alloc()
+: <a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb.c</a><li>MEMB_CONCAT
+: <a class="el" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">memb.h</a><li>MEMB_CONCAT2
+: <a class="el" href="a00159.html#ga680bc3f3a1a8a6aec20fe729d138cb8">memb.h</a><li>memb_free()
+: <a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb.c</a><li>memb_init()
+: <a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x6e.html b/third_party/uip-1.0/doc/html/globals_0x6e.html new file mode 100644 index 0000000..01e8719 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x6e.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li id="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>ntohs
+: <a class="el" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">uip.h</a><li>NULL
+: <a class="el" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">resolv.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x70.html b/third_party/uip-1.0/doc/html/globals_0x70.html new file mode 100644 index 0000000..d7f12da --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x70.html @@ -0,0 +1,95 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li id="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PSOCK_BEGIN
+: <a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">psock.h</a><li>PSOCK_CLOSE
+: <a class="el" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">psock.h</a><li>PSOCK_CLOSE_EXIT
+: <a class="el" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">psock.h</a><li>PSOCK_DATALEN
+: <a class="el" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">psock.h</a><li>psock_datalen()
+: <a class="el" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock.h</a><li>PSOCK_END
+: <a class="el" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">psock.h</a><li>PSOCK_EXIT
+: <a class="el" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">psock.h</a><li>PSOCK_GENERATOR_SEND
+: <a class="el" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">psock.h</a><li>PSOCK_INIT
+: <a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">psock.h</a><li>PSOCK_NEWDATA
+: <a class="el" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">psock.h</a><li>psock_newdata()
+: <a class="el" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock.h</a><li>PSOCK_READBUF
+: <a class="el" href="a00158.html#gd895ab98c54d9966ff554aa873151751">psock.h</a><li>PSOCK_READTO
+: <a class="el" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">psock.h</a><li>PSOCK_SEND
+: <a class="el" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">psock.h</a><li>PSOCK_SEND_STR
+: <a class="el" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">psock.h</a><li>PSOCK_WAIT_THREAD
+: <a class="el" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">psock.h</a><li>PSOCK_WAIT_UNTIL
+: <a class="el" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">psock.h</a><li>PT_BEGIN
+: <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">pt.h</a><li>PT_END
+: <a class="el" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">pt.h</a><li>PT_ENDED
+: <a class="el" href="a00142.html#g9ff1e8936a8a26bff54c05f8a989b93b">pt.h</a><li>PT_EXIT
+: <a class="el" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">pt.h</a><li>PT_EXITED
+: <a class="el" href="a00142.html#gcfae9053e5c107a1aed6b228c917d2ea">pt.h</a><li>PT_INIT
+: <a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">pt.h</a><li>PT_RESTART
+: <a class="el" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">pt.h</a><li>PT_SCHEDULE
+: <a class="el" href="a00142.html#gfa82b860a64b67d25ab3abc21811896f">pt.h</a><li>PT_SPAWN
+: <a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">pt.h</a><li>PT_THREAD
+: <a class="el" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">pt.h</a><li>PT_WAIT_THREAD
+: <a class="el" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">pt.h</a><li>PT_WAIT_UNTIL
+: <a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">pt.h</a><li>PT_WAIT_WHILE
+: <a class="el" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">pt.h</a><li>PT_WAITING
+: <a class="el" href="a00142.html#g7b5319b5b65761a845fcd1500fde4cdc">pt.h</a><li>PT_YIELD
+: <a class="el" href="a00142.html#g155cba6121323726d02c00284428fed6">pt.h</a><li>PT_YIELD_UNTIL
+: <a class="el" href="a00142.html#ge3c821e3a388615528efda9d23c7d115">pt.h</a><li>PT_YIELDED
+: <a class="el" href="a00142.html#ge469332907e0617d72d5e2dd4297119d">pt.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x72.html b/third_party/uip-1.0/doc/html/globals_0x72.html new file mode 100644 index 0000000..d7789f4 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x72.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li id="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>resolv_appcall()
+: <a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv.h</a><li>resolv_conf()
+: <a class="el" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv.h</a><li>RESOLV_ENTRIES
+: <a class="el" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">resolv.c</a><li>resolv_found()
+: <a class="el" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv.h</a><li>resolv_getserver()
+: <a class="el" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv.h</a><li>resolv_init()
+: <a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv.h</a><li>resolv_lookup()
+: <a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv.h</a><li>resolv_query()
+: <a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x73.html b/third_party/uip-1.0/doc/html/globals_0x73.html new file mode 100644 index 0000000..7823451 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x73.html @@ -0,0 +1,81 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li id="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>shell_init()
+: <a class="el" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell.h</a><li>shell_input()
+: <a class="el" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell.h</a><li>shell_output()
+: <a class="el" href="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f">shell.h</a><li>shell_prompt()
+: <a class="el" href="a00107.html#123c95a7bb55143cabba92446ce8f513">shell.h</a><li>shell_quit()
+: <a class="el" href="a00107.html#984c4a8b65a3cb35460b073a40568c25">shell.h</a><li>shell_start()
+: <a class="el" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell.h</a><li>smtp_appcall()
+: <a class="el" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp.h</a><li>smtp_configure()
+: <a class="el" href="a00161.html#g37e3103b9591790d484a450525739661">smtp.c</a><li>smtp_done()
+: <a class="el" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp.h</a><li>SMTP_ERR_OK
+: <a class="el" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">smtp.h</a><li>smtp_init()
+: <a class="el" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp.h</a><li>SMTP_SEND
+: <a class="el" href="a00161.html#gcff75c8c930abd6ff168e85373a4eb92">smtp.h</a><li>smtp_send()
+: <a class="el" href="a00161.html#gf0349a8481565e80f55a751e2b408d6d">smtp.c</a><li>STATE_ASKING
+: <a class="el" href="a00102.html#55735650f879293d9b7b5fda6753d147">resolv.c</a><li>STATE_DONE
+: <a class="el" href="a00102.html#876c82c946543cd70c141e41417138e0">resolv.c</a><li>STATE_ERROR
+: <a class="el" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">resolv.c</a><li>STATE_NEW
+: <a class="el" href="a00102.html#bf4401501f1389872141a78b63f325a3">resolv.c</a><li>STATE_OUTPUT
+: <a class="el" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">httpd.c</a><li>STATE_UNUSED
+: <a class="el" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">resolv.c</a><li>STATE_WAITING
+: <a class="el" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">httpd.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x74.html b/third_party/uip-1.0/doc/html/globals_0x74.html new file mode 100644 index 0000000..be8583a --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x74.html @@ -0,0 +1,76 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li id="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TCP_ACK
+: <a class="el" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">uip.c</a><li>TCP_CTL
+: <a class="el" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">uip.c</a><li>TCP_FIN
+: <a class="el" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">uip.c</a><li>TCP_OPT_END
+: <a class="el" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">uip.c</a><li>TCP_OPT_MSS
+: <a class="el" href="a00150.html#g691688604655ea8943d15f14c60027d8">uip.c</a><li>TCP_OPT_MSS_LEN
+: <a class="el" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">uip.c</a><li>TCP_OPT_NOOP
+: <a class="el" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">uip.c</a><li>TCP_PSH
+: <a class="el" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">uip.c</a><li>TCP_RST
+: <a class="el" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">uip.c</a><li>TCP_SYN
+: <a class="el" href="a00150.html#g6020613f5062417d9811cfa837215c83">uip.c</a><li>TCP_URG
+: <a class="el" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">uip.c</a><li>timer_expired()
+: <a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer.h</a><li>timer_reset()
+: <a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer.h</a><li>timer_restart()
+: <a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer.h</a><li>timer_set()
+: <a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x75.html b/third_party/uip-1.0/doc/html/globals_0x75.html new file mode 100644 index 0000000..bc731b9 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x75.html @@ -0,0 +1,237 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li id="current"><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>u16_t
+: <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">uip-conf.h</a><li>u8_t
+: <a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">uip-conf.h</a><li>UDPBUF
+: <a class="el" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">uip.c</a><li>UIP_ABORT
+: <a class="el" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">uip.h</a><li>uip_abort
+: <a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip.h</a><li>uip_aborted
+: <a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip.h</a><li>uip_acc32
+: <a class="el" href="a00150.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip.c</a>, <a class="el" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip.h</a><li>UIP_ACKDATA
+: <a class="el" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">uip.h</a><li>uip_acked
+: <a class="el" href="a00147.html#gde6634974418e3240c212b9b16864368">uip.h</a><li>UIP_ACTIVE_OPEN
+: <a class="el" href="a00153.html#gac0de06236b02659460445de30776e00">uipopt.h</a><li>uip_add32()
+: <a class="el" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">uip_arch.h</a>, <a class="el" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip.c</a><li>UIP_APPCALL
+: <a class="el" href="a00163.html#ge28f6cb60e86088d8886d0f804b4f37c">webclient.h</a>, <a class="el" href="a00162.html#ge28f6cb60e86088d8886d0f804b4f37c">hello-world.h</a>, <a class="el" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">smtp.h</a><li>uip_appdata
+: <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip.c</a>, <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip.h</a><li>UIP_APPDATA_SIZE
+: <a class="el" href="a00150.html#ge0825474feee11b4e038bfe71757875f">uip.h</a><li>uip_arp_arpin()
+: <a class="el" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp.h</a><li>uip_arp_init()
+: <a class="el" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp.h</a><li>uip_arp_ipin
+: <a class="el" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp.h</a><li>UIP_ARP_MAXAGE
+: <a class="el" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">uipopt.h</a><li>uip_arp_out()
+: <a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp.h</a><li>uip_arp_timer()
+: <a class="el" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp.h</a><li>UIP_ARPTAB_SIZE
+: <a class="el" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">uipopt.h</a><li>UIP_BIG_ENDIAN
+: <a class="el" href="a00153.html#g6836f92f3692f3a4429eb599db40cbae">uipopt.h</a><li>UIP_BROADCAST
+: <a class="el" href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf">uipopt.h</a><li>uip_buf
+: <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip.c</a>, <a class="el" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip.h</a><li>UIP_BUFSIZE
+: <a class="el" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">uipopt.h</a><li>UIP_BYTE_ORDER
+: <a class="el" href="a00153.html#g285a80366aed9428f64282b8d13c918b">uipopt.h</a><li>uip_chksum()
+: <a class="el" href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_arch.h</a>, <a class="el" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip.h</a><li>uip_close
+: <a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip.h</a><li>UIP_CLOSE
+: <a class="el" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">uip.h</a><li>UIP_CLOSED
+: <a class="el" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">uip.h</a><li>uip_closed
+: <a class="el" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip.h</a><li>UIP_CLOSING
+: <a class="el" href="a00150.html#g64d9affc680a445d708234e70450477b">uip.h</a><li>UIP_CONF_BUFFER_SIZE
+: <a class="el" href="a00153.html#gcacc406c3bf7d0e00412e4c946252739">uip-conf.h</a><li>UIP_CONF_BYTE_ORDER
+: <a class="el" href="a00153.html#gca1240bba5dd57f8c7c27123c84a1f6d">uip-conf.h</a><li>UIP_CONF_LOGGING
+: <a class="el" href="a00153.html#g3001114ddadc1f2ada5cc9a780e866fc">uip-conf.h</a><li>UIP_CONF_MAX_CONNECTIONS
+: <a class="el" href="a00153.html#g3f6f1f6f98431f2d33ed30a30d2ccc35">uip-conf.h</a><li>UIP_CONF_MAX_LISTENPORTS
+: <a class="el" href="a00153.html#g974c9b4bbe6b07cc1d64ac4fad278030">uip-conf.h</a><li>UIP_CONF_STATISTICS
+: <a class="el" href="a00153.html#g529648ad3b0b327a43689b0f1779ff55">uip-conf.h</a><li>UIP_CONF_UDP
+: <a class="el" href="a00153.html#g763f12007aad8cc0e483bf50f8a8d9b4">uip-conf.h</a><li>UIP_CONF_UDP_CHECKSUMS
+: <a class="el" href="a00153.html#g9dd44616d41cef74d3beb51d8be5ecec">uip-conf.h</a><li>uip_conn
+: <a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip.c</a>, <a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip.h</a><li>uip_conn_active
+: <a class="el" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">uip.h</a><li>uip_connect()
+: <a class="el" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">uip.c</a>, <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip.h</a><li>uip_connected
+: <a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip.h</a><li>UIP_CONNECTED
+: <a class="el" href="a00150.html#gf84316f469ce0726985c0702db49a989">uip.h</a><li>UIP_CONNS
+: <a class="el" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">uipopt.h</a><li>uip_conns
+: <a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip.c</a>, <a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip.h</a><li>UIP_DATA
+: <a class="el" href="a00150.html#gabc40c09f49d15acb1b1a7f02bb3a807">uip.h</a><li>uip_datalen
+: <a class="el" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip.h</a><li>uip_draddr
+: <a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip.c</a>, <a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip.h</a><li>UIP_ESTABLISHED
+: <a class="el" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">uip.h</a><li>uip_ethaddr
+: <a class="el" href="a00152.html#g499bb98a0b4ae9a98553ede81317606d">uip_arp.h</a>, <a class="el" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip.c</a><li>UIP_ETHTYPE_ARP
+: <a class="el" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">uip_arp.h</a><li>UIP_ETHTYPE_IP
+: <a class="el" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">uip_arp.h</a><li>UIP_ETHTYPE_IP6
+: <a class="el" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">uip_arp.h</a><li>UIP_FIN_WAIT_1
+: <a class="el" href="a00150.html#ga533c394b1fa0030205534befa31c525">uip.h</a><li>UIP_FIN_WAIT_2
+: <a class="el" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">uip.h</a><li>UIP_FIXEDADDR
+: <a class="el" href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62">uipopt.h</a><li>UIP_FIXEDETHADDR
+: <a class="el" href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893">uipopt.h</a><li>uip_flags
+: <a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip.c</a>, <a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip.h</a><li>uip_getdraddr
+: <a class="el" href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c">uip.h</a><li>uip_gethostaddr
+: <a class="el" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">uip.h</a><li>uip_getnetmask
+: <a class="el" href="a00144.html#g5323320b7316647042016f17c4e881be">uip.h</a><li>uip_hostaddr
+: <a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip.c</a>, <a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip.h</a><li>uip_init()
+: <a class="el" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip.c</a>, <a class="el" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip.h</a><li>uip_initialmss
+: <a class="el" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">uip.h</a><li>uip_input
+: <a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip.h</a><li>uip_ip4addr_t
+: <a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip.h</a><li>uip_ip6addr
+: <a class="el" href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487">uip.h</a><li>uip_ip6addr_t
+: <a class="el" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip.h</a><li>uip_ipaddr
+: <a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip.h</a><li>uip_ipaddr1
+: <a class="el" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip.h</a><li>uip_ipaddr2
+: <a class="el" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip.h</a><li>uip_ipaddr3
+: <a class="el" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip.h</a><li>uip_ipaddr4
+: <a class="el" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip.h</a><li>uip_ipaddr_cmp
+: <a class="el" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip.h</a><li>uip_ipaddr_copy
+: <a class="el" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip.h</a><li>uip_ipaddr_mask
+: <a class="el" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">uip.h</a><li>uip_ipaddr_maskcmp
+: <a class="el" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip.h</a><li>uip_ipaddr_t
+: <a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip.h</a><li>uip_ipchksum()
+: <a class="el" href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_arch.h</a>, <a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip.h</a><li>UIP_IPH_LEN
+: <a class="el" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">uip.h</a><li>UIP_IPTCPH_LEN
+: <a class="el" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">uip.h</a><li>UIP_IPUDPH_LEN
+: <a class="el" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">uip.h</a><li>UIP_LAST_ACK
+: <a class="el" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">uip.h</a><li>uip_len
+: <a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip.c</a>, <a class="el" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip.h</a><li>uip_listen()
+: <a class="el" href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip.c</a>, <a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip.h</a><li>UIP_LISTENPORTS
+: <a class="el" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">uipopt.h</a><li>uip_listenports
+: <a class="el" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip.c</a><li>UIP_LITTLE_ENDIAN
+: <a class="el" href="a00153.html#gb6e04358481bd2057524fb874cfa472b">uipopt.h</a><li>UIP_LLH_LEN
+: <a class="el" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">uipopt.h</a><li>uip_log()
+: <a class="el" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uipopt.h</a><li>UIP_LOG
+: <a class="el" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">uip.c</a><li>UIP_LOGGING
+: <a class="el" href="a00153.html#g21664b7441cfa37d280228d23316d609">uipopt.h</a><li>UIP_MAXRTX
+: <a class="el" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">uipopt.h</a><li>UIP_MAXSYNRTX
+: <a class="el" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">uipopt.h</a><li>uip_mss
+: <a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip.h</a><li>uip_neighbor_add()
+: <a class="el" href="a00131.html#88460bea09a462d0e22511cb567eee14">uip-neighbor.c</a>, <a class="el" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip-neighbor.h</a><li>uip_neighbor_init()
+: <a class="el" href="a00131.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip-neighbor.c</a>, <a class="el" href="a00132.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip-neighbor.h</a><li>uip_neighbor_lookup()
+: <a class="el" href="a00131.html#692d80636342d564422ccd9296ad568d">uip-neighbor.c</a>, <a class="el" href="a00132.html#692d80636342d564422ccd9296ad568d">uip-neighbor.h</a><li>uip_neighbor_periodic()
+: <a class="el" href="a00131.html#890e822616a6839dfbf51dcb591b8e99">uip-neighbor.c</a>, <a class="el" href="a00132.html#890e822616a6839dfbf51dcb591b8e99">uip-neighbor.h</a><li>uip_neighbor_update()
+: <a class="el" href="a00131.html#1d5ce7047650f3ecee0814dbc8714099">uip-neighbor.c</a>, <a class="el" href="a00132.html#1d5ce7047650f3ecee0814dbc8714099">uip-neighbor.h</a><li>uip_netmask
+: <a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip.c</a>, <a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip.h</a><li>uip_newdata
+: <a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip.h</a><li>UIP_NEWDATA
+: <a class="el" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">uip.h</a><li>uip_outstanding
+: <a class="el" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip.h</a><li>uip_periodic
+: <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip.h</a><li>uip_periodic_conn
+: <a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip.h</a><li>UIP_PINGADDRCONF
+: <a class="el" href="a00153.html#g9069474ea570fd78c481aa164317dbaf">uipopt.h</a><li>uip_poll
+: <a class="el" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip.h</a><li>UIP_POLL
+: <a class="el" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">uip.h</a><li>uip_poll_conn
+: <a class="el" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">uip.h</a><li>UIP_POLL_REQUEST
+: <a class="el" href="a00150.html#gd605357e29affb0d3104294c90f09905">uip.h</a><li>uip_process()
+: <a class="el" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip.h</a><li>UIP_PROTO_ICMP
+: <a class="el" href="a00150.html#g359951eecd80541c2101f628a9da9146">uip.h</a><li>UIP_PROTO_ICMP6
+: <a class="el" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">uip.h</a><li>UIP_PROTO_TCP
+: <a class="el" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">uip.h</a><li>UIP_PROTO_UDP
+: <a class="el" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">uip.h</a><li>UIP_REASS_MAXAGE
+: <a class="el" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">uipopt.h</a><li>UIP_REASSEMBLY
+: <a class="el" href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee">uipopt.h</a><li>UIP_RECEIVE_WINDOW
+: <a class="el" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">uipopt.h</a><li>uip_restart
+: <a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip.h</a><li>UIP_REXMIT
+: <a class="el" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">uip.h</a><li>uip_rexmit
+: <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip.h</a><li>UIP_RTO
+: <a class="el" href="a00153.html#g15de27b044603284f68db05a378235a7">uipopt.h</a><li>uip_sappdata
+: <a class="el" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip.c</a><li>uip_send()
+: <a class="el" href="a00150.html#g04b053a623aac7cd4195157d470661b3">uip.c</a>, <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip.h</a><li>uip_setdraddr
+: <a class="el" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">uip.h</a><li>uip_setethaddr
+: <a class="el" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">uip_arp.h</a><li>uip_sethostaddr
+: <a class="el" href="a00144.html#g12b467f314489259dd718228d0827a51">uip.h</a><li>uip_setipid()
+: <a class="el" href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68">uip.c</a>, <a class="el" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip.h</a><li>uip_setnetmask
+: <a class="el" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">uip.h</a><li>uip_slen
+: <a class="el" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip.c</a><li>uip_split_output()
+: <a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip-split.h</a><li>uip_stat
+: <a class="el" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip.h</a><li>UIP_STAT
+: <a class="el" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">uip.c</a><li>UIP_STATISTICS
+: <a class="el" href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6">uipopt.h</a><li>uip_stats_t
+: <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip-conf.h</a><li>uip_stop
+: <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip.h</a><li>uip_stopped
+: <a class="el" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip.h</a><li>UIP_STOPPED
+: <a class="el" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">uip.h</a><li>UIP_SYN_RCVD
+: <a class="el" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">uip.h</a><li>UIP_SYN_SENT
+: <a class="el" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">uip.h</a><li>uip_tcp_appstate_t
+: <a class="el" href="a00163.html#gdc5aec3587b2c55b714a6c2f37b56cba">webclient.h</a>, <a class="el" href="a00153.html#g69646a81a922033c5281445a71f8ffed">smtp.h</a><li>UIP_TCP_MSS
+: <a class="el" href="a00153.html#g4910467b83a639f06739c82cd362037e">uipopt.h</a><li>uip_tcpchksum()
+: <a class="el" href="a00151.html#g85b65e38aa74eba18979156f97a94a87">uip_arch.h</a>, <a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip.h</a><li>UIP_TCPH_LEN
+: <a class="el" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">uip.h</a><li>UIP_TCPIP_HLEN
+: <a class="el" href="a00150.html#gee37386b2ab828787c05227eb109def7">uip.h</a><li>UIP_TIME_WAIT
+: <a class="el" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">uip.h</a><li>UIP_TIME_WAIT_TIMEOUT
+: <a class="el" href="a00153.html#g2bc3b489923793759526a3181eb667fa">uipopt.h</a><li>UIP_TIMEDOUT
+: <a class="el" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">uip.h</a><li>uip_timedout
+: <a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip.h</a><li>UIP_TIMER
+: <a class="el" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">uip.h</a><li>UIP_TS_MASK
+: <a class="el" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">uip.h</a><li>UIP_TTL
+: <a class="el" href="a00153.html#gb61381673de27f31848c5396bf0b338e">uipopt.h</a><li>UIP_UDP
+: <a class="el" href="a00153.html#gdcf372ff9748996f7c05e9822a615384">uipopt.h</a><li>UIP_UDP_APPCALL
+: <a class="el" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">resolv.h</a><li>uip_udp_appstate_t
+: <a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">resolv.h</a><li>uip_udp_bind
+: <a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip.h</a><li>UIP_UDP_CHECKSUMS
+: <a class="el" href="a00153.html#g92f3344ec8ca46893163399c89fafed5">uipopt.h</a><li>uip_udp_conn
+: <a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip.c</a>, <a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip.h</a><li>UIP_UDP_CONNS
+: <a class="el" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">uipopt.h</a><li>uip_udp_conns
+: <a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip.c</a>, <a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip.h</a><li>uip_udp_new()
+: <a class="el" href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af">uip.c</a>, <a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip.h</a><li>uip_udp_periodic
+: <a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip.h</a><li>uip_udp_periodic_conn
+: <a class="el" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">uip.h</a><li>uip_udp_remove
+: <a class="el" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip.h</a><li>uip_udp_send
+: <a class="el" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip.h</a><li>UIP_UDP_SEND_CONN
+: <a class="el" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">uip.h</a><li>UIP_UDP_TIMER
+: <a class="el" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">uip.h</a><li>uip_udpchksum()
+: <a class="el" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip.h</a><li>uip_udpconnection
+: <a class="el" href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2">uip.h</a><li>UIP_UDPH_LEN
+: <a class="el" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">uip.h</a><li>uip_unlisten()
+: <a class="el" href="a00150.html#gaa585784b0914cac1d37f07f85457008">uip.c</a>, <a class="el" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip.h</a><li>UIP_URGDATA
+: <a class="el" href="a00153.html#g51c1cd531ff0afb81620151f2248cd21">uipopt.h</a><li>uip_urgdatalen
+: <a class="el" href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537">uip.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_0x77.html b/third_party/uip-1.0/doc/html/globals_0x77.html new file mode 100644 index 0000000..2b9a7fe --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_0x77.html @@ -0,0 +1,80 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li id="current"><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>webclient_aborted()
+: <a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient.h</a><li>webclient_appcall()
+: <a class="el" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient.h</a><li>webclient_close()
+: <a class="el" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient.h</a><li>webclient_closed()
+: <a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient.h</a><li>WEBCLIENT_CONF_MAX_URLLEN
+: <a class="el" href="a00163.html#g5a5bfd7e9060903893481db90645187b">webclient.h</a><li>webclient_connected()
+: <a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient.h</a><li>webclient_datahandler()
+: <a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient.h</a><li>webclient_filename()
+: <a class="el" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient.h</a><li>webclient_get()
+: <a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient.h</a><li>webclient_hostname()
+: <a class="el" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient.h</a><li>webclient_init()
+: <a class="el" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient.h</a><li>webclient_mimetype()
+: <a class="el" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient.h</a><li>webclient_port()
+: <a class="el" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient.h</a><li>WEBCLIENT_STATE_CLOSE
+: <a class="el" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">webclient.c</a><li>WEBCLIENT_STATE_DATA
+: <a class="el" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">webclient.c</a><li>WEBCLIENT_STATE_HEADERS
+: <a class="el" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">webclient.c</a><li>WEBCLIENT_STATE_STATUSLINE
+: <a class="el" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">webclient.c</a><li>webclient_timedout()
+: <a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient.h</a><li>WEBCLIENT_TIMEOUT
+: <a class="el" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs.html b/third_party/uip-1.0/doc/html/globals_defs.html new file mode 100644 index 0000000..46da3d3 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>__LC_SWTICH_H__
+: <a class="el" href="a00155.html#g44311ecc30759ca38b4069182247bdae">lc-switch.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x61.html b/third_party/uip-1.0/doc/html/globals_defs_0x61.html new file mode 100644 index 0000000..456b236 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x61.html @@ -0,0 +1,64 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li id="current"><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ARP_HWTYPE_ETH
+: <a class="el" href="a00152.html#gbb56b549f7ab4d86e1cc39b8afc70d1e">uip_arp.c</a><li>ARP_REPLY
+: <a class="el" href="a00152.html#g06ba7b414e718081998f2814090debf1">uip_arp.c</a><li>ARP_REQUEST
+: <a class="el" href="a00152.html#g7a7c46ffaba30477b8c9e3e61bd2e106">uip_arp.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x62.html b/third_party/uip-1.0/doc/html/globals_defs_0x62.html new file mode 100644 index 0000000..d311097 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x62.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li id="current"><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BUF
+: <a class="el" href="a00152.html#g24f52ac52d6e714cb04a5aa01be3bdd0">uip_arp.c</a>, <a class="el" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">uip.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x64.html b/third_party/uip-1.0/doc/html/globals_defs_0x64.html new file mode 100644 index 0000000..bc83549 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x64.html @@ -0,0 +1,73 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li id="current"><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DEBUG_PRINTF
+: <a class="el" href="a00135.html#534d9e416324fb8ecca6b9cb4b1f6a6a">uip.c</a><li>DNS_FLAG1_AUTHORATIVE
+: <a class="el" href="a00102.html#dd685a0f8b5e76a2687cc0f306813bfb">resolv.c</a><li>DNS_FLAG1_OPCODE_INVERSE
+: <a class="el" href="a00102.html#e7250008b68d1909d54040515eef8ebb">resolv.c</a><li>DNS_FLAG1_OPCODE_STANDARD
+: <a class="el" href="a00102.html#6a327c0ffd40f69fbcd5f01f12e5745c">resolv.c</a><li>DNS_FLAG1_OPCODE_STATUS
+: <a class="el" href="a00102.html#4350350ce0d4595876743d4c0a720bcc">resolv.c</a><li>DNS_FLAG1_RD
+: <a class="el" href="a00102.html#72d99b1623afa14bd58c667b748c2ddc">resolv.c</a><li>DNS_FLAG1_RESPONSE
+: <a class="el" href="a00102.html#96eb4534b574ece96ed36806039f73d3">resolv.c</a><li>DNS_FLAG1_TRUNC
+: <a class="el" href="a00102.html#2e52037249bb98d7bbecf42e275beb07">resolv.c</a><li>DNS_FLAG2_ERR_MASK
+: <a class="el" href="a00102.html#9f6c329c04baba17fe0f5b2a6597d713">resolv.c</a><li>DNS_FLAG2_ERR_NAME
+: <a class="el" href="a00102.html#8ee5e2c8e517d6e4f2198057f81e93c6">resolv.c</a><li>DNS_FLAG2_ERR_NONE
+: <a class="el" href="a00102.html#6aaa9da3d0f8d4c0799516d46d939942">resolv.c</a><li>DNS_FLAG2_RA
+: <a class="el" href="a00102.html#c72f8777ccc45ae274449ea7a9f3de04">resolv.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x65.html b/third_party/uip-1.0/doc/html/globals_defs_0x65.html new file mode 100644 index 0000000..e2ef3c9 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x65.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li id="current"><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>ENTRIES
+: <a class="el" href="a00131.html#5f2e1fcf0055d20ce17664b1027bb9eb">uip-neighbor.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x66.html b/third_party/uip-1.0/doc/html/globals_defs_0x66.html new file mode 100644 index 0000000..92a60e6 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x66.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li id="current"><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FBUF
+: <a class="el" href="a00150.html#g96544dedc1cdc71ad2ad54bf1d5e5433">uip.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x68.html b/third_party/uip-1.0/doc/html/globals_defs_0x68.html new file mode 100644 index 0000000..ff1a426 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x68.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li id="current"><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>HTONS
+: <a class="el" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">uip.h</a><li>HTTPD_CGI_CALL
+: <a class="el" href="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5">httpd-cgi.h</a><li>HTTPFLAG_ERROR
+: <a class="el" href="a00163.html#g38af81a4c9884ce89803fc3e52383112">webclient.c</a><li>HTTPFLAG_MOVED
+: <a class="el" href="a00163.html#gd895686859ae7d178d31be04eb0a1a97">webclient.c</a><li>HTTPFLAG_NONE
+: <a class="el" href="a00163.html#g40fb1fb2d990ce04ae9bbee275627c03">webclient.c</a><li>HTTPFLAG_OK
+: <a class="el" href="a00163.html#gda99954e0f6905091885934e86c278cc">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x69.html b/third_party/uip-1.0/doc/html/globals_defs_0x69.html new file mode 100644 index 0000000..955f91b --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x69.html @@ -0,0 +1,84 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li id="current"><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>ICMP6_ECHO
+: <a class="el" href="a00150.html#g4cc3e223b63f27b546d62e9a258dba5a">uip.c</a><li>ICMP6_ECHO_REPLY
+: <a class="el" href="a00150.html#g207d17b633cd095120a74bc1f2257b17">uip.c</a><li>ICMP6_FLAG_S
+: <a class="el" href="a00150.html#g1d3211dbbdfb22d6a47b60dddcf945e8">uip.c</a><li>ICMP6_NEIGHBOR_ADVERTISEMENT
+: <a class="el" href="a00150.html#g62c03e0a308cc23929a80fe8d8f9dc1e">uip.c</a><li>ICMP6_NEIGHBOR_SOLICITATION
+: <a class="el" href="a00150.html#g1cea57e3ea526f210b1068e6dcf7b4f4">uip.c</a><li>ICMP6_OPTION_SOURCE_LINK_ADDRESS
+: <a class="el" href="a00150.html#g42288d5c3cf4b10becefec657f441e54">uip.c</a><li>ICMP6_OPTION_TARGET_LINK_ADDRESS
+: <a class="el" href="a00150.html#g8387881de3a8bfd3c0d57b9d04ac9b7e">uip.c</a><li>ICMP_ECHO
+: <a class="el" href="a00150.html#gd58231410d58e34b455328b888a9e73c">uip.c</a><li>ICMP_ECHO_REPLY
+: <a class="el" href="a00150.html#g5c5b1834e497f53ad0ef947bbe9777fa">uip.c</a><li>ICMPBUF
+: <a class="el" href="a00150.html#g4309376690872fa4beb4f025f5cc199b">uip.c</a><li>IPBUF
+: <a class="el" href="a00152.html#g9f2196e2705036869611962425e404bf">uip_arp.c</a><li>ISO_2
+: <a class="el" href="a00161.html#g34b924954ba5707d536df28d71a80d39">smtp.c</a><li>ISO_3
+: <a class="el" href="a00161.html#g9e97c58fe35f750ad192774be9408ac8">smtp.c</a><li>ISO_4
+: <a class="el" href="a00161.html#g28cf9765e4b57451af559ab988ad7160">smtp.c</a><li>ISO_5
+: <a class="el" href="a00161.html#g17ccd786400fd08b941e11046df1668f">smtp.c</a><li>ISO_bang
+: <a class="el" href="a00164.html#ge3f8f7deae69854853b0c8ebb82c380d">httpd.c</a><li>ISO_colon
+: <a class="el" href="a00164.html#g14e276fa8e765f774f4162619f1c8fc1">httpd.c</a><li>ISO_cr
+: <a class="el" href="a00163.html#g6cda47c85ce1b58b501b44ac9cccc50e">webclient.c</a>, <a class="el" href="a00161.html#g6cda47c85ce1b58b501b44ac9cccc50e">smtp.c</a><li>ISO_nl
+: <a class="el" href="a00164.html#g3212e70c55244608ac16316888c354f0">httpd.c</a>, <a class="el" href="a00163.html#g3212e70c55244608ac16316888c354f0">webclient.c</a>, <a class="el" href="a00161.html#g3212e70c55244608ac16316888c354f0">smtp.c</a><li>ISO_percent
+: <a class="el" href="a00164.html#g79f9a50c2cccb967d38a2eeb45d2fd75">httpd.c</a><li>ISO_period
+: <a class="el" href="a00164.html#gf7dd2757d1e766f65b01ba7c91c660a0">httpd.c</a>, <a class="el" href="a00161.html#gf7dd2757d1e766f65b01ba7c91c660a0">smtp.c</a><li>ISO_slash
+: <a class="el" href="a00164.html#g820fb27c50e7bb4ac6d9eae1b06630a5">httpd.c</a><li>ISO_space
+: <a class="el" href="a00164.html#g71e1b022f7b7fa3a154f19372b239935">httpd.c</a>, <a class="el" href="a00163.html#g71e1b022f7b7fa3a154f19372b239935">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x6c.html b/third_party/uip-1.0/doc/html/globals_defs_0x6c.html new file mode 100644 index 0000000..d970ddb --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x6c.html @@ -0,0 +1,65 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li id="current"><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LC_END
+: <a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">lc-addrlabels.h</a>, <a class="el" href="a00155.html#gca51ceb2f5d855dfde55bcedf8d3b92d">lc-switch.h</a><li>LC_INIT
+: <a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g2c1bb4fa6d7a6ff951a41c73fc721109">lc-switch.h</a><li>LC_RESUME
+: <a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g1ec8b8f4710dce1fa7fb87d3a31541ae">lc-switch.h</a><li>LC_SET
+: <a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">lc-addrlabels.h</a>, <a class="el" href="a00155.html#gd8eec328a4868d767f0c00c8d1c6cfc1">lc-switch.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x6d.html b/third_party/uip-1.0/doc/html/globals_defs_0x6d.html new file mode 100644 index 0000000..3e8c8d9 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x6d.html @@ -0,0 +1,66 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li id="current"><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MAX_RETRIES
+: <a class="el" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">resolv.c</a><li>MAX_TIME
+: <a class="el" href="a00131.html#5320d4457a472d8888ec1905bc0e0a1c">uip-neighbor.c</a><li>MEMB
+: <a class="el" href="a00159.html#gf31774d02a69fd3f1c2b282454438cba">memb.h</a><li>MEMB_CONCAT
+: <a class="el" href="a00159.html#g720ac440c7b24bdd07c53ba146e36fb2">memb.h</a><li>MEMB_CONCAT2
+: <a class="el" href="a00159.html#ga680bc3f3a1a8a6aec20fe729d138cb8">memb.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x6e.html b/third_party/uip-1.0/doc/html/globals_defs_0x6e.html new file mode 100644 index 0000000..51e3707 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x6e.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li id="current"><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>ntohs
+: <a class="el" href="a00148.html#g118e9d76568ab81ad97f138d4ea1ddd2">uip.h</a><li>NULL
+: <a class="el" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">resolv.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x70.html b/third_party/uip-1.0/doc/html/globals_defs_0x70.html new file mode 100644 index 0000000..d470b29 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x70.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li id="current"><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PSOCK_BEGIN
+: <a class="el" href="a00158.html#g84901a5aa60040e96d272a69977edd22">psock.h</a><li>PSOCK_CLOSE
+: <a class="el" href="a00158.html#g5d56800f82bfc7bbf53bb4a659589812">psock.h</a><li>PSOCK_CLOSE_EXIT
+: <a class="el" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">psock.h</a><li>PSOCK_DATALEN
+: <a class="el" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">psock.h</a><li>PSOCK_END
+: <a class="el" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">psock.h</a><li>PSOCK_EXIT
+: <a class="el" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">psock.h</a><li>PSOCK_GENERATOR_SEND
+: <a class="el" href="a00158.html#g10d9a9201cba1a6db623284c475c6cea">psock.h</a><li>PSOCK_INIT
+: <a class="el" href="a00158.html#g26ae707402e494f3895a9f012a93ea29">psock.h</a><li>PSOCK_NEWDATA
+: <a class="el" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">psock.h</a><li>PSOCK_READBUF
+: <a class="el" href="a00158.html#gd895ab98c54d9966ff554aa873151751">psock.h</a><li>PSOCK_READTO
+: <a class="el" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">psock.h</a><li>PSOCK_SEND
+: <a class="el" href="a00158.html#g70d236d1cf34b4e21836edda60247b70">psock.h</a><li>PSOCK_SEND_STR
+: <a class="el" href="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7">psock.h</a><li>PSOCK_WAIT_THREAD
+: <a class="el" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">psock.h</a><li>PSOCK_WAIT_UNTIL
+: <a class="el" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">psock.h</a><li>PT_BEGIN
+: <a class="el" href="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc">pt.h</a><li>PT_END
+: <a class="el" href="a00142.html#g7b04a0035bef29d905496c23bae066d2">pt.h</a><li>PT_ENDED
+: <a class="el" href="a00142.html#g9ff1e8936a8a26bff54c05f8a989b93b">pt.h</a><li>PT_EXIT
+: <a class="el" href="a00142.html#g905451249dca72ce0385bf2a9ff178ee">pt.h</a><li>PT_EXITED
+: <a class="el" href="a00142.html#gcfae9053e5c107a1aed6b228c917d2ea">pt.h</a><li>PT_INIT
+: <a class="el" href="a00142.html#ge6bae7dc0225468c8a5ac269df549892">pt.h</a><li>PT_RESTART
+: <a class="el" href="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab">pt.h</a><li>PT_SCHEDULE
+: <a class="el" href="a00142.html#gfa82b860a64b67d25ab3abc21811896f">pt.h</a><li>PT_SPAWN
+: <a class="el" href="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae">pt.h</a><li>PT_THREAD
+: <a class="el" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">pt.h</a><li>PT_WAIT_THREAD
+: <a class="el" href="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c">pt.h</a><li>PT_WAIT_UNTIL
+: <a class="el" href="a00142.html#g99e43010ec61327164466aa2d902de45">pt.h</a><li>PT_WAIT_WHILE
+: <a class="el" href="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d">pt.h</a><li>PT_WAITING
+: <a class="el" href="a00142.html#g7b5319b5b65761a845fcd1500fde4cdc">pt.h</a><li>PT_YIELD
+: <a class="el" href="a00142.html#g155cba6121323726d02c00284428fed6">pt.h</a><li>PT_YIELD_UNTIL
+: <a class="el" href="a00142.html#ge3c821e3a388615528efda9d23c7d115">pt.h</a><li>PT_YIELDED
+: <a class="el" href="a00142.html#ge469332907e0617d72d5e2dd4297119d">pt.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x72.html b/third_party/uip-1.0/doc/html/globals_defs_0x72.html new file mode 100644 index 0000000..0d224b7 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x72.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li id="current"><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>RESOLV_ENTRIES
+: <a class="el" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">resolv.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x73.html b/third_party/uip-1.0/doc/html/globals_defs_0x73.html new file mode 100644 index 0000000..9a4c61f --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x73.html @@ -0,0 +1,70 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li id="current"><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SMTP_ERR_OK
+: <a class="el" href="a00161.html#g029256bc17a12e1e86781887e11c0c7d">smtp.h</a><li>SMTP_SEND
+: <a class="el" href="a00161.html#gcff75c8c930abd6ff168e85373a4eb92">smtp.h</a><li>STATE_ASKING
+: <a class="el" href="a00102.html#55735650f879293d9b7b5fda6753d147">resolv.c</a><li>STATE_DONE
+: <a class="el" href="a00102.html#876c82c946543cd70c141e41417138e0">resolv.c</a><li>STATE_ERROR
+: <a class="el" href="a00102.html#7bf0c086c7c41c12cc63324327932d91">resolv.c</a><li>STATE_NEW
+: <a class="el" href="a00102.html#bf4401501f1389872141a78b63f325a3">resolv.c</a><li>STATE_OUTPUT
+: <a class="el" href="a00164.html#g8a645f8831837320c4e0c704e871abcf">httpd.c</a><li>STATE_UNUSED
+: <a class="el" href="a00102.html#ee60b8757bacab269b0ccd7c240bf01d">resolv.c</a><li>STATE_WAITING
+: <a class="el" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">httpd.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x74.html b/third_party/uip-1.0/doc/html/globals_defs_0x74.html new file mode 100644 index 0000000..360896d --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x74.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li id="current"><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TCP_ACK
+: <a class="el" href="a00150.html#g44b3b1ab31a403ba28ec135adfcbefef">uip.c</a><li>TCP_CTL
+: <a class="el" href="a00150.html#g1425d4a0c2760adb653a04c0fb137a8d">uip.c</a><li>TCP_FIN
+: <a class="el" href="a00150.html#g88e60aa2cf23e1c65d630701db08c743">uip.c</a><li>TCP_OPT_END
+: <a class="el" href="a00150.html#g1215163245304bad20d6c5608ad75ab7">uip.c</a><li>TCP_OPT_MSS
+: <a class="el" href="a00150.html#g691688604655ea8943d15f14c60027d8">uip.c</a><li>TCP_OPT_MSS_LEN
+: <a class="el" href="a00150.html#g12f3bf821224b8e7b48a57ed3cea15cf">uip.c</a><li>TCP_OPT_NOOP
+: <a class="el" href="a00150.html#g9f1822e1d231235edacad691f3cb7bbb">uip.c</a><li>TCP_PSH
+: <a class="el" href="a00150.html#g1320fd0006a2f70138bc2d0018dda829">uip.c</a><li>TCP_RST
+: <a class="el" href="a00150.html#g5ca559def464ef20d8b1f7d32f2f160d">uip.c</a><li>TCP_SYN
+: <a class="el" href="a00150.html#g6020613f5062417d9811cfa837215c83">uip.c</a><li>TCP_URG
+: <a class="el" href="a00150.html#gc84f499cba8a02fc0e306c10b2acabf0">uip.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x75.html b/third_party/uip-1.0/doc/html/globals_defs_0x75.html new file mode 100644 index 0000000..322b62a --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x75.html @@ -0,0 +1,188 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li id="current"><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>UDPBUF
+: <a class="el" href="a00150.html#gb9435261753469accec0c9bf8a5a2686">uip.c</a><li>UIP_ABORT
+: <a class="el" href="a00150.html#ga4c4310e54f18541b09e1e251fe7b22d">uip.h</a><li>uip_abort
+: <a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip.h</a><li>uip_aborted
+: <a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip.h</a><li>UIP_ACKDATA
+: <a class="el" href="a00150.html#g6bfa488f87f68a6f7f4a3efb9e45eaf8">uip.h</a><li>uip_acked
+: <a class="el" href="a00147.html#gde6634974418e3240c212b9b16864368">uip.h</a><li>UIP_ACTIVE_OPEN
+: <a class="el" href="a00153.html#gac0de06236b02659460445de30776e00">uipopt.h</a><li>UIP_APPCALL
+: <a class="el" href="a00163.html#ge28f6cb60e86088d8886d0f804b4f37c">webclient.h</a>, <a class="el" href="a00162.html#ge28f6cb60e86088d8886d0f804b4f37c">hello-world.h</a>, <a class="el" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">smtp.h</a><li>UIP_APPDATA_SIZE
+: <a class="el" href="a00150.html#ge0825474feee11b4e038bfe71757875f">uip.h</a><li>uip_arp_ipin
+: <a class="el" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp.h</a><li>UIP_ARP_MAXAGE
+: <a class="el" href="a00153.html#g3090117ef3ff5775b77cb1960e442d07">uipopt.h</a><li>UIP_ARPTAB_SIZE
+: <a class="el" href="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d">uipopt.h</a><li>UIP_BIG_ENDIAN
+: <a class="el" href="a00153.html#g6836f92f3692f3a4429eb599db40cbae">uipopt.h</a><li>UIP_BROADCAST
+: <a class="el" href="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf">uipopt.h</a><li>UIP_BUFSIZE
+: <a class="el" href="a00153.html#g3589822ecb9d9c4145209756396b8a6b">uipopt.h</a><li>UIP_BYTE_ORDER
+: <a class="el" href="a00153.html#g285a80366aed9428f64282b8d13c918b">uipopt.h</a><li>uip_close
+: <a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip.h</a><li>UIP_CLOSE
+: <a class="el" href="a00150.html#g57e6dc1d58a36d0ed53a3dd29ccc5798">uip.h</a><li>UIP_CLOSED
+: <a class="el" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">uip.h</a><li>uip_closed
+: <a class="el" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip.h</a><li>UIP_CLOSING
+: <a class="el" href="a00150.html#g64d9affc680a445d708234e70450477b">uip.h</a><li>UIP_CONF_BUFFER_SIZE
+: <a class="el" href="a00153.html#gcacc406c3bf7d0e00412e4c946252739">uip-conf.h</a><li>UIP_CONF_BYTE_ORDER
+: <a class="el" href="a00153.html#gca1240bba5dd57f8c7c27123c84a1f6d">uip-conf.h</a><li>UIP_CONF_LOGGING
+: <a class="el" href="a00153.html#g3001114ddadc1f2ada5cc9a780e866fc">uip-conf.h</a><li>UIP_CONF_MAX_CONNECTIONS
+: <a class="el" href="a00153.html#g3f6f1f6f98431f2d33ed30a30d2ccc35">uip-conf.h</a><li>UIP_CONF_MAX_LISTENPORTS
+: <a class="el" href="a00153.html#g974c9b4bbe6b07cc1d64ac4fad278030">uip-conf.h</a><li>UIP_CONF_STATISTICS
+: <a class="el" href="a00153.html#g529648ad3b0b327a43689b0f1779ff55">uip-conf.h</a><li>UIP_CONF_UDP
+: <a class="el" href="a00153.html#g763f12007aad8cc0e483bf50f8a8d9b4">uip-conf.h</a><li>UIP_CONF_UDP_CHECKSUMS
+: <a class="el" href="a00153.html#g9dd44616d41cef74d3beb51d8be5ecec">uip-conf.h</a><li>uip_conn_active
+: <a class="el" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">uip.h</a><li>uip_connected
+: <a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip.h</a><li>UIP_CONNECTED
+: <a class="el" href="a00150.html#gf84316f469ce0726985c0702db49a989">uip.h</a><li>UIP_CONNS
+: <a class="el" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">uipopt.h</a><li>UIP_DATA
+: <a class="el" href="a00150.html#gabc40c09f49d15acb1b1a7f02bb3a807">uip.h</a><li>uip_datalen
+: <a class="el" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip.h</a><li>UIP_ESTABLISHED
+: <a class="el" href="a00150.html#gae59b70658f28ee6e998eaaab05e423f">uip.h</a><li>UIP_ETHTYPE_ARP
+: <a class="el" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">uip_arp.h</a><li>UIP_ETHTYPE_IP
+: <a class="el" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">uip_arp.h</a><li>UIP_ETHTYPE_IP6
+: <a class="el" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">uip_arp.h</a><li>UIP_FIN_WAIT_1
+: <a class="el" href="a00150.html#ga533c394b1fa0030205534befa31c525">uip.h</a><li>UIP_FIN_WAIT_2
+: <a class="el" href="a00150.html#g160128ab5d2ea3cc497b91ee4eb4ef99">uip.h</a><li>UIP_FIXEDADDR
+: <a class="el" href="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62">uipopt.h</a><li>UIP_FIXEDETHADDR
+: <a class="el" href="a00153.html#ge0f8cbeca9731af2171ffd37e79de893">uipopt.h</a><li>uip_getdraddr
+: <a class="el" href="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c">uip.h</a><li>uip_gethostaddr
+: <a class="el" href="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148">uip.h</a><li>uip_getnetmask
+: <a class="el" href="a00144.html#g5323320b7316647042016f17c4e881be">uip.h</a><li>uip_initialmss
+: <a class="el" href="a00147.html#ga87feebc7cffd4d8300e776cf64e4fec">uip.h</a><li>uip_input
+: <a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip.h</a><li>uip_ip6addr
+: <a class="el" href="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487">uip.h</a><li>uip_ipaddr
+: <a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip.h</a><li>uip_ipaddr1
+: <a class="el" href="a00148.html#g22fa0681cd463191d7a01fe85d86996f">uip.h</a><li>uip_ipaddr2
+: <a class="el" href="a00148.html#gffcd2fbe181e2aaefbf970551c302af5">uip.h</a><li>uip_ipaddr3
+: <a class="el" href="a00148.html#ge23534479ead15af8ff08ace26a47fb5">uip.h</a><li>uip_ipaddr4
+: <a class="el" href="a00148.html#g165b603ec150e26efec7be199c9c2901">uip.h</a><li>uip_ipaddr_cmp
+: <a class="el" href="a00148.html#g210e629f7252e4bc8458cbdf260b3318">uip.h</a><li>uip_ipaddr_copy
+: <a class="el" href="a00148.html#g769512993b7b27271909d6daa4748b60">uip.h</a><li>uip_ipaddr_mask
+: <a class="el" href="a00148.html#g969d7fff37a979737da045e0d538a9bd">uip.h</a><li>uip_ipaddr_maskcmp
+: <a class="el" href="a00148.html#g6b16e0bac41821c1fbe0c267071642f0">uip.h</a><li>UIP_IPH_LEN
+: <a class="el" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">uip.h</a><li>UIP_IPTCPH_LEN
+: <a class="el" href="a00150.html#g15f2617f7dc1713f9d10282125c6027b">uip.h</a><li>UIP_IPUDPH_LEN
+: <a class="el" href="a00150.html#g6f2b90c597ec23f39ec716ccec11233c">uip.h</a><li>UIP_LAST_ACK
+: <a class="el" href="a00150.html#gd135fb0cfdfb2c212f0f51865a3640e4">uip.h</a><li>UIP_LISTENPORTS
+: <a class="el" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">uipopt.h</a><li>UIP_LITTLE_ENDIAN
+: <a class="el" href="a00153.html#gb6e04358481bd2057524fb874cfa472b">uipopt.h</a><li>UIP_LLH_LEN
+: <a class="el" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">uipopt.h</a><li>UIP_LOG
+: <a class="el" href="a00150.html#g013c3a06a8b58589a77f4a3442f89c2a">uip.c</a><li>UIP_LOGGING
+: <a class="el" href="a00153.html#g21664b7441cfa37d280228d23316d609">uipopt.h</a><li>UIP_MAXRTX
+: <a class="el" href="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3">uipopt.h</a><li>UIP_MAXSYNRTX
+: <a class="el" href="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e">uipopt.h</a><li>uip_mss
+: <a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip.h</a><li>uip_newdata
+: <a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip.h</a><li>UIP_NEWDATA
+: <a class="el" href="a00150.html#g39ce739bd352d7e348e37395ce903e43">uip.h</a><li>uip_outstanding
+: <a class="el" href="a00147.html#gef14e83c046e19ab9fe9d1bbcca276c2">uip.h</a><li>uip_periodic
+: <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip.h</a><li>uip_periodic_conn
+: <a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip.h</a><li>UIP_PINGADDRCONF
+: <a class="el" href="a00153.html#g9069474ea570fd78c481aa164317dbaf">uipopt.h</a><li>uip_poll
+: <a class="el" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip.h</a><li>UIP_POLL
+: <a class="el" href="a00150.html#gf0ed78fd2be24d849cdd5af75e3b2674">uip.h</a><li>uip_poll_conn
+: <a class="el" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">uip.h</a><li>UIP_POLL_REQUEST
+: <a class="el" href="a00150.html#gd605357e29affb0d3104294c90f09905">uip.h</a><li>UIP_PROTO_ICMP
+: <a class="el" href="a00150.html#g359951eecd80541c2101f628a9da9146">uip.h</a><li>UIP_PROTO_ICMP6
+: <a class="el" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">uip.h</a><li>UIP_PROTO_TCP
+: <a class="el" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">uip.h</a><li>UIP_PROTO_UDP
+: <a class="el" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">uip.h</a><li>UIP_REASS_MAXAGE
+: <a class="el" href="a00153.html#gc3882366feda1cb759ccbfe98327a7db">uipopt.h</a><li>UIP_REASSEMBLY
+: <a class="el" href="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee">uipopt.h</a><li>UIP_RECEIVE_WINDOW
+: <a class="el" href="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad">uipopt.h</a><li>uip_restart
+: <a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip.h</a><li>UIP_REXMIT
+: <a class="el" href="a00150.html#gf848ce44c810492e7a35c2d23a429f45">uip.h</a><li>uip_rexmit
+: <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip.h</a><li>UIP_RTO
+: <a class="el" href="a00153.html#g15de27b044603284f68db05a378235a7">uipopt.h</a><li>uip_setdraddr
+: <a class="el" href="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80">uip.h</a><li>uip_setethaddr
+: <a class="el" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">uip_arp.h</a><li>uip_sethostaddr
+: <a class="el" href="a00144.html#g12b467f314489259dd718228d0827a51">uip.h</a><li>uip_setnetmask
+: <a class="el" href="a00144.html#geb79c914cf137e6d27fd7583e5a66679">uip.h</a><li>UIP_STAT
+: <a class="el" href="a00150.html#g9c0814ed491fa452ec97910c0728d410">uip.c</a><li>UIP_STATISTICS
+: <a class="el" href="a00153.html#g5726142fec34f35fb9ea19e5a45975c6">uipopt.h</a><li>uip_stop
+: <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip.h</a><li>uip_stopped
+: <a class="el" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip.h</a><li>UIP_STOPPED
+: <a class="el" href="a00150.html#gde29ec025e6754afd8cc24c954a8dec8">uip.h</a><li>UIP_SYN_RCVD
+: <a class="el" href="a00150.html#ga5e3c856b86725125d19fccc34cd9eb5">uip.h</a><li>UIP_SYN_SENT
+: <a class="el" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">uip.h</a><li>UIP_TCP_MSS
+: <a class="el" href="a00153.html#g4910467b83a639f06739c82cd362037e">uipopt.h</a><li>UIP_TCPH_LEN
+: <a class="el" href="a00150.html#g17d111686f98e4c09db73a770ac3f1a4">uip.h</a><li>UIP_TCPIP_HLEN
+: <a class="el" href="a00150.html#gee37386b2ab828787c05227eb109def7">uip.h</a><li>UIP_TIME_WAIT
+: <a class="el" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">uip.h</a><li>UIP_TIME_WAIT_TIMEOUT
+: <a class="el" href="a00153.html#g2bc3b489923793759526a3181eb667fa">uipopt.h</a><li>UIP_TIMEDOUT
+: <a class="el" href="a00150.html#g2d3ba4b14d6d2f6576f9b547800b7945">uip.h</a><li>uip_timedout
+: <a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip.h</a><li>UIP_TIMER
+: <a class="el" href="a00150.html#g041aea91aa6ef84dcc6cac3c51db9b2f">uip.h</a><li>UIP_TS_MASK
+: <a class="el" href="a00150.html#g13dfcb4a5f920e108253ade527a66cc2">uip.h</a><li>UIP_TTL
+: <a class="el" href="a00153.html#gb61381673de27f31848c5396bf0b338e">uipopt.h</a><li>UIP_UDP
+: <a class="el" href="a00153.html#gdcf372ff9748996f7c05e9822a615384">uipopt.h</a><li>UIP_UDP_APPCALL
+: <a class="el" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">resolv.h</a><li>uip_udp_bind
+: <a class="el" href="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6">uip.h</a><li>UIP_UDP_CHECKSUMS
+: <a class="el" href="a00153.html#g92f3344ec8ca46893163399c89fafed5">uipopt.h</a><li>UIP_UDP_CONNS
+: <a class="el" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">uipopt.h</a><li>uip_udp_periodic
+: <a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip.h</a><li>uip_udp_periodic_conn
+: <a class="el" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">uip.h</a><li>uip_udp_remove
+: <a class="el" href="a00147.html#gf2dbaceb10c67783a115075b5b6d66df">uip.h</a><li>uip_udp_send
+: <a class="el" href="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e">uip.h</a><li>UIP_UDP_SEND_CONN
+: <a class="el" href="a00150.html#g5c97ae587595b5444be80f5ecc1d3382">uip.h</a><li>UIP_UDP_TIMER
+: <a class="el" href="a00150.html#gf0ccbc3bb2a3ba1ebc255c7b3fcedd24">uip.h</a><li>uip_udpconnection
+: <a class="el" href="a00147.html#ga9de254b8aa308eb4aab17efdde622d2">uip.h</a><li>UIP_UDPH_LEN
+: <a class="el" href="a00150.html#gb948296aea6b6b3aa1f156799c4d479c">uip.h</a><li>UIP_URGDATA
+: <a class="el" href="a00153.html#g51c1cd531ff0afb81620151f2248cd21">uipopt.h</a><li>uip_urgdatalen
+: <a class="el" href="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537">uip.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_defs_0x77.html b/third_party/uip-1.0/doc/html/globals_defs_0x77.html new file mode 100644 index 0000000..821a8ab --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_defs_0x77.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+ <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li id="current"><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>WEBCLIENT_CONF_MAX_URLLEN
+: <a class="el" href="a00163.html#g5a5bfd7e9060903893481db90645187b">webclient.h</a><li>WEBCLIENT_STATE_CLOSE
+: <a class="el" href="a00163.html#g863c94b0ed4a76997e53a3ccd5d0b6c3">webclient.c</a><li>WEBCLIENT_STATE_DATA
+: <a class="el" href="a00163.html#g4d457c50e6f2cef57167c3804ce8bf7c">webclient.c</a><li>WEBCLIENT_STATE_HEADERS
+: <a class="el" href="a00163.html#gc4357cec23abca29d2bb885803625a6a">webclient.c</a><li>WEBCLIENT_STATE_STATUSLINE
+: <a class="el" href="a00163.html#g8714af98a550f10dc814db92b08d1b0d">webclient.c</a><li>WEBCLIENT_TIMEOUT
+: <a class="el" href="a00163.html#g31be289fd8ec3fe09b0088165d13976d">webclient.c</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_func.html b/third_party/uip-1.0/doc/html/globals_func.html new file mode 100644 index 0000000..49e7f12 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_func.html @@ -0,0 +1,136 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li id="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+<div class="tabs">
+ <ul>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hello_world_appcall()
+: <a class="el" href="a00162.html#g03070adbf8faab0f34f87c1270964306">hello-world.h</a><li>hello_world_init()
+: <a class="el" href="a00162.html#gb97849f0d3ea858eee790b69591e6427">hello-world.h</a><li>htons()
+: <a class="el" href="a00150.html#ga22b04cac8cf283ca12f028578bebc06">uip.c</a>, <a class="el" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">uip.h</a><li>httpd_appcall()
+: <a class="el" href="a00164.html#g648ddfb2dde2cc55034e4e0ea41cb6d1">httpd.c</a><li>httpd_cgi()
+: <a class="el" href="a00164.html#ge6f849e94cf6e214be8ffa9a548ecfcd">httpd-cgi.h</a><li>httpd_init()
+: <a class="el" href="a00164.html#gc364305cee969a0be43c071722b136e6">httpd.c</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>memb_alloc()
+: <a class="el" href="a00159.html#gfe5e93119035e14cc485760a176249ba">memb.c</a><li>memb_free()
+: <a class="el" href="a00159.html#gceb952d27de8125d5146ac0bee325b8f">memb.c</a><li>memb_init()
+: <a class="el" href="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910">memb.c</a></ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>psock_datalen()
+: <a class="el" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock.h</a><li>psock_newdata()
+: <a class="el" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock.h</a></ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>resolv_appcall()
+: <a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv.h</a><li>resolv_conf()
+: <a class="el" href="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba">resolv.h</a><li>resolv_found()
+: <a class="el" href="a00160.html#g6d9751d534453425c7a5a215d1d4414c">resolv.h</a><li>resolv_getserver()
+: <a class="el" href="a00160.html#g3191066cf8f76bd00b6843b77c37068f">resolv.h</a><li>resolv_init()
+: <a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv.h</a><li>resolv_lookup()
+: <a class="el" href="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec">resolv.h</a><li>resolv_query()
+: <a class="el" href="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99">resolv.h</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>shell_init()
+: <a class="el" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell.h</a><li>shell_input()
+: <a class="el" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell.h</a><li>shell_output()
+: <a class="el" href="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f">shell.h</a><li>shell_prompt()
+: <a class="el" href="a00107.html#123c95a7bb55143cabba92446ce8f513">shell.h</a><li>shell_quit()
+: <a class="el" href="a00107.html#984c4a8b65a3cb35460b073a40568c25">shell.h</a><li>shell_start()
+: <a class="el" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell.h</a><li>smtp_appcall()
+: <a class="el" href="a00161.html#gbc331f73107958428bf1c392ba19b6f4">smtp.h</a><li>smtp_configure()
+: <a class="el" href="a00161.html#g37e3103b9591790d484a450525739661">smtp.c</a><li>smtp_done()
+: <a class="el" href="a00161.html#gb1fc692a2700b7a51517724364683f67">smtp.h</a><li>smtp_init()
+: <a class="el" href="a00161.html#g64807ba7c221ddf735572d05021539f2">smtp.h</a><li>smtp_send()
+: <a class="el" href="a00161.html#gf0349a8481565e80f55a751e2b408d6d">smtp.c</a></ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>timer_expired()
+: <a class="el" href="a00156.html#g6d71dececfce707c668e6257aad5906e">timer.h</a><li>timer_reset()
+: <a class="el" href="a00156.html#gedaf3e48c2b04229b85455fb948468d6">timer.h</a><li>timer_restart()
+: <a class="el" href="a00156.html#gcb807bd57e5489b386b876af5c1f163a">timer.h</a><li>timer_set()
+: <a class="el" href="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51">timer.h</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>uip_add32()
+: <a class="el" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">uip_arch.h</a>, <a class="el" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip.c</a><li>uip_arp_arpin()
+: <a class="el" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp.h</a><li>uip_arp_init()
+: <a class="el" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp.h</a><li>uip_arp_out()
+: <a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp.h</a><li>uip_arp_timer()
+: <a class="el" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp.h</a><li>uip_chksum()
+: <a class="el" href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_arch.h</a>, <a class="el" href="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907">uip.h</a><li>uip_connect()
+: <a class="el" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">uip.c</a>, <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip.h</a><li>uip_init()
+: <a class="el" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip.c</a>, <a class="el" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip.h</a><li>uip_ipchksum()
+: <a class="el" href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_arch.h</a>, <a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip.h</a><li>uip_listen()
+: <a class="el" href="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip.c</a>, <a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip.h</a><li>uip_log()
+: <a class="el" href="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7">uipopt.h</a><li>uip_neighbor_add()
+: <a class="el" href="a00131.html#88460bea09a462d0e22511cb567eee14">uip-neighbor.c</a>, <a class="el" href="a00132.html#88460bea09a462d0e22511cb567eee14">uip-neighbor.h</a><li>uip_neighbor_init()
+: <a class="el" href="a00131.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip-neighbor.c</a>, <a class="el" href="a00132.html#1273664aba3e6a2a46e87dcb1a5f19ad">uip-neighbor.h</a><li>uip_neighbor_lookup()
+: <a class="el" href="a00131.html#692d80636342d564422ccd9296ad568d">uip-neighbor.c</a>, <a class="el" href="a00132.html#692d80636342d564422ccd9296ad568d">uip-neighbor.h</a><li>uip_neighbor_periodic()
+: <a class="el" href="a00131.html#890e822616a6839dfbf51dcb591b8e99">uip-neighbor.c</a>, <a class="el" href="a00132.html#890e822616a6839dfbf51dcb591b8e99">uip-neighbor.h</a><li>uip_neighbor_update()
+: <a class="el" href="a00131.html#1d5ce7047650f3ecee0814dbc8714099">uip-neighbor.c</a>, <a class="el" href="a00132.html#1d5ce7047650f3ecee0814dbc8714099">uip-neighbor.h</a><li>uip_process()
+: <a class="el" href="a00150.html#g266263ac78a1361a2b1d15741d3b0675">uip.h</a><li>uip_send()
+: <a class="el" href="a00150.html#g04b053a623aac7cd4195157d470661b3">uip.c</a>, <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip.h</a><li>uip_setipid()
+: <a class="el" href="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68">uip.c</a>, <a class="el" href="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68">uip.h</a><li>uip_split_output()
+: <a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip-split.h</a><li>uip_tcpchksum()
+: <a class="el" href="a00151.html#g85b65e38aa74eba18979156f97a94a87">uip_arch.h</a>, <a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip.h</a><li>uip_udp_new()
+: <a class="el" href="a00150.html#g79c4110211247df3fb30b8cf1c4c02af">uip.c</a>, <a class="el" href="a00147.html#g79c4110211247df3fb30b8cf1c4c02af">uip.h</a><li>uip_udpchksum()
+: <a class="el" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip.h</a><li>uip_unlisten()
+: <a class="el" href="a00150.html#gaa585784b0914cac1d37f07f85457008">uip.c</a>, <a class="el" href="a00147.html#gaa585784b0914cac1d37f07f85457008">uip.h</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>webclient_aborted()
+: <a class="el" href="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7">webclient.h</a><li>webclient_appcall()
+: <a class="el" href="a00163.html#g9e6d2864f390a4ba1ac60dc65e2b9815">webclient.h</a><li>webclient_close()
+: <a class="el" href="a00163.html#g1d34be506a61db90dd7829117efdf8cf">webclient.h</a><li>webclient_closed()
+: <a class="el" href="a00163.html#gf8f12c820cc08da32aa62898bfc02db3">webclient.h</a><li>webclient_connected()
+: <a class="el" href="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea">webclient.h</a><li>webclient_datahandler()
+: <a class="el" href="a00163.html#gc4b119801e50cc1824498a1cdf9adc37">webclient.h</a><li>webclient_filename()
+: <a class="el" href="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f">webclient.h</a><li>webclient_get()
+: <a class="el" href="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3">webclient.h</a><li>webclient_hostname()
+: <a class="el" href="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb">webclient.h</a><li>webclient_init()
+: <a class="el" href="a00163.html#g3caacabb2fe1c71921e1a471719ccbd2">webclient.h</a><li>webclient_mimetype()
+: <a class="el" href="a00163.html#g4433d3af16ea083a81576d0f18ba57c9">webclient.h</a><li>webclient_port()
+: <a class="el" href="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3">webclient.h</a><li>webclient_timedout()
+: <a class="el" href="a00163.html#g23705efb9077187881f094fc9be13bde">webclient.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_type.html b/third_party/uip-1.0/doc/html/globals_type.html new file mode 100644 index 0000000..d5650f5 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_type.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li id="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+
+<p>
+<ul>
+<li>lc_t
+: <a class="el" href="a00155.html#g2bdc4b7b4038454a79f1b2a94a6d2a98">lc-addrlabels.h</a>, <a class="el" href="a00155.html#g3983e0c026396d5c4506779d770007ba">lc-switch.h</a><li>u16_t
+: <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">uip-conf.h</a><li>u8_t
+: <a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">uip-conf.h</a><li>uip_ip4addr_t
+: <a class="el" href="a00150.html#g20ceef9d0868d391c2f33041b02cb1f1">uip.h</a><li>uip_ip6addr_t
+: <a class="el" href="a00150.html#g9ebb4dac683163840eab9c6c41ad61f7">uip.h</a><li>uip_ipaddr_t
+: <a class="el" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip.h</a><li>uip_stats_t
+: <a class="el" href="a00153.html#g727459e5c4f777543c81ffffa3df3f0c">uip-conf.h</a><li>uip_tcp_appstate_t
+: <a class="el" href="a00163.html#gdc5aec3587b2c55b714a6c2f37b56cba">webclient.h</a>, <a class="el" href="a00153.html#g69646a81a922033c5281445a71f8ffed">smtp.h</a><li>uip_udp_appstate_t
+: <a class="el" href="a00153.html#ga92afb113e122f860392bfbd385f842e">resolv.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/globals_vars.html b/third_party/uip-1.0/doc/html/globals_vars.html new file mode 100644 index 0000000..17aaa98 --- /dev/null +++ b/third_party/uip-1.0/doc/html/globals_vars.html @@ -0,0 +1,55 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li id="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+
+<p>
+<ul>
+<li>uip_acc32
+: <a class="el" href="a00150.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip.c</a>, <a class="el" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip.h</a><li>uip_appdata
+: <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip.c</a>, <a class="el" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip.h</a><li>uip_buf
+: <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip.c</a>, <a class="el" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip.h</a><li>uip_conn
+: <a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip.c</a>, <a class="el" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip.h</a><li>uip_conns
+: <a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip.c</a>, <a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip.h</a><li>uip_draddr
+: <a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip.c</a>, <a class="el" href="a00150.html#g20df5c82f2a15a508c19e505b5d9de2b">uip.h</a><li>uip_ethaddr
+: <a class="el" href="a00152.html#g499bb98a0b4ae9a98553ede81317606d">uip_arp.h</a>, <a class="el" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip.c</a><li>uip_flags
+: <a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip.c</a>, <a class="el" href="a00150.html#gb4ef6b00924990e7a293f66715b6d1d1">uip.h</a><li>uip_hostaddr
+: <a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip.c</a>, <a class="el" href="a00150.html#g7d3673f52f5846b6961d23b150decd54">uip.h</a><li>uip_len
+: <a class="el" href="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip.c</a>, <a class="el" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip.h</a><li>uip_listenports
+: <a class="el" href="a00150.html#g236d5c7872f59c8fe7b701c7252b976e">uip.c</a><li>uip_netmask
+: <a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip.c</a>, <a class="el" href="a00150.html#g3237be0d9ec457de0177689ee23c0d5c">uip.h</a><li>uip_sappdata
+: <a class="el" href="a00150.html#ga05a3dde2048480fa3ab2a5961898d18">uip.c</a><li>uip_slen
+: <a class="el" href="a00150.html#g5b5615dc240daed20949c0fded2b4679">uip.c</a><li>uip_stat
+: <a class="el" href="a00150.html#g9ee50a40597e67fce96541ab56c3b712">uip.h</a><li>uip_udp_conn
+: <a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip.c</a>, <a class="el" href="a00150.html#g210f227119fc972e6222c9cb452e15a9">uip.h</a><li>uip_udp_conns
+: <a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip.c</a>, <a class="el" href="a00150.html#geb533744817cf6695d75293369c2248b">uip.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/hierarchy.html b/third_party/uip-1.0/doc/html/hierarchy.html new file mode 100644 index 0000000..e6abde8 --- /dev/null +++ b/third_party/uip-1.0/doc/html/hierarchy.html @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Hierarchical Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li id="current"><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<div class="tabs">
+ <ul>
+ <li><a href="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li id="current"><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="a00077.html">dhcpc_state</a>
+<li><a class="el" href="a00078.html">hello_world_state</a>
+<li><a class="el" href="a00079.html">httpd_cgi_call</a>
+<li><a class="el" href="a00080.html">httpd_state</a>
+<li><a class="el" href="a00081.html">memb_blocks</a>
+<li><a class="el" href="a00082.html">psock</a>
+<li><a class="el" href="a00083.html">psock_buf</a>
+<li><a class="el" href="a00084.html">pt</a>
+<li><a class="el" href="a00085.html">smtp_state</a>
+<li><a class="el" href="a00086.html">telnetd_state</a>
+<li><a class="el" href="a00087.html">timer</a>
+<li><a class="el" href="a00088.html">uip_conn</a>
+<li><a class="el" href="a00089.html">uip_eth_addr</a>
+<li><a class="el" href="a00090.html">uip_eth_hdr</a>
+<li><a class="el" href="a00091.html">uip_icmpip_hdr</a>
+<li><a class="el" href="a00092.html">uip_neighbor_addr</a>
+<li><a class="el" href="a00093.html">uip_stats</a>
+<li><a class="el" href="a00094.html">uip_tcpip_hdr</a>
+<li><a class="el" href="a00095.html">uip_udp_conn</a>
+<li><a class="el" href="a00096.html">uip_udpip_hdr</a>
+<li><a class="el" href="a00097.html">webclient_state</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/index.hhc b/third_party/uip-1.0/doc/html/index.hhc new file mode 100644 index 0000000..b254803 --- /dev/null +++ b/third_party/uip-1.0/doc/html/index.hhc @@ -0,0 +1,192 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML><HEAD></HEAD><BODY>
+<OBJECT type="text/site properties">
+<param name="FrameName" value="right">
+</OBJECT>
+<UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="The uIP TCP/IP stack"><param name="Local" value="main.html"><param name="ImageNumber" value="11"></OBJECT>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="File List"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/dhcpc/dhcpc.c"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/dhcpc/dhcpc.h"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/hello-world/hello-world.c"><param name="Local" value="a00100.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/hello-world/hello-world.h"><param name="Local" value="a00101.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/resolv/resolv.c"><param name="Local" value="a00102.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/resolv/resolv.h"><param name="Local" value="a00103.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/smtp/smtp.c"><param name="Local" value="a00104.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/smtp/smtp.h"><param name="Local" value="a00105.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/telnetd/shell.c"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/telnetd/shell.h"><param name="Local" value="a00107.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/telnetd/telnetd.c"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/telnetd/telnetd.h"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webclient/webclient.c"><param name="Local" value="a00110.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webclient/webclient.h"><param name="Local" value="a00111.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webserver/httpd-cgi.c"><param name="Local" value="a00112.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webserver/httpd-cgi.h"><param name="Local" value="a00113.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webserver/httpd.c"><param name="Local" value="a00114.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="apps/webserver/httpd.h"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="lib/memb.c"><param name="Local" value="a00120.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="lib/memb.h"><param name="Local" value="a00121.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/clock.h"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/lc-addrlabels.h"><param name="Local" value="a00123.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/lc-switch.h"><param name="Local" value="a00124.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/lc.h"><param name="Local" value="a00125.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/psock.c"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/psock.h"><param name="Local" value="a00127.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/pt.h"><param name="Local" value="a00128.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/timer.c"><param name="Local" value="a00129.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/timer.h"><param name="Local" value="a00130.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip-neighbor.c"><param name="Local" value="a00131.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip-neighbor.h"><param name="Local" value="a00132.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip-split.c"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip-split.h"><param name="Local" value="a00134.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip.c"><param name="Local" value="a00135.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip.h"><param name="Local" value="a00136.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip_arch.h"><param name="Local" value="a00137.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip_arp.c"><param name="Local" value="a00138.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uip_arp.h"><param name="Local" value="a00139.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip/uipopt.h"><param name="Local" value="a00140.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="unix/uip-conf.h"><param name="Local" value="a00141.html"><param name="ImageNumber" value="11"></OBJECT>
+ </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Data Structures"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="dhcpc_state"><param name="Local" value="a00077.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="hello_world_state"><param name="Local" value="a00078.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="httpd_cgi_call"><param name="Local" value="a00079.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="httpd_state"><param name="Local" value="a00080.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="memb_blocks"><param name="Local" value="a00081.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="psock"><param name="Local" value="a00082.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="psock_buf"><param name="Local" value="a00083.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="pt"><param name="Local" value="a00084.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="smtp_state"><param name="Local" value="a00085.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="telnetd_state"><param name="Local" value="a00086.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="timer"><param name="Local" value="a00087.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_conn"><param name="Local" value="a00088.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_eth_addr"><param name="Local" value="a00089.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_eth_hdr"><param name="Local" value="a00090.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_icmpip_hdr"><param name="Local" value="a00091.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_neighbor_addr"><param name="Local" value="a00092.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_stats"><param name="Local" value="a00093.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_tcpip_hdr"><param name="Local" value="a00094.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_udp_conn"><param name="Local" value="a00095.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_udpip_hdr"><param name="Local" value="a00096.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="webclient_state"><param name="Local" value="a00097.html"><param name="ImageNumber" value="11"></OBJECT>
+ </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Class Hierarchy"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="dhcpc_state"><param name="Local" value="a00077.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="hello_world_state"><param name="Local" value="a00078.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="httpd_cgi_call"><param name="Local" value="a00079.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="httpd_state"><param name="Local" value="a00080.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="memb_blocks"><param name="Local" value="a00081.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="psock"><param name="Local" value="a00082.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="psock_buf"><param name="Local" value="a00083.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="pt"><param name="Local" value="a00084.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="smtp_state"><param name="Local" value="a00085.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="telnetd_state"><param name="Local" value="a00086.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="timer"><param name="Local" value="a00087.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_conn"><param name="Local" value="a00088.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_eth_addr"><param name="Local" value="a00089.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_eth_hdr"><param name="Local" value="a00090.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_icmpip_hdr"><param name="Local" value="a00091.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_neighbor_addr"><param name="Local" value="a00092.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_stats"><param name="Local" value="a00093.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_tcpip_hdr"><param name="Local" value="a00094.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_udp_conn"><param name="Local" value="a00095.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip_udpip_hdr"><param name="Local" value="a00096.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="webclient_state"><param name="Local" value="a00097.html"><param name="ImageNumber" value="11"></OBJECT>
+ </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Data Fields"><param name="Local" value="functions.html"><param name="ImageNumber" value="11"></OBJECT>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Modules"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Protothreads"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Local continuations"><param name="Local" value="a00155.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Applications"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="DNS resolver"><param name="Local" value="a00160.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="SMTP E-mail sender"><param name="Local" value="a00161.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Hello, world"><param name="Local" value="a00162.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Web client"><param name="Local" value="a00163.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Web server"><param name="Local" value="a00164.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="The uIP TCP/IP stack"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP configuration functions"><param name="Local" value="a00144.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP initialization functions"><param name="Local" value="a00145.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP device driver functions"><param name="Local" value="a00146.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP application functions"><param name="Local" value="a00147.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP conversion functions"><param name="Local" value="a00148.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Variables used in uIP device drivers"><param name="Local" value="a00149.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP Address Resolution Protocol"><param name="Local" value="a00152.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uIP TCP throughput booster hack"><param name="Local" value="a00154.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Architecture specific uIP functions"><param name="Local" value="a00151.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Configuration options for uIP"><param name="Local" value="a00153.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Timer library"><param name="Local" value="a00156.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Clock interface"><param name="Local" value="a00157.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Protosockets library"><param name="Local" value="a00158.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="Memory block management functions"><param name="Local" value="a00159.html"><param name="ImageNumber" value="11"></OBJECT>
+ <UL>
+ </UL>
+ </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Examples"><param name="ImageNumber" value="1"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="dhcpc.c"><param name="Local" value="a00048.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="dhcpc.h"><param name="Local" value="a00049.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="example-mainloop-with-arp.c"><param name="Local" value="a00042.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="example-mainloop-without-arp.c"><param name="Local" value="a00043.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="hello-world.c"><param name="Local" value="a00036.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="hello-world.h"><param name="Local" value="a00037.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="resolv.c"><param name="Local" value="a00046.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="resolv.h"><param name="Local" value="a00047.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="smtp.c"><param name="Local" value="a00038.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="smtp.h"><param name="Local" value="a00039.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="telnetd.c"><param name="Local" value="a00044.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="telnetd.h"><param name="Local" value="a00045.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip-code-style.c"><param name="Local" value="a00051.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="uip-conf.h"><param name="Local" value="a00050.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="webclient.c"><param name="Local" value="a00040.html"><param name="ImageNumber" value="11"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Name" value="webclient.h"><param name="Local" value="a00041.html"><param name="ImageNumber" value="11"></OBJECT>
+ </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Globals"><param name="Local" value="globals.html"><param name="ImageNumber" value="11"></OBJECT>
+</UL>
diff --git a/third_party/uip-1.0/doc/html/index.hhk b/third_party/uip-1.0/doc/html/index.hhk new file mode 100644 index 0000000..7e49662 --- /dev/null +++ b/third_party/uip-1.0/doc/html/index.hhk @@ -0,0 +1,450 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML><HEAD></HEAD><BODY>
+<OBJECT type="text/site properties">
+<param name="FrameName" value="right">
+</OBJECT>
+<UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html"><param name="Name" value="Architecture specific uIP functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g6832e4d2d046536b6472f7ac92340f68"><param name="Name" value="uip_add32"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907"><param name="Name" value="uip_chksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9"><param name="Name" value="uip_ipchksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g85b65e38aa74eba18979156f97a94a87"><param name="Name" value="uip_tcpchksum"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00157.html"><param name="Name" value="Clock interface"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00157.html#g78ab77b57cf2e00089f0a3a22508524c"><param name="Name" value="clock_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff"><param name="Name" value="clock_time"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00157.html#g78ab77b57cf2e00089f0a3a22508524c"><param name="Name" value="clock_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00157.html#ge5b7160f2e653725ba5e2024c3cb7bff"><param name="Name" value="clock_time"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html"><param name="Name" value="Configuration options for uIP"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g77570ac4fcab86864fa1916e55676da2"><param name="Name" value="u16_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e"><param name="Name" value="u8_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gac0de06236b02659460445de30776e00"><param name="Name" value="UIP_ACTIVE_OPEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g3090117ef3ff5775b77cb1960e442d07"><param name="Name" value="UIP_ARP_MAXAGE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d"><param name="Name" value="UIP_ARPTAB_SIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf"><param name="Name" value="UIP_BROADCAST"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g3589822ecb9d9c4145209756396b8a6b"><param name="Name" value="UIP_BUFSIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g285a80366aed9428f64282b8d13c918b"><param name="Name" value="UIP_BYTE_ORDER"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5"><param name="Name" value="UIP_CONNS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62"><param name="Name" value="UIP_FIXEDADDR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ge0f8cbeca9731af2171ffd37e79de893"><param name="Name" value="UIP_FIXEDETHADDR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd"><param name="Name" value="UIP_LISTENPORTS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a"><param name="Name" value="UIP_LLH_LEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7"><param name="Name" value="uip_log"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g21664b7441cfa37d280228d23316d609"><param name="Name" value="UIP_LOGGING"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3"><param name="Name" value="UIP_MAXRTX"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e"><param name="Name" value="UIP_MAXSYNRTX"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g9069474ea570fd78c481aa164317dbaf"><param name="Name" value="UIP_PINGADDRCONF"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee"><param name="Name" value="UIP_REASSEMBLY"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad"><param name="Name" value="UIP_RECEIVE_WINDOW"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g15de27b044603284f68db05a378235a7"><param name="Name" value="UIP_RTO"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g5726142fec34f35fb9ea19e5a45975c6"><param name="Name" value="UIP_STATISTICS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g727459e5c4f777543c81ffffa3df3f0c"><param name="Name" value="uip_stats_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g69646a81a922033c5281445a71f8ffed"><param name="Name" value="uip_tcp_appstate_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g4910467b83a639f06739c82cd362037e"><param name="Name" value="UIP_TCP_MSS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g2bc3b489923793759526a3181eb667fa"><param name="Name" value="UIP_TIME_WAIT_TIMEOUT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb61381673de27f31848c5396bf0b338e"><param name="Name" value="UIP_TTL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ga92afb113e122f860392bfbd385f842e"><param name="Name" value="uip_udp_appstate_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g92f3344ec8ca46893163399c89fafed5"><param name="Name" value="UIP_UDP_CHECKSUMS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g51c1cd531ff0afb81620151f2248cd21"><param name="Name" value="UIP_URGDATA"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html"><param name="Name" value="DNS resolver"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba"><param name="Name" value="resolv_conf"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g6d9751d534453425c7a5a215d1d4414c"><param name="Name" value="resolv_found"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g3191066cf8f76bd00b6843b77c37068f"><param name="Name" value="resolv_getserver"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec"><param name="Name" value="resolv_lookup"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99"><param name="Name" value="resolv_query"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#ga22b04cac8cf283ca12f028578bebc06"><param name="Name" value="htons"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#ga22b04cac8cf283ca12f028578bebc06"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#ga22b04cac8cf283ca12f028578bebc06"><param name="Name" value="uIP conversion functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g69a7a4951ff21b302267532c21ee78fc"><param name="Name" value="HTONS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5"><param name="Name" value="HTTPD_CGI_CALL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00164.html#gc364305cee969a0be43c071722b136e6"><param name="Name" value="httpd_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gf31774d02a69fd3f1c2b282454438cba"><param name="Name" value="MEMB"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gfe5e93119035e14cc485760a176249ba"><param name="Name" value="memb_alloc"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gceb952d27de8125d5146ac0bee325b8f"><param name="Name" value="memb_free"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910"><param name="Name" value="memb_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html"><param name="Name" value="Memory block management functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gf31774d02a69fd3f1c2b282454438cba"><param name="Name" value="MEMB"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gfe5e93119035e14cc485760a176249ba"><param name="Name" value="memb_alloc"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gceb952d27de8125d5146ac0bee325b8f"><param name="Name" value="memb_free"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00159.html#gd58a6c7e62ae59bf7a016ded12ca2910"><param name="Name" value="memb_init"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html"><param name="Name" value="Protosockets library"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g84901a5aa60040e96d272a69977edd22"><param name="Name" value="PSOCK_BEGIN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g5d56800f82bfc7bbf53bb4a659589812"><param name="Name" value="PSOCK_CLOSE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4"><param name="Name" value="PSOCK_CLOSE_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162"><param name="Name" value="PSOCK_DATALEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2"><param name="Name" value="PSOCK_END"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d"><param name="Name" value="PSOCK_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g10d9a9201cba1a6db623284c475c6cea"><param name="Name" value="PSOCK_GENERATOR_SEND"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g26ae707402e494f3895a9f012a93ea29"><param name="Name" value="PSOCK_INIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447"><param name="Name" value="PSOCK_NEWDATA"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gd895ab98c54d9966ff554aa873151751"><param name="Name" value="PSOCK_READBUF"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e"><param name="Name" value="PSOCK_READTO"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g70d236d1cf34b4e21836edda60247b70"><param name="Name" value="PSOCK_SEND"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7"><param name="Name" value="PSOCK_SEND_STR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392"><param name="Name" value="PSOCK_WAIT_UNTIL"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html"><param name="Name" value="Protothreads"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc"><param name="Name" value="PT_BEGIN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g7b04a0035bef29d905496c23bae066d2"><param name="Name" value="PT_END"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g905451249dca72ce0385bf2a9ff178ee"><param name="Name" value="PT_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#ge6bae7dc0225468c8a5ac269df549892"><param name="Name" value="PT_INIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab"><param name="Name" value="PT_RESTART"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gfa82b860a64b67d25ab3abc21811896f"><param name="Name" value="PT_SCHEDULE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae"><param name="Name" value="PT_SPAWN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901"><param name="Name" value="PT_THREAD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c"><param name="Name" value="PT_WAIT_THREAD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g99e43010ec61327164466aa2d902de45"><param name="Name" value="PT_WAIT_UNTIL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d"><param name="Name" value="PT_WAIT_WHILE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g155cba6121323726d02c00284428fed6"><param name="Name" value="PT_YIELD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#ge3c821e3a388615528efda9d23c7d115"><param name="Name" value="PT_YIELD_UNTIL"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g84901a5aa60040e96d272a69977edd22"><param name="Name" value="PSOCK_BEGIN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g5d56800f82bfc7bbf53bb4a659589812"><param name="Name" value="PSOCK_CLOSE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4"><param name="Name" value="PSOCK_CLOSE_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162"><param name="Name" value="PSOCK_DATALEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2"><param name="Name" value="PSOCK_END"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d"><param name="Name" value="PSOCK_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g10d9a9201cba1a6db623284c475c6cea"><param name="Name" value="PSOCK_GENERATOR_SEND"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g26ae707402e494f3895a9f012a93ea29"><param name="Name" value="PSOCK_INIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447"><param name="Name" value="PSOCK_NEWDATA"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gd895ab98c54d9966ff554aa873151751"><param name="Name" value="PSOCK_READBUF"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e"><param name="Name" value="PSOCK_READTO"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g70d236d1cf34b4e21836edda60247b70"><param name="Name" value="PSOCK_SEND"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#gb0ad55aa96dd1d200cd0fc5a99f6a4f7"><param name="Name" value="PSOCK_SEND_STR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392"><param name="Name" value="PSOCK_WAIT_UNTIL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g2ffbb9e554e08a343ae2f9de4bedfdfc"><param name="Name" value="PT_BEGIN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g7b04a0035bef29d905496c23bae066d2"><param name="Name" value="PT_END"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g905451249dca72ce0385bf2a9ff178ee"><param name="Name" value="PT_EXIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#ge6bae7dc0225468c8a5ac269df549892"><param name="Name" value="PT_INIT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gcd3ac045f0a4ae63412e3b3d8780e8ab"><param name="Name" value="PT_RESTART"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gfa82b860a64b67d25ab3abc21811896f"><param name="Name" value="PT_SCHEDULE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g9e97a0b4d5cc7764d8e19758f5da53ae"><param name="Name" value="PT_SPAWN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901"><param name="Name" value="PT_THREAD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g2f8f70c30b9ee08a103fbd69a4365c4c"><param name="Name" value="PT_WAIT_THREAD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g99e43010ec61327164466aa2d902de45"><param name="Name" value="PT_WAIT_UNTIL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#gad14bbbf092b90aa0a5a4f9169504a8d"><param name="Name" value="PT_WAIT_WHILE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#g155cba6121323726d02c00284428fed6"><param name="Name" value="PT_YIELD"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00142.html#ge3c821e3a388615528efda9d23c7d115"><param name="Name" value="PT_YIELD_UNTIL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#gdf916e0c752f5cda70d0bddb2be422ba"><param name="Name" value="resolv_conf"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g6d9751d534453425c7a5a215d1d4414c"><param name="Name" value="resolv_found"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g3191066cf8f76bd00b6843b77c37068f"><param name="Name" value="resolv_getserver"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#g66d19181ad5fe8b8f7c84d1f1d46a2ec"><param name="Name" value="resolv_lookup"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00160.html#ge4dcbbe6c641d2e3b8537b479df5fc99"><param name="Name" value="resolv_query"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html"><param name="Name" value="shell.h"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02"><param name="Name" value="shell_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#86beee1f69d05b16022dfb430470e9ce"><param name="Name" value="shell_input"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f"><param name="Name" value="shell_output"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#123c95a7bb55143cabba92446ce8f513"><param name="Name" value="shell_prompt"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#d1f18f739da7703628c3663209463a0d"><param name="Name" value="shell_start"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02"><param name="Name" value="shell_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#86beee1f69d05b16022dfb430470e9ce"><param name="Name" value="shell_input"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#f11c966b0e4f4ecaa73deb14bfb6830f"><param name="Name" value="shell_output"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#123c95a7bb55143cabba92446ce8f513"><param name="Name" value="shell_prompt"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00107.html#d1f18f739da7703628c3663209463a0d"><param name="Name" value="shell_start"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html"><param name="Name" value="SMTP E-mail sender"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#g37e3103b9591790d484a450525739661"><param name="Name" value="smtp_configure"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#gb1fc692a2700b7a51517724364683f67"><param name="Name" value="smtp_done"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#gf0349a8481565e80f55a751e2b408d6d"><param name="Name" value="smtp_send"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#g37e3103b9591790d484a450525739661"><param name="Name" value="smtp_configure"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#gb1fc692a2700b7a51517724364683f67"><param name="Name" value="smtp_done"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00161.html#gf0349a8481565e80f55a751e2b408d6d"><param name="Name" value="smtp_send"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#ga22b04cac8cf283ca12f028578bebc06"><param name="Name" value="htons"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g6832e4d2d046536b6472f7ac92340f68"><param name="Name" value="uip_add32"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g561b8eda32e059d4e7397f776268cc63"><param name="Name" value="uip_appdata"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#ge0825474feee11b4e038bfe71757875f"><param name="Name" value="UIP_APPDATA_SIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gb81e78f890dbbee50c533a9734b74fd9"><param name="Name" value="uip_buf"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907"><param name="Name" value="uip_chksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g788ffac72342f6172343d7f8099cbe1a"><param name="Name" value="uip_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad"><param name="Name" value="uip_connect"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"><param name="Name" value="uip_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9"><param name="Name" value="uip_ipchksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"><param name="Name" value="uip_len"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8"><param name="Name" value="uip_listen"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g04b053a623aac7cd4195157d470661b3"><param name="Name" value="uip_send"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68"><param name="Name" value="uip_setipid"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g9ee50a40597e67fce96541ab56c3b712"><param name="Name" value="uip_stat"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g85b65e38aa74eba18979156f97a94a87"><param name="Name" value="uip_tcpchksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g79c4110211247df3fb30b8cf1c4c02af"><param name="Name" value="uip_udp_new"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453"><param name="Name" value="uip_udpchksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gaa585784b0914cac1d37f07f85457008"><param name="Name" value="uip_unlisten"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html"><param name="Name" value="Timer library"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#g6d71dececfce707c668e6257aad5906e"><param name="Name" value="timer_expired"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#gedaf3e48c2b04229b85455fb948468d6"><param name="Name" value="timer_reset"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#gcb807bd57e5489b386b876af5c1f163a"><param name="Name" value="timer_restart"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51"><param name="Name" value="timer_set"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#g6d71dececfce707c668e6257aad5906e"><param name="Name" value="timer_expired"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#gedaf3e48c2b04229b85455fb948468d6"><param name="Name" value="timer_reset"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#gcb807bd57e5489b386b876af5c1f163a"><param name="Name" value="timer_restart"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00156.html#g6614d96fdfcd95c95ec6e6f63071ff51"><param name="Name" value="timer_set"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g77570ac4fcab86864fa1916e55676da2"><param name="Name" value="u16_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e"><param name="Name" value="u8_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html"><param name="Name" value="uIP Address Resolution Protocol"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g902c4a360134096224bc2655f623aa5f"><param name="Name" value="uip_arp_arpin"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2"><param name="Name" value="uip_arp_out"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g058a8e6025f67b021862281f1911fcef"><param name="Name" value="uip_arp_timer"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html"><param name="Name" value="uIP application functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c"><param name="Name" value="uip_abort"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4"><param name="Name" value="uip_aborted"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gde6634974418e3240c212b9b16864368"><param name="Name" value="uip_acked"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca"><param name="Name" value="uip_close"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gef6c4140c632b6a406779342cf3b6eb6"><param name="Name" value="uip_closed"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g8096b0c4b543dc408f4dd031ddae7240"><param name="Name" value="uip_connect"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gdb971fb1525d0c5002f52125b05f3218"><param name="Name" value="uip_connected"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g1a1bc437c09ddef238abab41d77c3177"><param name="Name" value="uip_datalen"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8"><param name="Name" value="uip_listen"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f"><param name="Name" value="uip_mss"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g26a14b8dae3f861830af9e7cf1e03725"><param name="Name" value="uip_newdata"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e"><param name="Name" value="uip_poll"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g81ac47cee1c18f6aa479044069db7ca3"><param name="Name" value="uip_restart"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007"><param name="Name" value="uip_rexmit"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g04b053a623aac7cd4195157d470661b3"><param name="Name" value="uip_send"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8"><param name="Name" value="uip_stop"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3"><param name="Name" value="uip_timedout"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6"><param name="Name" value="uip_udp_bind"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g79c4110211247df3fb30b8cf1c4c02af"><param name="Name" value="uip_udp_new"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gf2dbaceb10c67783a115075b5b6d66df"><param name="Name" value="uip_udp_remove"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e"><param name="Name" value="uip_udp_send"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga9de254b8aa308eb4aab17efdde622d2"><param name="Name" value="uip_udpconnection"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gaa585784b0914cac1d37f07f85457008"><param name="Name" value="uip_unlisten"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537"><param name="Name" value="uip_urgdatalen"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html"><param name="Name" value="uIP configuration functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c"><param name="Name" value="uip_getdraddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148"><param name="Name" value="uip_gethostaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g5323320b7316647042016f17c4e881be"><param name="Name" value="uip_getnetmask"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80"><param name="Name" value="uip_setdraddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1"><param name="Name" value="uip_setethaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g12b467f314489259dd718228d0827a51"><param name="Name" value="uip_sethostaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#geb79c914cf137e6d27fd7583e5a66679"><param name="Name" value="uip_setnetmask"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html"><param name="Name" value="uIP conversion functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#ga22b04cac8cf283ca12f028578bebc06"><param name="Name" value="htons"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g69a7a4951ff21b302267532c21ee78fc"><param name="Name" value="HTONS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487"><param name="Name" value="uip_ip6addr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g87f0b54ade0d159fba495089128a4932"><param name="Name" value="uip_ipaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g22fa0681cd463191d7a01fe85d86996f"><param name="Name" value="uip_ipaddr1"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#gffcd2fbe181e2aaefbf970551c302af5"><param name="Name" value="uip_ipaddr2"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#ge23534479ead15af8ff08ace26a47fb5"><param name="Name" value="uip_ipaddr3"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g165b603ec150e26efec7be199c9c2901"><param name="Name" value="uip_ipaddr4"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g210e629f7252e4bc8458cbdf260b3318"><param name="Name" value="uip_ipaddr_cmp"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g769512993b7b27271909d6daa4748b60"><param name="Name" value="uip_ipaddr_copy"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g969d7fff37a979737da045e0d538a9bd"><param name="Name" value="uip_ipaddr_mask"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g6b16e0bac41821c1fbe0c267071642f0"><param name="Name" value="uip_ipaddr_maskcmp"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html"><param name="Name" value="uIP device driver functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gb81e78f890dbbee50c533a9734b74fd9"><param name="Name" value="uip_buf"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#ga4360412ee9350fba725f98a137169fe"><param name="Name" value="uip_input"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628"><param name="Name" value="uip_periodic"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583"><param name="Name" value="uip_periodic_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa"><param name="Name" value="uip_poll_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883"><param name="Name" value="uip_udp_periodic"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b"><param name="Name" value="uip_udp_periodic_conn"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00145.html"><param name="Name" value="uIP initialization functions"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"><param name="Name" value="uip_init"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68"><param name="Name" value="uip_setipid"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00154.html"><param name="Name" value="uIP TCP throughput booster hack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c"><param name="Name" value="uip_abort"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4"><param name="Name" value="uip_aborted"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gde6634974418e3240c212b9b16864368"><param name="Name" value="uip_acked"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gac0de06236b02659460445de30776e00"><param name="Name" value="UIP_ACTIVE_OPEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g6832e4d2d046536b6472f7ac92340f68"><param name="Name" value="uip_add32"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g6832e4d2d046536b6472f7ac92340f68"><param name="Name" value="Architecture specific uIP functions"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g6832e4d2d046536b6472f7ac92340f68"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g561b8eda32e059d4e7397f776268cc63"><param name="Name" value="uip_appdata"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#ge0825474feee11b4e038bfe71757875f"><param name="Name" value="UIP_APPDATA_SIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g902c4a360134096224bc2655f623aa5f"><param name="Name" value="uip_arp_arpin"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g3090117ef3ff5775b77cb1960e442d07"><param name="Name" value="UIP_ARP_MAXAGE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2"><param name="Name" value="uip_arp_out"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00152.html#g058a8e6025f67b021862281f1911fcef"><param name="Name" value="uip_arp_timer"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb1455b27c06532a399cf06d2c1d6d08d"><param name="Name" value="UIP_ARPTAB_SIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g156dd2891a57035e4afdc4c2bc0b0ebf"><param name="Name" value="UIP_BROADCAST"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gb81e78f890dbbee50c533a9734b74fd9"><param name="Name" value="uip_buf"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gb81e78f890dbbee50c533a9734b74fd9"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gb81e78f890dbbee50c533a9734b74fd9"><param name="Name" value="uIP device driver functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g3589822ecb9d9c4145209756396b8a6b"><param name="Name" value="UIP_BUFSIZE"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g285a80366aed9428f64282b8d13c918b"><param name="Name" value="UIP_BYTE_ORDER"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907"><param name="Name" value="uip_chksum"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907"><param name="Name" value="Architecture specific uIP functions"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gb6683dd83fe1c8de9a24086d4b69e907"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca"><param name="Name" value="uip_close"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gef6c4140c632b6a406779342cf3b6eb6"><param name="Name" value="uip_closed"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g788ffac72342f6172343d7f8099cbe1a"><param name="Name" value="uip_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad"><param name="Name" value="uip_connect"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g8096b0c4b543dc408f4dd031ddae7240"><param name="Name" value="uIP application functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gdb971fb1525d0c5002f52125b05f3218"><param name="Name" value="uip_connected"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5"><param name="Name" value="UIP_CONNS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g1a1bc437c09ddef238abab41d77c3177"><param name="Name" value="uip_datalen"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g51195ea7cd5aa387a87f9d3b23905b62"><param name="Name" value="UIP_FIXEDADDR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ge0f8cbeca9731af2171ffd37e79de893"><param name="Name" value="UIP_FIXEDETHADDR"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c"><param name="Name" value="uip_getdraddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g20bc87e5c063c3f4b01547be6e5a0148"><param name="Name" value="uip_gethostaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g5323320b7316647042016f17c4e881be"><param name="Name" value="uip_getnetmask"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"><param name="Name" value="uip_init"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e"><param name="Name" value="uIP initialization functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#ga4360412ee9350fba725f98a137169fe"><param name="Name" value="uip_input"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g53fbda0e8c31d4882294c8dc3cb5f487"><param name="Name" value="uip_ip6addr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g22fa0681cd463191d7a01fe85d86996f"><param name="Name" value="uip_ipaddr1"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#gffcd2fbe181e2aaefbf970551c302af5"><param name="Name" value="uip_ipaddr2"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#ge23534479ead15af8ff08ace26a47fb5"><param name="Name" value="uip_ipaddr3"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g165b603ec150e26efec7be199c9c2901"><param name="Name" value="uip_ipaddr4"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g87f0b54ade0d159fba495089128a4932"><param name="Name" value="uip_ipaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g210e629f7252e4bc8458cbdf260b3318"><param name="Name" value="uip_ipaddr_cmp"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g769512993b7b27271909d6daa4748b60"><param name="Name" value="uip_ipaddr_copy"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g969d7fff37a979737da045e0d538a9bd"><param name="Name" value="uip_ipaddr_mask"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00148.html#g6b16e0bac41821c1fbe0c267071642f0"><param name="Name" value="uip_ipaddr_maskcmp"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9"><param name="Name" value="uip_ipchksum"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9"><param name="Name" value="Architecture specific uIP functions"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"><param name="Name" value="uip_len"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1"><param name="Name" value="Variables used in uIP device drivers"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8"><param name="Name" value="uip_listen"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gdd1ab3704ecd4900eec61a6897d32dc8"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8"><param name="Name" value="uIP application functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd"><param name="Name" value="UIP_LISTENPORTS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a"><param name="Name" value="UIP_LLH_LEN"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb58e1ceb7cb73ca2bcd73146b6c1b4e7"><param name="Name" value="uip_log"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g21664b7441cfa37d280228d23316d609"><param name="Name" value="UIP_LOGGING"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g67cf1e0d2324c93f332c1f020c0fe8b3"><param name="Name" value="UIP_MAXRTX"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g24aa5bc36939cc9a0833e1df01478a7e"><param name="Name" value="UIP_MAXSYNRTX"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f"><param name="Name" value="uip_mss"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g26a14b8dae3f861830af9e7cf1e03725"><param name="Name" value="uip_newdata"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628"><param name="Name" value="uip_periodic"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583"><param name="Name" value="uip_periodic_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g9069474ea570fd78c481aa164317dbaf"><param name="Name" value="UIP_PINGADDRCONF"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e"><param name="Name" value="uip_poll"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa"><param name="Name" value="uip_poll_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gf963fdea2b75d27ef31e92d1d01359ee"><param name="Name" value="UIP_REASSEMBLY"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g5b9dba2123705bce1ce95c3deca0bdad"><param name="Name" value="UIP_RECEIVE_WINDOW"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g81ac47cee1c18f6aa479044069db7ca3"><param name="Name" value="uip_restart"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007"><param name="Name" value="uip_rexmit"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g15de27b044603284f68db05a378235a7"><param name="Name" value="UIP_RTO"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g04b053a623aac7cd4195157d470661b3"><param name="Name" value="uip_send"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g04b053a623aac7cd4195157d470661b3"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g04b053a623aac7cd4195157d470661b3"><param name="Name" value="uIP application functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g41d37ea1e3bd24f7b51e9409aceaaa80"><param name="Name" value="uip_setdraddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1"><param name="Name" value="uip_setethaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#g12b467f314489259dd718228d0827a51"><param name="Name" value="uip_sethostaddr"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68"><param name="Name" value="uip_setipid"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g22f140b02c354dfebcc7ad481c3bcd68"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00145.html#g22f140b02c354dfebcc7ad481c3bcd68"><param name="Name" value="uIP initialization functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00144.html#geb79c914cf137e6d27fd7583e5a66679"><param name="Name" value="uip_setnetmask"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00154.html#gb4b17aaf20d630f30919b19937b966a3"><param name="Name" value="uip_split_output"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g9ee50a40597e67fce96541ab56c3b712"><param name="Name" value="uip_stat"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g5726142fec34f35fb9ea19e5a45975c6"><param name="Name" value="UIP_STATISTICS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g727459e5c4f777543c81ffffa3df3f0c"><param name="Name" value="uip_stats_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8"><param name="Name" value="uip_stop"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g69646a81a922033c5281445a71f8ffed"><param name="Name" value="uip_tcp_appstate_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g4910467b83a639f06739c82cd362037e"><param name="Name" value="UIP_TCP_MSS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g85b65e38aa74eba18979156f97a94a87"><param name="Name" value="uip_tcpchksum"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00151.html#g85b65e38aa74eba18979156f97a94a87"><param name="Name" value="Architecture specific uIP functions"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g85b65e38aa74eba18979156f97a94a87"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g2bc3b489923793759526a3181eb667fa"><param name="Name" value="UIP_TIME_WAIT_TIMEOUT"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3"><param name="Name" value="uip_timedout"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#gb61381673de27f31848c5396bf0b338e"><param name="Name" value="UIP_TTL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#ga92afb113e122f860392bfbd385f842e"><param name="Name" value="uip_udp_appstate_t"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga20812098a4663c8a9fc4ce8e95391b6"><param name="Name" value="uip_udp_bind"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g92f3344ec8ca46893163399c89fafed5"><param name="Name" value="UIP_UDP_CHECKSUMS"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g79c4110211247df3fb30b8cf1c4c02af"><param name="Name" value="uip_udp_new"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g79c4110211247df3fb30b8cf1c4c02af"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g79c4110211247df3fb30b8cf1c4c02af"><param name="Name" value="uIP application functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883"><param name="Name" value="uip_udp_periodic"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b"><param name="Name" value="uip_udp_periodic_conn"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gf2dbaceb10c67783a115075b5b6d66df"><param name="Name" value="uip_udp_remove"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ge5ab69d40013e6cf86ef1763c95d920e"><param name="Name" value="uip_udp_send"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453"><param name="Name" value="uip_udpchksum"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#ga9de254b8aa308eb4aab17efdde622d2"><param name="Name" value="uip_udpconnection"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gaa585784b0914cac1d37f07f85457008"><param name="Name" value="uip_unlisten"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00150.html#gaa585784b0914cac1d37f07f85457008"><param name="Name" value="The uIP TCP/IP stack"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#gaa585784b0914cac1d37f07f85457008"><param name="Name" value="uIP application functions"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00153.html#g51c1cd531ff0afb81620151f2248cd21"><param name="Name" value="UIP_URGDATA"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00147.html#g8411c95a4d89367ad2d9d6bde1a3d537"><param name="Name" value="uip_urgdatalen"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00149.html"><param name="Name" value="Variables used in uIP device drivers"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html"><param name="Name" value="Web client"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7"><param name="Name" value="webclient_aborted"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf8f12c820cc08da32aa62898bfc02db3"><param name="Name" value="webclient_closed"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea"><param name="Name" value="webclient_connected"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gc4b119801e50cc1824498a1cdf9adc37"><param name="Name" value="webclient_datahandler"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f"><param name="Name" value="webclient_filename"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3"><param name="Name" value="webclient_get"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb"><param name="Name" value="webclient_hostname"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g4433d3af16ea083a81576d0f18ba57c9"><param name="Name" value="webclient_mimetype"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3"><param name="Name" value="webclient_port"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g23705efb9077187881f094fc9be13bde"><param name="Name" value="webclient_timedout"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00164.html"><param name="Name" value="Web server"></OBJECT>
+ <UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00164.html#g1dbc635a2924806f42d7e3273a6a69b5"><param name="Name" value="HTTPD_CGI_CALL"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00164.html#gc364305cee969a0be43c071722b136e6"><param name="Name" value="httpd_init"></OBJECT>
+ </UL>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf11d9915ec12a8cdd9fdcbb5e8fcd5c7"><param name="Name" value="webclient_aborted"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf8f12c820cc08da32aa62898bfc02db3"><param name="Name" value="webclient_closed"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g6b942c1ef22f8cd1a726ef3364c9fbea"><param name="Name" value="webclient_connected"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gc4b119801e50cc1824498a1cdf9adc37"><param name="Name" value="webclient_datahandler"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g41e616d3fcc17e0aabfe8ab45ef0d30f"><param name="Name" value="webclient_filename"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#gf9385ef9ecc74c7d53ff2f15e62bfde3"><param name="Name" value="webclient_get"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g0e0ea5f24b77f124ba33bcbc7ede5bfb"><param name="Name" value="webclient_hostname"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g4433d3af16ea083a81576d0f18ba57c9"><param name="Name" value="webclient_mimetype"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g2a939aa4fcffabbce1dc1f784a7e0ad3"><param name="Name" value="webclient_port"></OBJECT>
+ <LI><OBJECT type="text/sitemap"><param name="Local" value="a00163.html#g23705efb9077187881f094fc9be13bde"><param name="Name" value="webclient_timedout"></OBJECT>
+</UL>
diff --git a/third_party/uip-1.0/doc/html/index.hhp b/third_party/uip-1.0/doc/html/index.hhp new file mode 100644 index 0000000..b196db1 --- /dev/null +++ b/third_party/uip-1.0/doc/html/index.hhp @@ -0,0 +1,197 @@ +[OPTIONS]
+Compatibility=1.1
+Full-text search=Yes
+Contents file=index.hhc
+Default Window=main
+Default topic=main.html
+Index file=index.hhk
+Language=0x409 English (United States)
+Binary TOC=YES
+Create CHI file=YES
+Title=uIP 1.0
+
+[WINDOWS]
+main="uIP 1.0","index.hhc","index.hhk","main.html","main.html",,,,,0x23520,,0x387e,,,,,,,,0
+
+[FILES]
+main.html
+files.html
+a00048.html
+a00049.html
+a00042.html
+a00043.html
+a00036.html
+a00037.html
+a00046.html
+a00047.html
+a00038.html
+a00039.html
+a00044.html
+a00045.html
+a00051.html
+a00050.html
+a00040.html
+a00041.html
+a00168.html
+a00169.html
+a00170.html
+a00171.html
+a00172.html
+a00173.html
+a00174.html
+a00175.html
+a00176.html
+a00177.html
+a00178.html
+a00179.html
+a00180.html
+a00181.html
+a00182.html
+a00183.html
+a00184.html
+a00185.html
+a00186.html
+a00187.html
+a00188.html
+a00189.html
+a00190.html
+a00191.html
+a00192.html
+a00193.html
+a00194.html
+a00195.html
+a00196.html
+a00197.html
+a00198.html
+a00199.html
+a00200.html
+a00201.html
+a00202.html
+a00203.html
+a00204.html
+a00205.html
+a00206.html
+a00207.html
+a00100.html
+a00101.html
+a00102.html
+a00103.html
+a00104.html
+a00105.html
+a00107.html
+a00110.html
+a00111.html
+a00112.html
+a00113.html
+a00114.html
+a00120.html
+a00121.html
+a00123.html
+a00124.html
+a00125.html
+a00127.html
+a00128.html
+a00129.html
+a00130.html
+a00131.html
+a00132.html
+a00134.html
+a00135.html
+a00136.html
+a00137.html
+a00138.html
+a00139.html
+a00140.html
+a00141.html
+annotated.html
+classes.html
+hierarchy.html
+functions.html
+functions_vars.html
+a00077.html
+a00078.html
+a00079.html
+a00080.html
+a00081.html
+a00082.html
+a00083.html
+a00084.html
+a00085.html
+a00086.html
+a00087.html
+a00088.html
+a00089.html
+a00090.html
+a00091.html
+a00092.html
+a00093.html
+a00094.html
+a00095.html
+a00096.html
+a00097.html
+a00142.html
+a00143.html
+a00144.html
+a00145.html
+a00146.html
+a00147.html
+a00148.html
+a00149.html
+a00150.html
+a00151.html
+a00152.html
+a00153.html
+a00154.html
+a00155.html
+a00156.html
+a00157.html
+a00158.html
+a00159.html
+a00160.html
+a00161.html
+a00162.html
+a00163.html
+a00164.html
+modules.html
+examples.html
+globals.html
+globals_0x61.html
+globals_0x62.html
+globals_0x64.html
+globals_0x65.html
+globals_0x66.html
+globals_0x68.html
+globals_0x69.html
+globals_0x6c.html
+globals_0x6d.html
+globals_0x6e.html
+globals_0x70.html
+globals_0x72.html
+globals_0x73.html
+globals_0x74.html
+globals_0x75.html
+globals_0x77.html
+globals_func.html
+globals_vars.html
+globals_type.html
+globals_defs.html
+globals_defs_0x61.html
+globals_defs_0x62.html
+globals_defs_0x64.html
+globals_defs_0x65.html
+globals_defs_0x66.html
+globals_defs_0x68.html
+globals_defs_0x69.html
+globals_defs_0x6c.html
+globals_defs_0x6d.html
+globals_defs_0x6e.html
+globals_defs_0x70.html
+globals_defs_0x72.html
+globals_defs_0x73.html
+globals_defs_0x74.html
+globals_defs_0x75.html
+globals_defs_0x77.html
+tabs.css
+tab_b.gif
+tab_l.gif
+tab_r.gif
diff --git a/third_party/uip-1.0/doc/html/index.html b/third_party/uip-1.0/doc/html/index.html new file mode 100644 index 0000000..4ac2a69 --- /dev/null +++ b/third_party/uip-1.0/doc/html/index.html @@ -0,0 +1,8 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0</title></head>
+<frameset cols="250,*">
+ <frame src="tree.html" name="treefrm">
+ <frame src="main.html" name="basefrm">
+</frameset>
+</html>
diff --git a/third_party/uip-1.0/doc/html/main.html b/third_party/uip-1.0/doc/html/main.html new file mode 100644 index 0000000..8fcb26b --- /dev/null +++ b/third_party/uip-1.0/doc/html/main.html @@ -0,0 +1,421 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: The uIP TCP/IP stack</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li id="current"><a href="main.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>The uIP TCP/IP stack</h1>
+<p>
+<dl compact><dt><b>Author:</b></dt><dd>Adam Dunkels, <a href="http://www.sics.se/~adam/">http://www.sics.se/~adam/</a></dd></dl>
+The uIP TCP/IP stack is intended to make it possible to communicate using the TCP/IP protocol suite even on small 8-bit micro-controllers. Despite being small and simple, uIP do not require their peers to have complex, full-size stacks, but can communicate with peers running a similarly light-weight stack. The code size is on the order of a few kilobytes and RAM usage can be configured to be as low as a few hundred bytes.<p>
+uIP can be found at the uIP web page: <a href="http://www.sics.se/~adam/uip/">http://www.sics.se/~adam/uip/</a><p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00143.html">Application programs</a> <p>
+<a class="el" href="a00153.html">Compile-time configuration options</a> <p>
+<a class="el" href="a00144.html">Run-time configuration functions</a> <p>
+<a class="el" href="a00145.html">Initialization functions</a> <p>
+<a class="el" href="a00146.html">Device driver interface</a> and <a class="el" href="a00149.html">variables used by device drivers</a> <p>
+<a class="el" href="a00147.html">uIP functions called from application programs</a> (see below) and the <a class="el" href="a00158.html">protosockets API</a> and their underlying <a class="el" href="a00142.html">protothreads</a></dd></dl>
+<h2><a class="anchor" name="uIPIntroduction">
+Introduction</a></h2>
+With the success of the Internet, the TCP/IP protocol suite has become a global standard for communication. TCP/IP is the underlying protocol used for web page transfers, e-mail transmissions, file transfers, and peer-to-peer networking over the Internet. For embedded systems, being able to run native TCP/IP makes it possible to connect the system directly to an intranet or even the global Internet. Embedded devices with full TCP/IP support will be first-class network citizens, thus being able to fully communicate with other hosts in the network.<p>
+Traditional TCP/IP implementations have required far too much resources both in terms of code size and memory usage to be useful in small 8 or 16-bit systems. Code size of a few hundred kilobytes and RAM requirements of several hundreds of kilobytes have made it impossible to fit the full TCP/IP stack into systems with a few tens of kilobytes of RAM and room for less than 100 kilobytes of code.<p>
+The uIP implementation is designed to have only the absolute minimal set of features needed for a full TCP/IP stack. It can only handle a single network interface and contains the IP, ICMP, UDP and TCP protocols. uIP is written in the C programming language.<p>
+Many other TCP/IP implementations for small systems assume that the embedded device always will communicate with a full-scale TCP/IP implementation running on a workstation-class machine. Under this assumption, it is possible to remove certain TCP/IP mechanisms that are very rarely used in such situations. Many of those mechanisms are essential, however, if the embedded device is to communicate with another equally limited device, e.g., when running distributed peer-to-peer services and protocols. uIP is designed to be RFC compliant in order to let the embedded devices to act as first-class network citizens. The uIP TCP/IP implementation that is not tailored for any specific application.<h2><a class="anchor" name="tcpip">
+TCP/IP Communication</a></h2>
+The full TCP/IP suite consists of numerous protocols, ranging from low level protocols such as ARP which translates IP addresses to MAC addresses, to application level protocols such as SMTP that is used to transfer e-mail. The uIP is mostly concerned with the TCP and IP protocols and upper layer protocols will be referred to as "the application". Lower layer protocols are often implemented in hardware or firmware and will be referred to as "the network device" that are controlled by the network device driver.<p>
+TCP provides a reliable byte stream to the upper layer protocols. It breaks the byte stream into appropriately sized segments and each segment is sent in its own IP packet. The IP packets are sent out on the network by the network device driver. If the destination is not on the physically connected network, the IP packet is forwarded onto another network by a router that is situated between the two networks. If the maximum packet size of the other network is smaller than the size of the IP packet, the packet is fragmented into smaller packets by the router. If possible, the size of the TCP segments are chosen so that fragmentation is minimized. The final recipient of the packet will have to reassemble any fragmented IP packets before they can be passed to higher layers.<p>
+The formal requirements for the protocols in the TCP/IP stack is specified in a number of RFC documents published by the Internet Engineering Task Force, IETF. Each of the protocols in the stack is defined in one more RFC documents and RFC1122 collects all requirements and updates the previous RFCs.<p>
+The RFC1122 requirements can be divided into two categories; those that deal with the host to host communication and those that deal with communication between the application and the networking stack. An example of the first kind is "A TCP MUST be able to receive a TCP option in any segment" and an example of the second kind is "There MUST be a mechanism for reporting soft TCP error conditions to the application." A TCP/IP implementation that violates requirements of the first kind may not be able to communicate with other TCP/IP implementations and may even lead to network failures. Violation of the second kind of requirements will only affect the communication within the system and will not affect host-to-host communication.<p>
+In uIP, all RFC requirements that affect host-to-host communication are implemented. However, in order to reduce code size, we have removed certain mechanisms in the interface between the application and the stack, such as the soft error reporting mechanism and dynamically configurable type-of-service bits for TCP connections. Since there are only very few applications that make use of those features they can be removed without loss of generality.<h2><a class="anchor" name="mainloop">
+Main Control Loop</a></h2>
+The uIP stack can be run either as a task in a multitasking system, or as the main program in a singletasking system. In both cases, the main control loop does two things repeatedly:<p>
+<ul>
+<li>Check if a packet has arrived from the network.</li><li>Check if a periodic timeout has occurred.</li></ul>
+<p>
+If a packet has arrived, the input handler function, <a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input()</a>, should be invoked by the main control loop. The input handler function will never block, but will return at once. When it returns, the stack or the application for which the incoming packet was intended may have produced one or more reply packets which should be sent out. If so, the network device driver should be called to send out these packets.<p>
+Periodic timeouts are used to drive TCP mechanisms that depend on timers, such as delayed acknowledgments, retransmissions and round-trip time estimations. When the main control loop infers that the periodic timer should fire, it should invoke the timer handler function <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a>. Because the TCP/IP stack may perform retransmissions when dealing with a timer event, the network device driver should called to send out the packets that may have been produced.<h2><a class="anchor" name="arch">
+Architecture Specific Functions</a></h2>
+uIP requires a few functions to be implemented specifically for the architecture on which uIP is intended to run. These functions should be hand-tuned for the particular architecture, but generic C implementations are given as part of the uIP distribution.<h3><a class="anchor" name="checksums">
+Checksum Calculation</a></h3>
+The TCP and IP protocols implement a checksum that covers the data and header portions of the TCP and IP packets. Since the calculation of this checksum is made over all bytes in every packet being sent and received it is important that the function that calculates the checksum is efficient. Most often, this means that the checksum calculation must be fine-tuned for the particular architecture on which the uIP stack runs.<p>
+While uIP includes a generic checksum function, it also leaves it open for an architecture specific implementation of the two functions <a class="el" href="a00150.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum()</a> and <a class="el" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum()</a>. The checksum calculations in those functions can be written in highly optimized assembler rather than generic C code.<h3><a class="anchor" name="longarith">
+32-bit Arithmetic</a></h3>
+The TCP protocol uses 32-bit sequence numbers, and a TCP implementation will have to do a number of 32-bit additions as part of the normal protocol processing. Since 32-bit arithmetic is not natively available on many of the platforms for which uIP is intended, uIP leaves the 32-bit additions to be implemented by the architecture specific module and does not make use of any 32-bit arithmetic in the main code base.<p>
+While uIP implements a generic 32-bit addition, there is support for having an architecture specific implementation of the <a class="el" href="a00150.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32()</a> function.<h2><a class="anchor" name="memory">
+Memory Management</a></h2>
+In the architectures for which uIP is intended, RAM is the most scarce resource. With only a few kilobytes of RAM available for the TCP/IP stack to use, mechanisms used in traditional TCP/IP cannot be directly applied.<p>
+The uIP stack does not use explicit dynamic memory allocation. Instead, it uses a single global buffer for holding packets and has a fixed table for holding connection state. The global packet buffer is large enough to contain one packet of maximum size. When a packet arrives from the network, the device driver places it in the global buffer and calls the TCP/IP stack. If the packet contains data, the TCP/IP stack will notify the corresponding application. Because the data in the buffer will be overwritten by the next incoming packet, the application will either have to act immediately on the data or copy the data into a secondary buffer for later processing. The packet buffer will not be overwritten by new packets before the application has processed the data. Packets that arrive when the application is processing the data must be queued, either by the network device or by the device driver. Most single-chip Ethernet controllers have on-chip buffers that are large enough to contain at least 4 maximum sized Ethernet frames. Devices that are handled by the processor, such as RS-232 ports, can copy incoming bytes to a separate buffer during application processing. If the buffers are full, the incoming packet is dropped. This will cause performance degradation, but only when multiple connections are running in parallel. This is because uIP advertises a very small receiver window, which means that only a single TCP segment will be in the network per connection.<p>
+In uIP, the same global packet buffer that is used for incoming packets is also used for the TCP/IP headers of outgoing data. If the application sends dynamic data, it may use the parts of the global packet buffer that are not used for headers as a temporary storage buffer. To send the data, the application passes a pointer to the data as well as the length of the data to the stack. The TCP/IP headers are written into the global buffer and once the headers have been produced, the device driver sends the headers and the application data out on the network. The data is not queued for retransmissions. Instead, the application will have to reproduce the data if a retransmission is necessary.<p>
+The total amount of memory usage for uIP depends heavily on the applications of the particular device in which the implementations are to be run. The memory configuration determines both the amount of traffic the system should be able to handle and the maximum amount of simultaneous connections. A device that will be sending large e-mails while at the same time running a web server with highly dynamic web pages and multiple simultaneous clients, will require more RAM than a simple Telnet server. It is possible to run the uIP implementation with as little as 200 bytes of RAM, but such a configuration will provide extremely low throughput and will only allow a small number of simultaneous connections.<h2><a class="anchor" name="api">
+Application Program Interface (API)</a></h2>
+The Application Program Interface (API) defines the way the application program interacts with the TCP/IP stack. The most commonly used API for TCP/IP is the BSD socket API which is used in most Unix systems and has heavily influenced the Microsoft Windows WinSock API. Because the socket API uses stop-and-wait semantics, it requires support from an underlying multitasking operating system. Since the overhead of task management, context switching and allocation of stack space for the tasks might be too high in the intended uIP target architectures, the BSD socket interface is not suitable for our purposes.<p>
+uIP provides two APIs to programmers: protosockets, a BSD socket-like API without the overhead of full multi-threading, and a "raw" event-based API that is nore low-level than protosockets but uses less memory.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00158.html">Protosockets library</a> <p>
+<a class="el" href="a00142.html">Protothreads</a></dd></dl>
+<h3><a class="anchor" name="rawapi">
+The uIP raw API</a></h3>
+The "raw" uIP API uses an event driven interface where the application is invoked in response to certain events. An application running on top of uIP is implemented as a C function that is called by uIP in response to certain events. uIP calls the application when data is received, when data has been successfully delivered to the other end of the connection, when a new connection has been set up, or when data has to be retransmitted. The application is also periodically polled for new data. The application program provides only one callback function; it is up to the application to deal with mapping different network services to different ports and connections. Because the application is able to act on incoming data and connection requests as soon as the TCP/IP stack receives the packet, low response times can be achieved even in low-end systems.<p>
+uIP is different from other TCP/IP stacks in that it requires help from the application when doing retransmissions. Other TCP/IP stacks buffer the transmitted data in memory until the data is known to be successfully delivered to the remote end of the connection. If the data needs to be retransmitted, the stack takes care of the retransmission without notifying the application. With this approach, the data has to be buffered in memory while waiting for an acknowledgment even if the application might be able to quickly regenerate the data if a retransmission has to be made.<p>
+In order to reduce memory usage, uIP utilizes the fact that the application may be able to regenerate sent data and lets the application take part in retransmissions. uIP does not keep track of packet contents after they have been sent by the device driver, and uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.<h4><a class="anchor" name="appevents">
+Application Events</a></h4>
+The application must be implemented as a C function, <a class="el" href="a00153.html#g41aa744caa46913b3b3aedb2a4e78546">UIP_APPCALL()</a>, that uIP calls whenever an event occurs. Each event has a corresponding test function that is used to distinguish between different events. The functions are implemented as C macros that will evaluate to either zero or non-zero. Note that certain events can happen in conjunction with each other (i.e., new data can arrive at the same time as data is acknowledged).<h4><a class="anchor" name="connstate">
+The Connection Pointer</a></h4>
+When the application is called by uIP, the global variable <a class="el" href="a00088.html">uip_conn</a> is set to point to the <a class="el" href="a00088.html">uip_conn</a> structure for the connection that currently is handled, and is called the "current connection". The fields in the <a class="el" href="a00088.html">uip_conn</a> structure for the current connection can be used, e.g., to distinguish between different services, or to check to which IP address the connection is connected. One typical use would be to inspect the uip_conn->lport (the local TCP port number) to decide which service the connection should provide. For instance, an application might decide to act as an HTTP server if the value of uip_conn->lport is equal to 80 and act as a TELNET server if the value is 23.<h4><a class="anchor" name="recvdata">
+Receiving Data</a></h4>
+If the uIP test function <a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata()</a> is non-zero, the remote host of the connection has sent new data. The uip_appdata pointer point to the actual data. The size of the data is obtained through the uIP function <a class="el" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen()</a>. The data is not buffered by uIP, but will be overwritten after the application function returns, and the application will therefor have to either act directly on the incoming data, or by itself copy the incoming data into a buffer for later processing.<h4><a class="anchor" name="senddata">
+Sending Data</a></h4>
+When sending data, uIP adjusts the length of the data sent by the application according to the available buffer space and the current TCP window advertised by the receiver. The amount of buffer space is dictated by the memory configuration. It is therefore possible that all data sent from the application does not arrive at the receiver, and the application may use the <a class="el" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss()</a> function to see how much data that actually will be sent by the stack.<p>
+The application sends data by using the uIP function <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a>. The <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a> function takes two arguments; a pointer to the data to be sent and the length of the data. If the application needs RAM space for producing the actual data that should be sent, the packet buffer (pointed to by the uip_appdata pointer) can be used for this purpose.<p>
+The application can send only one chunk of data at a time on a connection and it is not possible to call <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a> more than once per application invocation; only the data from the last call will be sent.<h4><a class="anchor" name="rexmitdata">
+Retransmitting Data</a></h4>
+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made. As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, the application function is called with the <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit()</a> flag set, indicating that a retransmission is required.<p>
+The application must check the <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit()</a> flag and produce the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefor, the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.<h4><a class="anchor" name="closing">
+Closing Connections</a></h4>
+The application closes the current connection by calling the <a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close()</a> during an application call. This will cause the connection to be cleanly closed. In order to indicate a fatal error, the application might want to abort the connection and does so by calling the <a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort()</a> function.<p>
+If the connection has been closed by the remote end, the test function <a class="el" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed()</a> is true. The application may then do any necessary cleanups.<h4><a class="anchor" name="errors">
+Reporting Errors</a></h4>
+There are two fatal errors that can happen to a connection, either that the connection was aborted by the remote host, or that the connection retransmitted the last data too many times and has been aborted. uIP reports this by calling the application function. The application can use the two test functions <a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted()</a> and <a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout()</a> to test for those error conditions.<h4><a class="anchor" name="polling">
+Polling</a></h4>
+When a connection is idle, uIP polls the application every time the periodic timer fires. The application uses the test function <a class="el" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll()</a> to check if it is being polled by uIP.<p>
+The polling event has two purposes. The first is to let the application periodically know that a connection is idle, which allows the application to close connections that have been idle for too long. The other purpose is to let the application send new data that has been produced. The application can only send data when invoked by uIP, and therefore the poll event is the only way to send data on an otherwise idle connection.<h4><a class="anchor" name="listen">
+Listening Ports</a></h4>
+uIP maintains a list of listening TCP ports. A new port is opened for listening with the <a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen()</a> function. When a connection request arrives on a listening port, uIP creates a new connection and calls the application function. The test function <a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected()</a> is true if the application was invoked because a new connection was created.<p>
+The application can check the lport field in the <a class="el" href="a00088.html">uip_conn</a> structure to check to which port the new connection was connected.<h4><a class="anchor" name="connect">
+Opening Connections</a></h4>
+New connections can be opened from within uIP by the function <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a>. This function allocates a new connection and sets a flag in the connection state which will open a TCP connection to the specified IP address and port the next time the connection is polled by uIP. The <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a> function returns a pointer to the <a class="el" href="a00088.html">uip_conn</a> structure for the new connection. If there are no free connection slots, the function returns NULL.<p>
+The function <a class="el" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr()</a> may be used to pack an IP address into the two element 16-bit array used by uIP to represent IP addresses.<p>
+Two examples of usage are shown below. The first example shows how to open a connection to TCP port 8080 of the remote end of the current connection. If there are not enough TCP connection slots to allow a new connection to be opened, the <a class="el" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect()</a> function returns NULL and the current connection is aborted by <a class="el" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort()</a>.<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> connect_example1_app(<span class="keywordtype">void</span>) {
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(<a class="code" href="a00088.html">uip_conn</a>->ripaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(8080)) == <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {
+ <a class="code" href="a00147.html#g88d2ccf7cd821f89d9a8df7e3948b56c">uip_abort</a>();
+ }
+}
+</pre></div><p>
+The second example shows how to open a new connection to a specific IP address. No error checks are made in this example.<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> connect_example2(<span class="keywordtype">void</span>) {
+ <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 192,168,0,1);
+ <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(ipaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(8080));
+}
+</pre></div><h2><a class="anchor" name="examples">
+Examples</a></h2>
+This section presents a number of very simple uIP applications. The uIP code distribution contains several more complex applications.<h3><a class="anchor" name="example1">
+A Very Simple Application</a></h3>
+This first example shows a very simple application. The application listens for incoming connections on port 1234. When a connection has been established, the application replies to all data sent to it by saying "ok"<p>
+The implementation of this application is shown below. The application is initialized with the function called example1_init() and the uIP callback function is called example1_app(). For this application, the configuration variable UIP_APPCALL should be defined to be example1_app().<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> example1_init(<span class="keywordtype">void</span>) {
+ <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1234));
+}
+
+<span class="keywordtype">void</span> example1_app(<span class="keywordtype">void</span>) {
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() || <a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()) {
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"ok\n"</span>, 3);
+ }
+}
+</pre></div><p>
+The initialization function calls the uIP function <a class="el" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen()</a> to register a listening port. The actual application function example1_app() uses the test functions <a class="el" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata()</a> and <a class="el" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit()</a> to determine why it was called. If the application was called because the remote end has sent it data, it responds with an "ok". If the application function was called because data was lost in the network and has to be retransmitted, it also sends an "ok". Note that this example actually shows a complete uIP application. It is not required for an application to deal with all types of events such as <a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected()</a> or <a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout()</a>.<h3><a class="anchor" name="example2">
+A More Advanced Application</a></h3>
+This second example is slightly more advanced than the previous one, and shows how the application state field in the <a class="el" href="a00088.html">uip_conn</a> structure is used.<p>
+This application is similar to the first application in that it listens to a port for incoming connections and responds to data sent to it with a single "ok". The big difference is that this application prints out a welcoming "Welcome!" message when the connection has been established.<p>
+This seemingly small change of operation makes a big difference in how the application is implemented. The reason for the increase in complexity is that if data should be lost in the network, the application must know what data to retransmit. If the "Welcome!" message was lost, the application must retransmit the welcome and if one of the "ok" messages is lost, the application must send a new "ok".<p>
+The application knows that as long as the "Welcome!" message has not been acknowledged by the remote host, it might have been dropped in the network. But once the remote host has sent an acknowledgment back, the application can be sure that the welcome has been received and knows that any lost data must be an "ok" message. Thus the application can be in either of two states: either in the WELCOME-SENT state where the "Welcome!" has been sent but not acknowledged, or in the WELCOME-ACKED state where the "Welcome!" has been acknowledged.<p>
+When a remote host connects to the application, the application sends the "Welcome!" message and sets it's state to WELCOME-SENT. When the welcome message is acknowledged, the application moves to the WELCOME-ACKED state. If the application receives any new data from the remote host, it responds by sending an "ok" back.<p>
+If the application is requested to retransmit the last message, it looks at in which state the application is. If the application is in the WELCOME-SENT state, it sends a "Welcome!" message since it knows that the previous welcome message hasn't been acknowledged. If the application is in the WELCOME-ACKED state, it knows that the last message was an "ok" message and sends such a message.<p>
+The implementation of this application is seen below. This configuration settings for the application is follows after its implementation.<p>
+<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>example2_state {
+ <span class="keyword">enum</span> {WELCOME_SENT, WELCOME_ACKED} state;
+};
+
+<span class="keywordtype">void</span> example2_init(<span class="keywordtype">void</span>) {
+ <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(2345));
+}
+
+<span class="keywordtype">void</span> example2_app(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example2_state *s;
+
+ s = (<span class="keyword">struct </span>example2_state *)<a class="code" href="a00088.html">uip_conn</a>->appstate;
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+ s->state = WELCOME_SENT;
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"Welcome!\n"</span>, 9);
+ <span class="keywordflow">return</span>;
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>() && s->state == WELCOME_SENT) {
+ s->state = WELCOME_ACKED;
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"ok\n"</span>, 3);
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()) {
+ <span class="keywordflow">switch</span>(s->state) {
+ <span class="keywordflow">case</span> WELCOME_SENT:
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"Welcome!\n"</span>, 9);
+ <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> WELCOME_ACKED:
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"ok\n"</span>, 3);
+ <span class="keywordflow">break</span>;
+ }
+ }
+}
+</pre></div><p>
+The configuration for the application:<p>
+<div class="fragment"><pre class="fragment"><span class="preprocessor">#define UIP_APPCALL example2_app</span>
+<span class="preprocessor">#define UIP_APPSTATE_SIZE sizeof(struct example2_state)</span>
+</pre></div><h3><a class="anchor" name="example3">
+Differentiating Between Applications</a></h3>
+If the system should run multiple applications, one technique to differentiate between them is to use the TCP port number of either the remote end or the local end of the connection. The example below shows how the two examples above can be combined into one application.<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> example3_init(<span class="keywordtype">void</span>) {
+ example1_init();
+ example2_init();
+}
+
+<span class="keywordtype">void</span> example3_app(<span class="keywordtype">void</span>) {
+ <span class="keywordflow">switch</span>(<a class="code" href="a00088.html">uip_conn</a>->lport) {
+ <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(1234):
+ example1_app();
+ <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(2345):
+ example2_app();
+ <span class="keywordflow">break</span>;
+ }
+}
+</pre></div><h3><a class="anchor" name="example4">
+Utilizing TCP Flow Control</a></h3>
+This example shows a simple application that connects to a host, sends an HTTP request for a file and downloads it to a slow device such a disk drive. This shows how to use the flow control functions of uIP.<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> example4_init(<span class="keywordtype">void</span>) {
+ <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> ipaddr[2];
+ <a class="code" href="a00148.html#g87f0b54ade0d159fba495089128a4932">uip_ipaddr</a>(ipaddr, 192,168,0,1);
+ <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(ipaddr, <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+}
+
+<span class="keywordtype">void</span> example4_app(<span class="keywordtype">void</span>) {
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>() || <a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>()) {
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(<span class="stringliteral">"GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n"</span>,
+ 48);
+ <span class="keywordflow">return</span>;
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+ device_enqueue(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00147.html#g1a1bc437c09ddef238abab41d77c3177">uip_datalen</a>());
+ <span class="keywordflow">if</span>(device_queue_full()) {
+ <a class="code" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop</a>();
+ }
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>() && <a class="code" href="a00147.html#g64a238a5c02640a7a4aef004163aeb47">uip_stopped</a>()) {
+ <span class="keywordflow">if</span>(!device_queue_full()) {
+ <a class="code" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip_restart</a>();
+ }
+ }
+}
+</pre></div><p>
+When the connection has been established, an HTTP request is sent to the server. Since this is the only data that is sent, the application knows that if it needs to retransmit any data, it is that request that should be retransmitted. It is therefore possible to combine these two events as is done in the example.<p>
+When the application receives new data from the remote host, it sends this data to the device by using the function device_enqueue(). It is important to note that this example assumes that this function copies the data into its own buffers. The data in the uip_appdata buffer will be overwritten by the next incoming packet.<p>
+If the device's queue is full, the application stops the data from the remote host by calling the uIP function <a class="el" href="a00147.html#g0a8bb9d6d0f1f56852ccfccbbad6c5d8">uip_stop()</a>. The application can then be sure that it will not receive any new data until <a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip_restart()</a> is called. The application polling event is used to check if the device's queue is no longer full and if so, the data flow is restarted with <a class="el" href="a00147.html#g81ac47cee1c18f6aa479044069db7ca3">uip_restart()</a>.<h3><a class="anchor" name="example5">
+A Simple Web Server</a></h3>
+This example shows a very simple file server application that listens to two ports and uses the port number to determine which file to send. If the files are properly formatted, this simple application can be used as a web server with static pages. The implementation follows.<p>
+<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>example5_state {
+ <span class="keywordtype">char</span> *dataptr;
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dataleft;
+};
+
+<span class="keywordtype">void</span> example5_init(<span class="keywordtype">void</span>) {
+ <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80));
+ <a class="code" href="a00147.html#gdd1ab3704ecd4900eec61a6897d32dc8">uip_listen</a>(<a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(81));
+}
+
+<span class="keywordtype">void</span> example5_app(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example5_state *s;
+ s = (<span class="keyword">struct </span>example5_state)<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>->appstate;
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+ <span class="keywordflow">switch</span>(<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a>) {
+ <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(80):
+ s->dataptr = data_port_80;
+ s->dataleft = datalen_port_80;
+ <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(81):
+ s->dataptr = data_port_81;
+ s->dataleft = datalen_port_81;
+ <span class="keywordflow">break</span>;
+ }
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(s->dataptr, s->dataleft);
+ <span class="keywordflow">return</span>;
+ }
+
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+ <span class="keywordflow">if</span>(s->dataleft < <a class="code" href="a00147.html#gb5fecbc62edd128012cea0f47b57ab9f">uip_mss</a>()) {
+ <a class="code" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>();
+ <span class="keywordflow">return</span>;
+ }
+ s->dataptr += <a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>;
+ s->dataleft -= <a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>;
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(s->dataptr, s->dataleft);
+ }
+}
+</pre></div><p>
+The application state consists of a pointer to the data that should be sent and the size of the data that is left to send. When a remote host connects to the application, the local port number is used to determine which file to send. The first chunk of data is sent using <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a>. uIP makes sure that no more than MSS bytes of data is actually sent, even though s->dataleft may be larger than the MSS.<p>
+The application is driven by incoming acknowledgments. When data has been acknowledged, new data can be sent. If there is no more data to send, the connection is closed using <a class="el" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close()</a>.<h3><a class="anchor" name="example6">
+Structured Application Program Design</a></h3>
+When writing larger programs using uIP it is useful to be able to utilize the uIP API in a structured way. The following example provides a structured design that has showed itself to be useful for writing larger protocol implementations than the previous examples showed here. The program is divided into an uIP event handler function that calls seven application handler functions that process new data, act on acknowledged data, send new data, deal with connection establishment or closure events and handle errors. The functions are called newdata(), acked(), senddata(), connected(), closed(), aborted(), and timedout(), and needs to be written specifically for the protocol that is being implemented.<p>
+The uIP event handler function is shown below.<p>
+<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> example6_app(<span class="keywordtype">void</span>) {
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted</a>()) {
+ aborted();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout</a>()) {
+ timedout();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gef6c4140c632b6a406779342cf3b6eb6">uip_closed</a>()) {
+ closed();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>()) {
+ connected();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>()) {
+ acked();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>()) {
+ newdata();
+ }
+ <span class="keywordflow">if</span>(<a class="code" href="a00147.html#ga8933ad15a2e2947dae4a5cff50e6007">uip_rexmit</a>() ||
+ <a class="code" href="a00147.html#g26a14b8dae3f861830af9e7cf1e03725">uip_newdata</a>() ||
+ <a class="code" href="a00147.html#gde6634974418e3240c212b9b16864368">uip_acked</a>() ||
+ <a class="code" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected</a>() ||
+ <a class="code" href="a00147.html#g58bb90796c1cdad3aac2ecf44d87b20e">uip_poll</a>()) {
+ senddata();
+ }
+}
+</pre></div><p>
+The function starts with dealing with any error conditions that might have happened by checking if <a class="el" href="a00147.html#gfbd5fc486dfdf6bf6fc9db52b1f418c4">uip_aborted()</a> or <a class="el" href="a00147.html#g7b2ac4b18bd2ac3912fe67b3b17158c3">uip_timedout()</a> are true. If so, the appropriate error function is called. Also, if the connection has been closed, the closed() function is called to the it deal with the event.<p>
+Next, the function checks if the connection has just been established by checking if <a class="el" href="a00147.html#gdb971fb1525d0c5002f52125b05f3218">uip_connected()</a> is true. The connected() function is called and is supposed to do whatever needs to be done when the connection is established, such as intializing the application state for the connection. Since it may be the case that data should be sent out, the senddata() function is called to deal with the outgoing data.<p>
+The following very simple application serves as an example of how the application handler functions might look. This application simply waits for any data to arrive on the connection, and responds to the data by sending out the message "Hello world!". To illustrate how to develop an application state machine, this message is sent in two parts, first the "Hello" part and then the "world!" part.<p>
+<div class="fragment"><pre class="fragment"><span class="preprocessor">#define STATE_WAITING 0</span>
+<span class="preprocessor"></span><span class="preprocessor">#define STATE_HELLO 1</span>
+<span class="preprocessor"></span><span class="preprocessor">#define STATE_WORLD 2</span>
+<span class="preprocessor"></span>
+<span class="keyword">struct </span>example6_state {
+ <a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> state;
+ <span class="keywordtype">char</span> *textptr;
+ <span class="keywordtype">int</span> textlen;
+};
+
+<span class="keyword">static</span> <span class="keywordtype">void</span> aborted(<span class="keywordtype">void</span>) {}
+<span class="keyword">static</span> <span class="keywordtype">void</span> timedout(<span class="keywordtype">void</span>) {}
+<span class="keyword">static</span> <span class="keywordtype">void</span> closed(<span class="keywordtype">void</span>) {}
+
+<span class="keyword">static</span> <span class="keywordtype">void</span> connected(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example6_state *s = (<span class="keyword">struct </span>example6_state *)<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>;
+
+ s->state = <a class="code" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">STATE_WAITING</a>;
+ s->textlen = 0;
+}
+
+<span class="keyword">static</span> <span class="keywordtype">void</span> newdata(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example6_state *s = (<span class="keyword">struct </span>example6_state *)<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>;
+
+ <span class="keywordflow">if</span>(s->state == <a class="code" href="a00164.html#g7d7920c1e51cc4eef80206ebd6fee3f4">STATE_WAITING</a>) {
+ s->state = STATE_HELLO;
+ s->textptr = <span class="stringliteral">"Hello "</span>;
+ s->textlen = 6;
+ }
+}
+
+<span class="keyword">static</span> <span class="keywordtype">void</span> acked(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example6_state *s = (<span class="keyword">struct </span>example6_state *)<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>;
+
+ s->textlen -= <a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>;
+ s->textptr += <a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#0ef3ae2764714bf90620075c374c262e">len</a>;
+ <span class="keywordflow">if</span>(s->textlen == 0) {
+ <span class="keywordflow">switch</span>(s->state) {
+ <span class="keywordflow">case</span> STATE_HELLO:
+ s->state = STATE_WORLD;
+ s->textptr = <span class="stringliteral">"world!\n"</span>;
+ s->textlen = 7;
+ <span class="keywordflow">break</span>;
+ <span class="keywordflow">case</span> STATE_WORLD:
+ <a class="code" href="a00147.html#g61db1dcb7c760e4dd5d60bf4e5576dca">uip_close</a>();
+ <span class="keywordflow">break</span>;
+ }
+ }
+}
+
+<span class="keyword">static</span> <span class="keywordtype">void</span> senddata(<span class="keywordtype">void</span>) {
+ <span class="keyword">struct </span>example6_state *s = (<span class="keyword">struct </span>example6_state *)<a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a>-><a class="code" href="a00088.html#97f9e1fda815bfb8b1f4577c355ade20">appstate</a>;
+
+ <span class="keywordflow">if</span>(s->textlen > 0) {
+ <a class="code" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send</a>(s->textptr, s->textlen);
+ }
+}
+</pre></div><p>
+The application state consists of a "state" variable, a "textptr" pointer to a text message and the "textlen" length of the text message. The "state" variable can be either "STATE_WAITING", meaning that the application is waiting for data to arrive from the network, "STATE_HELLO", in which the application is sending the "Hello" part of the message, or "STATE_WORLD", in which the application is sending the "world!" message.<p>
+The application does not handle errors or connection closing events, and therefore the aborted(), timedout() and closed() functions are implemented as empty functions.<p>
+The connected() function will be called when a connection has been established, and in this case sets the "state" variable to be "STATE_WAITING" and the "textlen" variable to be zero, indicating that there is no message to be sent out.<p>
+When new data arrives from the network, the newdata() function will be called by the event handler function. The newdata() function will check if the connection is in the "STATE_WAITING" state, and if so switches to the "STATE_HELLO" state and registers a 6 byte long "Hello " message with the connection. This message will later be sent out by the senddata() function.<p>
+The acked() function is called whenever data that previously was sent has been acknowleged by the receiving host. This acked() function first reduces the amount of data that is left to send, by subtracting the length of the previously sent data (obtained from "uip_conn->len") from the "textlen" variable, and also adjusts the "textptr" pointer accordingly. It then checks if the "textlen" variable now is zero, which indicates that all data now has been successfully received, and if so changes application state. If the application was in the "STATE_HELLO" state, it switches state to "STATE_WORLD" and sets up a 7 byte "world!\n" message to be sent. If the application was in the "STATE_WORLD" state, it closes the connection.<p>
+Finally, the senddata() function takes care of actually sending the data that is to be sent. It is called by the event handler function when new data has been received, when data has been acknowledged, when a new connection has been established, when the connection is polled because of inactivity, or when a retransmission should be made. The purpose of the senddata() function is to optionally format the data that is to be sent, and to call the <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a> function to actually send out the data. In this particular example, the function simply calls <a class="el" href="a00147.html#g04b053a623aac7cd4195157d470661b3">uip_send()</a> with the appropriate arguments if data is to be sent, after checking if data should be sent out or not as indicated by the "textlen" variable.<p>
+It is important to note that the senddata() function never should affect the application state; this should only be done in the acked() and newdata() functions.<h2><a class="anchor" name="protoimpl">
+Protocol Implementations</a></h2>
+The protocols in the TCP/IP protocol suite are designed in a layered fashion where each protocol performs a specific function and the interactions between the protocol layers are strictly defined. While the layered approach is a good way to design protocols, it is not always the best way to implement them. In uIP, the protocol implementations are tightly coupled in order to save code space.<p>
+This section gives detailed information on the specific protocol implementations in uIP.<h3><a class="anchor" name="ip">
+IP --- Internet Protocol</a></h3>
+When incoming packets are processed by uIP, the IP layer is the first protocol that examines the packet. The IP layer does a few simple checks such as if the destination IP address of the incoming packet matches any of the local IP address and verifies the IP header checksum. Since there are no IP options that are strictly required and because they are very uncommon, any IP options in received packets are dropped.<h4><a class="anchor" name="ipreass">
+IP Fragment Reassembly</a></h4>
+IP fragment reassembly is implemented using a separate buffer that holds the packet to be reassembled. An incoming fragment is copied into the right place in the buffer and a bit map is used to keep track of which fragments have been received. Because the first byte of an IP fragment is aligned on an 8-byte boundary, the bit map requires a small amount of memory. When all fragments have been reassembled, the resulting IP packet is passed to the transport layer. If all fragments have not been received within a specified time frame, the packet is dropped.<p>
+The current implementation only has a single buffer for holding packets to be reassembled, and therefore does not support simultaneous reassembly of more than one packet. Since fragmented packets are uncommon, this ought to be a reasonable decision. Extending the implementation to support multiple buffers would be straightforward, however.<h4><a class="anchor" name="ipbroadcast">
+Broadcasts and Multicasts</a></h4>
+IP has the ability to broadcast and multicast packets on the local network. Such packets are addressed to special broadcast and multicast addresses. Broadcast is used heavily in many UDP based protocols such as the Microsoft Windows file-sharing SMB protocol. Multicast is primarily used in protocols used for multimedia distribution such as RTP. TCP is a point-to-point protocol and does not use broadcast or multicast packets. uIP current supports broadcast packets as well as sending multicast packets. Joining multicast groups (IGMP) and receiving non-local multicast packets is not currently supported.<h3><a class="anchor" name="icmp">
+ICMP --- Internet Control Message Protocol</a></h3>
+The ICMP protocol is used for reporting soft error conditions and for querying host parameters. Its main use is, however, the echo mechanism which is used by the "ping" program.<p>
+The ICMP implementation in uIP is very simple as itis restricted to only implement ICMP echo messages. Replies to echo messages are constructed by simply swapping the source and destination IP addresses of incoming echo requests and rewriting the ICMP header with the Echo-Reply message type. The ICMP checksum is adjusted using standard techniques (see RFC1624).<p>
+Since only the ICMP echo message is implemented, there is no support for Path MTU discovery or ICMP redirect messages. Neither of these is strictly required for interoperability; they are performance enhancement mechanisms.<h3><a class="anchor" name="tcp">
+TCP --- Transmission Control Protocol</a></h3>
+The TCP implementation in uIP is driven by incoming packets and timer events. Incoming packets are parsed by TCP and if the packet contains data that is to be delivered to the application, the application is invoked by the means of the application function call. If the incoming packet acknowledges previously sent data, the connection state is updated and the application is informed, allowing it to send out new data.<h4><a class="anchor" name="listeb">
+Listening Connections</a></h4>
+TCP allows a connection to listen for incoming connection requests. In uIP, a listening connection is identified by the 16-bit port number and incoming connection requests are checked against the list of listening connections. This list of listening connections is dynamic and can be altered by the applications in the system.<h4><a class="anchor" name="slidingwindow">
+Sliding Window</a></h4>
+Most TCP implementations use a sliding window mechanism for sending data. Multiple data segments are sent in succession without waiting for an acknowledgment for each segment.<p>
+The sliding window algorithm uses a lot of 32-bit operations and because 32-bit arithmetic is fairly expensive on most 8-bit CPUs, uIP does not implement it. Also, uIP does not buffer sent packets and a sliding window implementation that does not buffer sent packets will have to be supported by a complex application layer. Instead, uIP allows only a single TCP segment per connection to be unacknowledged at any given time.<p>
+It is important to note that even though most TCP implementations use the sliding window algorithm, it is not required by the TCP specifications. Removing the sliding window mechanism does not affect interoperability in any way.<h4><a class="anchor" name="rttest">
+Round-Trip Time Estimation</a></h4>
+TCP continuously estimates the current Round-Trip Time (RTT) of every active connection in order to find a suitable value for the retransmission time-out.<p>
+The RTT estimation in uIP is implemented using TCP's periodic timer. Each time the periodic timer fires, it increments a counter for each connection that has unacknowledged data in the network. When an acknowledgment is received, the current value of the counter is used as a sample of the RTT. The sample is used together with Van Jacobson's standard TCP RTT estimation function to calculate an estimate of the RTT. Karn's algorithm is used to ensure that retransmissions do not skew the estimates.<h4><a class="anchor" name="rexmit">
+Retransmissions</a></h4>
+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made.<p>
+As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.<h4><a class="anchor" name="flowcontrol">
+Flow Control</a></h4>
+The purpose of TCP's flow control mechanisms is to allow communication between hosts with wildly varying memory dimensions. In each TCP segment, the sender of the segment indicates its available buffer space. A TCP sender must not send more data than the buffer space indicated by the receiver.<p>
+In uIP, the application cannot send more data than the receiving host can buffer. And application cannot send more data than the amount of bytes it is allowed to send by the receiving host. If the remote host cannot accept any data at all, the stack initiates the zero window probing mechanism.<h4><a class="anchor" name="congestioncontrol">
+Congestion Control</a></h4>
+The congestion control mechanisms limit the number of simultaneous TCP segments in the network. The algorithms used for congestion control are designed to be simple to implement and require only a few lines of code.<p>
+Since uIP only handles one in-flight TCP segment per connection, the amount of simultaneous segments cannot be further limited, thus the congestion control mechanisms are not needed.<h4><a class="anchor" name="urgdata">
+Urgent Data</a></h4>
+TCP's urgent data mechanism provides an application-to-application notification mechanism, which can be used by an application to mark parts of the data stream as being more urgent than the normal stream. It is up to the receiving application to interpret the meaning of the urgent data.<p>
+In many TCP implementations, including the BSD implementation, the urgent data feature increases the complexity of the implementation because it requires an asynchronous notification mechanism in an otherwise synchronous API. As uIP already use an asynchronous event based API, the implementation of the urgent data feature does not lead to increased complexity.<h2><a class="anchor" name="performance">
+Performance</a></h2>
+In TCP/IP implementations for high-end systems, processing time is dominated by the checksum calculation loop, the operation of copying packet data and context switching. Operating systems for high-end systems often have multiple protection domains for protecting kernel data from user processes and user processes from each other. Because the TCP/IP stack is run in the kernel, data has to be copied between the kernel space and the address space of the user processes and a context switch has to be performed once the data has been copied. Performance can be enhanced by combining the copy operation with the checksum calculation. Because high-end systems usually have numerous active connections, packet demultiplexing is also an expensive operation.<p>
+A small embedded device does not have the necessary processing power to have multiple protection domains and the power to run a multitasking operating system. Therefore there is no need to copy data between the TCP/IP stack and the application program. With an event based API there is no context switch between the TCP/IP stack and the applications.<p>
+In such limited systems, the TCP/IP processing overhead is dominated by the copying of packet data from the network device to host memory, and checksum calculation. Apart from the checksum calculation and copying, the TCP processing done for an incoming packet involves only updating a few counters and flags before handing the data over to the application. Thus an estimate of the CPU overhead of our TCP/IP implementations can be obtained by calculating the amount of CPU cycles needed for the checksum calculation and copying of a maximum sized packet.<h3><a class="anchor" name="delack">
+The Impact of Delayed Acknowledgments</a></h3>
+Most TCP receivers implement the delayed acknowledgment algorithm for reducing the number of pure acknowledgment packets sent. A TCP receiver using this algorithm will only send acknowledgments for every other received segment. If no segment is received within a specific time-frame, an acknowledgment is sent. The time-frame can be as high as 500 ms but typically is 200 ms.<p>
+A TCP sender such as uIP that only handles a single outstanding TCP segment will interact poorly with the delayed acknowledgment algorithm. Because the receiver only receives a single segment at a time, it will wait as much as 500 ms before an acknowledgment is sent. This means that the maximum possible throughput is severely limited by the 500 ms idle time.<p>
+Thus the maximum throughput equation when sending data from uIP will be $p = s / (t + t_d)$ where $s$ is the segment size and $t_d$ is the delayed acknowledgment timeout, which typically is between 200 and 500 ms. With a segment size of 1000 bytes, a round-trip time of 40 ms and a delayed acknowledgment timeout of 200 ms, the maximum throughput will be 4166 bytes per second. With the delayed acknowledgment algorithm disabled at the receiver, the maximum throughput would be 25000 bytes per second.<p>
+It should be noted, however, that since small systems running uIP are not very likely to have large amounts of data to send, the delayed acknowledgmen t throughput degradation of uIP need not be very severe. Small amounts of data sent by such a system will not span more than a single TCP segment, and would therefore not be affected by the throughput degradation anyway.<p>
+The maximum throughput when uIP acts as a receiver is not affected by the delayed acknowledgment throughput degradation. <hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/modules.html b/third_party/uip-1.0/doc/html/modules.html new file mode 100644 index 0000000..419784a --- /dev/null +++ b/third_party/uip-1.0/doc/html/modules.html @@ -0,0 +1,51 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>uIP 1.0: Module Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+ <ul>
+ <li><a href="main.html"><span>Main Page</span></a></li>
+ <li id="current"><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li><a href="examples.html"><span>Examples</span></a></li>
+ </ul></div>
+<h1>uIP 1.0 Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="a00142.html">Protothreads</a>
+<ul>
+<li><a class="el" href="a00155.html">Local continuations</a>
+</ul>
+<li><a class="el" href="a00143.html">Applications</a>
+<ul>
+<li><a class="el" href="a00160.html">DNS resolver</a>
+<li><a class="el" href="a00161.html">SMTP E-mail sender</a>
+<li><a class="el" href="a00162.html">Hello, world</a>
+<li><a class="el" href="a00163.html">Web client</a>
+<li><a class="el" href="a00164.html">Web server</a>
+</ul>
+<li><a class="el" href="a00150.html">The uIP TCP/IP stack</a>
+<ul>
+<li><a class="el" href="a00144.html">uIP configuration functions</a>
+<li><a class="el" href="a00145.html">uIP initialization functions</a>
+<li><a class="el" href="a00146.html">uIP device driver functions</a>
+<li><a class="el" href="a00147.html">uIP application functions</a>
+<li><a class="el" href="a00148.html">uIP conversion functions</a>
+<li><a class="el" href="a00149.html">Variables used in uIP device drivers</a>
+<li><a class="el" href="a00152.html">uIP Address Resolution Protocol</a>
+<li><a class="el" href="a00154.html">uIP TCP throughput booster hack</a>
+<li><a class="el" href="a00151.html">Architecture specific uIP functions</a>
+</ul>
+<li><a class="el" href="a00153.html">Configuration options for uIP</a>
+<li><a class="el" href="a00156.html">Timer library</a>
+<li><a class="el" href="a00157.html">Clock interface</a>
+<li><a class="el" href="a00158.html">Protosockets library</a>
+<li><a class="el" href="a00159.html">Memory block management functions</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by
+<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>
diff --git a/third_party/uip-1.0/doc/html/tab_b.gif b/third_party/uip-1.0/doc/html/tab_b.gif Binary files differnew file mode 100644 index 0000000..0d62348 --- /dev/null +++ b/third_party/uip-1.0/doc/html/tab_b.gif diff --git a/third_party/uip-1.0/doc/html/tab_l.gif b/third_party/uip-1.0/doc/html/tab_l.gif Binary files differnew file mode 100644 index 0000000..9b1e633 --- /dev/null +++ b/third_party/uip-1.0/doc/html/tab_l.gif diff --git a/third_party/uip-1.0/doc/html/tab_r.gif b/third_party/uip-1.0/doc/html/tab_r.gif Binary files differnew file mode 100644 index 0000000..ce9dd9f --- /dev/null +++ b/third_party/uip-1.0/doc/html/tab_r.gif diff --git a/third_party/uip-1.0/doc/html/tabs.css b/third_party/uip-1.0/doc/html/tabs.css new file mode 100644 index 0000000..8442b9b --- /dev/null +++ b/third_party/uip-1.0/doc/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.nav
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}
diff --git a/third_party/uip-1.0/doc/html/tree.html b/third_party/uip-1.0/doc/html/tree.html new file mode 100644 index 0000000..cab947c --- /dev/null +++ b/third_party/uip-1.0/doc/html/tree.html @@ -0,0 +1,223 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=iso-8859-1" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <meta http-equiv="Content-Language" content="en" />
+ <link rel="stylesheet" href="doxygen.css">
+ <title>TreeView</title>
+ <style type="text/css">
+ <!--
+ .directory { font-size: 10pt; font-weight: bold; }
+ .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+ .directory p { margin: 0px; white-space: nowrap; }
+ .directory div { display: none; margin: 0px; }
+ .directory img { vertical-align: middle; }
+ -->
+ </style>
+ <script type="text/javascript">
+ <!-- // Hide script from old browsers
+
+ function toggleFolder(id, imageNode)
+ {
+ var folder = document.getElementById(id);
+ var l = imageNode.src.length;
+ if (imageNode.src.substring(l-20,l)=="ftv2folderclosed.png" ||
+ imageNode.src.substring(l-18,l)=="ftv2folderopen.png")
+ {
+ imageNode = imageNode.previousSibling;
+ l = imageNode.src.length;
+ }
+ if (folder == null)
+ {
+ }
+ else if (folder.style.display == "block")
+ {
+ if (imageNode != null)
+ {
+ imageNode.nextSibling.src = "ftv2folderclosed.png";
+ if (imageNode.src.substring(l-13,l) == "ftv2mnode.png")
+ {
+ imageNode.src = "ftv2pnode.png";
+ }
+ else if (imageNode.src.substring(l-17,l) == "ftv2mlastnode.png")
+ {
+ imageNode.src = "ftv2plastnode.png";
+ }
+ }
+ folder.style.display = "none";
+ }
+ else
+ {
+ if (imageNode != null)
+ {
+ imageNode.nextSibling.src = "ftv2folderopen.png";
+ if (imageNode.src.substring(l-13,l) == "ftv2pnode.png")
+ {
+ imageNode.src = "ftv2mnode.png";
+ }
+ else if (imageNode.src.substring(l-17,l) == "ftv2plastnode.png")
+ {
+ imageNode.src = "ftv2mlastnode.png";
+ }
+ }
+ folder.style.display = "block";
+ }
+ }
+
+ // End script hiding -->
+ </script>
+ </head>
+
+ <body>
+ <div class="directory">
+ <h3>uIP 1.0</h3>
+ <div style="display: block;">
+ <p><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="main.html" target="basefrm">The uIP TCP/IP stack</a></p>
+ <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder1', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder1', this)"/><a class="el" href="files.html" target="basefrm">File List</a></p>
+ <div id="folder1">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/dhcpc/dhcpc.c</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/dhcpc/dhcpc.h</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00100.html" target="basefrm">apps/hello-world/hello-world.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00101.html" target="basefrm">apps/hello-world/hello-world.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00102.html" target="basefrm">apps/resolv/resolv.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00103.html" target="basefrm">apps/resolv/resolv.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00104.html" target="basefrm">apps/smtp/smtp.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00105.html" target="basefrm">apps/smtp/smtp.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/telnetd/shell.c</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00107.html" target="basefrm">apps/telnetd/shell.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/telnetd/telnetd.c</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/telnetd/telnetd.h</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00110.html" target="basefrm">apps/webclient/webclient.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00111.html" target="basefrm">apps/webclient/webclient.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00112.html" target="basefrm">apps/webserver/httpd-cgi.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00113.html" target="basefrm">apps/webserver/httpd-cgi.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00114.html" target="basefrm">apps/webserver/httpd.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>apps/webserver/httpd.h</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00120.html" target="basefrm">lib/memb.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00121.html" target="basefrm">lib/memb.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>uip/clock.h</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00123.html" target="basefrm">uip/lc-addrlabels.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00124.html" target="basefrm">uip/lc-switch.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00125.html" target="basefrm">uip/lc.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>uip/psock.c</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00127.html" target="basefrm">uip/psock.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00128.html" target="basefrm">uip/pt.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00129.html" target="basefrm">uip/timer.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00130.html" target="basefrm">uip/timer.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00131.html" target="basefrm">uip/uip-neighbor.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00132.html" target="basefrm">uip/uip-neighbor.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>uip/uip-split.c</b></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00134.html" target="basefrm">uip/uip-split.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00135.html" target="basefrm">uip/uip.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00136.html" target="basefrm">uip/uip.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00137.html" target="basefrm">uip/uip_arch.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00138.html" target="basefrm">uip/uip_arp.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00139.html" target="basefrm">uip/uip_arp.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00140.html" target="basefrm">uip/uipopt.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00141.html" target="basefrm">unix/uip-conf.h</a></p>
+ </div>
+ <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder2', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder2', this)"/><a class="el" href="annotated.html" target="basefrm">Data Structures</a></p>
+ <div id="folder2">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00077.html" target="basefrm">dhcpc_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00078.html" target="basefrm">hello_world_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00079.html" target="basefrm">httpd_cgi_call</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00080.html" target="basefrm">httpd_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00081.html" target="basefrm">memb_blocks</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00082.html" target="basefrm">psock</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00083.html" target="basefrm">psock_buf</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00084.html" target="basefrm">pt</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00085.html" target="basefrm">smtp_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00086.html" target="basefrm">telnetd_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00087.html" target="basefrm">timer</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00088.html" target="basefrm">uip_conn</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00089.html" target="basefrm">uip_eth_addr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00090.html" target="basefrm">uip_eth_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00091.html" target="basefrm">uip_icmpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00092.html" target="basefrm">uip_neighbor_addr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00093.html" target="basefrm">uip_stats</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00094.html" target="basefrm">uip_tcpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00095.html" target="basefrm">uip_udp_conn</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00096.html" target="basefrm">uip_udpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00097.html" target="basefrm">webclient_state</a></p>
+ </div>
+ <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder3', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder3', this)"/><a class="el" href="hierarchy.html" target="basefrm">Class Hierarchy</a></p>
+ <div id="folder3">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00077.html" target="basefrm">dhcpc_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00078.html" target="basefrm">hello_world_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00079.html" target="basefrm">httpd_cgi_call</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00080.html" target="basefrm">httpd_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00081.html" target="basefrm">memb_blocks</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00082.html" target="basefrm">psock</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00083.html" target="basefrm">psock_buf</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00084.html" target="basefrm">pt</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00085.html" target="basefrm">smtp_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00086.html" target="basefrm">telnetd_state</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00087.html" target="basefrm">timer</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00088.html" target="basefrm">uip_conn</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00089.html" target="basefrm">uip_eth_addr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00090.html" target="basefrm">uip_eth_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00091.html" target="basefrm">uip_icmpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00092.html" target="basefrm">uip_neighbor_addr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00093.html" target="basefrm">uip_stats</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00094.html" target="basefrm">uip_tcpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00095.html" target="basefrm">uip_udp_conn</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00096.html" target="basefrm">uip_udpip_hdr</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00097.html" target="basefrm">webclient_state</a></p>
+ </div>
+ <p><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="functions.html" target="basefrm">Data Fields</a></p>
+ <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder4', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder4', this)"/><a class="el" href="modules.html" target="basefrm">Modules</a></p>
+ <div id="folder4">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder5', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder5', this)"/><a class="el" href="a00142.html" target="basefrm">Protothreads</a></p>
+ <div id="folder5">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00155.html" target="basefrm">Local continuations</a></p>
+ </div>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder6', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder6', this)"/><a class="el" href="a00143.html" target="basefrm">Applications</a></p>
+ <div id="folder6">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00160.html" target="basefrm">DNS resolver</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00161.html" target="basefrm">SMTP E-mail sender</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00162.html" target="basefrm">Hello, world</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00163.html" target="basefrm">Web client</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00164.html" target="basefrm">Web server</a></p>
+ </div>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder7', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder7', this)"/><a class="el" href="a00150.html" target="basefrm">The uIP TCP/IP stack</a></p>
+ <div id="folder7">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00144.html" target="basefrm">uIP configuration functions</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00145.html" target="basefrm">uIP initialization functions</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00146.html" target="basefrm">uIP device driver functions</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00147.html" target="basefrm">uIP application functions</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00148.html" target="basefrm">uIP conversion functions</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00149.html" target="basefrm">Variables used in uIP device drivers</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00152.html" target="basefrm">uIP Address Resolution Protocol</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00154.html" target="basefrm">uIP TCP throughput booster hack</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00151.html" target="basefrm">Architecture specific uIP functions</a></p>
+ </div>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00153.html" target="basefrm">Configuration options for uIP</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00156.html" target="basefrm">Timer library</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00157.html" target="basefrm">Clock interface</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00158.html" target="basefrm">Protosockets library</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00159.html" target="basefrm">Memory block management functions</a></p>
+ </div>
+ <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder8', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder8', this)"/><a class="el" href="examples.html" target="basefrm">Examples</a></p>
+ <div id="folder8">
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00048.html" target="basefrm">dhcpc.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00049.html" target="basefrm">dhcpc.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00042.html" target="basefrm">example-mainloop-with-arp.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00043.html" target="basefrm">example-mainloop-without-arp.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00036.html" target="basefrm">hello-world.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00037.html" target="basefrm">hello-world.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00046.html" target="basefrm">resolv.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00047.html" target="basefrm">resolv.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00038.html" target="basefrm">smtp.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00039.html" target="basefrm">smtp.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00044.html" target="basefrm">telnetd.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00045.html" target="basefrm">telnetd.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00051.html" target="basefrm">uip-code-style.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00050.html" target="basefrm">uip-conf.h</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00040.html" target="basefrm">webclient.c</a></p>
+ <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="a00041.html" target="basefrm">webclient.h</a></p>
+ </div>
+ <p><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="globals.html" target="basefrm">Globals</a></p>
+ </div>
+ </div>
+ </body>
+</html>
|
