aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/gnunet-service-messenger_message_recv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_recv.c')
-rw-r--r--src/messenger/gnunet-service-messenger_message_recv.c30
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
31static void 32static 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))