aboutsummaryrefslogtreecommitdiff
path: root/src/service/messenger/gnunet-service-messenger_handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/messenger/gnunet-service-messenger_handle.c')
-rw-r--r--src/service/messenger/gnunet-service-messenger_handle.c46
1 files changed, 43 insertions, 3 deletions
diff --git a/src/service/messenger/gnunet-service-messenger_handle.c b/src/service/messenger/gnunet-service-messenger_handle.c
index c13517603..97414d129 100644
--- a/src/service/messenger/gnunet-service-messenger_handle.c
+++ b/src/service/messenger/gnunet-service-messenger_handle.c
@@ -240,6 +240,7 @@ open_srv_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle,
240 key, 240 key,
241 NULL, 241 NULL,
242 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE)) 242 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE))
243
243 return GNUNET_NO; 244 return GNUNET_NO;
244 245
245 if ((! get_srv_handle_member_id (handle, key)) && 246 if ((! get_srv_handle_member_id (handle, key)) &&
@@ -429,8 +430,10 @@ notify_srv_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
429 GNUNET_assert ((handle) && (room) && (session) && (message) && (hash)); 430 GNUNET_assert ((handle) && (room) && (session) && (message) && (hash));
430 431
431 const struct GNUNET_HashCode *key = get_srv_room_key (room); 432 const struct GNUNET_HashCode *key = get_srv_room_key (room);
433 const struct GNUNET_ShortHashCode *id = get_srv_handle_member_id (handle,
434 key);
432 435
433 if ((! handle->mq) || (! get_srv_handle_member_id (handle, key))) 436 if ((! handle->mq) || (! id))
434 { 437 {
435 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 438 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
436 "Notifying client about message requires membership!\n"); 439 "Notifying client about message requires membership!\n");
@@ -440,6 +443,39 @@ notify_srv_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
440 struct GNUNET_HashCode sender; 443 struct GNUNET_HashCode sender;
441 const struct GNUNET_HashCode *context = NULL; 444 const struct GNUNET_HashCode *context = NULL;
442 445
446 if (GNUNET_MESSENGER_KIND_TALK != message->header.kind)
447 goto skip_message_filter;
448
449 struct GNUNET_TIME_Absolute timestamp =
450 GNUNET_TIME_absolute_ntoh(message->header.timestamp);
451 const struct GNUNET_ShortHashCode *discourse =
452 &(message->body.talk.discourse);
453
454 struct GNUNET_MESSENGER_MemberStore *member_store =
455 get_srv_room_member_store (room);
456
457 if (! member_store)
458 return;
459
460 struct GNUNET_MESSENGER_Member *member =
461 get_store_member (member_store, id);
462
463 if (! member)
464 return;
465
466 struct GNUNET_MESSENGER_Subscription *subscription =
467 get_member_subscription(member, discourse);
468
469 if ((! subscription) ||
470 (GNUNET_YES != has_subscription_of_timestamp(subscription, timestamp)))
471 {
472 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
473 "Dropping message for client outside of subscription: %s\n",
474 GNUNET_h2s (hash));
475 return;
476 }
477
478skip_message_filter:
443 if (GNUNET_YES == is_peer_message (message)) 479 if (GNUNET_YES == is_peer_message (message))
444 { 480 {
445 const struct GNUNET_PeerIdentity *identity = session->peer; 481 const struct GNUNET_PeerIdentity *identity = session->peer;
@@ -449,8 +485,8 @@ notify_srv_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle,
449 } 485 }
450 else 486 else
451 { 487 {
452 const struct GNUNET_CRYPTO_PublicKey *pubkey = get_contact_key ( 488 const struct GNUNET_CRYPTO_PublicKey *pubkey;
453 session->member->contact); 489 pubkey = get_member_session_public_key (session->member);
454 GNUNET_CRYPTO_hash (pubkey, sizeof(*pubkey), &sender); 490 GNUNET_CRYPTO_hash (pubkey, sizeof(*pubkey), &sender);
455 491
456 context = get_next_member_session_context (session->member); 492 context = get_next_member_session_context (session->member);
@@ -499,6 +535,10 @@ iterate_next_member_ids (void *cls,
499 struct GNUNET_MESSENGER_SrvHandle *handle = cls; 535 struct GNUNET_MESSENGER_SrvHandle *handle = cls;
500 struct GNUNET_MESSENGER_NextMemberId *next = value; 536 struct GNUNET_MESSENGER_NextMemberId *next = value;
501 537
538 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
539 "Notifying client about next member id: %s (%s)\n",
540 GNUNET_sh2s (&(next->id)), GNUNET_h2s (key));
541
502 struct GNUNET_MESSENGER_MemberMessage *msg; 542 struct GNUNET_MESSENGER_MemberMessage *msg;
503 struct GNUNET_MQ_Envelope *env; 543 struct GNUNET_MQ_Envelope *env;
504 544