diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_recv.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_message_recv.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/messenger/gnunet-service-messenger_message_recv.c b/src/messenger/gnunet-service-messenger_message_recv.c index 94202fdca..3b545cfa4 100644 --- a/src/messenger/gnunet-service-messenger_message_recv.c +++ b/src/messenger/gnunet-service-messenger_message_recv.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | Copyright (C) 2020--2022 GNUnet e.V. | 3 | Copyright (C) 2020--2023 GNUnet e.V. |
4 | 4 | ||
5 | GNUnet is free software: you can redistribute it and/or modify it | 5 | GNUnet is free software: you can redistribute it and/or modify it |
6 | under the terms of the GNU Affero General Public License as published | 6 | under the terms of the GNU Affero General Public License as published |
@@ -26,6 +26,7 @@ | |||
26 | #include "platform.h" | 26 | #include "platform.h" |
27 | #include "gnunet-service-messenger_message_recv.h" | 27 | #include "gnunet-service-messenger_message_recv.h" |
28 | 28 | ||
29 | #include "gnunet-service-messenger_message_kind.h" | ||
29 | #include "gnunet-service-messenger_operation.h" | 30 | #include "gnunet-service-messenger_operation.h" |
30 | 31 | ||
31 | static void | 32 | static void |
@@ -92,24 +93,36 @@ recv_message_info (struct GNUNET_MESSENGER_SrvRoom *room, | |||
92 | return GNUNET_NO; | 93 | return GNUNET_NO; |
93 | 94 | ||
94 | if (room->host) | 95 | if (room->host) |
95 | { | 96 | send_tunnel_message (tunnel, room->host, create_message_info (room->service)); |
96 | const struct GNUNET_MESSENGER_Ego *ego = get_srv_handle_ego(room->host); | ||
97 | |||
98 | send_tunnel_message (tunnel, room->host, create_message_info(ego)); | ||
99 | } | ||
100 | 97 | ||
101 | struct GNUNET_PeerIdentity peer; | 98 | struct GNUNET_PeerIdentity peer; |
102 | get_tunnel_peer_identity(tunnel, &peer); | 99 | get_tunnel_peer_identity(tunnel, &peer); |
103 | 100 | ||
104 | if (GNUNET_YES != contains_list_tunnels(&(room->basement), &peer)) | 101 | if (GNUNET_YES != contains_list_tunnels(&(room->basement), &peer)) |
105 | { | 102 | { |
103 | struct GNUNET_MESSENGER_MessageStore *message_store = get_srv_room_message_store(room); | ||
104 | |||
105 | struct GNUNET_MESSENGER_ListTunnel *element; | ||
106 | for (element = room->basement.head; element; element = element->next) | ||
107 | { | ||
108 | if (!element->hash) | ||
109 | continue; | ||
110 | |||
111 | const struct GNUNET_MESSENGER_Message *message = get_store_message(message_store, element->hash); | ||
112 | |||
113 | if (message) | ||
114 | forward_tunnel_message(tunnel, message, element->hash); | ||
115 | } | ||
116 | } | ||
117 | |||
118 | if (GNUNET_YES != contains_list_tunnels(&(room->basement), &peer)) | ||
119 | { | ||
106 | struct GNUNET_MESSENGER_MemberStore *member_store = get_srv_room_member_store(room); | 120 | struct GNUNET_MESSENGER_MemberStore *member_store = get_srv_room_member_store(room); |
107 | 121 | ||
108 | iterate_store_members(member_store, iterate_forward_members, tunnel); | 122 | iterate_store_members(member_store, iterate_forward_members, tunnel); |
109 | } | 123 | } |
110 | 124 | ||
111 | check_srv_room_peer_status(room, tunnel); | 125 | check_srv_room_peer_status(room, tunnel); |
112 | |||
113 | return GNUNET_NO; | 126 | return GNUNET_NO; |
114 | } | 127 | } |
115 | 128 | ||
@@ -130,6 +143,7 @@ recv_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, | |||
130 | GNUNET_memcpy(tunnel->peer_message, &hash, sizeof(hash)); | 143 | GNUNET_memcpy(tunnel->peer_message, &hash, sizeof(hash)); |
131 | } | 144 | } |
132 | 145 | ||
146 | update_to_list_tunnels(&(room->basement), &(message->body.peer.peer), hash); | ||
133 | return GNUNET_YES; | 147 | return GNUNET_YES; |
134 | } | 148 | } |
135 | 149 | ||
@@ -176,7 +190,7 @@ recv_message_request (struct GNUNET_MESSENGER_SrvRoom *room, | |||
176 | 190 | ||
177 | struct GNUNET_MESSENGER_MemberSession *session = get_member_session_of(member, message, hash); | 191 | struct GNUNET_MESSENGER_MemberSession *session = get_member_session_of(member, message, hash); |
178 | 192 | ||
179 | if ((!session) || (GNUNET_YES != check_member_session_history(session, hash, GNUNET_NO))) | 193 | if ((!session) || (GNUNET_YES != check_member_session_history(session, &(message->body.request.hash), GNUNET_NO))) |
180 | return GNUNET_NO; | 194 | return GNUNET_NO; |
181 | 195 | ||
182 | if (GNUNET_NO == request_srv_room_message(room, &(message->body.request.hash), session, callback_found_message, tunnel)) | 196 | if (GNUNET_NO == request_srv_room_message(room, &(message->body.request.hash), session, callback_found_message, tunnel)) |