diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2023-12-17 15:34:48 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2023-12-17 15:34:48 +0100 |
commit | 81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980 (patch) | |
tree | d94a64c5c4050e58c9b67c5db40eac940e44d2b2 | |
parent | 9cd3c4407929040dcac621a9b5ced8da28488dca (diff) | |
download | gnunet-81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980.tar.gz gnunet-81afa753e5ce3dddd52863c0e4c7c8fc5ac9b980.zip |
MESSENGER: Implement automatic connection to remaining routing peers on closed connection
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
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 |
14 | MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/ | 14 | MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/ |
15 | MESSENGER_AUTO_CONNECTING = YES | ||
15 | MESSENGER_AUTO_ROUTING = YES | 16 | MESSENGER_AUTO_ROUTING = YES |
16 | MESSENGER_MIN_ROUTERS = 3 \ No newline at end of file | 17 | 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, | |||
114 | } | 114 | } |
115 | 115 | ||
116 | 116 | ||
117 | struct GNUNET_MESSENGER_ListTunnel* | ||
118 | find_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 | |||
117 | enum GNUNET_GenericReturnValue | 138 | enum GNUNET_GenericReturnValue |
118 | verify_list_tunnels_flag_token (const struct GNUNET_MESSENGER_ListTunnels *tunnels, | 139 | verify_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 | */ | ||
109 | struct GNUNET_MESSENGER_ListTunnel* | ||
110 | find_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] |
42 | START_ON_DEMAND = YES | 42 | START_ON_DEMAND = YES |
43 | MESSENGER_AUTO_CONNECTING = NO | ||
43 | MESSENGER_AUTO_ROUTING = NO | 44 | MESSENGER_AUTO_ROUTING = NO |
44 | 45 | ||
45 | [nat] | 46 | [nat] |