aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2021-11-19 20:18:07 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2021-11-19 20:18:07 +0100
commit020bc56abfb923fa2f4c770be71eb8b26adfbb89 (patch)
tree7c4f8e8d6bd6fc97041fa4a1de1a0f8d3039e163
parent7e5fdf07515b4a921de564adc67b2808e6ad28e2 (diff)
downloadgnunet-020bc56abfb923fa2f4c770be71eb8b26adfbb89.tar.gz
gnunet-020bc56abfb923fa2f4c770be71eb8b26adfbb89.zip
-fix missing own member session during room opening
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/messenger/gnunet-service-messenger.c2
-rw-r--r--src/messenger/gnunet-service-messenger_handle.c14
-rw-r--r--src/messenger/gnunet-service-messenger_handle.h4
-rw-r--r--src/messenger/gnunet-service-messenger_room.c11
-rw-r--r--src/messenger/gnunet-service-messenger_service.c2
5 files changed, 20 insertions, 13 deletions
diff --git a/src/messenger/gnunet-service-messenger.c b/src/messenger/gnunet-service-messenger.c
index a994e16ee..67a8b16e3 100644
--- a/src/messenger/gnunet-service-messenger.c
+++ b/src/messenger/gnunet-service-messenger.c
@@ -310,7 +310,7 @@ callback_found_message (void *cls,
310 struct GNUNET_MESSENGER_MemberSession *session = get_member_session_of(member, message, hash); 310 struct GNUNET_MESSENGER_MemberSession *session = get_member_session_of(member, message, hash);
311 311
312 if (session) 312 if (session)
313 notify_handle_message (msg_client->handle, get_room_key(room), session, message, hash); 313 notify_handle_message (msg_client->handle, room, session, message, hash);
314} 314}
315 315
316static void 316static void
diff --git a/src/messenger/gnunet-service-messenger_handle.c b/src/messenger/gnunet-service-messenger_handle.c
index 2095f8b29..fa6830697 100644
--- a/src/messenger/gnunet-service-messenger_handle.c
+++ b/src/messenger/gnunet-service-messenger_handle.c
@@ -501,14 +501,14 @@ get_next_member_session_contect(const struct GNUNET_MESSENGER_MemberSession *ses
501 501
502static const struct GNUNET_MESSENGER_MemberSession* 502static const struct GNUNET_MESSENGER_MemberSession*
503get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle, 503get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle,
504 struct GNUNET_MESSENGER_SrvRoom *room,
504 const struct GNUNET_HashCode *key) 505 const struct GNUNET_HashCode *key)
505{ 506{
506 GNUNET_assert((handle) && (key) && (handle->service)); 507 GNUNET_assert((handle) && (room) && (key) && (handle->service));
507 508
508 const struct GNUNET_ShortHashCode *id = get_handle_member_id(handle, key); 509 const struct GNUNET_ShortHashCode *id = get_handle_member_id(handle, key);
509 struct GNUNET_MESSENGER_SrvRoom *room = get_service_room(handle->service, key);
510 510
511 if ((!id) || (!room)) 511 if (!id)
512 return NULL; 512 return NULL;
513 513
514 struct GNUNET_MESSENGER_MemberStore *store = get_room_member_store(room); 514 struct GNUNET_MESSENGER_MemberStore *store = get_room_member_store(room);
@@ -524,12 +524,14 @@ get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle,
524 524
525void 525void
526notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, 526notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
527 const struct GNUNET_HashCode *key, 527 struct GNUNET_MESSENGER_SrvRoom *room,
528 const struct GNUNET_MESSENGER_MemberSession *session, 528 const struct GNUNET_MESSENGER_MemberSession *session,
529 const struct GNUNET_MESSENGER_Message *message, 529 const struct GNUNET_MESSENGER_Message *message,
530 const struct GNUNET_HashCode *hash) 530 const struct GNUNET_HashCode *hash)
531{ 531{
532 GNUNET_assert((handle) && (key) && (session) && (message) && (hash)); 532 GNUNET_assert((handle) && (room) && (session) && (message) && (hash));
533
534 const struct GNUNET_HashCode *key = get_room_key(room);
533 535
534 if ((!handle->mq) || (!get_handle_member_id (handle, key))) 536 if ((!handle->mq) || (!get_handle_member_id (handle, key)))
535 { 537 {
@@ -575,7 +577,7 @@ notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
575 577
576 msg->flags = (uint32_t) GNUNET_MESSENGER_FLAG_NONE; 578 msg->flags = (uint32_t) GNUNET_MESSENGER_FLAG_NONE;
577 579
578 if (get_handle_member_session(handle, key) == session) 580 if (get_handle_member_session(handle, room, key) == session)
579 msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_SENT; 581 msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_SENT;
580 582
581 if (private_message) 583 if (private_message)
diff --git a/src/messenger/gnunet-service-messenger_handle.h b/src/messenger/gnunet-service-messenger_handle.h
index 97a984721..4438570b9 100644
--- a/src/messenger/gnunet-service-messenger_handle.h
+++ b/src/messenger/gnunet-service-messenger_handle.h
@@ -219,14 +219,14 @@ send_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
219 * Notifies the handle that a new message was received or sent. 219 * Notifies the handle that a new message was received or sent.
220 * 220 *
221 * @param[in/out] handle Handle 221 * @param[in/out] handle Handle
222 * @param[in] key Key of room 222 * @param[in] room Room of the message
223 * @param[in] session Member session 223 * @param[in] session Member session
224 * @param[in] message Message 224 * @param[in] message Message
225 * @param[in] hash Hash of message 225 * @param[in] hash Hash of message
226 */ 226 */
227void 227void
228notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, 228notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
229 const struct GNUNET_HashCode *key, 229 struct GNUNET_MESSENGER_SrvRoom *room,
230 const struct GNUNET_MESSENGER_MemberSession *session, 230 const struct GNUNET_MESSENGER_MemberSession *session,
231 const struct GNUNET_MESSENGER_Message *message, 231 const struct GNUNET_MESSENGER_Message *message,
232 const struct GNUNET_HashCode *hash); 232 const struct GNUNET_HashCode *hash);
diff --git a/src/messenger/gnunet-service-messenger_room.c b/src/messenger/gnunet-service-messenger_room.c
index 920abb10e..77657591e 100644
--- a/src/messenger/gnunet-service-messenger_room.c
+++ b/src/messenger/gnunet-service-messenger_room.c
@@ -212,7 +212,9 @@ join_room (struct GNUNET_MESSENGER_SrvRoom *room,
212 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Joining room: %s (%s)\n", GNUNET_h2s (get_room_key (room)), 212 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Joining room: %s (%s)\n", GNUNET_h2s (get_room_key (room)),
213 GNUNET_sh2s (get_member_id(member))); 213 GNUNET_sh2s (get_member_id(member)));
214 214
215 if (GNUNET_OK != change_handle_member_id (handle, get_room_key(room), get_member_id(member))) 215 const struct GNUNET_ShortHashCode *member_id = get_member_id(member);
216
217 if (GNUNET_OK != change_handle_member_id (handle, get_room_key(room), member_id))
216 return GNUNET_NO; 218 return GNUNET_NO;
217 219
218 struct GNUNET_MESSENGER_Message *message = create_message_join (get_handle_ego (handle)); 220 struct GNUNET_MESSENGER_Message *message = create_message_join (get_handle_ego (handle));
@@ -224,6 +226,7 @@ join_room (struct GNUNET_MESSENGER_SrvRoom *room,
224 return GNUNET_NO; 226 return GNUNET_NO;
225 } 227 }
226 228
229 GNUNET_memcpy(&(message->header.sender_id), member_id, sizeof(*member_id));
227 return send_room_message (room, handle, message); 230 return send_room_message (room, handle, message);
228} 231}
229 232
@@ -262,7 +265,7 @@ notify_about_members (struct GNUNET_MESSENGER_MemberNotify *notify,
262 const struct GNUNET_MESSENGER_Message *message = get_store_message(message_store, &(element->hash)); 265 const struct GNUNET_MESSENGER_Message *message = get_store_message(message_store, &(element->hash));
263 266
264 if (message) 267 if (message)
265 notify_handle_message (notify->handle, get_room_key(notify->room), session, message, &(element->hash)); 268 notify_handle_message (notify->handle, notify->room, session, message, &(element->hash));
266 } 269 }
267} 270}
268 271
@@ -377,7 +380,9 @@ open_room (struct GNUNET_MESSENGER_SrvRoom *room,
377 } 380 }
378 381
379exit_open_room: 382exit_open_room:
380 return (room->port ? send_room_message (room, handle, create_message_peer (room->service)) : GNUNET_NO); 383 struct GNUNET_MESSENGER_Message *peer_msg = create_message_peer (room->service);
384 GNUNET_memcpy(&(peer_msg->header.sender_id), member_id, sizeof(*member_id));
385 return (room->port ? send_room_message (room, handle, peer_msg) : GNUNET_NO);
381} 386}
382 387
383int 388int
diff --git a/src/messenger/gnunet-service-messenger_service.c b/src/messenger/gnunet-service-messenger_service.c
index 91165cf63..b53b72af8 100644
--- a/src/messenger/gnunet-service-messenger_service.c
+++ b/src/messenger/gnunet-service-messenger_service.c
@@ -313,7 +313,7 @@ handle_service_message (struct GNUNET_MESSENGER_Service *service,
313 313
314 while (element) 314 while (element)
315 { 315 {
316 notify_handle_message (element->handle, get_room_key(room), session, message, hash); 316 notify_handle_message (element->handle, room, session, message, hash);
317 element = element->next; 317 element = element->next;
318 } 318 }
319} 319}