1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3<title>uIP 1.0: DNS resolver</title> 4<link href="doxygen.css" rel="stylesheet" type="text/css"> 5<link href="tabs.css" rel="stylesheet" type="text/css"> 6</head><body> 7<!-- Generated by Doxygen 1.4.6 --> 8<div class="tabs"> 9 <ul> 10 <li><a href="main.html"><span>Main Page</span></a></li> 11 <li><a href="modules.html"><span>Modules</span></a></li> 12 <li><a href="classes.html"><span>Data Structures</span></a></li> 13 <li><a href="files.html"><span>Files</span></a></li> 14 <li><a href="examples.html"><span>Examples</span></a></li> 15 </ul></div> 16<h1>DNS resolver<br> 17<small> 18[<a class="el" href="a00143.html">Applications</a>]</small> 19</h1><hr><a name="_details"></a><h2>Detailed Description</h2> 20The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address. 21<p> 22It 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> 23When 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. 24<p> 25<table border="0" cellpadding="0" cellspacing="0"> 26<tr><td></td></tr> 27<tr><td colspan="2"><br><h2>Files</h2></td></tr> 28<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> 29 30<tr><td class="mdescLeft"> </td><td class="mdescRight">DNS resolver code header file. <br></td></tr> 31 32<p> 33<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> 34 35<tr><td class="mdescLeft"> </td><td class="mdescRight">DNS host name to IP address resolver. <br></td></tr> 36 37<p> 38<tr><td colspan="2"><br><h2>Defines</h2></td></tr> 39<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3d768e989e308144190ae1a5ddfa9726"></a><!-- doxytag: member="resolv::UIP_UDP_APPCALL" ref="g3d768e989e308144190ae1a5ddfa9726" args="" --> 40#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g3d768e989e308144190ae1a5ddfa9726">UIP_UDP_APPCALL</a> resolv_appcall</td></tr> 41 42<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g070d2ce7b6bb7e5c05602aa8c308d0c4"></a><!-- doxytag: member="resolv::NULL" ref="g070d2ce7b6bb7e5c05602aa8c308d0c4" args="" --> 43#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> (void *)0</td></tr> 44 45<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gecf13b8dc783db2202ca5c34fe117fc3"></a><!-- doxytag: member="resolv::MAX_RETRIES" ref="gecf13b8dc783db2202ca5c34fe117fc3" args="" --> 46#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gecf13b8dc783db2202ca5c34fe117fc3">MAX_RETRIES</a> 8</td></tr> 47 48<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g221d37ccde7e3fd0dd2c2eb0a6b15493"></a><!-- doxytag: member="resolv::RESOLV_ENTRIES" ref="g221d37ccde7e3fd0dd2c2eb0a6b15493" args="" --> 49#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g221d37ccde7e3fd0dd2c2eb0a6b15493">RESOLV_ENTRIES</a> 4</td></tr> 50 51<tr><td colspan="2"><br><h2>Functions</h2></td></tr> 52<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7c5359305008e9183b18d6ab75f568bf"></a><!-- doxytag: member="resolv::resolv_appcall" ref="g7c5359305008e9183b18d6ab75f568bf" args="(void)" --> 53void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#g7c5359305008e9183b18d6ab75f568bf">resolv_appcall</a> (void)</td></tr> 54 55<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> 56 57<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> 58<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> 59 60<tr><td class="mdescLeft"> </td><td class="mdescRight">Configure which DNS server to use for queries. <a href="#gdf916e0c752f5cda70d0bddb2be422ba"></a><br></td></tr> 61<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> 62 63<tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain the currently configured DNS server. <a href="#g3191066cf8f76bd00b6843b77c37068f"></a><br></td></tr> 64<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb50f78bbf36d912d69f6c1685d0b40e3"></a><!-- doxytag: member="resolv::resolv_init" ref="gb50f78bbf36d912d69f6c1685d0b40e3" args="(void)" --> 65void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gb50f78bbf36d912d69f6c1685d0b40e3">resolv_init</a> (void)</td></tr> 66 67<tr><td class="mdescLeft"> </td><td class="mdescRight">Initalize the resolver. <br></td></tr> 68<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> 69 70<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> 71<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> 72 73<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> 74</table> 75<hr><h2>Function Documentation</h2> 76<a class="anchor" name="gdf916e0c752f5cda70d0bddb2be422ba"></a><!-- doxytag: member="resolv.h::resolv_conf" ref="gdf916e0c752f5cda70d0bddb2be422ba" args="(u16_t *dnsserver)" --><p> 77<table class="mdTable" cellpadding="2" cellspacing="0"> 78 <tr> 79 <td class="mdRow"> 80 <table cellpadding="0" cellspacing="0" border="0"> 81 <tr> 82 <td class="md" nowrap valign="top">void resolv_conf </td> 83 <td class="md" valign="top">( </td> 84 <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td> 85 <td class="mdname1" valign="top" nowrap> <em>dnsserver</em> </td> 86 <td class="md" valign="top"> ) </td> 87 <td class="md" nowrap></td> 88 </tr> 89 </table> 90 </td> 91 </tr> 92</table> 93<table cellspacing="5" cellpadding="0" border="0"> 94 <tr> 95 <td> 96 97 </td> 98 <td> 99 100<p> 101Configure which DNS server to use for queries. 102<p> 103<dl compact><dt><b>Parameters:</b></dt><dd> 104 <table border="0" cellspacing="2" cellpadding="0"> 105 <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> 106 </table> 107</dl> 108<dl compact><dt><b>Examples: </b></dt><dd> 109<a class="el" href="a00046.html#a151">resolv.c</a>, and <a class="el" href="a00047.html#a158">resolv.h</a>.</dl> 110<p> 111Definition at line <a class="el" href="a00172.html#l00438">438</a> of file <a class="el" href="a00172.html">resolv.c</a>. 112<p> 113References <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> 114 </tr> 115</table> 116<a class="anchor" name="g6d9751d534453425c7a5a215d1d4414c"></a><!-- doxytag: member="resolv.h::resolv_found" ref="g6d9751d534453425c7a5a215d1d4414c" args="(char *name, u16_t *ipaddr)" --><p> 117<table class="mdTable" cellpadding="2" cellspacing="0"> 118 <tr> 119 <td class="mdRow"> 120 <table cellpadding="0" cellspacing="0" border="0"> 121 <tr> 122 <td class="md" nowrap valign="top">void resolv_found </td> 123 <td class="md" valign="top">( </td> 124 <td class="md" nowrap valign="top">char * </td> 125 <td class="mdname" nowrap> <em>name</em>, </td> 126 </tr> 127 <tr> 128 <td class="md" nowrap align="right"></td> 129 <td class="md"></td> 130 <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * </td> 131 <td class="mdname" nowrap> <em>ipaddr</em></td> 132 </tr> 133 <tr> 134 <td class="md"></td> 135 <td class="md">) </td> 136 <td class="md" colspan="2"></td> 137 </tr> 138 </table> 139 </td> 140 </tr> 141</table> 142<table cellspacing="5" cellpadding="0" border="0"> 143 <tr> 144 <td> 145 146 </td> 147 <td> 148 149<p> 150Callback function which is called when a hostname is found. 151<p> 152This 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> 153<dl compact><dt><b>Parameters:</b></dt><dd> 154 <table border="0" cellspacing="2" cellpadding="0"> 155 <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>A pointer to the name that was looked up.</td></tr> 156 <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> 157 </table> 158</dl> 159<dl compact><dt><b>Examples: </b></dt><dd> 160<a class="el" href="a00046.html#a135">resolv.c</a>, and <a class="el" href="a00047.html#a156">resolv.h</a>.</dl> </td> 161 </tr> 162</table> 163<a class="anchor" name="g3191066cf8f76bd00b6843b77c37068f"></a><!-- doxytag: member="resolv.h::resolv_getserver" ref="g3191066cf8f76bd00b6843b77c37068f" args="(void)" --><p> 164<table class="mdTable" cellpadding="2" cellspacing="0"> 165 <tr> 166 <td class="mdRow"> 167 <table cellpadding="0" cellspacing="0" border="0"> 168 <tr> 169 <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * resolv_getserver </td> 170 <td class="md" valign="top">( </td> 171 <td class="md" nowrap valign="top">void </td> 172 <td class="mdname1" valign="top" nowrap> </td> 173 <td class="md" valign="top"> ) </td> 174 <td class="md" nowrap></td> 175 </tr> 176 </table> 177 </td> 178 </tr> 179</table> 180<table cellspacing="5" cellpadding="0" border="0"> 181 <tr> 182 <td> 183 184 </td> 185 <td> 186 187<p> 188Obtain the currently configured DNS server. 189<p> 190<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> 191<dl compact><dt><b>Examples: </b></dt><dd> 192<a class="el" href="a00046.html#a149">resolv.c</a>, and <a class="el" href="a00047.html#a159">resolv.h</a>.</dl> 193<p> 194Definition at line <a class="el" href="a00172.html#l00422">422</a> of file <a class="el" href="a00172.html">resolv.c</a>. 195<p> 196References <a class="el" href="a00172.html#l00069">NULL</a>, and <a class="el" href="a00202.html#l01211">uip_udp_conn::ripaddr</a>. </td> 197 </tr> 198</table> 199<a class="anchor" name="g66d19181ad5fe8b8f7c84d1f1d46a2ec"></a><!-- doxytag: member="resolv.h::resolv_lookup" ref="g66d19181ad5fe8b8f7c84d1f1d46a2ec" args="(char *name)" --><p> 200<table class="mdTable" cellpadding="2" cellspacing="0"> 201 <tr> 202 <td class="mdRow"> 203 <table cellpadding="0" cellspacing="0" border="0"> 204 <tr> 205 <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> * resolv_lookup </td> 206 <td class="md" valign="top">( </td> 207 <td class="md" nowrap valign="top">char * </td> 208 <td class="mdname1" valign="top" nowrap> <em>name</em> </td> 209 <td class="md" valign="top"> ) </td> 210 <td class="md" nowrap></td> 211 </tr> 212 </table> 213 </td> 214 </tr> 215</table> 216<table cellspacing="5" cellpadding="0" border="0"> 217 <tr> 218 <td> 219 220 </td> 221 <td> 222 223<p> 224Look up a hostname in the array of known hostnames. 225<p> 226<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> 227<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> 228<dl compact><dt><b>Examples: </b></dt><dd> 229<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> 230<p> 231Definition at line <a class="el" href="a00172.html#l00396">396</a> of file <a class="el" href="a00172.html">resolv.c</a>. 232<p> 233References <a class="el" href="a00172.html#l00123">RESOLV_ENTRIES</a>, and <a class="el" href="a00172.html#l00111">STATE_DONE</a>. 234<p> 235Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>, and <a class="el" href="a00180.html#l00140">webclient_get()</a>. </td> 236 </tr> 237</table> 238<a class="anchor" name="ge4dcbbe6c641d2e3b8537b479df5fc99"></a><!-- doxytag: member="resolv.h::resolv_query" ref="ge4dcbbe6c641d2e3b8537b479df5fc99" args="(char *name)" --><p> 239<table class="mdTable" cellpadding="2" cellspacing="0"> 240 <tr> 241 <td class="mdRow"> 242 <table cellpadding="0" cellspacing="0" border="0"> 243 <tr> 244 <td class="md" nowrap valign="top">void resolv_query </td> 245 <td class="md" valign="top">( </td> 246 <td class="md" nowrap valign="top">char * </td> 247 <td class="mdname1" valign="top" nowrap> <em>name</em> </td> 248 <td class="md" valign="top"> ) </td> 249 <td class="md" nowrap></td> 250 </tr> 251 </table> 252 </td> 253 </tr> 254</table> 255<table cellspacing="5" cellpadding="0" border="0"> 256 <tr> 257 <td> 258 259 </td> 260 <td> 261 262<p> 263Queues a name so that a question for the name will be sent out. 264<p> 265<dl compact><dt><b>Parameters:</b></dt><dd> 266 <table border="0" cellspacing="2" cellpadding="0"> 267 <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The hostname that is to be queried. </td></tr> 268 </table> 269</dl> 270<dl compact><dt><b>Examples: </b></dt><dd> 271<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> 272<p> 273Definition at line <a class="el" href="a00172.html#l00350">350</a> of file <a class="el" href="a00172.html">resolv.c</a>. 274<p> 275References <a class="el" href="a00172.html#l00123">RESOLV_ENTRIES</a>, and <a class="el" href="a00172.html#l00108">STATE_UNUSED</a>. 276<p> 277Referenced by <a class="el" href="a00180.html#l00378">webclient_appcall()</a>. </td> 278 </tr> 279</table> 280<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by 281<a href="http://www.doxygen.org/index.html"> 282<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address> 283</body> 284</html> 285