#include "ares_private.h"
Include dependency graph for ares_gethostbyaddr.c:
Go to the source code of this file.
Data Structures | |
struct | addr_query |
Defines | |
#define | htons HTONS |
#define | htonl HTONL |
Functions | |
int | sprintf (char *str, const char *format,...) |
void | next_lookup (struct addr_query *aquery) |
void | addr_callback (void *arg, int status, unsigned char *abuf, int alen) |
void | end_aquery (struct addr_query *aquery, int status, struct hostent *host) |
void | ares_gethostbyaddr (ares_channel channel, const void *addr, int addrlen, int family, ares_host_callback callback, void *arg) |
|
Definition at line 26 of file ares_gethostbyaddr.c. Referenced by dhcp_bind(), dhcp_create_request(), dhcp_handle_ack(), dhcp_handle_offer(), inet_aton(), init_by_defaults(), main(), and sock_udpclient(). |
|
|
Definition at line 101 of file ares_gethostbyaddr.c. References AF_INET, ARES_EDESTRUCTION, ares_parse_ptr_reply(), ARES_SUCCESS, end_aquery(), next_lookup(), NULL, and status. Referenced by next_lookup().
00102 { 00103 struct addr_query *aquery = (struct addr_query *) arg; 00104 struct hostent *host; 00105 00106 if (status == ARES_SUCCESS) 00107 { 00108 status = ares_parse_ptr_reply(abuf, alen, &aquery->addr, 00109 sizeof(struct in_addr), AF_INET, &host); 00110 end_aquery(aquery, status, host); 00111 } 00112 else if (status == ARES_EDESTRUCTION) 00113 end_aquery(aquery, status, NULL); 00114 else 00115 next_lookup(aquery); 00116 } |
Here is the call graph for this function:
|
Definition at line 46 of file ares_gethostbyaddr.c. References AF_INET, ares_channel, ARES_ENOMEM, ARES_ENOTIMP, ares_host_callback, callback(), ares_channeldata::lookups, malloc, next_lookup(), and NULL. Referenced by dns_client(), and gethostbynameaddr().
00048 { 00049 struct addr_query *aquery; 00050 00051 if (family != AF_INET || addrlen != sizeof(struct in_addr)) 00052 { 00053 callback(arg, ARES_ENOTIMP, NULL); 00054 return; 00055 } 00056 00057 aquery = malloc(sizeof(struct addr_query)); 00058 if (!aquery) 00059 { 00060 callback(arg, ARES_ENOMEM, NULL); 00061 return; 00062 } 00063 aquery->channel = channel; 00064 memcpy(&aquery->addr, addr, sizeof(aquery->addr)); 00065 aquery->callback = callback; 00066 aquery->arg = arg; 00067 aquery->remaining_lookups = channel->lookups; 00068 00069 next_lookup(aquery); 00070 } |
Here is the call graph for this function:
|
Definition at line 118 of file ares_gethostbyaddr.c. References ares_free_hostent(), addr_query::arg, addr_query::callback, free, and status. Referenced by addr_callback(), and next_lookup().
00120 { 00121 aquery->callback(aquery->arg, status, host); 00122 if (host) 00123 ares_free_hostent(host); 00124 free(aquery); 00125 } |
Here is the call graph for this function:
|
Definition at line 72 of file ares_gethostbyaddr.c. References addr_query::addr, addr_callback(), ARES_ENOTFOUND, ares_query(), C_IN, addr_query::channel, end_aquery(), name, ntohl, NULL, addr_query::remaining_lookups, in_addr::s_addr, sprintf(), and T_PTR.
00073 { 00074 const char *p; 00075 char name[64]; 00076 int a1, a2, a3, a4; 00077 unsigned long addr; 00078 00079 for (p = aquery->remaining_lookups; *p; p++) 00080 { 00081 switch (*p) 00082 { 00083 case 'b': 00084 addr = ntohl(aquery->addr.s_addr); 00085 a1 = addr >> 24; 00086 a2 = (addr >> 16) & 0xff; 00087 a3 = (addr >> 8) & 0xff; 00088 a4 = addr & 0xff; 00089 sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1); 00090 aquery->remaining_lookups = p + 1; 00091 ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, 00092 aquery); 00093 return; 00094 case 'f': 00095 break; 00096 } 00097 } 00098 end_aquery(aquery, ARES_ENOTFOUND, NULL); 00099 } |
Here is the call graph for this function:
|
Referenced by main(), and next_lookup(). |