diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-19 20:18:07 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-19 20:18:07 +0100 |
commit | 020bc56abfb923fa2f4c770be71eb8b26adfbb89 (patch) | |
tree | 7c4f8e8d6bd6fc97041fa4a1de1a0f8d3039e163 | |
parent | 7e5fdf07515b4a921de564adc67b2808e6ad28e2 (diff) | |
download | gnunet-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.c | 2 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_handle.c | 14 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_handle.h | 4 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_room.c | 11 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_service.c | 2 |
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 | ||
316 | static void | 316 | static 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 | ||
502 | static const struct GNUNET_MESSENGER_MemberSession* | 502 | static const struct GNUNET_MESSENGER_MemberSession* |
503 | get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle, | 503 | get_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 | ||
525 | void | 525 | void |
526 | notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, | 526 | notify_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 | */ |
227 | void | 227 | void |
228 | notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, | 228 | notify_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 | ||
379 | exit_open_room: | 382 | exit_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 | ||
383 | int | 388 | int |
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 | } |