diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_handle.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_message_handle.c | 52 |
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 | ||
29 | static void | 29 | static void |
30 | handle_session_switch (struct GNUNET_MESSENGER_MemberSession *session, | 30 | handle_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 | ||
40 | void | 40 | void |
41 | handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, | 41 | handle_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 | ||
60 | void | 60 | void |
61 | handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, | 61 | handle_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 | ||
72 | void | 72 | void |
73 | handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, | 73 | handle_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 | ||
86 | void | 86 | void |
87 | handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, | 87 | handle_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 | ||
95 | void | 95 | void |
96 | handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, | 96 | handle_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 | ||
108 | void | 113 | void |
109 | handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, | 114 | handle_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 | ||
124 | void | 129 | void |
125 | handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, | 130 | handle_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 | ||
141 | void | 151 | void |
142 | handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room, | 152 | handle_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 | } |