diff options
-rw-r--r-- | src/service/messenger/messenger_api_room.c | 34 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_room.h | 1 |
2 files changed, 25 insertions, 10 deletions
diff --git a/src/service/messenger/messenger_api_room.c b/src/service/messenger/messenger_api_room.c index a15957f2f..7e1c3bcf4 100644 --- a/src/service/messenger/messenger_api_room.c +++ b/src/service/messenger/messenger_api_room.c | |||
@@ -180,10 +180,9 @@ get_room_message (const struct GNUNET_MESSENGER_Room *room, | |||
180 | 180 | ||
181 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = | 181 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = |
182 | GNUNET_CONTAINER_multihashmap_get ( | 182 | GNUNET_CONTAINER_multihashmap_get ( |
183 | room->messages, hash | 183 | room->messages, hash); |
184 | ); | ||
185 | 184 | ||
186 | if (! entry) | 185 | if ((! entry) || (GNUNET_YES != entry->completed)) |
187 | return NULL; | 186 | return NULL; |
188 | 187 | ||
189 | return entry->message; | 188 | return entry->message; |
@@ -198,10 +197,12 @@ get_room_sender (const struct GNUNET_MESSENGER_Room *room, | |||
198 | 197 | ||
199 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = | 198 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = |
200 | GNUNET_CONTAINER_multihashmap_get ( | 199 | GNUNET_CONTAINER_multihashmap_get ( |
201 | room->messages, hash | 200 | room->messages, hash); |
202 | ); | 201 | |
202 | if ((! entry) || (GNUNET_YES != entry->completed)) | ||
203 | return NULL; | ||
203 | 204 | ||
204 | return (entry? entry->sender : NULL); | 205 | return entry->sender; |
205 | } | 206 | } |
206 | 207 | ||
207 | 208 | ||
@@ -213,10 +214,12 @@ get_room_recipient (const struct GNUNET_MESSENGER_Room *room, | |||
213 | 214 | ||
214 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = | 215 | struct GNUNET_MESSENGER_RoomMessageEntry *entry = |
215 | GNUNET_CONTAINER_multihashmap_get ( | 216 | GNUNET_CONTAINER_multihashmap_get ( |
216 | room->messages, hash | 217 | room->messages, hash); |
217 | ); | 218 | |
219 | if ((! entry) || (GNUNET_YES != entry->completed)) | ||
220 | return NULL; | ||
218 | 221 | ||
219 | return (entry? entry->recipient : NULL); | 222 | return entry->recipient; |
220 | } | 223 | } |
221 | 224 | ||
222 | 225 | ||
@@ -522,6 +525,7 @@ handle_transcript_message (struct GNUNET_MESSENGER_Room *room, | |||
522 | 525 | ||
523 | original->message = NULL; | 526 | original->message = NULL; |
524 | original->flags = GNUNET_MESSENGER_FLAG_NONE; | 527 | original->flags = GNUNET_MESSENGER_FLAG_NONE; |
528 | original->completed = GNUNET_NO; | ||
525 | 529 | ||
526 | if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (room->messages, | 530 | if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (room->messages, |
527 | original_hash, | 531 | original_hash, |
@@ -550,12 +554,14 @@ read_transcript: | |||
550 | 554 | ||
551 | if (original->message) | 555 | if (original->message) |
552 | { | 556 | { |
557 | if (GNUNET_MESSENGER_KIND_PRIVATE == original->message->header.kind) | ||
558 | original->flags |= GNUNET_MESSENGER_FLAG_PRIVATE; | ||
559 | |||
553 | copy_message_header (original_message, &(original->message->header)); | 560 | copy_message_header (original_message, &(original->message->header)); |
554 | destroy_message (original->message); | 561 | destroy_message (original->message); |
555 | } | 562 | } |
556 | 563 | ||
557 | original->message = original_message; | 564 | original->message = original_message; |
558 | original->flags |= GNUNET_MESSENGER_FLAG_PRIVATE; | ||
559 | 565 | ||
560 | link_room_message(room, hash, original_hash); | 566 | link_room_message(room, hash, original_hash); |
561 | link_room_message(room, original_hash, hash); | 567 | link_room_message(room, original_hash, hash); |
@@ -638,6 +644,7 @@ handle_room_message (struct GNUNET_MESSENGER_Room *room, | |||
638 | 644 | ||
639 | entry->message = NULL; | 645 | entry->message = NULL; |
640 | entry->flags = GNUNET_MESSENGER_FLAG_NONE; | 646 | entry->flags = GNUNET_MESSENGER_FLAG_NONE; |
647 | entry->completed = GNUNET_NO; | ||
641 | 648 | ||
642 | if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (room->messages, hash, | 649 | if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (room->messages, hash, |
643 | entry, | 650 | entry, |
@@ -652,10 +659,17 @@ update_entry: | |||
652 | entry->flags = flags; | 659 | entry->flags = flags; |
653 | 660 | ||
654 | if (entry->message) | 661 | if (entry->message) |
662 | { | ||
663 | if (GNUNET_MESSENGER_KIND_PRIVATE == message->header.kind) | ||
664 | entry->flags |= GNUNET_MESSENGER_FLAG_PRIVATE; | ||
665 | |||
655 | copy_message_header (entry->message, &(message->header)); | 666 | copy_message_header (entry->message, &(message->header)); |
667 | } | ||
656 | else | 668 | else |
657 | entry->message = copy_message (message); | 669 | entry->message = copy_message (message); |
658 | 670 | ||
671 | entry->completed = GNUNET_YES; | ||
672 | |||
659 | handle_message (room, hash, entry); | 673 | handle_message (room, hash, entry); |
660 | } | 674 | } |
661 | 675 | ||
diff --git a/src/service/messenger/messenger_api_room.h b/src/service/messenger/messenger_api_room.h index 7587fb256..bf1a68fa3 100644 --- a/src/service/messenger/messenger_api_room.h +++ b/src/service/messenger/messenger_api_room.h | |||
@@ -43,6 +43,7 @@ struct GNUNET_MESSENGER_RoomMessageEntry | |||
43 | 43 | ||
44 | struct GNUNET_MESSENGER_Message *message; | 44 | struct GNUNET_MESSENGER_Message *message; |
45 | enum GNUNET_MESSENGER_MessageFlags flags; | 45 | enum GNUNET_MESSENGER_MessageFlags flags; |
46 | enum GNUNET_GenericReturnValue completed; | ||
46 | }; | 47 | }; |
47 | 48 | ||
48 | struct GNUNET_MESSENGER_Room | 49 | struct GNUNET_MESSENGER_Room |