- /* first, check if this is a numeric address */
- if ( ( (domain == AF_UNSPEC) || (domain == AF_INET) ) &&
- (1 == inet_pton (AF_INET,
- hostname,
- &v4.sin_addr)) )
- {
- callback (callback_cls,
- (const struct sockaddr*) &v4,
- sizeof(v4));
- if ( (domain == AF_UNSPEC) &&
- (1 == inet_pton (AF_INET6,
- hostname,
- &v6.sin6_addr)) )
- {
- /* this can happen on some systems IF "hostname" is "localhost" */
- callback (callback_cls,
- (const struct sockaddr*) &v6,
- sizeof(v6));
- }
- callback (callback_cls, NULL, 0);
- return;
- }
- if ( ( (domain == AF_UNSPEC) || (domain == AF_INET6) ) &&
- (1 == inet_pton (AF_INET6,
- hostname,
- &v6.sin6_addr)) )
- {
- callback (callback_cls,
- (const struct sockaddr*) &v6,
- sizeof(v6));
- callback (callback_cls, NULL, 0);
- return;
- }
- check_config (cfg);
- /* then, check if this is a loopback address */
- i = 0;
- while (loopback[i] != NULL)
- if (0 == strcmp (loopback[i++], hostname))
- {
- v4.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- v6.sin6_addr = in6addr_loopback;
- switch (domain)
- {
- case AF_INET:
- callback (callback_cls,
- (const struct sockaddr*) &v4,
- sizeof(v4));
- break;
- case AF_INET6:
- callback (callback_cls,
- (const struct sockaddr*) &v6,
- sizeof(v6));
- break;
- case AF_UNSPEC:
- callback (callback_cls,
- (const struct sockaddr*) &v6,
- sizeof(v6));
- callback (callback_cls,
- (const struct sockaddr*) &v4,
- sizeof(v4));
- break;
- }
- callback (callback_cls, NULL, 0);
- return;
- }
- slen = strlen (hostname) + 1;
- if (slen + sizeof (struct GNUNET_RESOLVER_GetMessage) >
- GNUNET_SERVER_MAX_MESSAGE_SIZE)
- {
- GNUNET_break (0);
- callback (callback_cls, NULL, 0);
- return;
- }
- client = GNUNET_CLIENT_connect (sched, "resolver", cfg);
- if (client == NULL)
+ hostname = (const char *) &rh[1];
+ if (((rh->af == AF_UNSPEC) || (rh->af == AF_INET)) &&
+ (1 == inet_pton (AF_INET, hostname, &v4.sin_addr)))
+ {
+ rh->addr_callback (rh->cls, (const struct sockaddr *) &v4, sizeof (v4));
+ if ((rh->af == AF_UNSPEC) &&
+ (1 == inet_pton (AF_INET6, hostname, &v6.sin6_addr)))