aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2023-12-17 15:34:48 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2023-12-17 15:34:48 +0100
commit81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980 (patch)
treed94a64c5c4050e58c9b67c5db40eac940e44d2b2
parent9cd3c4407929040dcac621a9b5ced8da28488dca (diff)
downloadgnunet-81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980.tar.gz
gnunet-81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980.zip
MESSENGER: Implement automatic connection to remaining routing peers on closed connection
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/service/messenger/gnunet-service-messenger_room.c13
-rw-r--r--src/service/messenger/gnunet-service-messenger_service.c4
-rw-r--r--src/service/messenger/gnunet-service-messenger_service.h1
-rw-r--r--src/service/messenger/messenger.conf.in1
-rw-r--r--src/service/messenger/messenger_api_list_tunnels.c21
-rw-r--r--src/service/messenger/messenger_api_list_tunnels.h13
-rw-r--r--src/service/messenger/test_messenger_api.conf1
7 files changed, 54 insertions, 0 deletions
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,
869 869
870 if (GNUNET_YES == contains_list_tunnels (&(room->basement), &identity)) 870 if (GNUNET_YES == contains_list_tunnels (&(room->basement), &identity))
871 send_srv_room_message (room, room->host, create_message_miss (&identity)); 871 send_srv_room_message (room, room->host, create_message_miss (&identity));
872
873 if ((0 < GNUNET_CONTAINER_multipeermap_size (room->tunnels)) ||
874 (GNUNET_NO == room->service->auto_connecting))
875 return;
876
877 struct GNUNET_MESSENGER_ListTunnel *element;
878 element = find_list_tunnels_alternate (&(room->basement), &identity);
879
880 if (!element)
881 return;
882
883 GNUNET_PEER_resolve (element->peer, &identity);
884 enter_srv_room_at (room, room->host, &identity);
872} 885}
873 886
874 887
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,
83 } 83 }
84 } 84 }
85 85
86 service->auto_connecting = GNUNET_CONFIGURATION_get_value_yesno (service->config,
87 GNUNET_MESSENGER_SERVICE_NAME,
88 "MESSENGER_AUTO_CONNECTING");
89
86 service->auto_routing = GNUNET_CONFIGURATION_get_value_yesno (service->config, 90 service->auto_routing = GNUNET_CONFIGURATION_get_value_yesno (service->config,
87 GNUNET_MESSENGER_SERVICE_NAME, 91 GNUNET_MESSENGER_SERVICE_NAME,
88 "MESSENGER_AUTO_ROUTING"); 92 "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
48 struct GNUNET_PeerIdentity *peer; 48 struct GNUNET_PeerIdentity *peer;
49 char *dir; 49 char *dir;
50 50
51 enum GNUNET_GenericReturnValue auto_connecting;
51 enum GNUNET_GenericReturnValue auto_routing; 52 enum GNUNET_GenericReturnValue auto_routing;
52 unsigned long long min_routers; 53 unsigned long long min_routers;
53 54
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
12 12
13# Directory to store messages and contacts 13# Directory to store messages and contacts
14MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/ 14MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/
15MESSENGER_AUTO_CONNECTING = YES
15MESSENGER_AUTO_ROUTING = YES 16MESSENGER_AUTO_ROUTING = YES
16MESSENGER_MIN_ROUTERS = 3 \ No newline at end of file 17MESSENGER_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,
114} 114}
115 115
116 116
117struct GNUNET_MESSENGER_ListTunnel*
118find_list_tunnels_alternate (struct GNUNET_MESSENGER_ListTunnels *tunnels,
119 const struct GNUNET_PeerIdentity *peer)
120{
121 GNUNET_assert ((tunnels) && (peer));
122
123 struct GNUNET_MESSENGER_ListTunnel *element;
124 struct GNUNET_PeerIdentity pid;
125
126 for (element = tunnels->head; element; element = element->next)
127 {
128 GNUNET_PEER_resolve (element->peer, &pid);
129
130 if (0 != GNUNET_memcmp (&pid, peer))
131 return element;
132 }
133
134 return NULL;
135}
136
137
117enum GNUNET_GenericReturnValue 138enum GNUNET_GenericReturnValue
118verify_list_tunnels_flag_token (const struct GNUNET_MESSENGER_ListTunnels *tunnels, 139verify_list_tunnels_flag_token (const struct GNUNET_MESSENGER_ListTunnels *tunnels,
119 const struct GNUNET_PeerIdentity *peer, 140 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
@@ -98,6 +98,19 @@ find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
98 size_t *index); 98 size_t *index);
99 99
100/** 100/**
101 * Searches linearly through the list of tunnels peer identities for matching
102 * against a specific <i>peer</i> identity and returns an element of the list
103 * which does not match it.
104 *
105 * @param[in,out] tunnels List of tunnels
106 * @param[in] peer Peer identity of tunnel
107 * @return Element in the list with unmatching peer identity
108 */
109struct GNUNET_MESSENGER_ListTunnel*
110find_list_tunnels_alternate (struct GNUNET_MESSENGER_ListTunnels *tunnels,
111 const struct GNUNET_PeerIdentity *peer);
112
113/**
101 * Verifies that a specific tunnel selected by its <i>peer</i> identity in a 114 * Verifies that a specific tunnel selected by its <i>peer</i> identity in a
102 * list of <i>tunnels</i> is the first in order with a given connection <i>flag</i>. 115 * list of <i>tunnels</i> is the first in order with a given connection <i>flag</i>.
103 * 116 *
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
40 40
41[messenger] 41[messenger]
42START_ON_DEMAND = YES 42START_ON_DEMAND = YES
43MESSENGER_AUTO_CONNECTING = NO
43MESSENGER_AUTO_ROUTING = NO 44MESSENGER_AUTO_ROUTING = NO
44 45
45[nat] 46[nat]