dhtlog updates
[oweals/gnunet.git] / src / util / resolver_api.c
index ecd3789f437ba9dbf3d994af3b7ea45c497c1baf..f4832ed9c87924ae28343779872f453a2ad6ec6f 100644 (file)
@@ -25,6 +25,7 @@
  */
 #include "platform.h"
 #include "gnunet_getopt_lib.h"
+#include "gnunet_os_lib.h"
 #include "gnunet_client_lib.h"
 #include "gnunet_protocols.h"
 #include "gnunet_resolver_service.h"
@@ -188,17 +189,27 @@ no_resolve (const struct sockaddr *sa, socklen_t salen)
     case AF_INET:
       if (salen != sizeof (struct sockaddr_in))
         return NULL;
-      inet_ntop (AF_INET,
-                 &((struct sockaddr_in *) sa)->sin_addr,
-                 inet4, INET_ADDRSTRLEN);
+      if (NULL == 
+         inet_ntop (AF_INET,
+                    &((struct sockaddr_in *) sa)->sin_addr,
+                    inet4, INET_ADDRSTRLEN))
+       {
+         GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "inet_ntop");
+         return NULL;
+       }
       ret = GNUNET_strdup (inet4);
       break;
     case AF_INET6:
       if (salen != sizeof (struct sockaddr_in6))
         return NULL;
-      inet_ntop (AF_INET6,
-                 &((struct sockaddr_in6 *) sa)->sin6_addr,
-                 inet6, INET6_ADDRSTRLEN);
+      if (NULL == 
+         inet_ntop (AF_INET6,
+                    &((struct sockaddr_in6 *) sa)->sin6_addr,
+                    inet6, INET6_ADDRSTRLEN))
+       {
+         GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "inet_ntop");
+         return NULL;
+       }
       ret = GNUNET_strdup (inet6);
       break;
     default:
@@ -224,7 +235,6 @@ handle_address_response (void *cls, const struct GNUNET_MessageHeader *msg)
   const struct sockaddr *sa;
   socklen_t salen;
 
-
   if (msg == NULL)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -416,12 +426,11 @@ GNUNET_RESOLVER_ip_get (struct GNUNET_SCHEDULER_Handle *sched,
   unsigned int i;
   struct in_addr v4;
   struct in6_addr v6;
-  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE];
+  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE - 1];
 
   check_config (cfg);
   slen = strlen (hostname) + 1;
-  if (slen + sizeof (struct GNUNET_RESOLVER_GetMessage) >
-      GNUNET_SERVER_MAX_MESSAGE_SIZE)
+  if (slen + sizeof (struct GNUNET_RESOLVER_GetMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
     {
       GNUNET_break (0);
       return NULL;
@@ -609,7 +618,7 @@ GNUNET_RESOLVER_hostname_get (struct GNUNET_SCHEDULER_Handle *sched,
   struct GNUNET_CLIENT_Connection *client;
   struct GNUNET_RESOLVER_GetMessage *msg;
   struct GNUNET_RESOLVER_RequestHandle *rh;
-  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE];
+  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE - 1];
 
   check_config (cfg);
   rh = GNUNET_malloc (sizeof (struct GNUNET_RESOLVER_RequestHandle) + salen);
@@ -626,8 +635,7 @@ GNUNET_RESOLVER_hostname_get (struct GNUNET_SCHEDULER_Handle *sched,
                                           &numeric_reverse, rh);
       return rh;
     }
-  if (salen + sizeof (struct GNUNET_RESOLVER_GetMessage) >
-      GNUNET_SERVER_MAX_MESSAGE_SIZE)
+  if (salen + sizeof (struct GNUNET_RESOLVER_GetMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
     {
       GNUNET_break (0);
       GNUNET_free (rh);
@@ -668,7 +676,39 @@ GNUNET_RESOLVER_hostname_get (struct GNUNET_SCHEDULER_Handle *sched,
 
 
 /**
- * Perform a reverse DNS lookup.
+ * Get local fully qualified domain name
+ * @return fqdn
+ */
+char *
+GNUNET_RESOLVER_local_fqdn_get ( void )
+{
+  struct hostent *host;
+  char hostname[GNUNET_OS_get_hostname_max_length() + 1];
+
+
+  if (0 != gethostname (hostname, sizeof (hostname) - 1))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR |
+                           GNUNET_ERROR_TYPE_BULK, "gethostname");
+      return NULL;
+    }
+#if DEBUG_RESOLVER
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              _("Resolving our FQDN `%s'\n"), hostname);
+#endif
+  host = gethostbyname ( hostname );
+  if ( NULL == host)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                _("Could not resolve our FQDN : %s\n"),
+                hstrerror (h_errno));
+    return NULL;
+  }
+  return GNUNET_strdup (host->h_name);
+}
+
+/**
+ * Looking our own hostname.
  *
  * @param sched scheduler to use
  * @param cfg configuration to use
@@ -686,7 +726,7 @@ GNUNET_RESOLVER_hostname_resolve (struct GNUNET_SCHEDULER_Handle *sched,
                                   GNUNET_RESOLVER_AddressCallback callback,
                                   void *cls)
 {
-  char hostname[MAX_HOSTNAME];
+  char hostname[GNUNET_OS_get_hostname_max_length() + 1];
 
   check_config (cfg);
   if (0 != gethostname (hostname, sizeof (hostname) - 1))