[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7057 - GNUnet/src/util/network
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7057 - GNUnet/src/util/network |
Date: |
Thu, 5 Jun 2008 08:16:12 -0600 (MDT) |
Author: grothoff
Date: 2008-06-05 08:16:09 -0600 (Thu, 05 Jun 2008)
New Revision: 7057
Modified:
GNUnet/src/util/network/dns.c
Log:
only define used symbols
Modified: GNUnet/src/util/network/dns.c
===================================================================
--- GNUnet/src/util/network/dns.c 2008-06-05 13:37:22 UTC (rev 7056)
+++ GNUnet/src/util/network/dns.c 2008-06-05 14:16:09 UTC (rev 7057)
@@ -298,49 +298,106 @@
return ret;
}
-#if HAVE_GETHOSTBYNAME
-static int
-gethostbyname_resolve (struct GNUNET_GE_Context *ectx,
- const char *hostname,
- struct sockaddr **sa, socklen_t * socklen)
+
+#if HAVE_GETADDRINFO
+int
+getaddrinfo_resolve (struct GNUNET_GE_Context *ectx,
+ const char *hostname,
+ int domain, struct sockaddr **sa, socklen_t * socklen)
{
- struct hostent *hp;
- struct sockaddr_in *addr;
+ int s;
+ struct addrinfo hints;
+ struct addrinfo *result;
+ struct in6_addr * out;
+
+ memset (&hints, 0, sizeof (struct addrinfo));
+// FIXME in PlibC
+#ifndef MINGW
+ hints.ai_family = domain;
+#else
+ hints.ai_family = AF_INET;
+#endif
+ hints.ai_socktype = 0;
+ hints.ai_protocol = 0; /* Any protocol */
+ hints.ai_canonname = NULL;
+ hints.ai_addr = NULL;
+ hints.ai_next = NULL;
- hp = GETHOSTBYNAME (hostname);
- if (hp == NULL)
+ if (0 != (s = getaddrinfo (hostname, NULL, &hints, &result)))
{
+ if (domain == AF_INET6)
+ {
+ /* try v4 resolving + mapping */
+ hints.ai_family = AF_INET;
+ if (0 == getaddrinfo (hostname, NULL, &hints, &result))
+ {
+ GNUNET_GE_ASSERT(NULL, result->ai_addrlen == sizeof(struct
sockaddr_in));
+ if (NULL == *sa)
+ {
+ *sa = GNUNET_malloc (sizeof(struct sockaddr_in6));
+ *socklen = sizeof(struct sockaddr_in6);
+ memset(*sa, 0, sizeof(struct sockaddr_in6));
+ (*sa)->sa_family = AF_INET6;
+ out = &((struct sockaddr_in6*)*sa)->sin6_addr;
+ memcpy (*sa, result->ai_addr, result->ai_addrlen);
+ ((unsigned int *) out)[2] = htonl (0xffff);
+ memcpy (&((char *) out)[sizeof (struct in6_addr) -
+ sizeof (struct in_addr)],
+ &result->ai_addr,
+ sizeof (struct in_addr));
+ freeaddrinfo (result);
+ return GNUNET_OK;
+ }
+ if (result->ai_addrlen > *socklen)
+ {
+ freeaddrinfo (result);
+ return GNUNET_SYSERR;
+ }
+ *socklen = sizeof(struct sockaddr_in6);
+ memset(*sa, 0, sizeof(struct sockaddr_in6));
+ (*sa)->sa_family = AF_INET6;
+ out = &((struct sockaddr_in6*)*sa)->sin6_addr;
+ memcpy (*sa, result->ai_addr, result->ai_addrlen);
+ ((unsigned int *) out)[2] = htonl (0xffff);
+ memcpy (&((char *) out)[sizeof (struct in6_addr) -
+ sizeof (struct in_addr)],
+ &result->ai_addr,
+ sizeof (struct in_addr));
+ freeaddrinfo (result);
+ return GNUNET_OK;
+ }
+ }
GNUNET_GE_LOG (ectx,
- GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_BULK,
- _("Could not find IP of host `%s': %s\n"),
- hostname, hstrerror (h_errno));
+ GNUNET_GE_WARNING | GNUNET_GE_USER |
+ GNUNET_GE_BULK,
+ _("Could not resolve `%s' (%s): %s\n"), hostname,
+ (domain ==
+ AF_INET) ? "IPv4" : ((domain ==
+ AF_INET6) ? "IPv6" : "any"),
+ gai_strerror (s));
return GNUNET_SYSERR;
}
- if (hp->h_addrtype != AF_INET)
- {
- GNUNET_GE_BREAK (ectx, 0);
- return GNUNET_SYSERR;
- }
- GNUNET_GE_ASSERT (NULL, hp->h_length == sizeof (struct in_addr));
+ if (result == NULL)
+ return GNUNET_SYSERR;
if (NULL == *sa)
{
- *sa = GNUNET_malloc (sizeof (struct sockaddr_in));
- memset (*sa, 0, sizeof (struct sockaddr_in));
- *socklen = sizeof (struct sockaddr_in);
+ *sa = GNUNET_malloc (result->ai_addrlen);
+ *socklen = result->ai_addrlen;
+ memcpy (*sa, result->ai_addr, result->ai_addrlen);
+ freeaddrinfo (result);
+ return GNUNET_OK;
}
- else
+ if (result->ai_addrlen > *socklen)
{
- if (sizeof (struct sockaddr_in) > *socklen)
- return GNUNET_SYSERR;
- *socklen = sizeof (struct sockaddr_in);
+ freeaddrinfo (result);
+ return GNUNET_SYSERR;
}
- addr = (struct sockaddr_in *) *sa;
- memset (addr, 0, sizeof (struct sockaddr_in));
- addr->sin_family = AF_INET;
- memcpy (&addr->sin_addr, hp->h_addr_list[0], hp->h_length);
+ *socklen = result->ai_addrlen;
+ memcpy (*sa, result->ai_addr, result->ai_addrlen);
+ freeaddrinfo (result);
return GNUNET_OK;
}
-#endif
+#else
#if HAVE_GETHOSTBYNAME2
static int
@@ -416,107 +473,53 @@
}
return GNUNET_OK;
}
-#endif
+#else
-#if HAVE_GETADDRINFO
-int
-getaddrinfo_resolve (struct GNUNET_GE_Context *ectx,
- const char *hostname,
- int domain, struct sockaddr **sa, socklen_t * socklen)
+#if HAVE_GETHOSTBYNAME
+static int
+gethostbyname_resolve (struct GNUNET_GE_Context *ectx,
+ const char *hostname,
+ struct sockaddr **sa, socklen_t * socklen)
{
- int s;
- struct addrinfo hints;
- struct addrinfo *result;
- struct in6_addr * out;
-
- memset (&hints, 0, sizeof (struct addrinfo));
-// FIXME in PlibC
-#ifndef MINGW
- hints.ai_family = domain;
-#else
- hints.ai_family = AF_INET;
-#endif
- hints.ai_socktype = 0;
- hints.ai_protocol = 0; /* Any protocol */
- hints.ai_canonname = NULL;
- hints.ai_addr = NULL;
- hints.ai_next = NULL;
+ struct hostent *hp;
+ struct sockaddr_in *addr;
- if (0 != (s = getaddrinfo (hostname, NULL, &hints, &result)))
+ hp = GETHOSTBYNAME (hostname);
+ if (hp == NULL)
{
- if (domain == AF_INET6)
- {
- /* try v4 resolving + mapping */
- hints.ai_family = AF_INET;
- if (0 == getaddrinfo (hostname, NULL, &hints, &result))
- {
- GNUNET_GE_ASSERT(NULL, result->ai_addrlen == sizeof(struct
sockaddr_in));
- if (NULL == *sa)
- {
- *sa = GNUNET_malloc (sizeof(struct sockaddr_in6));
- *socklen = sizeof(struct sockaddr_in6);
- memset(*sa, 0, sizeof(struct sockaddr_in6));
- (*sa)->sa_family = AF_INET6;
- out = &((struct sockaddr_in6*)*sa)->sin6_addr;
- memcpy (*sa, result->ai_addr, result->ai_addrlen);
- ((unsigned int *) out)[2] = htonl (0xffff);
- memcpy (&((char *) out)[sizeof (struct in6_addr) -
- sizeof (struct in_addr)],
- &result->ai_addr,
- sizeof (struct in_addr));
- freeaddrinfo (result);
- return GNUNET_OK;
- }
- if (result->ai_addrlen > *socklen)
- {
- freeaddrinfo (result);
- return GNUNET_SYSERR;
- }
- *socklen = sizeof(struct sockaddr_in6);
- memset(*sa, 0, sizeof(struct sockaddr_in6));
- (*sa)->sa_family = AF_INET6;
- out = &((struct sockaddr_in6*)*sa)->sin6_addr;
- memcpy (*sa, result->ai_addr, result->ai_addrlen);
- ((unsigned int *) out)[2] = htonl (0xffff);
- memcpy (&((char *) out)[sizeof (struct in6_addr) -
- sizeof (struct in_addr)],
- &result->ai_addr,
- sizeof (struct in_addr));
- freeaddrinfo (result);
- return GNUNET_OK;
- }
- }
GNUNET_GE_LOG (ectx,
- GNUNET_GE_WARNING | GNUNET_GE_USER |
- GNUNET_GE_BULK,
- _("Could not resolve `%s' (%s): %s\n"), hostname,
- (domain ==
- AF_INET) ? "IPv4" : ((domain ==
- AF_INET6) ? "IPv6" : "any"),
- gai_strerror (s));
+ GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_BULK,
+ _("Could not find IP of host `%s': %s\n"),
+ hostname, hstrerror (h_errno));
return GNUNET_SYSERR;
}
- if (result == NULL)
- return GNUNET_SYSERR;
+ if (hp->h_addrtype != AF_INET)
+ {
+ GNUNET_GE_BREAK (ectx, 0);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_GE_ASSERT (NULL, hp->h_length == sizeof (struct in_addr));
if (NULL == *sa)
{
- *sa = GNUNET_malloc (result->ai_addrlen);
- *socklen = result->ai_addrlen;
- memcpy (*sa, result->ai_addr, result->ai_addrlen);
- freeaddrinfo (result);
- return GNUNET_OK;
+ *sa = GNUNET_malloc (sizeof (struct sockaddr_in));
+ memset (*sa, 0, sizeof (struct sockaddr_in));
+ *socklen = sizeof (struct sockaddr_in);
}
- if (result->ai_addrlen > *socklen)
+ else
{
- freeaddrinfo (result);
- return GNUNET_SYSERR;
+ if (sizeof (struct sockaddr_in) > *socklen)
+ return GNUNET_SYSERR;
+ *socklen = sizeof (struct sockaddr_in);
}
- *socklen = result->ai_addrlen;
- memcpy (*sa, result->ai_addr, result->ai_addrlen);
- freeaddrinfo (result);
+ addr = (struct sockaddr_in *) *sa;
+ memset (addr, 0, sizeof (struct sockaddr_in));
+ addr->sin_family = AF_INET;
+ memcpy (&addr->sin_addr, hp->h_addr_list[0], hp->h_length);
return GNUNET_OK;
}
#endif
+#endif
+#endif
/**
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7057 - GNUnet/src/util/network,
gnunet <=