aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/messenger/gnunet-service-messenger_handle.c8
-rw-r--r--src/messenger/gnunet-service-messenger_member.c4
-rw-r--r--src/messenger/gnunet-service-messenger_member_session.c6
-rw-r--r--src/messenger/gnunet-service-messenger_message_store.c67
-rw-r--r--src/messenger/gnunet-service-messenger_operation.c4
-rw-r--r--src/messenger/gnunet-service-messenger_operation_store.c34
-rw-r--r--src/messenger/gnunet-service-messenger_room.c4
-rw-r--r--src/messenger/messenger_api.c2
8 files changed, 79 insertions, 50 deletions
diff --git a/src/messenger/gnunet-service-messenger_handle.c b/src/messenger/gnunet-service-messenger_handle.c
index fa6830697..341bb7251 100644
--- a/src/messenger/gnunet-service-messenger_handle.c
+++ b/src/messenger/gnunet-service-messenger_handle.c
@@ -598,6 +598,11 @@ callback_scan_for_rooms (void *cls,
598{ 598{
599 struct GNUNET_MESSENGER_SrvHandle *handle = cls; 599 struct GNUNET_MESSENGER_SrvHandle *handle = cls;
600 600
601 if ((strlen(filename) <= 4) || (0 != strcmp(filename + strlen(filename) - 4, ".cfg")))
602 return GNUNET_OK;
603
604 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load room configuration of handle: %s\n", filename);
605
601 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 606 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
602 607
603 if ((GNUNET_YES == GNUNET_DISK_file_test (filename)) && (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, filename))) 608 if ((GNUNET_YES == GNUNET_DISK_file_test (filename)) && (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, filename)))
@@ -649,9 +654,10 @@ iterate_save_rooms (void *cls,
649 654
650 char *filename; 655 char *filename;
651 GNUNET_asprintf (&filename, "%s%s%c%s.cfg", id_dir, "rooms", DIR_SEPARATOR, GNUNET_h2s (key)); 656 GNUNET_asprintf (&filename, "%s%s%c%s.cfg", id_dir, "rooms", DIR_SEPARATOR, GNUNET_h2s (key));
652
653 GNUNET_free(id_dir); 657 GNUNET_free(id_dir);
654 658
659 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save room configuration of handle: %s\n", filename);
660
655 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 661 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
656 662
657 char *key_data = GNUNET_STRINGS_data_to_string_alloc (key, sizeof(*key)); 663 char *key_data = GNUNET_STRINGS_data_to_string_alloc (key, sizeof(*key));
diff --git a/src/messenger/gnunet-service-messenger_member.c b/src/messenger/gnunet-service-messenger_member.c
index def57aef9..976b68fe6 100644
--- a/src/messenger/gnunet-service-messenger_member.c
+++ b/src/messenger/gnunet-service-messenger_member.c
@@ -112,6 +112,8 @@ load_member (struct GNUNET_MESSENGER_MemberStore *store,
112 if (GNUNET_YES != GNUNET_DISK_file_test (config_file)) 112 if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
113 goto free_config; 113 goto free_config;
114 114
115 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load member configuration: %s\n", config_file);
116
115 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 117 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
116 118
117 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file)) 119 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -205,6 +207,8 @@ save_member (struct GNUNET_MESSENGER_Member *member,
205 char *config_file; 207 char *config_file;
206 GNUNET_asprintf (&config_file, "%s%s", directory, "member.cfg"); 208 GNUNET_asprintf (&config_file, "%s%s", directory, "member.cfg");
207 209
210 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save member configuration: %s\n", config_file);
211
208 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 212 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
209 213
210 char *id_data = GNUNET_STRINGS_data_to_string_alloc (&(member->id), sizeof(member->id)); 214 char *id_data = GNUNET_STRINGS_data_to_string_alloc (&(member->id), sizeof(member->id));
diff --git a/src/messenger/gnunet-service-messenger_member_session.c b/src/messenger/gnunet-service-messenger_member_session.c
index 03736941f..846dbbe2b 100644
--- a/src/messenger/gnunet-service-messenger_member_session.c
+++ b/src/messenger/gnunet-service-messenger_member_session.c
@@ -518,6 +518,8 @@ load_member_session (struct GNUNET_MESSENGER_Member *member,
518 if (GNUNET_YES != GNUNET_DISK_file_test (config_file)) 518 if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
519 goto free_config; 519 goto free_config;
520 520
521 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load session configuration of member: %s\n", config_file);
522
521 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 523 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
522 524
523 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file)) 525 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -605,6 +607,8 @@ load_member_session_next (struct GNUNET_MESSENGER_MemberSession *session,
605 if (GNUNET_YES != GNUNET_DISK_file_test (config_file)) 607 if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
606 goto free_config; 608 goto free_config;
607 609
610 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load next session configuration of member: %s\n", config_file);
611
608 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 612 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
609 613
610 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file)) 614 if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -695,6 +699,8 @@ save_member_session (struct GNUNET_MESSENGER_MemberSession *session,
695 char *config_file; 699 char *config_file;
696 GNUNET_asprintf (&config_file, "%s%s", directory, "session.cfg"); 700 GNUNET_asprintf (&config_file, "%s%s", directory, "session.cfg");
697 701
702 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save session configuration of member: %s\n", config_file);
703
698 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 704 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
699 705
700 char *key_data = GNUNET_IDENTITY_public_key_to_string(get_member_session_public_key(session)); 706 char *key_data = GNUNET_IDENTITY_public_key_to_string(get_member_session_public_key(session));
diff --git a/src/messenger/gnunet-service-messenger_message_store.c b/src/messenger/gnunet-service-messenger_message_store.c
index ce20ac924..ddad266ad 100644
--- a/src/messenger/gnunet-service-messenger_message_store.c
+++ b/src/messenger/gnunet-service-messenger_message_store.c
@@ -104,6 +104,12 @@ struct GNUNET_MESSENGER_MessageEntryStorage
104 struct GNUNET_MESSENGER_MessageEntry entry; 104 struct GNUNET_MESSENGER_MessageEntry entry;
105}; 105};
106 106
107#define load_message_store_attribute_failed(file, attribute) \
108 sizeof(attribute) != GNUNET_DISK_file_read(file, &(attribute), sizeof(attribute))
109
110#define save_message_store_attribute_failed(file, attribute) \
111 sizeof(attribute) != GNUNET_DISK_file_write(file, &(attribute), sizeof(attribute))
112
107static void 113static void
108load_message_store_entries (struct GNUNET_MESSENGER_MessageStore *store, 114load_message_store_entries (struct GNUNET_MESSENGER_MessageStore *store,
109 const char *filename) 115 const char *filename)
@@ -118,31 +124,34 @@ load_message_store_entries (struct GNUNET_MESSENGER_MessageStore *store,
118 struct GNUNET_MESSENGER_MessageEntryStorage storage; 124 struct GNUNET_MESSENGER_MessageEntryStorage storage;
119 struct GNUNET_MESSENGER_MessageEntry *entry; 125 struct GNUNET_MESSENGER_MessageEntry *entry;
120 126
127 memset(&storage, 0, sizeof(storage));
128
121 do 129 do
122 { 130 {
131 entry = NULL;
132
133 if ((load_message_store_attribute_failed(entries, storage.hash)) ||
134 (load_message_store_attribute_failed(entries, storage.entry.offset)) ||
135 (load_message_store_attribute_failed(entries, storage.entry.length)))
136 break;
137
123 entry = GNUNET_new(struct GNUNET_MESSENGER_MessageEntry); 138 entry = GNUNET_new(struct GNUNET_MESSENGER_MessageEntry);
124 139
125 if (GNUNET_DISK_file_read (entries, &storage, sizeof(storage)) == sizeof(storage)) 140 GNUNET_memcpy(entry, &(storage.entry), sizeof(*entry));
126 {
127 GNUNET_memcpy(entry, &(storage.entry), sizeof(*entry));
128
129 if ((GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->entries, &(storage.hash))) ||
130 (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (store->entries, &(storage.hash), entry,
131 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
132 {
133 store->rewrite_entries = GNUNET_YES;
134 GNUNET_free(entry);
135 }
136 }
137 else
138 {
139 GNUNET_free(entry);
140 141
141 entry = NULL; 142 if ((GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->entries, &(storage.hash))) ||
143 (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (store->entries, &(storage.hash), entry,
144 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
145 {
146 store->rewrite_entries = GNUNET_YES;
147 break;
142 } 148 }
143 } 149 }
144 while (entry); 150 while (entry);
145 151
152 if (entry)
153 GNUNET_free(entry);
154
146 GNUNET_DISK_file_close (entries); 155 GNUNET_DISK_file_close (entries);
147} 156}
148 157
@@ -164,17 +173,19 @@ load_message_store_links (struct GNUNET_MESSENGER_MessageStore *store,
164 return; 173 return;
165 174
166 struct GNUNET_MESSENGER_MessageLinkStorage storage; 175 struct GNUNET_MESSENGER_MessageLinkStorage storage;
167 struct GNUNET_MESSENGER_MessageLink *link = NULL; 176 struct GNUNET_MESSENGER_MessageLink *link;
168 177
169 memset(&storage, 0, sizeof(storage)); 178 memset(&storage, 0, sizeof(storage));
170 179
171 do 180 do
172 { 181 {
173 if ((sizeof(storage.hash) != GNUNET_DISK_file_read (entries, &(storage.hash), sizeof(storage.hash))) || 182 link = NULL;
174 (sizeof(storage.link.multiple) != GNUNET_DISK_file_read (entries, &(storage.link.multiple), sizeof(storage.link.multiple))) || 183
175 (sizeof(storage.link.first) != GNUNET_DISK_file_read (entries, &(storage.link.first), sizeof(storage.link.first))) || 184 if ((load_message_store_attribute_failed(entries, storage.hash)) ||
185 (load_message_store_attribute_failed(entries, storage.link.multiple)) ||
186 (load_message_store_attribute_failed(entries, storage.link.first)) ||
176 ((GNUNET_YES == storage.link.multiple) && 187 ((GNUNET_YES == storage.link.multiple) &&
177 (sizeof(storage.link.second) != GNUNET_DISK_file_read (entries, &(storage.link.second), sizeof(storage.link.second))))) 188 (load_message_store_attribute_failed(entries, storage.link.second))))
178 break; 189 break;
179 190
180 link = GNUNET_new(struct GNUNET_MESSENGER_MessageLink); 191 link = GNUNET_new(struct GNUNET_MESSENGER_MessageLink);
@@ -250,10 +261,9 @@ iterate_save_entries (void *cls,
250 261
251 struct GNUNET_MESSENGER_MessageEntryStorage storage; 262 struct GNUNET_MESSENGER_MessageEntryStorage storage;
252 263
253 GNUNET_memcpy(&(storage.hash), key, sizeof(storage.hash)); 264 GNUNET_DISK_file_write (save->storage, key, sizeof(*key));
254 GNUNET_memcpy(&(storage.entry), entry, sizeof(*entry)); 265 GNUNET_DISK_file_write (save->storage, &(entry->offset), sizeof(entry->offset));
255 266 GNUNET_DISK_file_write (save->storage, &(entry->length), sizeof(entry->length));
256 GNUNET_DISK_file_write (save->storage, &storage, sizeof(storage));
257 267
258 return GNUNET_YES; 268 return GNUNET_YES;
259} 269}
@@ -276,8 +286,10 @@ iterate_save_messages (void *cls,
276 storage.entry.length = get_message_size (message, GNUNET_YES); 286 storage.entry.length = get_message_size (message, GNUNET_YES);
277 storage.entry.offset = GNUNET_DISK_file_seek (save->store->storage_messages, 0, GNUNET_DISK_SEEK_END); 287 storage.entry.offset = GNUNET_DISK_file_seek (save->store->storage_messages, 0, GNUNET_DISK_SEEK_END);
278 288
279 if ((GNUNET_SYSERR == storage.entry.offset) || (sizeof(storage) 289 if ((GNUNET_SYSERR == storage.entry.offset) ||
280 != GNUNET_DISK_file_write (save->storage, &storage, sizeof(storage)))) 290 (save_message_store_attribute_failed(save->storage, storage.hash)) ||
291 (save_message_store_attribute_failed(save->storage, storage.entry.offset)) ||
292 (save_message_store_attribute_failed(save->storage, storage.entry.length)))
281 return GNUNET_YES; 293 return GNUNET_YES;
282 294
283 char *buffer = GNUNET_malloc(storage.entry.length); 295 char *buffer = GNUNET_malloc(storage.entry.length);
@@ -287,7 +299,6 @@ iterate_save_messages (void *cls,
287 GNUNET_DISK_file_write (save->store->storage_messages, buffer, storage.entry.length); 299 GNUNET_DISK_file_write (save->store->storage_messages, buffer, storage.entry.length);
288 300
289 GNUNET_free(buffer); 301 GNUNET_free(buffer);
290
291 return GNUNET_YES; 302 return GNUNET_YES;
292} 303}
293 304
diff --git a/src/messenger/gnunet-service-messenger_operation.c b/src/messenger/gnunet-service-messenger_operation.c
index a8744e577..2b92d0c1d 100644
--- a/src/messenger/gnunet-service-messenger_operation.c
+++ b/src/messenger/gnunet-service-messenger_operation.c
@@ -63,6 +63,8 @@ load_operation (struct GNUNET_MESSENGER_OperationStore *store,
63{ 63{
64 GNUNET_assert((store) && (path)); 64 GNUNET_assert((store) && (path));
65 65
66 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load operation configuration: %s\n", path);
67
66 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 68 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
67 struct GNUNET_MESSENGER_Operation* op = NULL; 69 struct GNUNET_MESSENGER_Operation* op = NULL;
68 70
@@ -124,6 +126,8 @@ save_operation (const struct GNUNET_MESSENGER_Operation *op,
124{ 126{
125 GNUNET_assert((path) && (op)); 127 GNUNET_assert((path) && (op));
126 128
129 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save operation configuration: %s\n", path);
130
127 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 131 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
128 132
129 char *hash_data; 133 char *hash_data;
diff --git a/src/messenger/gnunet-service-messenger_operation_store.c b/src/messenger/gnunet-service-messenger_operation_store.c
index 4f8419daa..276f0b92b 100644
--- a/src/messenger/gnunet-service-messenger_operation_store.c
+++ b/src/messenger/gnunet-service-messenger_operation_store.c
@@ -65,23 +65,20 @@ callback_scan_for_operations (void *cls,
65{ 65{
66 struct GNUNET_MESSENGER_OperationStore *store = cls; 66 struct GNUNET_MESSENGER_OperationStore *store = cls;
67 67
68 if (GNUNET_YES == GNUNET_DISK_file_test (filename)) 68 if (GNUNET_YES != GNUNET_DISK_file_test (filename))
69 { 69 return GNUNET_OK;
70 char *path;
71
72 GNUNET_asprintf (&path, "%s%c", filename, DIR_SEPARATOR);
73 70
74 struct GNUNET_MESSENGER_Operation *op = load_operation(store, path); 71 if ((strlen(filename) <= 4) || (0 != strcmp(filename + strlen(filename) - 4, ".cfg")))
72 return GNUNET_OK;
75 73
76 if ((op) && (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put( 74 struct GNUNET_MESSENGER_Operation *op = load_operation(store, filename);
77 store->operations,
78 &(op->hash), op,
79 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
80 {
81 destroy_operation(op);
82 }
83 75
84 GNUNET_free(path); 76 if ((op) && (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put(
77 store->operations,
78 &(op->hash), op,
79 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
80 {
81 destroy_operation(op);
85 } 82 }
86 83
87 return GNUNET_OK; 84 return GNUNET_OK;
@@ -93,8 +90,13 @@ load_operation_store (struct GNUNET_MESSENGER_OperationStore *store,
93{ 90{
94 GNUNET_assert ((store) && (directory)); 91 GNUNET_assert ((store) && (directory));
95 92
96 if (GNUNET_OK == GNUNET_DISK_directory_test (directory, GNUNET_YES)) 93 char* load_dir;
97 GNUNET_DISK_directory_scan (directory, callback_scan_for_operations, store); 94 GNUNET_asprintf (&load_dir, "%s%s%c", directory, "operations", DIR_SEPARATOR);
95
96 if (GNUNET_OK == GNUNET_DISK_directory_test (load_dir, GNUNET_YES))
97 GNUNET_DISK_directory_scan (load_dir, callback_scan_for_operations, store);
98
99 GNUNET_free(load_dir);
98} 100}
99 101
100static int 102static int
diff --git a/src/messenger/gnunet-service-messenger_room.c b/src/messenger/gnunet-service-messenger_room.c
index d34665511..7f2fd0ca6 100644
--- a/src/messenger/gnunet-service-messenger_room.c
+++ b/src/messenger/gnunet-service-messenger_room.c
@@ -1188,11 +1188,7 @@ load_room (struct GNUNET_MESSENGER_SrvRoom *room)
1188 load_list_tunnels(&(room->basement), basement_file); 1188 load_list_tunnels(&(room->basement), basement_file);
1189 GNUNET_free(basement_file); 1189 GNUNET_free(basement_file);
1190 1190
1191 char *last_messages_file;
1192 GNUNET_asprintf (&last_messages_file, "%s%s", room_dir, "last_messages.list");
1193
1194 load_message_state(&(room->state), room_dir); 1191 load_message_state(&(room->state), room_dir);
1195 GNUNET_free (last_messages_file);
1196 } 1192 }
1197 1193
1198 GNUNET_free(room_dir); 1194 GNUNET_free(room_dir);
diff --git a/src/messenger/messenger_api.c b/src/messenger/messenger_api.c
index 2db841315..a37b1b10b 100644
--- a/src/messenger/messenger_api.c
+++ b/src/messenger/messenger_api.c
@@ -261,7 +261,7 @@ handle_recv_message (void *cls,
261 handle->msg_callback (handle->msg_cls, room, contact, stored_message, hash, flags); 261 handle->msg_callback (handle->msg_cls, room, contact, stored_message, hash, flags);
262 } 262 }
263 else 263 else
264 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found\n"); 264 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Unknown room for this client: %s\n", GNUNET_h2s (key));
265 265
266 cleanup_message(&message); 266 cleanup_message(&message);
267} 267}