regex profiler cleanup
[oweals/gnunet.git] / src / dns / dnsstub.c
index 273160e8a2cea5cb93161e389ec44b4873132356..c755aff16032b0d4e45b36bbafa4d86de7b294a5 100644 (file)
@@ -250,7 +250,8 @@ get_request_socket (struct GNUNET_DNSSTUB_Context *ctx,
  * Perform DNS resolution.
  *
  * @param ctx stub resolver to use
- * @param af address family to use
+ * @param sa the socket address
+ * @param sa_len the socket length
  * @param request DNS request to transmit
  * @param request_len number of bytes in msg
  * @param rc function to call with result
@@ -278,13 +279,25 @@ GNUNET_DNSSTUB_resolve (struct GNUNET_DNSSTUB_Context *ctx,
   else
     ret = rs->dnsout6;
   GNUNET_assert (NULL != ret);
+  memcpy (&rs->addr,
+         sa,
+         sa_len);
+  rs->addrlen = sa_len;
   rs->rc = rc;
   rs->rc_cls = rc_cls;
-  GNUNET_NETWORK_socket_sendto (ret,
-                               request,
-                               request_len,
-                               sa,
-                               sa_len);
+  if (GNUNET_SYSERR == 
+      GNUNET_NETWORK_socket_sendto (ret,
+                                   request,
+                                   request_len,
+                                   sa,
+                                   sa_len))
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+               _("Failed to send DNS request to %s\n"),
+               GNUNET_a2s (sa, sa_len));
+  else
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               _("Sent DNS request to %s\n"),
+               GNUNET_a2s (sa, sa_len));
   return rs;
 }
 
@@ -309,7 +322,7 @@ GNUNET_DNSSTUB_resolve2 (struct GNUNET_DNSSTUB_Context *ctx,
   int af;
   struct sockaddr_in v4;
   struct sockaddr_in6 v6;
-  struct sockaddr *so;
+  struct sockaddr *sa;
   socklen_t salen;
   struct GNUNET_NETWORK_Handle *dnsout;
   struct GNUNET_DNSSTUB_RequestSocket *rs;
@@ -324,7 +337,7 @@ GNUNET_DNSSTUB_resolve2 (struct GNUNET_DNSSTUB_Context *ctx,
 #if HAVE_SOCKADDR_IN_SIN_LEN
     v4.sin_len = (u_char) salen;
 #endif
-    so = (struct sockaddr *) &v4;
+    sa = (struct sockaddr *) &v4;
     af = AF_INET;
   }
   else if (1 == inet_pton (AF_INET6, ctx->dns_exit, &v6.sin6_addr))
@@ -335,7 +348,7 @@ GNUNET_DNSSTUB_resolve2 (struct GNUNET_DNSSTUB_Context *ctx,
 #if HAVE_SOCKADDR_IN_SIN_LEN
     v6.sin6_len = (u_char) salen;
 #endif
-    so = (struct sockaddr *) &v6;
+    sa = (struct sockaddr *) &v6;
     af = AF_INET6;
   }  
   else
@@ -357,14 +370,18 @@ GNUNET_DNSSTUB_resolve2 (struct GNUNET_DNSSTUB_Context *ctx,
     return NULL;
   }
   memcpy (&rs->addr,
-         so,
+         sa,
          salen);
   rs->addrlen = salen;
   rs->rc = rc;
   rs->rc_cls = rc_cls;
-  GNUNET_NETWORK_socket_sendto (dnsout,
-                               request,
-                               request_len, so, salen); 
+  if (GNUNET_SYSERR ==
+      GNUNET_NETWORK_socket_sendto (dnsout,
+                                   request,
+                                   request_len, sa, salen))
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+               _("Failed to send DNS request to %s\n"),
+               GNUNET_a2s (sa, salen));
   rs->timeout = GNUNET_TIME_relative_to_absolute (REQUEST_TIMEOUT);
   
   return rs;
@@ -400,7 +417,9 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs,
   /* port the code above? */
   len = UINT16_MAX;
 #endif
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Receiving %d byte DNS reply\n",
+             len); 
   {
     unsigned char buf[len] GNUNET_ALIGN;
 
@@ -428,11 +447,16 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs,
                       &addr,
                       addrlen)) ||      
        (0 == GNUNET_TIME_absolute_get_remaining (rs->timeout).rel_value) )
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                 "Request timeout or invalid sender address; ignoring reply\n"); 
       return GNUNET_NO;
-    rs->rc (rs->rc_cls,
-           rs,
-           dns,
-           r);
+    }
+    if (NULL != rs->rc)
+      rs->rc (rs->rc_cls,
+             rs,
+             dns,
+             r);
   }  
   return GNUNET_OK;
 }
@@ -483,6 +507,17 @@ read_response (void *cls,
 }
 
 
+/**
+ * Cancel DNS resolution.
+ *
+ * @param rs resolution to cancel
+ */
+void
+GNUNET_DNSSTUB_resolve_cancel (struct GNUNET_DNSSTUB_RequestSocket *rs)
+{
+  rs->rc = NULL;
+}
+
 
 /**
  * Start a DNS stub resolver.