aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-28 07:41:49 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-28 07:41:49 +0000
commit210ec4ba3d5cdcea93c94623f3a5219eafe17c08 (patch)
tree36de5323725fd28881b90c0a1e829dca858b81f0 /src/util
parentbdf5057504117e11a691a7fcef4f9df631213d0b (diff)
downloadgnunet-210ec4ba3d5cdcea93c94623f3a5219eafe17c08.tar.gz
gnunet-210ec4ba3d5cdcea93c94623f3a5219eafe17c08.zip
-fix
Diffstat (limited to 'src/util')
-rw-r--r--src/util/resolver_api.c43
1 files changed, 14 insertions, 29 deletions
diff --git a/src/util/resolver_api.c b/src/util/resolver_api.c
index 371b2165a..ea9d55d54 100644
--- a/src/util/resolver_api.c
+++ b/src/util/resolver_api.c
@@ -277,45 +277,38 @@ GNUNET_RESOLVER_disconnect ()
277 * @return address as a string, NULL on error 277 * @return address as a string, NULL on error
278 */ 278 */
279static char * 279static char *
280no_resolve (const struct sockaddr *sa, socklen_t salen) 280no_resolve (int af,
281 const void *ip, socklen_t ip_len)
281{ 282{
282 char *ret; 283 char buf[INET6_ADDRSTRLEN];
283 char inet4[INET_ADDRSTRLEN];
284 char inet6[INET6_ADDRSTRLEN];
285 284
286 if (salen < sizeof (struct sockaddr)) 285 switch (af)
287 return NULL;
288 switch (sa->sa_family)
289 { 286 {
290 case AF_INET: 287 case AF_INET:
291 if (salen != sizeof (struct sockaddr_in)) 288 if (ip_len != sizeof (struct in_addr))
292 return NULL; 289 return NULL;
293 if (NULL == 290 if (NULL ==
294 inet_ntop (AF_INET, &((struct sockaddr_in *) sa)->sin_addr, inet4, 291 inet_ntop (AF_INET, ip, buf, sizeof (buf)))
295 INET_ADDRSTRLEN))
296 { 292 {
297 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "inet_ntop"); 293 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "inet_ntop");
298 return NULL; 294 return NULL;
299 } 295 }
300 ret = GNUNET_strdup (inet4);
301 break; 296 break;
302 case AF_INET6: 297 case AF_INET6:
303 if (salen != sizeof (struct sockaddr_in6)) 298 if (ip_len != sizeof (struct in6_addr))
304 return NULL; 299 return NULL;
305 if (NULL == 300 if (NULL ==
306 inet_ntop (AF_INET6, &((struct sockaddr_in6 *) sa)->sin6_addr, inet6, 301 inet_ntop (AF_INET6, ip, buf, sizeof (buf)))
307 INET6_ADDRSTRLEN))
308 { 302 {
309 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "inet_ntop"); 303 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "inet_ntop");
310 return NULL; 304 return NULL;
311 } 305 }
312 ret = GNUNET_strdup (inet6);
313 break; 306 break;
314 default: 307 default:
315 ret = NULL; 308 GNUNET_break (0);
316 break; 309 return NULL;
317 } 310 }
318 return ret; 311 return GNUNET_strdup (buf);
319} 312}
320 313
321 314
@@ -368,7 +361,8 @@ handle_response (void *cls, const struct GNUNET_MessageHeader *msg)
368 /* no reverse lookup was successful, return ip as string */ 361 /* no reverse lookup was successful, return ip as string */
369 if (rh->received_response == GNUNET_NO) 362 if (rh->received_response == GNUNET_NO)
370 rh->name_callback (rh->cls, 363 rh->name_callback (rh->cls,
371 no_resolve ((const struct sockaddr *) &rh[1], 364 no_resolve (rh->af,
365 &rh[1],
372 rh->data_len)); 366 rh->data_len));
373 /* at least one reverse lookup was successful */ 367 /* at least one reverse lookup was successful */
374 else 368 else
@@ -483,15 +477,6 @@ handle_response (void *cls, const struct GNUNET_MessageHeader *msg)
483 reconnect (); 477 reconnect ();
484 return; 478 return;
485 } 479 }
486#if DEBUG_RESOLVER
487 {
488 char *ips = no_resolve (sa, salen);
489
490 LOG (GNUNET_ERROR_TYPE_DEBUG, "Resolver returns `%s' for `%s'.\n", ips,
491 (const char *) &rh[1]);
492 GNUNET_free (ips);
493 }
494#endif
495 rh->addr_callback (rh->cls, sa, salen); 480 rh->addr_callback (rh->cls, sa, salen);
496 GNUNET_CLIENT_receive (client, &handle_response, rh, 481 GNUNET_CLIENT_receive (client, &handle_response, rh,
497 GNUNET_TIME_absolute_get_remaining (rh->timeout)); 482 GNUNET_TIME_absolute_get_remaining (rh->timeout));
@@ -816,7 +801,7 @@ numeric_reverse (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
816 struct GNUNET_RESOLVER_RequestHandle *rh = cls; 801 struct GNUNET_RESOLVER_RequestHandle *rh = cls;
817 char *result; 802 char *result;
818 803
819 result = no_resolve ((const struct sockaddr *) &rh[1], rh->data_len); 804 result = no_resolve (rh->af, &rh[1], rh->data_len);
820#if DEBUG_RESOLVER 805#if DEBUG_RESOLVER
821 LOG (GNUNET_ERROR_TYPE_DEBUG, _("Resolver returns `%s'.\n"), result); 806 LOG (GNUNET_ERROR_TYPE_DEBUG, _("Resolver returns `%s'.\n"), result);
822#endif 807#endif