diff options
author | t3sserakt <t3ss@posteo.de> | 2024-03-05 11:20:52 +0100 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2024-03-05 11:20:52 +0100 |
commit | abbd40ba2df305e6c8b2573f074e9037760640a4 (patch) | |
tree | af8ec74962262a536a3c1e778453c66abdfc10af | |
parent | 4bb95b3dc24d360756f1782b95f2bdc6b0272c08 (diff) | |
parent | 28c33aabecf1a00eff1c82583efe26e57fe59a64 (diff) | |
download | gnunet-abbd40ba2df305e6c8b2573f074e9037760640a4.tar.gz gnunet-abbd40ba2df305e6c8b2573f074e9037760640a4.zip |
Merge branch 'master' of ssh://git.gnunet.org/gnunet
-rw-r--r-- | src/service/messenger/Makefile.am | 1 | ||||
-rw-r--r-- | src/service/messenger/meson.build | 1 | ||||
-rw-r--r-- | src/service/messenger/messenger_api.c | 19 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_message_control.c | 248 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_message_control.h | 105 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_message_kind.c | 4 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_message_kind.h | 10 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_room.c | 14 | ||||
-rw-r--r-- | src/service/messenger/messenger_api_room.h | 13 |
9 files changed, 396 insertions, 19 deletions
diff --git a/src/service/messenger/Makefile.am b/src/service/messenger/Makefile.am index b1ecc13c8..93dcf9a78 100644 --- a/src/service/messenger/Makefile.am +++ b/src/service/messenger/Makefile.am | |||
@@ -37,6 +37,7 @@ libgnunetmessenger_la_SOURCES = \ | |||
37 | messenger_api_contact.c messenger_api_contact.h \ | 37 | messenger_api_contact.c messenger_api_contact.h \ |
38 | messenger_api_contact_store.c messenger_api_contact_store.h \ | 38 | messenger_api_contact_store.c messenger_api_contact_store.h \ |
39 | messenger_api_message.c messenger_api_message.h \ | 39 | messenger_api_message.c messenger_api_message.h \ |
40 | messenger_api_message_control.c messenger_api_message_control.h \ | ||
40 | messenger_api_message_kind.c messenger_api_message_kind.h \ | 41 | messenger_api_message_kind.c messenger_api_message_kind.h \ |
41 | messenger_api_list_tunnels.c messenger_api_list_tunnels.h \ | 42 | messenger_api_list_tunnels.c messenger_api_list_tunnels.h \ |
42 | messenger_api_queue_messages.c messenger_api_queue_messages.h \ | 43 | messenger_api_queue_messages.c messenger_api_queue_messages.h \ |
diff --git a/src/service/messenger/meson.build b/src/service/messenger/meson.build index 1e37e192f..4a472b6b5 100644 --- a/src/service/messenger/meson.build +++ b/src/service/messenger/meson.build | |||
@@ -2,6 +2,7 @@ libgnunetmessenger_src = ['messenger_api.c', | |||
2 | 'messenger_api_contact.c', | 2 | 'messenger_api_contact.c', |
3 | 'messenger_api_contact_store.c', | 3 | 'messenger_api_contact_store.c', |
4 | 'messenger_api_message.c', | 4 | 'messenger_api_message.c', |
5 | 'messenger_api_message_control.c', | ||
5 | 'messenger_api_message_kind.c', | 6 | 'messenger_api_message_kind.c', |
6 | 'messenger_api_list_tunnels.c', | 7 | 'messenger_api_list_tunnels.c', |
7 | 'messenger_api_queue_messages.c', | 8 | 'messenger_api_queue_messages.c', |
diff --git a/src/service/messenger/messenger_api.c b/src/service/messenger/messenger_api.c index 8afb9e42e..1d782ac13 100644 --- a/src/service/messenger/messenger_api.c +++ b/src/service/messenger/messenger_api.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include "messenger_api_contact_store.h" | 34 | #include "messenger_api_contact_store.h" |
35 | #include "messenger_api_handle.h" | 35 | #include "messenger_api_handle.h" |
36 | #include "messenger_api_message.h" | 36 | #include "messenger_api_message.h" |
37 | #include "messenger_api_message_control.h" | ||
37 | #include "messenger_api_message_kind.h" | 38 | #include "messenger_api_message_kind.h" |
38 | #include "messenger_api_room.h" | 39 | #include "messenger_api_room.h" |
39 | #include "messenger_api_util.h" | 40 | #include "messenger_api_util.h" |
@@ -295,22 +296,16 @@ handle_recv_message (void *cls, | |||
295 | goto skip_message; | 296 | goto skip_message; |
296 | } | 297 | } |
297 | 298 | ||
298 | struct GNUNET_MESSENGER_ContactStore *store = get_handle_contact_store ( | ||
299 | handle); | ||
300 | |||
301 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 299 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
302 | "Raw contact from sender and context: (%s : %s)\n", | 300 | "Raw contact from sender and context: (%s : %s)\n", |
303 | GNUNET_h2s (sender), GNUNET_h2s_full (context)); | 301 | GNUNET_h2s (sender), GNUNET_h2s_full (context)); |
304 | 302 | ||
305 | struct GNUNET_MESSENGER_Contact *contact = get_store_contact_raw ( | 303 | process_message_control (room->control, |
306 | store, context, sender); | 304 | sender, |
307 | 305 | context, | |
308 | handle_room_message (room, contact, &message, hash, flags); | 306 | hash, |
309 | 307 | &message, | |
310 | if (flags & GNUNET_MESSENGER_FLAG_RECENT) | 308 | flags); |
311 | update_room_last_message (room, hash); | ||
312 | |||
313 | callback_room_message (room, hash); | ||
314 | 309 | ||
315 | skip_message: | 310 | skip_message: |
316 | cleanup_message (&message); | 311 | cleanup_message (&message); |
diff --git a/src/service/messenger/messenger_api_message_control.c b/src/service/messenger/messenger_api_message_control.c new file mode 100644 index 000000000..30c52587f --- /dev/null +++ b/src/service/messenger/messenger_api_message_control.c | |||
@@ -0,0 +1,248 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2024 GNUnet e.V. | ||
4 | |||
5 | GNUnet is free software: you can redistribute it and/or modify it | ||
6 | under the terms of the GNU Affero General Public License as published | ||
7 | by the Free Software Foundation, either version 3 of the License, | ||
8 | or (at your option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Affero General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU Affero General Public License | ||
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | |||
18 | SPDX-License-Identifier: AGPL3.0-or-later | ||
19 | */ | ||
20 | /** | ||
21 | * @author Tobias Frisch | ||
22 | * @file src/messenger/messenger_api_message_control.c | ||
23 | * @brief messenger api: client and service implementation of GNUnet MESSENGER service | ||
24 | */ | ||
25 | |||
26 | #include "messenger_api_message_control.h" | ||
27 | |||
28 | #include "gnunet_common.h" | ||
29 | #include "gnunet_messenger_service.h" | ||
30 | #include "gnunet_scheduler_lib.h" | ||
31 | #include "messenger_api_contact.h" | ||
32 | #include "messenger_api_contact_store.h" | ||
33 | #include "messenger_api_handle.h" | ||
34 | #include "messenger_api_message.h" | ||
35 | #include "messenger_api_room.h" | ||
36 | |||
37 | struct GNUNET_MESSENGER_MessageControl* | ||
38 | create_message_control (struct GNUNET_MESSENGER_Room *room) | ||
39 | { | ||
40 | GNUNET_assert (room); | ||
41 | |||
42 | struct GNUNET_MESSENGER_MessageControl *control; | ||
43 | |||
44 | control = GNUNET_new (struct GNUNET_MESSENGER_MessageControl); | ||
45 | control->room = room; | ||
46 | |||
47 | control->peer_messages = GNUNET_CONTAINER_multishortmap_create (8, GNUNET_NO); | ||
48 | control->member_messages = GNUNET_CONTAINER_multishortmap_create (8, | ||
49 | GNUNET_NO); | ||
50 | |||
51 | control->head = NULL; | ||
52 | control->tail = NULL; | ||
53 | |||
54 | return control; | ||
55 | } | ||
56 | |||
57 | |||
58 | void | ||
59 | destroy_message_control (struct GNUNET_MESSENGER_MessageControl *control) | ||
60 | { | ||
61 | GNUNET_assert (control); | ||
62 | |||
63 | struct GNUNET_MESSENGER_MessageControlQueue *queue; | ||
64 | while (control->head) | ||
65 | { | ||
66 | queue = control->head; | ||
67 | |||
68 | if (queue->task) | ||
69 | GNUNET_SCHEDULER_cancel (queue->task); | ||
70 | |||
71 | destroy_message (queue->message); | ||
72 | |||
73 | GNUNET_CONTAINER_DLL_remove (control->head, control->tail, queue); | ||
74 | GNUNET_free (queue); | ||
75 | } | ||
76 | |||
77 | GNUNET_CONTAINER_multishortmap_destroy (control->peer_messages); | ||
78 | GNUNET_CONTAINER_multishortmap_destroy (control->member_messages); | ||
79 | |||
80 | GNUNET_free (control); | ||
81 | } | ||
82 | |||
83 | |||
84 | static void | ||
85 | enqueue_message_control (struct GNUNET_MESSENGER_MessageControl *control, | ||
86 | const struct GNUNET_HashCode *sender, | ||
87 | const struct GNUNET_HashCode *context, | ||
88 | const struct GNUNET_HashCode *hash, | ||
89 | const struct GNUNET_MESSENGER_Message *message, | ||
90 | enum GNUNET_MESSENGER_MessageFlags flags) | ||
91 | { | ||
92 | GNUNET_assert ((control) && (sender) && (context) && (hash) && (message)); | ||
93 | |||
94 | struct GNUNET_CONTAINER_MultiShortmap *map; | ||
95 | if (GNUNET_YES == is_peer_message (message)) | ||
96 | map = control->peer_messages; | ||
97 | else | ||
98 | map = control->member_messages; | ||
99 | |||
100 | struct GNUNET_MESSENGER_MessageControlQueue *queue; | ||
101 | |||
102 | queue = GNUNET_new (struct GNUNET_MESSENGER_MessageControlQueue); | ||
103 | queue->control = control; | ||
104 | |||
105 | GNUNET_memcpy (&(queue->sender), sender, sizeof (queue->sender)); | ||
106 | GNUNET_memcpy (&(queue->context), context, sizeof (queue->context)); | ||
107 | GNUNET_memcpy (&(queue->hash), hash, sizeof (queue->hash)); | ||
108 | |||
109 | queue->message = copy_message (message); | ||
110 | queue->flags = flags; | ||
111 | queue->task = NULL; | ||
112 | |||
113 | GNUNET_CONTAINER_DLL_insert (control->head, control->tail, queue); | ||
114 | |||
115 | GNUNET_CONTAINER_multishortmap_put (map, | ||
116 | &(message->header.sender_id), | ||
117 | queue, | ||
118 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | ||
119 | } | ||
120 | |||
121 | |||
122 | static void | ||
123 | handle_message_control (struct GNUNET_MESSENGER_MessageControl *control, | ||
124 | struct GNUNET_MESSENGER_Contact *contact, | ||
125 | const struct GNUNET_HashCode *hash, | ||
126 | const struct GNUNET_MESSENGER_Message *message, | ||
127 | enum GNUNET_MESSENGER_MessageFlags flags) | ||
128 | { | ||
129 | GNUNET_assert ((control) && (hash) && (message)); | ||
130 | |||
131 | handle_room_message (control->room, contact, message, hash, flags); | ||
132 | |||
133 | if (flags & GNUNET_MESSENGER_FLAG_RECENT) | ||
134 | update_room_last_message (control->room, hash); | ||
135 | |||
136 | callback_room_message (control->room, hash); | ||
137 | } | ||
138 | |||
139 | |||
140 | static void | ||
141 | task_message_control (void *cls) | ||
142 | { | ||
143 | GNUNET_assert (cls); | ||
144 | |||
145 | struct GNUNET_MESSENGER_MessageControlQueue *queue = cls; | ||
146 | struct GNUNET_MESSENGER_MessageControl *control = queue->control; | ||
147 | |||
148 | queue->task = NULL; | ||
149 | |||
150 | struct GNUNET_MESSENGER_Handle *handle = get_room_handle (control->room); | ||
151 | struct GNUNET_MESSENGER_ContactStore *store = get_handle_contact_store ( | ||
152 | handle); | ||
153 | |||
154 | struct GNUNET_MESSENGER_Contact *contact = get_store_contact_raw ( | ||
155 | store, &(queue->context), &(queue->sender)); | ||
156 | |||
157 | struct GNUNET_CONTAINER_MultiShortmap *map; | ||
158 | if (GNUNET_YES == is_peer_message (queue->message)) | ||
159 | map = control->peer_messages; | ||
160 | else | ||
161 | map = control->member_messages; | ||
162 | |||
163 | GNUNET_CONTAINER_multishortmap_remove (map, | ||
164 | &(queue->message->header.sender_id), | ||
165 | queue); | ||
166 | |||
167 | GNUNET_CONTAINER_DLL_remove (control->head, control->tail, queue); | ||
168 | |||
169 | handle_message_control (control, | ||
170 | contact, | ||
171 | &(queue->hash), | ||
172 | queue->message, | ||
173 | queue->flags); | ||
174 | |||
175 | destroy_message (queue->message); | ||
176 | |||
177 | GNUNET_free (queue); | ||
178 | } | ||
179 | |||
180 | |||
181 | static enum GNUNET_GenericReturnValue | ||
182 | iterate_message_control (void *cls, | ||
183 | const struct GNUNET_ShortHashCode *key, | ||
184 | void *value) | ||
185 | { | ||
186 | GNUNET_assert ((cls) && (key) && (value)); | ||
187 | |||
188 | struct GNUNET_MESSENGER_MessageControlQueue *queue = value; | ||
189 | |||
190 | if (queue->task) | ||
191 | return GNUNET_YES; | ||
192 | |||
193 | queue->task = GNUNET_SCHEDULER_add_now (task_message_control, queue); | ||
194 | return GNUNET_YES; | ||
195 | } | ||
196 | |||
197 | |||
198 | void | ||
199 | process_message_control (struct GNUNET_MESSENGER_MessageControl *control, | ||
200 | const struct GNUNET_HashCode *sender, | ||
201 | const struct GNUNET_HashCode *context, | ||
202 | const struct GNUNET_HashCode *hash, | ||
203 | const struct GNUNET_MESSENGER_Message *message, | ||
204 | enum GNUNET_MESSENGER_MessageFlags flags) | ||
205 | { | ||
206 | GNUNET_assert ((control) && (sender) && (context) && (hash) && (message)); | ||
207 | |||
208 | struct GNUNET_MESSENGER_Handle *handle = get_room_handle (control->room); | ||
209 | struct GNUNET_MESSENGER_ContactStore *store = get_handle_contact_store ( | ||
210 | handle); | ||
211 | |||
212 | struct GNUNET_MESSENGER_Contact *contact = get_store_contact_raw ( | ||
213 | store, context, sender); | ||
214 | |||
215 | if ((! contact) && | ||
216 | (GNUNET_MESSENGER_KIND_JOIN != message->header.kind) && | ||
217 | (GNUNET_MESSENGER_KIND_PEER != message->header.kind)) | ||
218 | enqueue_message_control (control, sender, context, hash, message, flags); | ||
219 | else | ||
220 | handle_message_control (control, contact, hash, message, flags); | ||
221 | |||
222 | struct GNUNET_CONTAINER_MultiShortmap *map = NULL; | ||
223 | const struct GNUNET_ShortHashCode *id = &(message->header.sender_id); | ||
224 | |||
225 | switch (message->header.kind) | ||
226 | { | ||
227 | case GNUNET_MESSENGER_KIND_JOIN: | ||
228 | map = control->member_messages; | ||
229 | break; | ||
230 | case GNUNET_MESSENGER_KIND_PEER: | ||
231 | map = control->peer_messages; | ||
232 | break; | ||
233 | case GNUNET_MESSENGER_KIND_ID: | ||
234 | map = control->member_messages; | ||
235 | id = &(message->body.id.id); | ||
236 | break; | ||
237 | default: | ||
238 | break; | ||
239 | } | ||
240 | |||
241 | if (! map) | ||
242 | return; | ||
243 | |||
244 | GNUNET_CONTAINER_multishortmap_get_multiple (map, | ||
245 | id, | ||
246 | iterate_message_control, | ||
247 | NULL); | ||
248 | } | ||
diff --git a/src/service/messenger/messenger_api_message_control.h b/src/service/messenger/messenger_api_message_control.h new file mode 100644 index 000000000..a990210f0 --- /dev/null +++ b/src/service/messenger/messenger_api_message_control.h | |||
@@ -0,0 +1,105 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2024 GNUnet e.V. | ||
4 | |||
5 | GNUnet is free software: you can redistribute it and/or modify it | ||
6 | under the terms of the GNU Affero General Public License as published | ||
7 | by the Free Software Foundation, either version 3 of the License, | ||
8 | or (at your option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Affero General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU Affero General Public License | ||
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | |||
18 | SPDX-License-Identifier: AGPL3.0-or-later | ||
19 | */ | ||
20 | /** | ||
21 | * @author Tobias Frisch | ||
22 | * @file src/messenger/messenger_api_message_control.h | ||
23 | * @brief messenger api: client and service implementation of GNUnet MESSENGER service | ||
24 | */ | ||
25 | |||
26 | #ifndef GNUNET_MESSENGER_API_MESSAGE_CONTROL_H | ||
27 | #define GNUNET_MESSENGER_API_MESSAGE_CONTROL_H | ||
28 | |||
29 | #include "gnunet_common.h" | ||
30 | #include "gnunet_messenger_service.h" | ||
31 | #include "gnunet_util_lib.h" | ||
32 | |||
33 | struct GNUNET_MESSENGER_Message; | ||
34 | struct GNUNET_MESSENGER_MessageControl; | ||
35 | |||
36 | struct GNUNET_MESSENGER_MessageControlQueue | ||
37 | { | ||
38 | struct GNUNET_MESSENGER_MessageControl *control; | ||
39 | |||
40 | struct GNUNET_HashCode sender; | ||
41 | struct GNUNET_HashCode context; | ||
42 | struct GNUNET_HashCode hash; | ||
43 | |||
44 | struct GNUNET_MESSENGER_Message *message; | ||
45 | enum GNUNET_MESSENGER_MessageFlags flags; | ||
46 | struct GNUNET_SCHEDULER_Task *task; | ||
47 | |||
48 | struct GNUNET_MESSENGER_MessageControlQueue *prev; | ||
49 | struct GNUNET_MESSENGER_MessageControlQueue *next; | ||
50 | }; | ||
51 | |||
52 | struct GNUNET_MESSENGER_Room; | ||
53 | |||
54 | struct GNUNET_MESSENGER_MessageControl | ||
55 | { | ||
56 | struct GNUNET_MESSENGER_Room *room; | ||
57 | |||
58 | struct GNUNET_CONTAINER_MultiShortmap *peer_messages; | ||
59 | struct GNUNET_CONTAINER_MultiShortmap *member_messages; | ||
60 | |||
61 | struct GNUNET_MESSENGER_MessageControlQueue *head; | ||
62 | struct GNUNET_MESSENGER_MessageControlQueue *tail; | ||
63 | }; | ||
64 | |||
65 | /** | ||
66 | * Creates and allocates a new message control for a <i>room</i> of the client API. | ||
67 | * | ||
68 | * @param[in,out] room Room | ||
69 | * @return New message control | ||
70 | */ | ||
71 | struct GNUNET_MESSENGER_MessageControl* | ||
72 | create_message_control (struct GNUNET_MESSENGER_Room *room); | ||
73 | |||
74 | /** | ||
75 | * Destroys a message control and frees its memory fully from the client API. | ||
76 | * | ||
77 | * @param[in,out] control Message control | ||
78 | */ | ||
79 | void | ||
80 | destroy_message_control (struct GNUNET_MESSENGER_MessageControl *control); | ||
81 | |||
82 | /** | ||
83 | * Processes a new <i>message</i> with its <i>hash</i> and regarding information about | ||
84 | * <i>sender</i>, <i>context</i> and message <i>flags</i> using a selected message | ||
85 | * <i>control</i>. | ||
86 | * | ||
87 | * The message control will ensure order of messages so that senders of messages | ||
88 | * can be identified via previously processed messages. | ||
89 | * | ||
90 | * @param[in,out] control Message control | ||
91 | * @param[in] sender Sender hash | ||
92 | * @param[in] context Context hash | ||
93 | * @param[in] hash Message hash | ||
94 | * @param[in] message Message | ||
95 | * @param[in] flags Message flags | ||
96 | */ | ||
97 | void | ||
98 | process_message_control (struct GNUNET_MESSENGER_MessageControl *control, | ||
99 | const struct GNUNET_HashCode *sender, | ||
100 | const struct GNUNET_HashCode *context, | ||
101 | const struct GNUNET_HashCode *hash, | ||
102 | const struct GNUNET_MESSENGER_Message *message, | ||
103 | enum GNUNET_MESSENGER_MessageFlags flags); | ||
104 | |||
105 | #endif //GNUNET_MESSENGER_API_MESSAGE_CONTROL_H \ No newline at end of file | ||
diff --git a/src/service/messenger/messenger_api_message_kind.c b/src/service/messenger/messenger_api_message_kind.c index 537d54708..33338af9d 100644 --- a/src/service/messenger/messenger_api_message_kind.c +++ b/src/service/messenger/messenger_api_message_kind.c | |||
@@ -19,8 +19,8 @@ | |||
19 | */ | 19 | */ |
20 | /** | 20 | /** |
21 | * @author Tobias Frisch | 21 | * @author Tobias Frisch |
22 | * @file src/messenger/gnunet-service-messenger_message_kind.c | 22 | * @file src/messenger/messenger_api_message_kind.c |
23 | * @brief GNUnet MESSENGER service | 23 | * @brief messenger api: client and service implementation of GNUnet MESSENGER service |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include "messenger_api_message_kind.h" | 26 | #include "messenger_api_message_kind.h" |
diff --git a/src/service/messenger/messenger_api_message_kind.h b/src/service/messenger/messenger_api_message_kind.h index 97952d11f..a5bb12947 100644 --- a/src/service/messenger/messenger_api_message_kind.h +++ b/src/service/messenger/messenger_api_message_kind.h | |||
@@ -19,12 +19,12 @@ | |||
19 | */ | 19 | */ |
20 | /** | 20 | /** |
21 | * @author Tobias Frisch | 21 | * @author Tobias Frisch |
22 | * @file src/messenger/gnunet-service-messenger_message_kind.h | 22 | * @file src/messenger/messenger_api_message_kind.h |
23 | * @brief GNUnet MESSENGER service | 23 | * @brief messenger api: client and service implementation of GNUnet MESSENGER service |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H | 26 | #ifndef GNUNET_MESSENGER_API_MESSAGE_KIND_H |
27 | #define GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H | 27 | #define GNUNET_MESSENGER_API_MESSAGE_KIND_H |
28 | 28 | ||
29 | #include "gnunet_messenger_service.h" | 29 | #include "gnunet_messenger_service.h" |
30 | #include "gnunet_reclaim_lib.h" | 30 | #include "gnunet_reclaim_lib.h" |
@@ -136,4 +136,4 @@ create_message_delete (const struct GNUNET_HashCode *hash, | |||
136 | struct GNUNET_MESSENGER_Message* | 136 | struct GNUNET_MESSENGER_Message* |
137 | create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier); | 137 | create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier); |
138 | 138 | ||
139 | #endif //GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H | 139 | #endif //GNUNET_MESSENGER_API_MESSAGE_KIND_H |
diff --git a/src/service/messenger/messenger_api_room.c b/src/service/messenger/messenger_api_room.c index 715934f1c..e1970b668 100644 --- a/src/service/messenger/messenger_api_room.c +++ b/src/service/messenger/messenger_api_room.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include "messenger_api_contact_store.h" | 30 | #include "messenger_api_contact_store.h" |
31 | #include "messenger_api_handle.h" | 31 | #include "messenger_api_handle.h" |
32 | #include "messenger_api_message.h" | 32 | #include "messenger_api_message.h" |
33 | #include "messenger_api_message_control.h" | ||
33 | #include <string.h> | 34 | #include <string.h> |
34 | 35 | ||
35 | struct GNUNET_MESSENGER_Room* | 36 | struct GNUNET_MESSENGER_Room* |
@@ -60,6 +61,8 @@ create_room (struct GNUNET_MESSENGER_Handle *handle, | |||
60 | 61 | ||
61 | init_queue_messages (&(room->queue)); | 62 | init_queue_messages (&(room->queue)); |
62 | 63 | ||
64 | room->control = create_message_control (room); | ||
65 | |||
63 | return room; | 66 | return room; |
64 | } | 67 | } |
65 | 68 | ||
@@ -94,6 +97,8 @@ destroy_room (struct GNUNET_MESSENGER_Room *room) | |||
94 | { | 97 | { |
95 | GNUNET_assert (room); | 98 | GNUNET_assert (room); |
96 | 99 | ||
100 | destroy_message_control (room->control); | ||
101 | |||
97 | clear_queue_messages (&(room->queue)); | 102 | clear_queue_messages (&(room->queue)); |
98 | clear_list_tunnels (&(room->entries)); | 103 | clear_list_tunnels (&(room->entries)); |
99 | 104 | ||
@@ -138,6 +143,15 @@ is_room_available (const struct GNUNET_MESSENGER_Room *room) | |||
138 | } | 143 | } |
139 | 144 | ||
140 | 145 | ||
146 | struct GNUNET_MESSENGER_Handle* | ||
147 | get_room_handle (struct GNUNET_MESSENGER_Room *room) | ||
148 | { | ||
149 | GNUNET_assert (room); | ||
150 | |||
151 | return room->handle; | ||
152 | } | ||
153 | |||
154 | |||
141 | const struct GNUNET_ShortHashCode* | 155 | const struct GNUNET_ShortHashCode* |
142 | get_room_sender_id (const struct GNUNET_MESSENGER_Room *room) | 156 | get_room_sender_id (const struct GNUNET_MESSENGER_Room *room) |
143 | { | 157 | { |
diff --git a/src/service/messenger/messenger_api_room.h b/src/service/messenger/messenger_api_room.h index 4a7f6d6a2..f8460f4e1 100644 --- a/src/service/messenger/messenger_api_room.h +++ b/src/service/messenger/messenger_api_room.h | |||
@@ -32,8 +32,10 @@ | |||
32 | 32 | ||
33 | #include "gnunet_messenger_service.h" | 33 | #include "gnunet_messenger_service.h" |
34 | 34 | ||
35 | #include "messenger_api_handle.h" | ||
35 | #include "messenger_api_list_tunnels.h" | 36 | #include "messenger_api_list_tunnels.h" |
36 | #include "messenger_api_contact.h" | 37 | #include "messenger_api_contact.h" |
38 | #include "messenger_api_message_control.h" | ||
37 | #include "messenger_api_queue_messages.h" | 39 | #include "messenger_api_queue_messages.h" |
38 | 40 | ||
39 | struct GNUNET_MESSENGER_RoomMessageEntry | 41 | struct GNUNET_MESSENGER_RoomMessageEntry |
@@ -66,6 +68,8 @@ struct GNUNET_MESSENGER_Room | |||
66 | struct GNUNET_CONTAINER_MultiHashMap *links; | 68 | struct GNUNET_CONTAINER_MultiHashMap *links; |
67 | 69 | ||
68 | struct GNUNET_MESSENGER_QueueMessages queue; | 70 | struct GNUNET_MESSENGER_QueueMessages queue; |
71 | |||
72 | struct GNUNET_MESSENGER_MessageControl *control; | ||
69 | }; | 73 | }; |
70 | 74 | ||
71 | typedef void (*GNUNET_MESSENGER_RoomLinkDeletion) (struct | 75 | typedef void (*GNUNET_MESSENGER_RoomLinkDeletion) (struct |
@@ -104,6 +108,15 @@ enum GNUNET_GenericReturnValue | |||
104 | is_room_available (const struct GNUNET_MESSENGER_Room *room); | 108 | is_room_available (const struct GNUNET_MESSENGER_Room *room); |
105 | 109 | ||
106 | /** | 110 | /** |
111 | * Returns the messenger handle of the <i>room</i>. | ||
112 | * | ||
113 | * @param[in,out] room Room | ||
114 | * @return Messenger handle or NULL | ||
115 | */ | ||
116 | struct GNUNET_MESSENGER_Handle* | ||
117 | get_room_handle (struct GNUNET_MESSENGER_Room *room); | ||
118 | |||
119 | /** | ||
107 | * Returns the member id of the <i>room</i>'s sender. | 120 | * Returns the member id of the <i>room</i>'s sender. |
108 | * | 121 | * |
109 | * @param[in] room Room | 122 | * @param[in] room Room |