gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] 03/03: TRANSPORT: Fix IPv6 setting in UDP communicator.


From: gnunet
Subject: [gnunet] 03/03: TRANSPORT: Fix IPv6 setting in UDP communicator.
Date: Fri, 15 Mar 2024 08:35:09 +0100

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

commit b8da22a9bc54610bb21ccbf982a678e276a47586
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Fri Mar 15 08:34:38 2024 +0100

    TRANSPORT: Fix IPv6 setting in UDP communicator.
---
 .../gnunet_transport_communication_service.h       |  2 +-
 src/service/transport/gnunet-communicator-tcp.c    |  2 +-
 src/service/transport/gnunet-communicator-udp.c    | 46 +++++++++++++++++-----
 .../transport/transport_api2_communication.c       | 10 ++++-
 4 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/src/include/gnunet_transport_communication_service.h 
b/src/include/gnunet_transport_communication_service.h
index 92facb0e0..ea947911f 100644
--- a/src/include/gnunet_transport_communication_service.h
+++ b/src/include/gnunet_transport_communication_service.h
@@ -74,7 +74,7 @@ extern "C" {
  * @param address where to send the message, human-readable
  *        communicator-specific format, 0-terminated, UTF-8
  * @return #GNUNET_OK on success, #GNUNET_SYSERR if the provided address is
- * invalid
+ * invalid, #GNUNET_NO if this address is already (beging) connected to.
  */
 typedef int (*GNUNET_TRANSPORT_CommunicatorMqInit) (
   void *cls,
diff --git a/src/service/transport/gnunet-communicator-tcp.c 
b/src/service/transport/gnunet-communicator-tcp.c
index 2ff7c4fc7..02a547335 100644
--- a/src/service/transport/gnunet-communicator-tcp.c
+++ b/src/service/transport/gnunet-communicator-tcp.c
@@ -3349,7 +3349,7 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity 
*peer, const char *address)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Queue for %s already exists or is in construction\n", 
address);
-    return GNUNET_SYSERR;
+    return GNUNET_NO;
   }
   switch (in->sa_family)
   {
diff --git a/src/service/transport/gnunet-communicator-udp.c 
b/src/service/transport/gnunet-communicator-udp.c
index b132080cf..e9496c571 100644
--- a/src/service/transport/gnunet-communicator-udp.c
+++ b/src/service/transport/gnunet-communicator-udp.c
@@ -850,6 +850,11 @@ static struct GNUNET_NAT_Handle *nat;
  */
 static uint16_t my_port;
 
+/**
+ * IPv6 disabled or not.
+ */
+static int disable_v6;
+
 
 /**
  * An interface went away, stop broadcasting on it.
@@ -2245,11 +2250,7 @@ udp_address_to_sockaddr (const char *bindto, socklen_t 
*sock_len)
                   bindto);
       return NULL;
     }
-    if ((GNUNET_NO == GNUNET_NETWORK_test_pf (PF_INET6)) ||
-        (GNUNET_YES ==
-         GNUNET_CONFIGURATION_get_value_yesno (cfg,
-                                               COMMUNICATOR_CONFIG_SECTION,
-                                               "DISABLE_V6")))
+    if (GNUNET_YES == disable_v6)
     {
       struct sockaddr_in *i4;
 
@@ -2865,6 +2866,21 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity 
*peer, const char *address)
   path = &address[strlen (COMMUNICATOR_ADDRESS_PREFIX "-")];
   in = udp_address_to_sockaddr (path, &in_len);
 
+  if (NULL == in)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Failed to setup UDP socket address\n");
+    return GNUNET_SYSERR;
+  }
+  if ((AF_INET6 == in->sa_family) &&
+      (GNUNET_YES == disable_v6))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "IPv6 disabled, skipping %s\n", address);
+    GNUNET_free (in);
+    return GNUNET_SYSERR;
+  }
+
   hsh = GNUNET_CRYPTO_hash_context_start ();
   GNUNET_CRYPTO_hash_context_read (hsh, in, in_len);
   GNUNET_CRYPTO_hash_context_read (hsh, peer, sizeof(*peer));
@@ -2874,9 +2890,9 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity 
*peer, const char *address)
   if (NULL != receiver)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "receiver %s already exist or is begin connected to\n",
+                "receiver %s already exist or is being connected to\n",
                 address);
-    return GNUNET_SYSERR;
+    return GNUNET_NO;
   }
 
   receiver = GNUNET_new (struct ReceiverAddress);
@@ -3054,14 +3070,15 @@ handle_ack_by_sender (void *cls, const struct 
GNUNET_HashCode *key, void *value)
   struct ReceiverAddress *receiver = value;
   struct AckInfo *ai = cls;
 
-  if (0 != GNUNET_memcmp(ai->sender, &receiver->target))
+  if (0 != GNUNET_memcmp (ai->sender, &receiver->target))
   {
     return GNUNET_YES;
   }
-  handle_ack((void*) ai->ack, key, receiver);
+  handle_ack ((void*) ai->ack, key, receiver);
   return GNUNET_YES;
 }
 
+
 /**
  * Function called when the transport service has received a
  * backchannel message for this communicator (!) via a different return
@@ -3432,7 +3449,18 @@ run (void *cls,
                                            COMMUNICATOR_CONFIG_SECTION,
                                            "REKEY_MAX_BYTES",
                                            &rekey_max_bytes))
+  {
     rekey_max_bytes = DEFAULT_REKEY_MAX_BYTES;
+  }
+  disable_v6 = GNUNET_NO;
+  if ((GNUNET_NO == GNUNET_NETWORK_test_pf (PF_INET6)) ||
+      (GNUNET_YES ==
+       GNUNET_CONFIGURATION_get_value_yesno (cfg,
+                                             COMMUNICATOR_CONFIG_SECTION,
+                                             "DISABLE_V6")))
+  {
+    disable_v6 = GNUNET_YES;
+  }
 
   in = udp_address_to_sockaddr (bindto, &in_len);
   if (NULL == in)
diff --git a/src/service/transport/transport_api2_communication.c 
b/src/service/transport/transport_api2_communication.c
index fe7e69158..e0fdad214 100644
--- a/src/service/transport/transport_api2_communication.c
+++ b/src/service/transport/transport_api2_communication.c
@@ -598,8 +598,16 @@ handle_create_queue (void *cls, const struct 
GNUNET_TRANSPORT_CreateQueue *cq)
   const char *addr = (const char *) &cq[1];
   struct GNUNET_TRANSPORT_CreateQueueResponse *cqr;
   struct GNUNET_MQ_Envelope *env;
+  int ret = ch->mq_init (ch->mq_init_cls, &cq->receiver, addr);
 
-  if (GNUNET_OK != ch->mq_init (ch->mq_init_cls, &cq->receiver, addr))
+  if (GNUNET_NO == ret)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Address `%s' is already (beging) connected to.\n",
+                addr);
+    env = GNUNET_MQ_msg (cqr, GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_CREATE_FAIL);
+  }
+  else if (GNUNET_SYSERR == ret)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Address `%s' invalid for this communicator\n",

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]