diff options
Diffstat (limited to 'src/service/messenger/messenger_api_queue_messages.c')
-rw-r--r-- | src/service/messenger/messenger_api_queue_messages.c | 21 |
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 | ||
30 | void | 31 | void |
@@ -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) | |||
62 | void | 66 | void |
63 | enqueue_to_messages (struct GNUNET_MESSENGER_QueueMessages *messages, | 67 | enqueue_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 | ||
94 | struct GNUNET_MESSENGER_Message* | 100 | struct GNUNET_MESSENGER_Message* |
95 | dequeue_from_messages (struct GNUNET_MESSENGER_QueueMessages *messages, | 101 | dequeue_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) |