fix communicator IP parsing, debug udp communicator
authorSchanzenbach, Martin <mschanzenbach@posteo.de>
Thu, 26 Dec 2019 19:48:12 +0000 (04:48 +0900)
committerSchanzenbach, Martin <mschanzenbach@posteo.de>
Thu, 26 Dec 2019 19:48:12 +0000 (04:48 +0900)
src/transport/gnunet-communicator-tcp.c
src/transport/gnunet-communicator-udp.c
src/transport/test_communicator_udp_peer1.conf
src/transport/test_communicator_udp_peer2.conf

index e902e23162d84370aa2e4d539a333e5821bdd323..107a378385ef0d7fdecae763075681d2322d1be0 100644 (file)
@@ -1183,10 +1183,13 @@ tcp_address_to_sockaddr (const char *bindto, socklen_t *sock_len)
     /* try IPv4 */
     struct sockaddr_in v4;
 
-    if (1 == inet_pton (AF_INET, cp, &v4))
+    if (1 == inet_pton (AF_INET, cp, &v4.sin_addr))
     {
       v4.sin_family = AF_INET;
       v4.sin_port = htons ((uint16_t) port);
+#if HAVE_SOCKADDR_IN_SIN_LEN
+      v4.sin_len = sizeof(struct sockaddr_in);
+#endif
       in = GNUNET_memdup (&v4, sizeof(v4));
       *sock_len = sizeof(v4);
       GNUNET_free (cp);
@@ -1204,10 +1207,13 @@ tcp_address_to_sockaddr (const char *bindto, socklen_t *sock_len)
       start++;   /* skip over '[' */
       cp[strlen (cp) - 1] = '\0';  /* eat ']' */
     }
-    if (1 == inet_pton (AF_INET6, start, &v6))
+    if (1 == inet_pton (AF_INET6, start, &v6.sin6_addr))
     {
       v6.sin6_family = AF_INET6;
       v6.sin6_port = htons ((uint16_t) port);
+#if HAVE_SOCKADDR_IN_SIN_LEN
+      v6.sin6_len = sizeof(sizeof(struct sockaddr_in6));
+#endif
       in = GNUNET_memdup (&v6, sizeof(v6));
       *sock_len = sizeof(v6);
       GNUNET_free (cp);
index 80fc4142bbab6c437564bcad146cfc02fd2c6869..6a4fea315fe22058e877a84f62cf10181588a79b 100644 (file)
@@ -1593,7 +1593,8 @@ sock_read (void *cls)
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "recv");
     return;
   }
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Read %lu bytes\n", rcvd);
   /* first, see if it is a UDPBox */
   if (rcvd > sizeof(struct UDPBox))
   {
@@ -1652,7 +1653,8 @@ sock_read (void *cls)
                               GNUNET_NO);
     return;
   }
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Got KX\n");
   {
     const struct InitialKX *kx;
     struct SharedSecret *ss;
@@ -1669,6 +1671,8 @@ sock_read (void *cls)
                                   sizeof(pbuf),
                                   pbuf))
     {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Unable to decrypt tag, dropping...\n");
       GNUNET_free (ss);
       GNUNET_STATISTICS_update (
         stats,
@@ -1795,12 +1799,15 @@ udp_address_to_sockaddr (const char *bindto, socklen_t *sock_len)
   {
     /* try IPv4 */
     struct sockaddr_in v4;
-
-    if (1 == inet_pton (AF_INET, cp, &v4))
+    if (1 == inet_pton (AF_INET, cp, &v4.sin_addr))
     {
+      v4.sin_family = AF_INET;
       v4.sin_port = htons ((uint16_t) port);
-      in = GNUNET_memdup (&v4, sizeof(v4));
-      *sock_len = sizeof(v4);
+#if HAVE_SOCKADDR_IN_SIN_LEN
+      v4.sin_len = sizeof(struct sockaddr_in);
+#endif
+      in = GNUNET_memdup (&v4, sizeof(struct sockaddr_in));
+      *sock_len = sizeof(struct sockaddr_in);
       GNUNET_free (cp);
       return in;
     }
@@ -1816,9 +1823,13 @@ udp_address_to_sockaddr (const char *bindto, socklen_t *sock_len)
       start++;   /* skip over '[' */
       cp[strlen (cp) - 1] = '\0';  /* eat ']' */
     }
-    if (1 == inet_pton (AF_INET6, start, &v6))
+    if (1 == inet_pton (AF_INET6, start, &v6.sin6_addr))
     {
+      v6.sin6_family = AF_INET6;
       v6.sin6_port = htons ((uint16_t) port);
+#if HAVE_SOCKADDR_IN_SIN_LEN
+      v6.sin6_len = sizeof(sizeof(struct sockaddr_in6));
+#endif
       in = GNUNET_memdup (&v6, sizeof(v6));
       *sock_len = sizeof(v6);
       GNUNET_free (cp);
@@ -1914,7 +1925,7 @@ mq_send (struct GNUNET_MQ_Handle *mq,
                                                           &uhs.purpose,
                                                           &uc.sender_sig));
     /* Leave space for kx */
-    dpos = sizeof(struct GNUNET_CRYPTO_EcdhePublicKey);
+    dpos = sizeof(kx);
     /* Append encrypted uc to dgram */
     GNUNET_assert (0 == gcry_cipher_encrypt (out_cipher,
                                              &dgram[dpos],
@@ -1939,6 +1950,8 @@ mq_send (struct GNUNET_MQ_Handle *mq,
                                             receiver->address,
                                             receiver->address_len))
       GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send");
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Sending KX to %s\n", GNUNET_a2s (receiver->address, receiver->address_len));
     GNUNET_MQ_impl_send_continue (mq);
     return;
   }   /* End of KX encryption method */
@@ -1973,12 +1986,17 @@ mq_send (struct GNUNET_MQ_Handle *mq,
                                               receiver->address,
                                               receiver->address_len))
         GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send");
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Sending data\n");
+
       GNUNET_MQ_impl_send_continue (mq);
       receiver->acks_available--;
       if (0 == receiver->acks_available)
       {
         /* We have no more ACKs => MTU change! */
         setup_receiver_mq (receiver);
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                    "No more acks, MTU changed\n");
       }
       return;
     }
@@ -2505,8 +2523,11 @@ iface_proc (void *cls,
   GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_eddsa_sign (my_private_key,
                                                         &ubs.purpose,
                                                         &bi->bcm.sender_sig));
-  bi->broadcast_task = GNUNET_SCHEDULER_add_now (&ifc_broadcast, bi);
-  GNUNET_CONTAINER_DLL_insert (bi_head, bi_tail, bi);
+  if (NULL != broadcast_addr)
+  {
+    bi->broadcast_task = GNUNET_SCHEDULER_add_now (&ifc_broadcast, bi);
+    GNUNET_CONTAINER_DLL_insert (bi_head, bi_tail, bi);
+  }
   if ((AF_INET6 == addr->sa_family) && (NULL != broadcast_addr))
   {
     /* Create IPv6 multicast request */
@@ -2591,10 +2612,10 @@ run (void *cls,
   (void) cls;
   cfg = c;
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (cfg,
-                                               COMMUNICATOR_CONFIG_SECTION,
-                                               "BINDTO",
-                                               &bindto))
+      GNUNET_CONFIGURATION_get_value_string (cfg,
+                                             COMMUNICATOR_CONFIG_SECTION,
+                                             "BINDTO",
+                                             &bindto))
   {
     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
                                COMMUNICATOR_CONFIG_SECTION,
@@ -2631,6 +2652,7 @@ run (void *cls,
     GNUNET_free (bindto);
     return;
   }
+
   /* We might have bound to port 0, allowing the OS to figure it out;
      thus, get the real IN-address from the socket */
   sto_len = sizeof(in_sto);
index fc08af1ee510894d844b58afd0a2920f2b5f57d9..417e92ab5aabc6ea9b26a776aa001660957679a2 100644 (file)
@@ -29,3 +29,4 @@ DISABLE_V6 = YES
 
 [communicator-udp]
 BINDTO = 60002
+DISABLE_V6 = YES
index 4197df00d51984db9070bf0744f4c73d9b35de5f..a063a545a963f14bc86fc1db69320eea30c423e8 100644 (file)
@@ -29,3 +29,4 @@ DISABLE_V6 = YES
 
 [communicator-udp]
 BINDTO = 60003
+DISABLE_V6 = YES