gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet] branch master updated: MESSENGER: Implement automatic connectio


From: gnunet
Subject: [gnunet] branch master updated: MESSENGER: Implement automatic connection to remaining routing peers on closed connection
Date: Sun, 17 Dec 2023 15:34:57 +0100

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

thejackimonster pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 81afa753e MESSENGER: Implement automatic connection to remaining 
routing peers on closed connection
81afa753e is described below

commit 81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Sun Dec 17 15:34:48 2023 +0100

    MESSENGER: Implement automatic connection to remaining routing peers on 
closed connection
    
    Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
 .../messenger/gnunet-service-messenger_room.c       | 13 +++++++++++++
 .../messenger/gnunet-service-messenger_service.c    |  4 ++++
 .../messenger/gnunet-service-messenger_service.h    |  1 +
 src/service/messenger/messenger.conf.in             |  1 +
 src/service/messenger/messenger_api_list_tunnels.c  | 21 +++++++++++++++++++++
 src/service/messenger/messenger_api_list_tunnels.h  | 13 +++++++++++++
 src/service/messenger/test_messenger_api.conf       |  1 +
 7 files changed, 54 insertions(+)

diff --git a/src/service/messenger/gnunet-service-messenger_room.c 
b/src/service/messenger/gnunet-service-messenger_room.c
index 1ad20bfb9..8ff8b1af7 100644
--- a/src/service/messenger/gnunet-service-messenger_room.c
+++ b/src/service/messenger/gnunet-service-messenger_room.c
@@ -869,6 +869,19 @@ callback_room_disconnect (struct GNUNET_MESSENGER_SrvRoom 
*room,
 
   if (GNUNET_YES == contains_list_tunnels (&(room->basement), &identity))
     send_srv_room_message (room, room->host, create_message_miss (&identity));
+
+  if ((0 < GNUNET_CONTAINER_multipeermap_size (room->tunnels)) ||
+      (GNUNET_NO == room->service->auto_connecting))
+    return;
+
+  struct GNUNET_MESSENGER_ListTunnel *element;
+  element = find_list_tunnels_alternate (&(room->basement), &identity);
+
+  if (!element)
+    return;
+
+  GNUNET_PEER_resolve (element->peer, &identity);
+  enter_srv_room_at (room, room->host, &identity);
 }
 
 
diff --git a/src/service/messenger/gnunet-service-messenger_service.c 
b/src/service/messenger/gnunet-service-messenger_service.c
index f55a3bb7b..d4d2a4a89 100644
--- a/src/service/messenger/gnunet-service-messenger_service.c
+++ b/src/service/messenger/gnunet-service-messenger_service.c
@@ -83,6 +83,10 @@ create_service (const struct GNUNET_CONFIGURATION_Handle 
*config,
     }
   }
 
+  service->auto_connecting = GNUNET_CONFIGURATION_get_value_yesno 
(service->config,
+                                                                   
GNUNET_MESSENGER_SERVICE_NAME,
+                                                                   
"MESSENGER_AUTO_CONNECTING");
+
   service->auto_routing = GNUNET_CONFIGURATION_get_value_yesno 
(service->config,
                                                                 
GNUNET_MESSENGER_SERVICE_NAME,
                                                                 
"MESSENGER_AUTO_ROUTING");
diff --git a/src/service/messenger/gnunet-service-messenger_service.h 
b/src/service/messenger/gnunet-service-messenger_service.h
index 0df45b384..c0295691d 100644
--- a/src/service/messenger/gnunet-service-messenger_service.h
+++ b/src/service/messenger/gnunet-service-messenger_service.h
@@ -48,6 +48,7 @@ struct GNUNET_MESSENGER_Service
   struct GNUNET_PeerIdentity *peer;
   char *dir;
 
+  enum GNUNET_GenericReturnValue auto_connecting;
   enum GNUNET_GenericReturnValue auto_routing;
   unsigned long long min_routers;
 
diff --git a/src/service/messenger/messenger.conf.in 
b/src/service/messenger/messenger.conf.in
index a1732118f..6e29dea44 100644
--- a/src/service/messenger/messenger.conf.in
+++ b/src/service/messenger/messenger.conf.in
@@ -12,5 +12,6 @@ UNIX_MATCH_GID = YES
 
 # Directory to store messages and contacts
 MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/
+MESSENGER_AUTO_CONNECTING = YES
 MESSENGER_AUTO_ROUTING = YES
 MESSENGER_MIN_ROUTERS = 3
\ No newline at end of file
diff --git a/src/service/messenger/messenger_api_list_tunnels.c 
b/src/service/messenger/messenger_api_list_tunnels.c
index 362a56aca..aa9b91bc5 100644
--- a/src/service/messenger/messenger_api_list_tunnels.c
+++ b/src/service/messenger/messenger_api_list_tunnels.c
@@ -114,6 +114,27 @@ find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels 
*tunnels,
 }
 
 
+struct GNUNET_MESSENGER_ListTunnel*
+find_list_tunnels_alternate (struct GNUNET_MESSENGER_ListTunnels *tunnels,
+                             const struct GNUNET_PeerIdentity *peer)
+{
+  GNUNET_assert ((tunnels) && (peer));
+
+  struct GNUNET_MESSENGER_ListTunnel *element;
+  struct GNUNET_PeerIdentity pid;
+
+  for (element = tunnels->head; element; element = element->next)
+  {
+    GNUNET_PEER_resolve (element->peer, &pid);
+
+    if (0 != GNUNET_memcmp (&pid, peer))
+      return element;
+  }
+
+  return NULL;
+}
+
+
 enum GNUNET_GenericReturnValue
 verify_list_tunnels_flag_token (const struct GNUNET_MESSENGER_ListTunnels 
*tunnels,
                                 const struct GNUNET_PeerIdentity *peer,
diff --git a/src/service/messenger/messenger_api_list_tunnels.h 
b/src/service/messenger/messenger_api_list_tunnels.h
index 693126d8d..427d0ef13 100644
--- a/src/service/messenger/messenger_api_list_tunnels.h
+++ b/src/service/messenger/messenger_api_list_tunnels.h
@@ -97,6 +97,19 @@ find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels 
*tunnels,
                    const struct GNUNET_PeerIdentity *peer,
                    size_t *index);
 
+/**
+ * Searches linearly through the list of tunnels peer identities for matching
+ * against a specific <i>peer</i> identity and returns an element of the list
+ * which does not match it.
+ *
+ * @param[in,out] tunnels List of tunnels
+ * @param[in] peer Peer identity of tunnel
+ * @return Element in the list with unmatching peer identity
+ */
+struct GNUNET_MESSENGER_ListTunnel*
+find_list_tunnels_alternate (struct GNUNET_MESSENGER_ListTunnels *tunnels,
+                             const struct GNUNET_PeerIdentity *peer);
+
 /**
  * Verifies that a specific tunnel selected by its <i>peer</i> identity in a
  * list of <i>tunnels</i> is the first in order with a given connection 
<i>flag</i>.
diff --git a/src/service/messenger/test_messenger_api.conf 
b/src/service/messenger/test_messenger_api.conf
index 14b237a71..c6c7ea2d3 100644
--- a/src/service/messenger/test_messenger_api.conf
+++ b/src/service/messenger/test_messenger_api.conf
@@ -40,6 +40,7 @@ START_ON_DEMAND = YES
 
 [messenger]
 START_ON_DEMAND = YES
+MESSENGER_AUTO_CONNECTING = NO
 MESSENGER_AUTO_ROUTING = NO
 
 [nat]

-- 
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]