aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2024-02-02 04:06:27 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2024-02-02 04:06:27 +0100
commitb6604bfa44f0e69492f03b4d8dc312fdaedb96be (patch)
treeed307ff6802e11a3b1c2c248b43069b39b093c0f
parenta03bacfb02bf65a764190e5de446097d146b964d (diff)
downloadgnunet-b6604bfa44f0e69492f03b4d8dc312fdaedb96be.tar.gz
gnunet-b6604bfa44f0e69492f03b4d8dc312fdaedb96be.zip
MESSENGER: Fix requests to complete messages on client-side
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/service/messenger/messenger_api_room.c34
-rw-r--r--src/service/messenger/messenger_api_room.h1
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
48struct GNUNET_MESSENGER_Room 49struct GNUNET_MESSENGER_Room