gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet] branch master updated (bfe72f857 -> b8da22a9b)


From: gnunet
Subject: [gnunet] branch master updated (bfe72f857 -> b8da22a9b)
Date: Fri, 15 Mar 2024 08:35:06 +0100

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

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

    from bfe72f857 TRANSPORT(udp): Improve handling and lookup of existing 
connections similar to TCP communicator fix wrt Queue handling.
     new e61c68d96 TRANSPORT(tcp): Cleanup and actually handle DISABLE_V6 
setting.
     new 49d126524 TRANSPORT(udp): Fix double sizeof
     new b8da22a9b TRANSPORT: Fix IPv6 setting in UDP communicator.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../gnunet_transport_communication_service.h       |  2 +-
 src/service/transport/gnunet-communicator-tcp.c    | 64 ++++++++++++----------
 src/service/transport/gnunet-communicator-udp.c    | 48 ++++++++++++----
 .../transport/transport_api2_communication.c       | 10 +++-
 4 files changed, 83 insertions(+), 41 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 c1e1c66c8..02a547335 100644
--- a/src/service/transport/gnunet-communicator-tcp.c
+++ b/src/service/transport/gnunet-communicator-tcp.c
@@ -27,6 +27,7 @@
  * - support NAT connection reversal method (#5529)
  * - support other TCP-specific NAT traversal methods (#5531)
  */
+#include "gnunet_common.h"
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_core_service.h"
@@ -885,28 +886,17 @@ struct GNUNET_RESOLVER_RequestHandle 
*resolve_request_handle;
 /**
  * Head of DLL with addresses we like to register at NAT servcie.
  */
-struct Addresses *addrs_head;
+static struct Addresses *addrs_head;
 
 /**
  * Head of DLL with addresses we like to register at NAT servcie.
  */
-struct Addresses *addrs_tail;
-
-/**
- * Head of DLL with ListenTasks.
- */
-struct ListenTask *lts_head;
-
-/**
- * Head of DLL with ListenTask.
- */
-struct ListenTask *lts_tail;
+static struct Addresses *addrs_tail;
 
 /**
  * Number of addresses in the DLL for register at NAT service.
  */
-int addrs_lens;
-
+static int addrs_lens;
 
 /**
  * Database for peer's HELLOs.
@@ -914,19 +904,24 @@ int addrs_lens;
 static struct GNUNET_PEERSTORE_Handle *peerstore;
 
 /**
- * A flag indicating we are already doing a shutdown.
+* A flag indicating we are already doing a shutdown.
+*/
+static int shutdown_running = GNUNET_NO;
+
+/**
+ * IPv6 disabled.
  */
-int shutdown_running = GNUNET_NO;
+static int disable_v6;
 
 /**
  * The port the communicator should be assigned to.
  */
-unsigned int bind_port;
+static unsigned int bind_port;
 
 /**
  *  Map of pending reversals.
  */
-struct GNUNET_CONTAINER_MultiHashMap *pending_reversals;
+static struct GNUNET_CONTAINER_MultiHashMap *pending_reversals;
 
 /**
  * We have been notified that our listen socket has something to
@@ -1921,7 +1916,8 @@ try_handle_plaintext (struct Queue *queue)
     if (sizeof(*tca) > queue->pread_off)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Handling plaintext size of tca greater than pread 
offset.\n");
+                  "Handling plaintext size of tca greater than pread 
offset.\n")
+      ;
       return 0;
     }
     if (ntohs (hdr->size) != sizeof(*tca))
@@ -2329,11 +2325,7 @@ tcp_address_to_sockaddr_port_only (const char *bindto, 
unsigned int *port)
 
   po = GNUNET_new (struct PortOnlyIpv4Ipv6);
 
-  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)
   {
     i4 = GNUNET_malloc (sizeof(struct sockaddr_in));
     po->addr_ipv4 = tcp_address_to_sockaddr_numeric_v4 (&sock_len_ipv4, *i4,
@@ -2534,7 +2526,6 @@ tcp_address_to_sockaddr (const char *bindto, socklen_t 
*sock_len)
 
   if (1 == inet_pton (AF_INET, start, &v4.sin_addr))
   {
-    // colon = strrchr (cp, ':');
     port = extract_port (bindto);
 
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -2545,7 +2536,6 @@ tcp_address_to_sockaddr (const char *bindto, socklen_t 
*sock_len)
   }
   else if (1 == inet_pton (AF_INET6, start, &v6.sin6_addr))
   {
-    // colon = strrchr (cp, ':');
     port = extract_port (bindto);
     in = tcp_address_to_sockaddr_numeric_v6 (sock_len, v6, port);
   }
@@ -3349,17 +3339,17 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity 
*peer, const char *address)
               "in %s\n",
               GNUNET_a2s (in, in_len));
 
-  hsh = GNUNET_CRYPTO_hash_context_start();
+  hsh = GNUNET_CRYPTO_hash_context_start ();
   GNUNET_CRYPTO_hash_context_read (hsh, address, strlen (address));
   GNUNET_CRYPTO_hash_context_read (hsh, peer, sizeof (*peer));
   GNUNET_CRYPTO_hash_context_finish (hsh, &queue_map_key);
-  queue = GNUNET_CONTAINER_multihashmap_get(queue_map, &queue_map_key);
+  queue = GNUNET_CONTAINER_multihashmap_get (queue_map, &queue_map_key);
 
   if (NULL != queue)
   {
     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)
   {
@@ -3386,6 +3376,13 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity 
*peer, const char *address)
     break;
 
   case AF_INET6:
+    if (GNUNET_YES == disable_v6)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "IPv6 disabled, skipping %s\n", address);
+      GNUNET_free (in);
+      return GNUNET_SYSERR;
+    }
     v6 = (struct sockaddr_in6 *) in;
     if (0 == v6->sin6_port)
     {
@@ -4064,6 +4061,15 @@ run (void *cls,
   {
     rekey_max_bytes = 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;
+  }
   peerstore = GNUNET_PEERSTORE_connect (cfg);
   if (NULL == peerstore)
   {
diff --git a/src/service/transport/gnunet-communicator-udp.c 
b/src/service/transport/gnunet-communicator-udp.c
index 70528d7ec..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;
 
@@ -2340,7 +2341,7 @@ udp_address_to_sockaddr (const char *bindto, socklen_t 
*sock_len)
       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));
+      v6.sin6_len = sizeof(struct sockaddr_in6);
 #endif
       in = GNUNET_memdup (&v6, sizeof(v6));
       *sock_len = sizeof(v6);
@@ -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]