aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]src/messenger/gnunet-messenger.c14
-rwxr-xr-x[-rw-r--r--]src/messenger/gnunet-service-messenger.c4
-rwxr-xr-x[-rw-r--r--]src/messenger/gnunet-service-messenger_member.c10
-rwxr-xr-x[-rw-r--r--]src/messenger/gnunet-service-messenger_message_store.c10
-rwxr-xr-x[-rw-r--r--]src/messenger/gnunet-service-messenger_operation_store.c4
-rwxr-xr-x[-rw-r--r--]src/messenger/messenger_api_contact_store.c9
-rwxr-xr-x[-rw-r--r--]src/messenger/messenger_api_message.c2
-rwxr-xr-x[-rw-r--r--]src/messenger/messenger_api_room.c16
-rwxr-xr-x[-rw-r--r--]src/messenger/messenger_api_room.h6
9 files changed, 47 insertions, 28 deletions
diff --git a/src/messenger/gnunet-messenger.c b/src/messenger/gnunet-messenger.c
index 737bb83c8..094ae398d 100644..100755
--- a/src/messenger/gnunet-messenger.c
+++ b/src/messenger/gnunet-messenger.c
@@ -229,18 +229,12 @@ on_identity (void *cls, struct GNUNET_MESSENGER_Handle *handle)
229 if (room_key) 229 if (room_key)
230 GNUNET_CRYPTO_hash (room_key, strlen (room_key), &key); 230 GNUNET_CRYPTO_hash (room_key, strlen (room_key), &key);
231 231
232 struct GNUNET_PeerIdentity door_peer;
232 struct GNUNET_PeerIdentity *door = NULL; 233 struct GNUNET_PeerIdentity *door = NULL;
233 234
234 if (door_id) 235 if ((door_id) &&
235 { 236 (GNUNET_OK == GNUNET_CRYPTO_eddsa_public_key_from_string (door_id, strlen (door_id), &(door_peer.public_key))))
236 door = GNUNET_new(struct GNUNET_PeerIdentity); 237 door = &door_peer;
237
238 if (GNUNET_OK != GNUNET_CRYPTO_eddsa_public_key_from_string (door_id, strlen (door_id), &(door->public_key)))
239 {
240 GNUNET_free(door);
241 door = NULL;
242 }
243 }
244 238
245 const char *name = GNUNET_MESSENGER_get_name (handle); 239 const char *name = GNUNET_MESSENGER_get_name (handle);
246 240
diff --git a/src/messenger/gnunet-service-messenger.c b/src/messenger/gnunet-service-messenger.c
index 187b65ed5..76fb31d95 100644..100755
--- a/src/messenger/gnunet-service-messenger.c
+++ b/src/messenger/gnunet-service-messenger.c
@@ -191,7 +191,7 @@ check_send_message (void *cls, const struct GNUNET_MESSENGER_SendMessage *msg)
191 const uint16_t length = full_length - sizeof(*msg); 191 const uint16_t length = full_length - sizeof(*msg);
192 const char *buffer = ((const char*) msg) + sizeof(*msg); 192 const char *buffer = ((const char*) msg) + sizeof(*msg);
193 193
194 uint16_t key_length = 0; 194 ssize_t key_length = 0;
195 195
196 if (!(flags & GNUNET_MESSENGER_FLAG_PRIVATE)) 196 if (!(flags & GNUNET_MESSENGER_FLAG_PRIVATE))
197 goto check_for_message; 197 goto check_for_message;
@@ -231,7 +231,7 @@ handle_send_message (void *cls, const struct GNUNET_MESSENGER_SendMessage *msg)
231 const char *buffer = ((const char*) msg) + sizeof(*msg); 231 const char *buffer = ((const char*) msg) + sizeof(*msg);
232 232
233 const uint16_t length = ntohs (msg->header.size) - sizeof(*msg); 233 const uint16_t length = ntohs (msg->header.size) - sizeof(*msg);
234 uint16_t key_length = 0; 234 ssize_t key_length = 0;
235 235
236 struct GNUNET_IDENTITY_PublicKey public_key; 236 struct GNUNET_IDENTITY_PublicKey public_key;
237 237
diff --git a/src/messenger/gnunet-service-messenger_member.c b/src/messenger/gnunet-service-messenger_member.c
index 6e39cec13..7f00e8438 100644..100755
--- a/src/messenger/gnunet-service-messenger_member.c
+++ b/src/messenger/gnunet-service-messenger_member.c
@@ -335,7 +335,11 @@ add_member_session (struct GNUNET_MESSENGER_Member *member, struct GNUNET_MESSEN
335 struct GNUNET_HashCode hash; 335 struct GNUNET_HashCode hash;
336 GNUNET_CRYPTO_hash(public_key, sizeof(*public_key), &hash); 336 GNUNET_CRYPTO_hash(public_key, sizeof(*public_key), &hash);
337 337
338 GNUNET_CONTAINER_multihashmap_put(member->sessions, &hash, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); 338 if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put(
339 member->sessions, &hash, session,
340 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
341 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Adding a member session failed: %s\n",
342 GNUNET_h2s(&hash));
339} 343}
340 344
341void 345void
@@ -348,7 +352,9 @@ remove_member_session (struct GNUNET_MESSENGER_Member *member, struct GNUNET_MES
348 struct GNUNET_HashCode hash; 352 struct GNUNET_HashCode hash;
349 GNUNET_CRYPTO_hash(public_key, sizeof(*public_key), &hash); 353 GNUNET_CRYPTO_hash(public_key, sizeof(*public_key), &hash);
350 354
351 GNUNET_CONTAINER_multihashmap_remove(member->sessions, &hash, session); 355 if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove(member->sessions, &hash, session))
356 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Removing a member session failed: %s\n",
357 GNUNET_h2s(&hash));
352} 358}
353 359
354struct GNUNET_MESSENGER_ClosureIterateSessions { 360struct GNUNET_MESSENGER_ClosureIterateSessions {
diff --git a/src/messenger/gnunet-service-messenger_message_store.c b/src/messenger/gnunet-service-messenger_message_store.c
index 1f3d262ac..b143c6c98 100644..100755
--- a/src/messenger/gnunet-service-messenger_message_store.c
+++ b/src/messenger/gnunet-service-messenger_message_store.c
@@ -158,6 +158,8 @@ load_message_store_links (struct GNUNET_MESSENGER_MessageStore *store, const cha
158 struct GNUNET_MESSENGER_MessageLinkStorage storage; 158 struct GNUNET_MESSENGER_MessageLinkStorage storage;
159 struct GNUNET_MESSENGER_MessageLink *link = NULL; 159 struct GNUNET_MESSENGER_MessageLink *link = NULL;
160 160
161 memset(&storage, 0, sizeof(storage));
162
161 do 163 do
162 { 164 {
163 if ((sizeof(storage.hash) != GNUNET_DISK_file_read (entries, &(storage.hash), sizeof(storage.hash))) || 165 if ((sizeof(storage.hash) != GNUNET_DISK_file_read (entries, &(storage.hash), sizeof(storage.hash))) ||
@@ -311,6 +313,8 @@ save_message_store (struct GNUNET_MESSENGER_MessageStore *store, const char *dir
311 save.store = store; 313 save.store = store;
312 save.storage = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE, permission); 314 save.storage = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE, permission);
313 315
316 GNUNET_free(filename);
317
314 if (!save.storage) 318 if (!save.storage)
315 goto save_entries; 319 goto save_entries;
316 320
@@ -324,7 +328,6 @@ close_links:
324 GNUNET_DISK_file_close (save.storage); 328 GNUNET_DISK_file_close (save.storage);
325 329
326save_entries: 330save_entries:
327 GNUNET_free(filename);
328 GNUNET_asprintf (&filename, "%s%s", directory, "entries.store"); 331 GNUNET_asprintf (&filename, "%s%s", directory, "entries.store");
329 332
330 save.store = store; 333 save.store = store;
@@ -417,7 +420,10 @@ get_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNU
417 420
418 if ((GNUNET_YES != decoding) || (GNUNET_CRYPTO_hash_cmp (hash, &check) != 0)) 421 if ((GNUNET_YES != decoding) || (GNUNET_CRYPTO_hash_cmp (hash, &check) != 0))
419 { 422 {
420 GNUNET_CONTAINER_multihashmap_remove (store->entries, hash, entry); 423 if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove (store->entries, hash, entry))
424 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Corrupted entry could not be removed from store: %s\n",
425 GNUNET_h2s(hash));
426
421 store->rewrite_entries = GNUNET_YES; 427 store->rewrite_entries = GNUNET_YES;
422 428
423 goto free_message; 429 goto free_message;
diff --git a/src/messenger/gnunet-service-messenger_operation_store.c b/src/messenger/gnunet-service-messenger_operation_store.c
index 05985ef84..a32fbad2c 100644..100755
--- a/src/messenger/gnunet-service-messenger_operation_store.c
+++ b/src/messenger/gnunet-service-messenger_operation_store.c
@@ -184,7 +184,9 @@ cancel_store_operation (struct GNUNET_MESSENGER_OperationStore *store,
184 184
185 stop_operation(op); 185 stop_operation(op);
186 186
187 GNUNET_CONTAINER_multihashmap_remove(store->operations, hash, op); 187 if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove(store->operations, hash, op))
188 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Canceled operation could not be removed: %s\n",
189 GNUNET_h2s(hash));
188 190
189 destroy_operation(op); 191 destroy_operation(op);
190} 192}
diff --git a/src/messenger/messenger_api_contact_store.c b/src/messenger/messenger_api_contact_store.c
index 5238b2c58..6a517c2e0 100644..100755
--- a/src/messenger/messenger_api_contact_store.c
+++ b/src/messenger/messenger_api_contact_store.c
@@ -155,8 +155,10 @@ update_store_contact (struct GNUNET_MESSENGER_ContactStore *store, struct GNUNET
155 store, next_context, &hash 155 store, next_context, &hash
156 ); 156 );
157 157
158 GNUNET_CONTAINER_multihashmap_put (map, &hash, contact, 158 if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (map, &hash, contact,
159 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); 159 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
160 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Updating a contact failed: %s\n",
161 GNUNET_h2s(&hash));
160 } 162 }
161} 163}
162 164
@@ -176,7 +178,8 @@ remove_store_contact (struct GNUNET_MESSENGER_ContactStore *store, struct GNUNET
176 ); 178 );
177 179
178 if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove (map, &hash, contact)) 180 if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove (map, &hash, contact))
179 return; 181 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Removing a contact failed: %s\n",
182 GNUNET_h2s(&hash));
180 183
181 destroy_contact (contact); 184 destroy_contact (contact);
182} 185}
diff --git a/src/messenger/messenger_api_message.c b/src/messenger/messenger_api_message.c
index d88859186..0d885f9ee 100644..100755
--- a/src/messenger/messenger_api_message.c
+++ b/src/messenger/messenger_api_message.c
@@ -590,7 +590,7 @@ int
590decode_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer, 590decode_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer,
591 int include_signature, uint16_t *padding) 591 int include_signature, uint16_t *padding)
592{ 592{
593 GNUNET_assert((message) && (buffer)); 593 GNUNET_assert((message) && (buffer) && (length >= sizeof(message->header)));
594 594
595 uint16_t offset = 0; 595 uint16_t offset = 0;
596 596
diff --git a/src/messenger/messenger_api_room.c b/src/messenger/messenger_api_room.c
index df141ca12..5b7edee60 100644..100755
--- a/src/messenger/messenger_api_room.c
+++ b/src/messenger/messenger_api_room.c
@@ -106,7 +106,7 @@ get_room_sender (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_H
106 return (entry? entry->sender : NULL); 106 return (entry? entry->sender : NULL);
107} 107}
108 108
109static void 109static struct GNUNET_MESSENGER_Contact*
110handle_join_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender, 110handle_join_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender,
111 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) 111 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
112{ 112{
@@ -124,6 +124,8 @@ handle_join_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER
124 (GNUNET_OK == GNUNET_CONTAINER_multishortmap_put(room->members, &(message->header.sender_id), sender, 124 (GNUNET_OK == GNUNET_CONTAINER_multishortmap_put(room->members, &(message->header.sender_id), sender,
125 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE))) 125 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE)))
126 increase_contact_rc(sender); 126 increase_contact_rc(sender);
127
128 return sender;
127} 129}
128 130
129static void 131static void
@@ -140,7 +142,7 @@ handle_leave_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGE
140 struct GNUNET_MESSENGER_ContactStore *store = get_handle_contact_store(room->handle); 142 struct GNUNET_MESSENGER_ContactStore *store = get_handle_contact_store(room->handle);
141 143
142 if (GNUNET_YES == decrease_contact_rc(sender)) 144 if (GNUNET_YES == decrease_contact_rc(sender))
143 remove_store_contact(store, sender, &context); 145 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "A contact does not share any room with you anymore!\n");
144} 146}
145 147
146static void 148static void
@@ -216,17 +218,17 @@ handle_delete_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENG
216 } 218 }
217} 219}
218 220
219void 221struct GNUNET_MESSENGER_Contact*
220handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender, 222handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender,
221 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) 223 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
222{ 224{
223 if (GNUNET_NO != GNUNET_CONTAINER_multihashmap_contains (room->messages, hash)) 225 if (GNUNET_NO != GNUNET_CONTAINER_multihashmap_contains (room->messages, hash))
224 return; 226 return sender;
225 227
226 switch (message->header.kind) 228 switch (message->header.kind)
227 { 229 {
228 case GNUNET_MESSENGER_KIND_JOIN: 230 case GNUNET_MESSENGER_KIND_JOIN:
229 handle_join_message (room, sender, message, hash); 231 sender = handle_join_message (room, sender, message, hash);
230 break; 232 break;
231 case GNUNET_MESSENGER_KIND_LEAVE: 233 case GNUNET_MESSENGER_KIND_LEAVE:
232 handle_leave_message (room, sender, message, hash); 234 handle_leave_message (room, sender, message, hash);
@@ -253,7 +255,7 @@ handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER
253 struct GNUNET_MESSENGER_RoomMessageEntry *entry = GNUNET_new(struct GNUNET_MESSENGER_RoomMessageEntry); 255 struct GNUNET_MESSENGER_RoomMessageEntry *entry = GNUNET_new(struct GNUNET_MESSENGER_RoomMessageEntry);
254 256
255 if (!entry) 257 if (!entry)
256 return; 258 return sender;
257 259
258 entry->sender = sender; 260 entry->sender = sender;
259 entry->message = copy_message (message); 261 entry->message = copy_message (message);
@@ -264,6 +266,8 @@ handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER
264 destroy_message (entry->message); 266 destroy_message (entry->message);
265 GNUNET_free(entry); 267 GNUNET_free(entry);
266 } 268 }
269
270 return sender;
267} 271}
268 272
269struct GNUNET_MESSENGER_MemberCall 273struct GNUNET_MESSENGER_MemberCall
diff --git a/src/messenger/messenger_api_room.h b/src/messenger/messenger_api_room.h
index 9455fd43b..eb41cf740 100644..100755
--- a/src/messenger/messenger_api_room.h
+++ b/src/messenger/messenger_api_room.h
@@ -100,12 +100,16 @@ get_room_sender (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_H
100 * Handles a <i>message</i> with a given <i>hash</i> in a <i>room</i> for the client API to update 100 * Handles a <i>message</i> with a given <i>hash</i> in a <i>room</i> for the client API to update
101 * members and its information. The function also stores the message in map locally for access afterwards. 101 * members and its information. The function also stores the message in map locally for access afterwards.
102 * 102 *
103 * The contact of the message's sender could be updated or even created. It may not be freed or destroyed though!
104 * (The contact may still be in use for old messages...)
105 *
103 * @param[in/out] room Room 106 * @param[in/out] room Room
104 * @param[in/out] sender Contact of sender 107 * @param[in/out] sender Contact of sender
105 * @param[in] message Message 108 * @param[in] message Message
106 * @param[in] hash Hash of message 109 * @param[in] hash Hash of message
110 * @return Contact of sender
107 */ 111 */
108void 112struct GNUNET_MESSENGER_Contact*
109handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender, 113handle_room_message (struct GNUNET_MESSENGER_Room *room, struct GNUNET_MESSENGER_Contact *sender,
110 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); 114 const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash);
111 115