aboutsummaryrefslogtreecommitdiff
path: root/src/service/messenger/messenger_api_queue_messages.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/messenger/messenger_api_queue_messages.c')
-rw-r--r--src/service/messenger/messenger_api_queue_messages.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/service/messenger/messenger_api_queue_messages.c b/src/service/messenger/messenger_api_queue_messages.c
index 4b153a524..876bed939 100644
--- a/src/service/messenger/messenger_api_queue_messages.c
+++ b/src/service/messenger/messenger_api_queue_messages.c
@@ -25,6 +25,7 @@
25 25
26#include "messenger_api_queue_messages.h" 26#include "messenger_api_queue_messages.h"
27 27
28#include "gnunet_messenger_service.h"
28#include "messenger_api_message.h" 29#include "messenger_api_message.h"
29 30
30void 31void
@@ -51,6 +52,9 @@ clear_queue_messages (struct GNUNET_MESSENGER_QueueMessages *messages)
51 if (element->message) 52 if (element->message)
52 destroy_message (element->message); 53 destroy_message (element->message);
53 54
55 if (element->transcript)
56 destroy_message (element->transcript);
57
54 GNUNET_free (element); 58 GNUNET_free (element);
55 } 59 }
56 60
@@ -62,7 +66,8 @@ clear_queue_messages (struct GNUNET_MESSENGER_QueueMessages *messages)
62void 66void
63enqueue_to_messages (struct GNUNET_MESSENGER_QueueMessages *messages, 67enqueue_to_messages (struct GNUNET_MESSENGER_QueueMessages *messages,
64 const struct GNUNET_CRYPTO_PrivateKey *sender, 68 const struct GNUNET_CRYPTO_PrivateKey *sender,
65 const struct GNUNET_MESSENGER_Message *message, 69 struct GNUNET_MESSENGER_Message *message,
70 struct GNUNET_MESSENGER_Message *transcript,
66 enum GNUNET_GenericReturnValue priority) 71 enum GNUNET_GenericReturnValue priority)
67{ 72{
68 GNUNET_assert ((messages) && (message)); 73 GNUNET_assert ((messages) && (message));
@@ -73,7 +78,8 @@ enqueue_to_messages (struct GNUNET_MESSENGER_QueueMessages *messages,
73 if (! element) 78 if (! element)
74 return; 79 return;
75 80
76 element->message = copy_message (message); 81 element->message = message;
82 element->transcript = transcript;
77 83
78 if (sender) 84 if (sender)
79 GNUNET_memcpy (&(element->sender), sender, sizeof (element->sender)); 85 GNUNET_memcpy (&(element->sender), sender, sizeof (element->sender));
@@ -93,17 +99,26 @@ enqueue_to_messages (struct GNUNET_MESSENGER_QueueMessages *messages,
93 99
94struct GNUNET_MESSENGER_Message* 100struct GNUNET_MESSENGER_Message*
95dequeue_from_messages (struct GNUNET_MESSENGER_QueueMessages *messages, 101dequeue_from_messages (struct GNUNET_MESSENGER_QueueMessages *messages,
96 struct GNUNET_CRYPTO_PrivateKey *sender) 102 struct GNUNET_CRYPTO_PrivateKey *sender,
103 struct GNUNET_MESSENGER_Message **transcript)
97{ 104{
98 GNUNET_assert (messages); 105 GNUNET_assert (messages);
99 106
100 struct GNUNET_MESSENGER_QueueMessage *element = messages->head; 107 struct GNUNET_MESSENGER_QueueMessage *element = messages->head;
101 108
102 if (! element) 109 if (! element)
110 {
111 if (transcript)
112 *transcript = NULL;
113
103 return NULL; 114 return NULL;
115 }
104 116
105 struct GNUNET_MESSENGER_Message *message = element->message; 117 struct GNUNET_MESSENGER_Message *message = element->message;
106 118
119 if (transcript)
120 *transcript = element->transcript;
121
107 GNUNET_CONTAINER_DLL_remove (messages->head, messages->tail, element); 122 GNUNET_CONTAINER_DLL_remove (messages->head, messages->tail, element);
108 123
109 if (sender) 124 if (sender)