aboutsummaryrefslogtreecommitdiff
path: root/src/util/pseudonym.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/pseudonym.c')
-rw-r--r--src/util/pseudonym.c277
1 files changed, 137 insertions, 140 deletions
diff --git a/src/util/pseudonym.c b/src/util/pseudonym.c
index b6e51af18..2a736bc46 100644
--- a/src/util/pseudonym.c
+++ b/src/util/pseudonym.c
@@ -82,16 +82,16 @@ static struct DiscoveryCallback *head;
82 */ 82 */
83static void 83static void
84internal_notify (const GNUNET_HashCode * id, 84internal_notify (const GNUNET_HashCode * id,
85 const struct GNUNET_CONTAINER_MetaData *md, int rating) 85 const struct GNUNET_CONTAINER_MetaData *md, int rating)
86{ 86{
87 struct DiscoveryCallback *pos; 87 struct DiscoveryCallback *pos;
88 88
89 pos = head; 89 pos = head;
90 while (pos != NULL) 90 while (pos != NULL)
91 { 91 {
92 pos->callback (pos->closure, id, md, rating); 92 pos->callback (pos->closure, id, md, rating);
93 pos = pos->next; 93 pos = pos->next;
94 } 94 }
95} 95}
96 96
97/** 97/**
@@ -103,10 +103,9 @@ internal_notify (const GNUNET_HashCode * id,
103 */ 103 */
104int 104int
105GNUNET_PSEUDONYM_discovery_callback_register (const struct 105GNUNET_PSEUDONYM_discovery_callback_register (const struct
106 GNUNET_CONFIGURATION_Handle 106 GNUNET_CONFIGURATION_Handle *cfg,
107 *cfg, 107 GNUNET_PSEUDONYM_Iterator
108 GNUNET_PSEUDONYM_Iterator 108 iterator, void *closure)
109 iterator, void *closure)
110{ 109{
111 struct DiscoveryCallback *list; 110 struct DiscoveryCallback *list;
112 111
@@ -126,7 +125,7 @@ GNUNET_PSEUDONYM_discovery_callback_register (const struct
126 */ 125 */
127int 126int
128GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator 127GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
129 iterator, void *closure) 128 iterator, void *closure)
130{ 129{
131 struct DiscoveryCallback *prev; 130 struct DiscoveryCallback *prev;
132 struct DiscoveryCallback *pos; 131 struct DiscoveryCallback *pos;
@@ -134,11 +133,11 @@ GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
134 prev = NULL; 133 prev = NULL;
135 pos = head; 134 pos = head;
136 while ((pos != NULL) && 135 while ((pos != NULL) &&
137 ((pos->callback != iterator) || (pos->closure != closure))) 136 ((pos->callback != iterator) || (pos->closure != closure)))
138 { 137 {
139 prev = pos; 138 prev = pos;
140 pos = pos->next; 139 pos = pos->next;
141 } 140 }
142 if (pos == NULL) 141 if (pos == NULL)
143 return GNUNET_SYSERR; 142 return GNUNET_SYSERR;
144 if (prev == NULL) 143 if (prev == NULL)
@@ -160,17 +159,16 @@ GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
160 */ 159 */
161static char * 160static char *
162get_data_filename (const struct GNUNET_CONFIGURATION_Handle *cfg, 161get_data_filename (const struct GNUNET_CONFIGURATION_Handle *cfg,
163 const char *prefix, const GNUNET_HashCode * psid) 162 const char *prefix, const GNUNET_HashCode * psid)
164{ 163{
165 struct GNUNET_CRYPTO_HashAsciiEncoded enc; 164 struct GNUNET_CRYPTO_HashAsciiEncoded enc;
166 165
167 if (psid != NULL) 166 if (psid != NULL)
168 GNUNET_CRYPTO_hash_to_enc (psid, &enc); 167 GNUNET_CRYPTO_hash_to_enc (psid, &enc);
169 return GNUNET_DISK_get_home_filename (cfg, GNUNET_CLIENT_SERVICE_NAME, 168 return GNUNET_DISK_get_home_filename (cfg, GNUNET_CLIENT_SERVICE_NAME, prefix,
170 prefix, 169 (psid ==
171 (psid == 170 NULL) ? NULL : (const char *) &enc,
172 NULL) ? NULL : (const char *) &enc, 171 NULL);
173 NULL);
174} 172}
175 173
176 174
@@ -184,9 +182,9 @@ get_data_filename (const struct GNUNET_CONFIGURATION_Handle *cfg,
184 */ 182 */
185static void 183static void
186write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg, 184write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
187 const GNUNET_HashCode * nsid, 185 const GNUNET_HashCode * nsid,
188 const struct GNUNET_CONTAINER_MetaData *meta, 186 const struct GNUNET_CONTAINER_MetaData *meta,
189 int32_t ranking, const char *ns_name) 187 int32_t ranking, const char *ns_name)
190{ 188{
191 char *fn; 189 char *fn;
192 struct GNUNET_BIO_WriteHandle *fileW; 190 struct GNUNET_BIO_WriteHandle *fileW;
@@ -195,23 +193,23 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
195 GNUNET_assert (fn != NULL); 193 GNUNET_assert (fn != NULL);
196 fileW = GNUNET_BIO_write_open (fn); 194 fileW = GNUNET_BIO_write_open (fn);
197 if (NULL != fileW) 195 if (NULL != fileW)
196 {
197 if ((GNUNET_OK != GNUNET_BIO_write_int32 (fileW, ranking)) ||
198 (GNUNET_OK != GNUNET_BIO_write_string (fileW, ns_name)) ||
199 (GNUNET_OK != GNUNET_BIO_write_meta_data (fileW, meta)))
198 { 200 {
199 if ((GNUNET_OK != GNUNET_BIO_write_int32 (fileW, ranking)) || 201 (void) GNUNET_BIO_write_close (fileW);
200 (GNUNET_OK != GNUNET_BIO_write_string (fileW, ns_name)) || 202 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
201 (GNUNET_OK != GNUNET_BIO_write_meta_data (fileW, meta))) 203 GNUNET_free (fn);
202 { 204 return;
203 (void) GNUNET_BIO_write_close (fileW);
204 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
205 GNUNET_free (fn);
206 return;
207 }
208 if (GNUNET_OK != GNUNET_BIO_write_close (fileW))
209 {
210 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
211 GNUNET_free (fn);
212 return;
213 }
214 } 205 }
206 if (GNUNET_OK != GNUNET_BIO_write_close (fileW))
207 {
208 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
209 GNUNET_free (fn);
210 return;
211 }
212 }
215 GNUNET_free (fn); 213 GNUNET_free (fn);
216 /* create entry for pseudonym name in names */ 214 /* create entry for pseudonym name in names */
217 /* FIXME: 90% of what this call does is not needed 215 /* FIXME: 90% of what this call does is not needed
@@ -230,9 +228,9 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
230 */ 228 */
231static int 229static int
232read_info (const struct GNUNET_CONFIGURATION_Handle *cfg, 230read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
233 const GNUNET_HashCode * nsid, 231 const GNUNET_HashCode * nsid,
234 struct GNUNET_CONTAINER_MetaData **meta, int32_t * ranking, 232 struct GNUNET_CONTAINER_MetaData **meta, int32_t * ranking,
235 char **ns_name) 233 char **ns_name)
236{ 234{
237 char *fn; 235 char *fn;
238 char *emsg; 236 char *emsg;
@@ -242,10 +240,10 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
242 GNUNET_assert (fn != NULL); 240 GNUNET_assert (fn != NULL);
243 fileR = GNUNET_BIO_read_open (fn); 241 fileR = GNUNET_BIO_read_open (fn);
244 if (fileR == NULL) 242 if (fileR == NULL)
245 { 243 {
246 GNUNET_free (fn); 244 GNUNET_free (fn);
247 return GNUNET_SYSERR; 245 return GNUNET_SYSERR;
248 } 246 }
249 emsg = NULL; 247 emsg = NULL;
250 *ns_name = NULL; 248 *ns_name = NULL;
251 if ((GNUNET_OK != GNUNET_BIO_read_int32 (fileR, ranking)) || 249 if ((GNUNET_OK != GNUNET_BIO_read_int32 (fileR, ranking)) ||
@@ -253,30 +251,29 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
253 GNUNET_BIO_read_string (fileR, "Read string error!", ns_name, 200)) || 251 GNUNET_BIO_read_string (fileR, "Read string error!", ns_name, 200)) ||
254 (GNUNET_OK != 252 (GNUNET_OK !=
255 GNUNET_BIO_read_meta_data (fileR, "Read meta data error!", meta))) 253 GNUNET_BIO_read_meta_data (fileR, "Read meta data error!", meta)))
256 { 254 {
257 (void) GNUNET_BIO_read_close (fileR, &emsg); 255 (void) GNUNET_BIO_read_close (fileR, &emsg);
258 GNUNET_free_non_null (emsg); 256 GNUNET_free_non_null (emsg);
259 GNUNET_free_non_null (*ns_name); 257 GNUNET_free_non_null (*ns_name);
260 *ns_name = NULL; 258 *ns_name = NULL;
261 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn)); 259 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
262 GNUNET_free (fn); 260 GNUNET_free (fn);
263 return GNUNET_SYSERR; 261 return GNUNET_SYSERR;
264 } 262 }
265 if (GNUNET_OK != GNUNET_BIO_read_close (fileR, &emsg)) 263 if (GNUNET_OK != GNUNET_BIO_read_close (fileR, &emsg))
266 { 264 {
267 LOG (GNUNET_ERROR_TYPE_WARNING, 265 LOG (GNUNET_ERROR_TYPE_WARNING,
268 _ 266 _("Failed to parse metadata about pseudonym from file `%s': %s\n"), fn,
269 ("Failed to parse metadata about pseudonym from file `%s': %s\n"), 267 emsg);
270 fn, emsg); 268 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
271 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn)); 269 GNUNET_CONTAINER_meta_data_destroy (*meta);
272 GNUNET_CONTAINER_meta_data_destroy (*meta); 270 *meta = NULL;
273 *meta = NULL; 271 GNUNET_free_non_null (*ns_name);
274 GNUNET_free_non_null (*ns_name); 272 *ns_name = NULL;
275 *ns_name = NULL; 273 GNUNET_free_non_null (emsg);
276 GNUNET_free_non_null (emsg); 274 GNUNET_free (fn);
277 GNUNET_free (fn); 275 return GNUNET_SYSERR;
278 return GNUNET_SYSERR; 276 }
279 }
280 GNUNET_free (fn); 277 GNUNET_free (fn);
281 return GNUNET_OK; 278 return GNUNET_OK;
282} 279}
@@ -292,7 +289,7 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
292 */ 289 */
293char * 290char *
294GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg, 291GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
295 const GNUNET_HashCode * nsid) 292 const GNUNET_HashCode * nsid)
296{ 293{
297 struct GNUNET_CONTAINER_MetaData *meta; 294 struct GNUNET_CONTAINER_MetaData *meta;
298 char *name; 295 char *name;
@@ -310,25 +307,25 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
310 meta = NULL; 307 meta = NULL;
311 name = NULL; 308 name = NULL;
312 if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name)) 309 if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name))
310 {
311 if ((meta != NULL) && (name == NULL))
312 name =
313 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
314 EXTRACTOR_METATYPE_TITLE,
315 EXTRACTOR_METATYPE_FILENAME,
316 EXTRACTOR_METATYPE_DESCRIPTION,
317 EXTRACTOR_METATYPE_SUBJECT,
318 EXTRACTOR_METATYPE_PUBLISHER,
319 EXTRACTOR_METATYPE_AUTHOR_NAME,
320 EXTRACTOR_METATYPE_COMMENT,
321 EXTRACTOR_METATYPE_SUMMARY,
322 -1);
323 if (meta != NULL)
313 { 324 {
314 if ((meta != NULL) && (name == NULL)) 325 GNUNET_CONTAINER_meta_data_destroy (meta);
315 name = 326 meta = NULL;
316 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
317 EXTRACTOR_METATYPE_TITLE,
318 EXTRACTOR_METATYPE_FILENAME,
319 EXTRACTOR_METATYPE_DESCRIPTION,
320 EXTRACTOR_METATYPE_SUBJECT,
321 EXTRACTOR_METATYPE_PUBLISHER,
322 EXTRACTOR_METATYPE_AUTHOR_NAME,
323 EXTRACTOR_METATYPE_COMMENT,
324 EXTRACTOR_METATYPE_SUMMARY,
325 -1);
326 if (meta != NULL)
327 {
328 GNUNET_CONTAINER_meta_data_destroy (meta);
329 meta = NULL;
330 }
331 } 327 }
328 }
332 if (name == NULL) 329 if (name == NULL)
333 name = GNUNET_strdup (_("no-name")); 330 name = GNUNET_strdup (_("no-name"));
334 GNUNET_CRYPTO_hash (name, strlen (name), &nh); 331 GNUNET_CRYPTO_hash (name, strlen (name), &nh);
@@ -339,31 +336,31 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
339 if (0 == STAT (fn, &sbuf)) 336 if (0 == STAT (fn, &sbuf))
340 GNUNET_DISK_file_size (fn, &len, GNUNET_YES); 337 GNUNET_DISK_file_size (fn, &len, GNUNET_YES);
341 fh = GNUNET_DISK_file_open (fn, 338 fh = GNUNET_DISK_file_open (fn,
342 GNUNET_DISK_OPEN_CREATE | 339 GNUNET_DISK_OPEN_CREATE |
343 GNUNET_DISK_OPEN_READWRITE, 340 GNUNET_DISK_OPEN_READWRITE,
344 GNUNET_DISK_PERM_USER_READ | 341 GNUNET_DISK_PERM_USER_READ |
345 GNUNET_DISK_PERM_USER_WRITE); 342 GNUNET_DISK_PERM_USER_WRITE);
346 i = 0; 343 i = 0;
347 idx = -1; 344 idx = -1;
348 while ((len >= sizeof (GNUNET_HashCode)) && 345 while ((len >= sizeof (GNUNET_HashCode)) &&
349 (sizeof (GNUNET_HashCode) == 346 (sizeof (GNUNET_HashCode) ==
350 GNUNET_DISK_file_read (fh, &nh, sizeof (GNUNET_HashCode)))) 347 GNUNET_DISK_file_read (fh, &nh, sizeof (GNUNET_HashCode))))
351 { 348 {
352 if (0 == memcmp (&nh, nsid, sizeof (GNUNET_HashCode))) 349 if (0 == memcmp (&nh, nsid, sizeof (GNUNET_HashCode)))
353 {
354 idx = i;
355 break;
356 }
357 i++;
358 len -= sizeof (GNUNET_HashCode);
359 }
360 if (idx == -1)
361 { 350 {
362 idx = i; 351 idx = i;
363 if (sizeof (GNUNET_HashCode) != 352 break;
364 GNUNET_DISK_file_write (fh, nsid, sizeof (GNUNET_HashCode)))
365 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "write", fn);
366 } 353 }
354 i++;
355 len -= sizeof (GNUNET_HashCode);
356 }
357 if (idx == -1)
358 {
359 idx = i;
360 if (sizeof (GNUNET_HashCode) !=
361 GNUNET_DISK_file_write (fh, nsid, sizeof (GNUNET_HashCode)))
362 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "write", fn);
363 }
367 GNUNET_DISK_file_close (fh); 364 GNUNET_DISK_file_close (fh);
368 ret = GNUNET_malloc (strlen (name) + 32); 365 ret = GNUNET_malloc (strlen (name) + 32);
369 GNUNET_snprintf (ret, strlen (name) + 32, "%s-%u", name, idx); 366 GNUNET_snprintf (ret, strlen (name) + 32, "%s-%u", name, idx);
@@ -382,7 +379,7 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
382 */ 379 */
383int 380int
384GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg, 381GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg,
385 const char *ns_uname, GNUNET_HashCode * nsid) 382 const char *ns_uname, GNUNET_HashCode * nsid)
386{ 383{
387 size_t slen; 384 size_t slen;
388 uint64_t len; 385 uint64_t len;
@@ -408,24 +405,24 @@ GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg,
408 if ((GNUNET_OK != GNUNET_DISK_file_test (fn) || 405 if ((GNUNET_OK != GNUNET_DISK_file_test (fn) ||
409 (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) || 406 (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) ||
410 ((idx + 1) * sizeof (GNUNET_HashCode) > len)) 407 ((idx + 1) * sizeof (GNUNET_HashCode) > len))
411 { 408 {
412 GNUNET_free (fn); 409 GNUNET_free (fn);
413 return GNUNET_SYSERR; 410 return GNUNET_SYSERR;
414 } 411 }
415 fh = GNUNET_DISK_file_open (fn, 412 fh = GNUNET_DISK_file_open (fn,
416 GNUNET_DISK_OPEN_CREATE | 413 GNUNET_DISK_OPEN_CREATE |
417 GNUNET_DISK_OPEN_READWRITE, 414 GNUNET_DISK_OPEN_READWRITE,
418 GNUNET_DISK_PERM_USER_READ | 415 GNUNET_DISK_PERM_USER_READ |
419 GNUNET_DISK_PERM_USER_WRITE); 416 GNUNET_DISK_PERM_USER_WRITE);
420 GNUNET_free (fn); 417 GNUNET_free (fn);
421 GNUNET_DISK_file_seek (fh, idx * sizeof (GNUNET_HashCode), 418 GNUNET_DISK_file_seek (fh, idx * sizeof (GNUNET_HashCode),
422 GNUNET_DISK_SEEK_SET); 419 GNUNET_DISK_SEEK_SET);
423 if (sizeof (GNUNET_HashCode) != 420 if (sizeof (GNUNET_HashCode) !=
424 GNUNET_DISK_file_read (fh, nsid, sizeof (GNUNET_HashCode))) 421 GNUNET_DISK_file_read (fh, nsid, sizeof (GNUNET_HashCode)))
425 { 422 {
426 GNUNET_DISK_file_close (fh); 423 GNUNET_DISK_file_close (fh);
427 return GNUNET_SYSERR; 424 return GNUNET_SYSERR;
428 } 425 }
429 GNUNET_DISK_file_close (fh); 426 GNUNET_DISK_file_close (fh);
430 return GNUNET_OK; 427 return GNUNET_OK;
431} 428}
@@ -475,15 +472,15 @@ list_pseudonym_helper (void *cls, const char *fullname)
475 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)) 472 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded))
476 return GNUNET_OK; 473 return GNUNET_OK;
477 fn = &fullname[strlen (fullname) + 1 - 474 fn = &fullname[strlen (fullname) + 1 -
478 sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)]; 475 sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)];
479 if (fn[-1] != DIR_SEPARATOR) 476 if (fn[-1] != DIR_SEPARATOR)
480 return GNUNET_OK; 477 return GNUNET_OK;
481 ret = GNUNET_OK; 478 ret = GNUNET_OK;
482 if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id)) 479 if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id))
483 return GNUNET_OK; /* invalid name */ 480 return GNUNET_OK; /* invalid name */
484 str = NULL; 481 str = NULL;
485 if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, &str)) 482 if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, &str))
486 return GNUNET_OK; /* ignore entry */ 483 return GNUNET_OK; /* ignore entry */
487 GNUNET_free_non_null (str); 484 GNUNET_free_non_null (str);
488 if (c->iterator != NULL) 485 if (c->iterator != NULL)
489 ret = c->iterator (c->closure, &id, meta, rating); 486 ret = c->iterator (c->closure, &id, meta, rating);
@@ -502,7 +499,7 @@ list_pseudonym_helper (void *cls, const char *fullname)
502 */ 499 */
503int 500int
504GNUNET_PSEUDONYM_list_all (const struct GNUNET_CONFIGURATION_Handle *cfg, 501GNUNET_PSEUDONYM_list_all (const struct GNUNET_CONFIGURATION_Handle *cfg,
505 GNUNET_PSEUDONYM_Iterator iterator, void *closure) 502 GNUNET_PSEUDONYM_Iterator iterator, void *closure)
506{ 503{
507 struct ListPseudonymClosure cls; 504 struct ListPseudonymClosure cls;
508 char *fn; 505 char *fn;
@@ -531,7 +528,7 @@ GNUNET_PSEUDONYM_list_all (const struct GNUNET_CONFIGURATION_Handle *cfg,
531 */ 528 */
532int 529int
533GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg, 530GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg,
534 const GNUNET_HashCode * nsid, int delta) 531 const GNUNET_HashCode * nsid, int delta)
535{ 532{
536 struct GNUNET_CONTAINER_MetaData *meta; 533 struct GNUNET_CONTAINER_MetaData *meta;
537 int ret; 534 int ret;
@@ -541,10 +538,10 @@ GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg,
541 name = NULL; 538 name = NULL;
542 ret = read_info (cfg, nsid, &meta, &ranking, &name); 539 ret = read_info (cfg, nsid, &meta, &ranking, &name);
543 if (ret == GNUNET_SYSERR) 540 if (ret == GNUNET_SYSERR)
544 { 541 {
545 ranking = 0; 542 ranking = 0;
546 meta = GNUNET_CONTAINER_meta_data_create (); 543 meta = GNUNET_CONTAINER_meta_data_create ();
547 } 544 }
548 ranking += delta; 545 ranking += delta;
549 write_pseudonym_info (cfg, nsid, meta, ranking, name); 546 write_pseudonym_info (cfg, nsid, meta, ranking, name);
550 GNUNET_CONTAINER_meta_data_destroy (meta); 547 GNUNET_CONTAINER_meta_data_destroy (meta);
@@ -564,8 +561,8 @@ GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg,
564 */ 561 */
565void 562void
566GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg, 563GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg,
567 const GNUNET_HashCode * id, 564 const GNUNET_HashCode * id,
568 const struct GNUNET_CONTAINER_MetaData *meta) 565 const struct GNUNET_CONTAINER_MetaData *meta)
569{ 566{
570 char *name; 567 char *name;
571 int32_t ranking; 568 int32_t ranking;
@@ -579,16 +576,16 @@ GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg,
579 576
580 if ((0 == STAT (fn, &sbuf)) && 577 if ((0 == STAT (fn, &sbuf)) &&
581 (GNUNET_OK == read_info (cfg, id, &old, &ranking, &name))) 578 (GNUNET_OK == read_info (cfg, id, &old, &ranking, &name)))
582 { 579 {
583 GNUNET_CONTAINER_meta_data_merge (old, meta); 580 GNUNET_CONTAINER_meta_data_merge (old, meta);
584 write_pseudonym_info (cfg, id, old, ranking, name); 581 write_pseudonym_info (cfg, id, old, ranking, name);
585 GNUNET_CONTAINER_meta_data_destroy (old); 582 GNUNET_CONTAINER_meta_data_destroy (old);
586 GNUNET_free_non_null (name); 583 GNUNET_free_non_null (name);
587 } 584 }
588 else 585 else
589 { 586 {
590 write_pseudonym_info (cfg, id, meta, ranking, NULL); 587 write_pseudonym_info (cfg, id, meta, ranking, NULL);
591 } 588 }
592 GNUNET_free (fn); 589 GNUNET_free (fn);
593 internal_notify (id, meta, ranking); 590 internal_notify (id, meta, ranking);
594} 591}