aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/gnunet-service-messenger_message_handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_handle.c')
-rw-r--r--src/messenger/gnunet-service-messenger_message_handle.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/src/messenger/gnunet-service-messenger_message_handle.c b/src/messenger/gnunet-service-messenger_message_handle.c
index 06b987657..57b758fa4 100644
--- a/src/messenger/gnunet-service-messenger_message_handle.c
+++ b/src/messenger/gnunet-service-messenger_message_handle.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
@@ -27,9 +27,9 @@
27#include "gnunet-service-messenger_message_handle.h" 27#include "gnunet-service-messenger_message_handle.h"
28 28
29static void 29static void
30handle_session_switch (struct GNUNET_MESSENGER_MemberSession *session, 30handle_member_session_switch (struct GNUNET_MESSENGER_MemberSession *session,
31 const struct GNUNET_MESSENGER_Message *message, 31 const struct GNUNET_MESSENGER_Message *message,
32 const struct GNUNET_HashCode *hash) 32 const struct GNUNET_HashCode *hash)
33{ 33{
34 struct GNUNET_MESSENGER_MemberSession *next = switch_member_session(session, message, hash); 34 struct GNUNET_MESSENGER_MemberSession *next = switch_member_session(session, message, hash);
35 35
@@ -39,14 +39,14 @@ handle_session_switch (struct GNUNET_MESSENGER_MemberSession *session,
39 39
40void 40void
41handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, 41handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room,
42 struct GNUNET_MESSENGER_MemberSession *session, 42 struct GNUNET_MESSENGER_SenderSession *session,
43 const struct GNUNET_MESSENGER_Message *message, 43 const struct GNUNET_MESSENGER_Message *message,
44 const struct GNUNET_HashCode *hash) 44 const struct GNUNET_HashCode *hash)
45{ 45{
46 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n", 46 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n",
47 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room))); 47 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room)));
48 48
49 if (GNUNET_OK != reset_member_session(session, hash)) 49 if (GNUNET_OK != reset_member_session(session->member, hash))
50 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n"); 50 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n");
51 51
52 solve_srv_room_member_collisions ( 52 solve_srv_room_member_collisions (
@@ -59,23 +59,23 @@ handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room,
59 59
60void 60void
61handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, 61handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room,
62 struct GNUNET_MESSENGER_MemberSession *session, 62 struct GNUNET_MESSENGER_SenderSession *session,
63 const struct GNUNET_MESSENGER_Message *message, 63 const struct GNUNET_MESSENGER_Message *message,
64 const struct GNUNET_HashCode *hash) 64 const struct GNUNET_HashCode *hash)
65{ 65{
66 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n", 66 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n",
67 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room))); 67 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room)));
68 68
69 close_member_session(session); 69 close_member_session(session->member);
70} 70}
71 71
72void 72void
73handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, 73handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room,
74 struct GNUNET_MESSENGER_MemberSession *session, 74 struct GNUNET_MESSENGER_SenderSession *session,
75 const struct GNUNET_MESSENGER_Message *message, 75 const struct GNUNET_MESSENGER_Message *message,
76 const struct GNUNET_HashCode *hash) 76 const struct GNUNET_HashCode *hash)
77{ 77{
78 struct GNUNET_MESSENGER_Contact *contact = get_member_session_contact(session); 78 struct GNUNET_MESSENGER_Contact *contact = get_member_session_contact(session->member);
79 79
80 if (!contact) 80 if (!contact)
81 return; 81 return;
@@ -85,21 +85,26 @@ handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room,
85 85
86void 86void
87handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, 87handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room,
88 struct GNUNET_MESSENGER_MemberSession *session, 88 struct GNUNET_MESSENGER_SenderSession *session,
89 const struct GNUNET_MESSENGER_Message *message, 89 const struct GNUNET_MESSENGER_Message *message,
90 const struct GNUNET_HashCode *hash) 90 const struct GNUNET_HashCode *hash)
91{ 91{
92 handle_session_switch (session, message, hash); 92 handle_member_session_switch (session->member, message, hash);
93} 93}
94 94
95void 95void
96handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, 96handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room,
97 struct GNUNET_MESSENGER_MemberSession *session, 97 struct GNUNET_MESSENGER_SenderSession *session,
98 const struct GNUNET_MESSENGER_Message *message, 98 const struct GNUNET_MESSENGER_Message *message,
99 const struct GNUNET_HashCode *hash) 99 const struct GNUNET_HashCode *hash)
100{ 100{
101 struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room);
102
103 if (0 == GNUNET_memcmp(session->peer, &(message->body.peer.peer)))
104 update_store_peer(store, &(message->body.peer.peer));
105
101 if (GNUNET_NO == contains_list_tunnels (&(room->basement), &(message->body.peer.peer))) 106 if (GNUNET_NO == contains_list_tunnels (&(room->basement), &(message->body.peer.peer)))
102 add_to_list_tunnels (&(room->basement), &(message->body.peer.peer)); 107 add_to_list_tunnels (&(room->basement), &(message->body.peer.peer), hash);
103 108
104 if (room->peer_message) 109 if (room->peer_message)
105 rebuild_srv_room_basement_structure (room); 110 rebuild_srv_room_basement_structure (room);
@@ -107,15 +112,15 @@ handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room,
107 112
108void 113void
109handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, 114handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room,
110 struct GNUNET_MESSENGER_MemberSession *session, 115 struct GNUNET_MESSENGER_SenderSession *session,
111 const struct GNUNET_MESSENGER_Message *message, 116 const struct GNUNET_MESSENGER_Message *message,
112 const struct GNUNET_HashCode *hash) 117 const struct GNUNET_HashCode *hash)
113{ 118{
114 handle_session_switch (session, message, hash); 119 handle_member_session_switch (session->member, message, hash);
115 120
116 solve_srv_room_member_collisions ( 121 solve_srv_room_member_collisions (
117 room, 122 room,
118 get_member_session_public_key(session), 123 get_member_session_public_key(session->member),
119 &(message->body.id.id), 124 &(message->body.id.id),
120 GNUNET_TIME_absolute_ntoh(message->header.timestamp) 125 GNUNET_TIME_absolute_ntoh(message->header.timestamp)
121 ); 126 );
@@ -123,11 +128,16 @@ handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room,
123 128
124void 129void
125handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, 130handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room,
126 struct GNUNET_MESSENGER_MemberSession *session, 131 struct GNUNET_MESSENGER_SenderSession *session,
127 const struct GNUNET_MESSENGER_Message *message, 132 const struct GNUNET_MESSENGER_Message *message,
128 const struct GNUNET_HashCode *hash) 133 const struct GNUNET_HashCode *hash)
129{ 134{
130 struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (&(room->basement), &(message->body.peer.peer), NULL); 135 struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room);
136
137 if (0 == GNUNET_memcmp(session->peer, &(message->body.miss.peer)))
138 remove_store_peer(store, &(message->body.miss.peer));
139
140 struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (&(room->basement), &(message->body.miss.peer), NULL);
131 141
132 if (!element) 142 if (!element)
133 return; 143 return;
@@ -140,7 +150,7 @@ handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room,
140 150
141void 151void
142handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room, 152handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room,
143 struct GNUNET_MESSENGER_MemberSession *session, 153 struct GNUNET_MESSENGER_SenderSession *session,
144 const struct GNUNET_MESSENGER_Message *message, 154 const struct GNUNET_MESSENGER_Message *message,
145 const struct GNUNET_HashCode *hash) 155 const struct GNUNET_HashCode *hash)
146{ 156{
@@ -150,5 +160,5 @@ handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room,
150 action = GNUNET_TIME_absolute_add (action, delay); 160 action = GNUNET_TIME_absolute_add (action, delay);
151 delay = GNUNET_TIME_absolute_get_difference (GNUNET_TIME_absolute_get (), action); 161 delay = GNUNET_TIME_absolute_get_difference (GNUNET_TIME_absolute_get (), action);
152 162
153 delete_srv_room_message (room, session, &(message->body.deletion.hash), delay); 163 delete_srv_room_message (room, session->member, &(message->body.deletion.hash), delay);
154} 164}