#include "ares_private.h"
#include "lwip/arch.h"
Include dependency graph for netdb.c:
Go to the source code of this file.
Data Structures | |
struct | gethost_result |
Defines | |
#define | ENSROK 0 |
#define | array_dup(r, a, len_func) |
#define | array_free(a) |
#define | DNS_MAXDOMAIN 255 |
Functions | |
int | ares_error_to_errno (int e) |
void | callback (void *arg, int status, struct hostent *host) |
void | setnameservers (const struct in_addr *ns1, const struct in_addr *ns2) |
void | getnameservers (struct in_addr *ns1, struct in_addr *ns2) |
hostent * | gethostbynameaddr (const char *name, struct in_addr addr, struct gethost_result *r) |
hostent * | gethostbyname (const char *name) |
hostent * | gethostbyaddr (const char *addr, int len, int type) |
Variables | |
struct { | |
unsigned short errno2 | |
unsigned short ares_errno | |
} | ares_errno_trans [] |
in_addr | __nameservers [2] |
|
Value: do { \ int __i; \ for (__i = 0; (a)[__i]; __i++); \ (r) = malloc ((__i + 1) * sizeof (char *)); \ (r)[__i] = 0; \ while (__i--) { \ char *__p; \ int __l; \ __p = (a)[__i]; \ __l = len_func; \ (r)[__i] = memcpy ((char *) malloc (__l), __p, (__l)); \ } \ } while (0) Definition at line 67 of file netdb.c. Referenced by callback(). |
|
Value: Definition at line 82 of file netdb.c. Referenced by gethostbyaddr(), and gethostbyname(). |
|
Definition at line 142 of file netdb.c. Referenced by gethostbynameaddr(). |
|
|
|
Definition at line 50 of file netdb.c. References ares_errno_trans. Referenced by gethostbynameaddr().
00051 { 00052 int i; 00053 for (i = 0; i < (sizeof(ares_errno_trans) / sizeof(ares_errno_trans[0])); i++) 00054 if (ares_errno_trans[i].ares_errno == e) 00055 return ares_errno_trans[i].errno2; 00056 rtl_printf ("no such ares error"); 00057 //abort (); /* prevents warning */ 00058 return -1; 00059 } |
|
Definition at line 91 of file netdb.c. References ARES_SUCCESS, array_dup, free, hostent::h_addr_list, hostent::h_addrtype, hostent::h_aliases, hostent::h_length, hostent::h_name, status, strcasecmp, and strdup. Referenced by ares_gethostbyaddr(), ares_gethostbyname(), ares_query(), ares_search(), ares_send(), fake_hostent(), and gethostbynameaddr().
00092 { 00093 struct gethost_result *r = (struct gethost_result *) arg; 00094 00095 if (host) { 00096 if (status == ARES_SUCCESS) 00097 if (r->cname) /* we got back a cname, so retry the query with the cname */ 00098 if (strcasecmp (r->cname, host->h_name)) { 00099 free (r->cname); 00100 r->cname = strdup (host->h_name); 00101 r->status = ARES_SUCCESS; 00102 return; 00103 } 00104 00105 /* clear any old cname */ 00106 if (r->cname) { 00107 free (r->cname); 00108 r->cname = 0; 00109 } 00110 00111 /* copy alias list */ 00112 array_dup (r->host.h_aliases, host->h_aliases, strlen (__p) + 1); 00113 00114 /* copy address list */ 00115 array_dup (r->host.h_addr_list, host->h_addr_list, host->h_length); 00116 00117 /* copy tidbits */ 00118 r->host.h_name = (char *) strdup (host->h_name); 00119 r->host.h_addrtype = host->h_addrtype; 00120 r->host.h_length = host->h_length; 00121 } 00122 00123 /* get status */ 00124 r->status = status; 00125 } |
|
Definition at line 238 of file netdb.c. References AF_INET, array_free, free, gethostbynameaddr(), hostent::h_addr_list, hostent::h_aliases, hostent::h_name, gethost_result::host, and len.
00239 { 00240 static struct gethost_result r; 00241 static int init = 0; 00242 if (!init) { 00243 init = 1; 00244 memset (&r, 0, sizeof (r)); 00245 } 00246 if (len != sizeof (struct in_addr) || type != AF_INET) { 00247 errno = EINVAL; 00248 return 0; 00249 } 00250 if (r.host.h_aliases) 00251 array_free (r.host.h_aliases); 00252 if (r.host.h_addr_list) 00253 array_free (r.host.h_addr_list); 00254 if (r.host.h_name) 00255 free (r.host.h_name); 00256 return gethostbynameaddr (0, *((struct in_addr *) addr), &r); 00257 } |
Here is the call graph for this function:
|
Definition at line 219 of file netdb.c. References array_free, free, gethostbynameaddr(), hostent::h_addr_list, hostent::h_aliases, hostent::h_name, gethost_result::host, name, and in_addr::s_addr. Referenced by main().
00220 { 00221 struct in_addr addr; 00222 static struct gethost_result r; 00223 static int init = 0; 00224 if (!init) { 00225 init = 1; 00226 memset (&r, 0, sizeof (r)); 00227 } 00228 addr.s_addr = 0; 00229 if (r.host.h_aliases) 00230 array_free (r.host.h_aliases); 00231 if (r.host.h_addr_list) 00232 array_free (r.host.h_addr_list); 00233 if (r.host.h_name) 00234 free (r.host.h_name); 00235 return gethostbynameaddr (name, addr, &r); 00236 } |
Here is the call graph for this function:
|
Definition at line 145 of file netdb.c. References __nameservers, AF_INET, ares_channel, ares_destroy(), ARES_ENOTFOUND, ares_error_to_errno(), ares_fds(), ares_gethostbyaddr(), ares_gethostbyname(), ares_init_options(), ARES_OPT_SERVERS, ares_process(), ARES_SUCCESS, ares_timeout(), callback(), gethost_result::cname, DNS_MAXDOMAIN, FD_ZERO, free, gethost_result::host, name, ares_options::nservers, NULL, in_addr::s_addr, ares_options::servers, gethost_result::status, status, and strdup. Referenced by gethostbyaddr(), and gethostbyname().
00146 { 00147 char cname[DNS_MAXDOMAIN + 1]; 00148 ares_channel channel; 00149 int status, nfds, cname_loops = 0; 00150 fd_set read_fds, write_fds; 00151 struct timeval *tvp, tv; 00152 struct ares_options o; 00153 00154 if (!__nameservers[0].s_addr) { 00155 rtl_printf ("The nameservers have not been set - use the setnameservers() function\n"); 00156 errno = EINVAL; 00157 return NULL; 00158 } 00159 00160 o.servers = __nameservers; 00161 o.nservers = 1; 00162 if (__nameservers[1].s_addr) 00163 o.nservers++; 00164 00165 status = ares_init_options (&channel, &o, ARES_OPT_SERVERS); 00166 if (status != ARES_SUCCESS) { 00167 errno = ares_error_to_errno (status); 00168 return NULL; 00169 } 00170 00171 r->status = -1; 00172 if (r->cname) 00173 free (r->cname); 00174 r->cname = strdup (name); 00175 if (name) { 00176 if (strlen (name) > DNS_MAXDOMAIN) { 00177 ares_destroy (channel); 00178 errno = ENSRQUERYDOMAINTOOLONG; 00179 return NULL; 00180 } 00181 ares_gethostbyname (channel, name, AF_INET, callback, (void *) r); 00182 } else { 00183 ares_gethostbyaddr (channel, &addr, sizeof (addr), AF_INET, callback, (void *) r); 00184 } 00185 00186 /* Wait for all queries to complete. */ 00187 while (1) { 00188 FD_ZERO (&read_fds); 00189 FD_ZERO (&write_fds); 00190 nfds = ares_fds (channel, &read_fds, &write_fds); 00191 if (nfds == 0) { 00192 if (name && r->cname && r->status == ARES_SUCCESS) { 00193 if (++cname_loops > 10) { 00194 errno = ENSRCNAMELOOP; 00195 ares_destroy (channel); 00196 return NULL; 00197 } 00198 strncpy (cname, r->cname, DNS_MAXDOMAIN); 00199 cname[DNS_MAXDOMAIN] = '\0'; 00200 name = cname; 00201 ares_gethostbyname (channel, name, AF_INET, callback, (void *) r); 00202 continue; 00203 } 00204 break; 00205 } 00206 tvp = ares_timeout (channel, NULL, &tv); 00207 select (nfds, &read_fds, &write_fds, NULL, tvp); 00208 ares_process (channel, &read_fds, &write_fds); 00209 } 00210 00211 ares_destroy (channel); 00212 if (r->status != ARES_SUCCESS || r->status == -1) { 00213 errno = r->status == -1 ? ARES_ENOTFOUND : ares_error_to_errno (r->status); 00214 return NULL; 00215 } 00216 return &r->host; 00217 } |
Here is the call graph for this function:
|
Definition at line 135 of file netdb.c. References __nameservers, and in_addr::s_addr.
00136 { 00137 ns1->s_addr = __nameservers[0].s_addr; 00138 ns2->s_addr = __nameservers[1].s_addr; 00139 } |
|
Definition at line 129 of file netdb.c. References __nameservers, and in_addr::s_addr.
00130 { 00131 __nameservers[0].s_addr = ns1->s_addr; 00132 __nameservers[1].s_addr = ns2->s_addr; 00133 } |
|
Definition at line 127 of file netdb.c. Referenced by gethostbynameaddr(), getnameservers(), and setnameservers(). |
|
|
|
Referenced by ares_error_to_errno(). |
|
|