diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_handle.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_handle.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/messenger/gnunet-service-messenger_handle.c b/src/messenger/gnunet-service-messenger_handle.c index 4d2318d62..d7007dbf6 100644 --- a/src/messenger/gnunet-service-messenger_handle.c +++ b/src/messenger/gnunet-service-messenger_handle.c | |||
@@ -474,6 +474,28 @@ get_next_member_session_contect(const struct GNUNET_MESSENGER_MemberSession *ses | |||
474 | return get_member_session_context(session); | 474 | return get_member_session_context(session); |
475 | } | 475 | } |
476 | 476 | ||
477 | static const struct GNUNET_MESSENGER_MemberSession* | ||
478 | get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) | ||
479 | { | ||
480 | GNUNET_assert((handle) && (key) && (handle->service)); | ||
481 | |||
482 | const struct GNUNET_ShortHashCode *id = get_handle_member_id(handle, key); | ||
483 | struct GNUNET_MESSENGER_SrvRoom *room = get_service_room(handle->service, key); | ||
484 | |||
485 | if ((!id) || (!room)) | ||
486 | return NULL; | ||
487 | |||
488 | struct GNUNET_MESSENGER_MemberStore *store = get_room_member_store(room); | ||
489 | struct GNUNET_MESSENGER_Member *member = get_store_member(store, id); | ||
490 | |||
491 | const struct GNUNET_MESSENGER_Ego *ego = get_handle_ego(handle); | ||
492 | |||
493 | if (!ego) | ||
494 | return NULL; | ||
495 | |||
496 | return get_member_session(member, &(ego->pub)); | ||
497 | } | ||
498 | |||
477 | void | 499 | void |
478 | notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, | 500 | notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, |
479 | const struct GNUNET_MESSENGER_MemberSession *session, | 501 | const struct GNUNET_MESSENGER_MemberSession *session, |
@@ -523,9 +545,13 @@ notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct G | |||
523 | GNUNET_memcpy(&(msg->context), context, sizeof(msg->context)); | 545 | GNUNET_memcpy(&(msg->context), context, sizeof(msg->context)); |
524 | GNUNET_memcpy(&(msg->hash), hash, sizeof(msg->hash)); | 546 | GNUNET_memcpy(&(msg->hash), hash, sizeof(msg->hash)); |
525 | 547 | ||
526 | msg->flags = (uint32_t) ( | 548 | msg->flags = (uint32_t) GNUNET_MESSENGER_FLAG_NONE; |
527 | private_message? GNUNET_MESSENGER_FLAG_PRIVATE : GNUNET_MESSENGER_FLAG_NONE | 549 | |
528 | ); | 550 | if (get_handle_member_session(handle, key) == session) |
551 | msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_SENT; | ||
552 | |||
553 | if (private_message) | ||
554 | msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_PRIVATE; | ||
529 | 555 | ||
530 | char *buffer = ((char*) msg) + sizeof(*msg); | 556 | char *buffer = ((char*) msg) + sizeof(*msg); |
531 | encode_message (message, length, buffer, GNUNET_YES); | 557 | encode_message (message, length, buffer, GNUNET_YES); |