aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/fs_directory.c')
-rw-r--r--src/fs/fs_directory.c65
1 files changed, 33 insertions, 32 deletions
diff --git a/src/fs/fs_directory.c b/src/fs/fs_directory.c
index eb7aac5bb..c693f9216 100644
--- a/src/fs/fs_directory.c
+++ b/src/fs/fs_directory.c
@@ -33,6 +33,7 @@
33 * into memory 33 * into memory
34 */ 34 */
35#include "platform.h" 35#include "platform.h"
36
36#include "gnunet_fs_service.h" 37#include "gnunet_fs_service.h"
37#include "fs_api.h" 38#include "fs_api.h"
38 39
@@ -52,15 +53,15 @@
52 */ 53 */
53int 54int
54GNUNET_FS_meta_data_test_for_directory (const struct 55GNUNET_FS_meta_data_test_for_directory (const struct
55 GNUNET_CONTAINER_MetaData *md) 56 GNUNET_FS_MetaData *md)
56{ 57{
57 char *mime; 58 char *mime;
58 int ret; 59 int ret;
59 60
60 if (NULL == md) 61 if (NULL == md)
61 return GNUNET_SYSERR; 62 return GNUNET_SYSERR;
62 mime = GNUNET_CONTAINER_meta_data_get_by_type (md, 63 mime = GNUNET_FS_meta_data_get_by_type (md,
63 EXTRACTOR_METATYPE_MIMETYPE); 64 EXTRACTOR_METATYPE_MIMETYPE);
64 if (NULL == mime) 65 if (NULL == mime)
65 return GNUNET_SYSERR; 66 return GNUNET_SYSERR;
66 ret = (0 == strcasecmp (mime, GNUNET_FS_DIRECTORY_MIME)) ? GNUNET_YES : 67 ret = (0 == strcasecmp (mime, GNUNET_FS_DIRECTORY_MIME)) ? GNUNET_YES :
@@ -77,19 +78,19 @@ GNUNET_FS_meta_data_test_for_directory (const struct
77 * @param md metadata to add mimetype to 78 * @param md metadata to add mimetype to
78 */ 79 */
79void 80void
80GNUNET_FS_meta_data_make_directory (struct GNUNET_CONTAINER_MetaData *md) 81GNUNET_FS_meta_data_make_directory (struct GNUNET_FS_MetaData *md)
81{ 82{
82 char *mime; 83 char *mime;
83 84
84 mime = 85 mime =
85 GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_METATYPE_MIMETYPE); 86 GNUNET_FS_meta_data_get_by_type (md, EXTRACTOR_METATYPE_MIMETYPE);
86 if (mime != NULL) 87 if (mime != NULL)
87 { 88 {
88 GNUNET_break (0 == strcmp (mime, GNUNET_FS_DIRECTORY_MIME)); 89 GNUNET_break (0 == strcmp (mime, GNUNET_FS_DIRECTORY_MIME));
89 GNUNET_free (mime); 90 GNUNET_free (mime);
90 return; 91 return;
91 } 92 }
92 GNUNET_CONTAINER_meta_data_insert (md, "<gnunet>", 93 GNUNET_FS_meta_data_insert (md, "<gnunet>",
93 EXTRACTOR_METATYPE_MIMETYPE, 94 EXTRACTOR_METATYPE_MIMETYPE,
94 EXTRACTOR_METAFORMAT_UTF8, "text/plain", 95 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
95 GNUNET_FS_DIRECTORY_MIME, 96 GNUNET_FS_DIRECTORY_MIME,
@@ -192,7 +193,7 @@ GNUNET_FS_directory_list_contents (size_t size,
192 uint32_t mdSize; 193 uint32_t mdSize;
193 uint64_t epos; 194 uint64_t epos;
194 struct GNUNET_FS_Uri *uri; 195 struct GNUNET_FS_Uri *uri;
195 struct GNUNET_CONTAINER_MetaData *md; 196 struct GNUNET_FS_MetaData *md;
196 char *filename; 197 char *filename;
197 198
198 if ((offset == 0) && 199 if ((offset == 0) &&
@@ -215,8 +216,8 @@ GNUNET_FS_directory_list_contents (size_t size,
215 _ ("MAGIC mismatch. This is not a GNUnet directory.\n")); 216 _ ("MAGIC mismatch. This is not a GNUnet directory.\n"));
216 return GNUNET_SYSERR; 217 return GNUNET_SYSERR;
217 } 218 }
218 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[8 + sizeof(uint32_t)], 219 md = GNUNET_FS_meta_data_deserialize (&cdata[8 + sizeof(uint32_t)],
219 mdSize); 220 mdSize);
220 if (md == NULL) 221 if (md == NULL)
221 { 222 {
222 GNUNET_break (0); 223 GNUNET_break (0);
@@ -228,7 +229,7 @@ GNUNET_FS_directory_list_contents (size_t size,
228 md, 229 md,
229 0, 230 0,
230 NULL); 231 NULL);
231 GNUNET_CONTAINER_meta_data_destroy (md); 232 GNUNET_FS_meta_data_destroy (md);
232 pos = 8 + sizeof(uint32_t) + mdSize; 233 pos = 8 + sizeof(uint32_t) + mdSize;
233 } 234 }
234 while (pos < size) 235 while (pos < size)
@@ -283,7 +284,7 @@ GNUNET_FS_directory_list_contents (size_t size,
283 return GNUNET_NO; /* malformed - or partial download */ 284 return GNUNET_NO; /* malformed - or partial download */
284 } 285 }
285 286
286 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[pos], 287 md = GNUNET_FS_meta_data_deserialize (&cdata[pos],
287 mdSize); 288 mdSize);
288 if (NULL == md) 289 if (NULL == md)
289 { 290 {
@@ -293,11 +294,11 @@ GNUNET_FS_directory_list_contents (size_t size,
293 } 294 }
294 pos += mdSize; 295 pos += mdSize;
295 filename = 296 filename =
296 GNUNET_CONTAINER_meta_data_get_by_type (md, 297 GNUNET_FS_meta_data_get_by_type (md,
297 EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME); 298 EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME);
298 full_data.size = 0; 299 full_data.size = 0;
299 full_data.data = NULL; 300 full_data.data = NULL;
300 GNUNET_CONTAINER_meta_data_iterate (md, 301 GNUNET_FS_meta_data_iterate (md,
301 &find_full_data, 302 &find_full_data,
302 &full_data); 303 &full_data);
303 if (NULL != dep) 304 if (NULL != dep)
@@ -311,7 +312,7 @@ GNUNET_FS_directory_list_contents (size_t size,
311 } 312 }
312 GNUNET_free (full_data.data); 313 GNUNET_free (full_data.data);
313 GNUNET_free (filename); 314 GNUNET_free (filename);
314 GNUNET_CONTAINER_meta_data_destroy (md); 315 GNUNET_FS_meta_data_destroy (md);
315 GNUNET_FS_uri_destroy (uri); 316 GNUNET_FS_uri_destroy (uri);
316 } 317 }
317 return GNUNET_OK; 318 return GNUNET_OK;
@@ -342,7 +343,7 @@ struct GNUNET_FS_DirectoryBuilder
342 /** 343 /**
343 * Meta-data for the directory itself. 344 * Meta-data for the directory itself.
344 */ 345 */
345 struct GNUNET_CONTAINER_MetaData *meta; 346 struct GNUNET_FS_MetaData *meta;
346 347
347 /** 348 /**
348 * Head of linked list of entries. 349 * Head of linked list of entries.
@@ -362,16 +363,16 @@ struct GNUNET_FS_DirectoryBuilder
362 * @param mdir metadata for the directory 363 * @param mdir metadata for the directory
363 */ 364 */
364struct GNUNET_FS_DirectoryBuilder * 365struct GNUNET_FS_DirectoryBuilder *
365GNUNET_FS_directory_builder_create (const struct GNUNET_CONTAINER_MetaData 366GNUNET_FS_directory_builder_create (const struct GNUNET_FS_MetaData
366 *mdir) 367 *mdir)
367{ 368{
368 struct GNUNET_FS_DirectoryBuilder *ret; 369 struct GNUNET_FS_DirectoryBuilder *ret;
369 370
370 ret = GNUNET_new (struct GNUNET_FS_DirectoryBuilder); 371 ret = GNUNET_new (struct GNUNET_FS_DirectoryBuilder);
371 if (mdir != NULL) 372 if (mdir != NULL)
372 ret->meta = GNUNET_CONTAINER_meta_data_duplicate (mdir); 373 ret->meta = GNUNET_FS_meta_data_duplicate (mdir);
373 else 374 else
374 ret->meta = GNUNET_CONTAINER_meta_data_create (); 375 ret->meta = GNUNET_FS_meta_data_create ();
375 GNUNET_FS_meta_data_make_directory (ret->meta); 376 GNUNET_FS_meta_data_make_directory (ret->meta);
376 return ret; 377 return ret;
377} 378}
@@ -390,7 +391,7 @@ GNUNET_FS_directory_builder_create (const struct GNUNET_CONTAINER_MetaData
390void 391void
391GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld, 392GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
392 const struct GNUNET_FS_Uri *uri, 393 const struct GNUNET_FS_Uri *uri,
393 const struct GNUNET_CONTAINER_MetaData *md, 394 const struct GNUNET_FS_MetaData *md,
394 const void *data) 395 const void *data)
395{ 396{
396 struct GNUNET_FS_Uri *curi; 397 struct GNUNET_FS_Uri *curi;
@@ -404,8 +405,8 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
404 char *serialized; 405 char *serialized;
405 char *sptr; 406 char *sptr;
406 size_t slen; 407 size_t slen;
407 struct GNUNET_CONTAINER_MetaData *meta; 408 struct GNUNET_FS_MetaData *meta;
408 const struct GNUNET_CONTAINER_MetaData *meta_use; 409 const struct GNUNET_FS_MetaData *meta_use;
409 410
410 GNUNET_assert (! GNUNET_FS_uri_test_ksk (uri)); 411 GNUNET_assert (! GNUNET_FS_uri_test_ksk (uri));
411 if (NULL != data) 412 if (NULL != data)
@@ -431,17 +432,17 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
431 fsize = 0; /* too large */ 432 fsize = 0; /* too large */
432 uris = GNUNET_FS_uri_to_string (uri); 433 uris = GNUNET_FS_uri_to_string (uri);
433 slen = strlen (uris) + 1; 434 slen = strlen (uris) + 1;
434 mds = GNUNET_CONTAINER_meta_data_get_serialized_size (md); 435 mds = GNUNET_FS_meta_data_get_serialized_size (md);
435 meta_use = md; 436 meta_use = md;
436 meta = NULL; 437 meta = NULL;
437 if (fsize > 0) 438 if (fsize > 0)
438 { 439 {
439 meta = GNUNET_CONTAINER_meta_data_duplicate (md); 440 meta = GNUNET_FS_meta_data_duplicate (md);
440 GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", 441 GNUNET_FS_meta_data_insert (meta, "<gnunet>",
441 EXTRACTOR_METATYPE_GNUNET_FULL_DATA, 442 EXTRACTOR_METATYPE_GNUNET_FULL_DATA,
442 EXTRACTOR_METAFORMAT_BINARY, NULL, data, 443 EXTRACTOR_METAFORMAT_BINARY, NULL, data,
443 fsize); 444 fsize);
444 mdxs = GNUNET_CONTAINER_meta_data_get_serialized_size (meta); 445 mdxs = GNUNET_FS_meta_data_get_serialized_size (meta);
445 if ((slen + sizeof(uint32_t) + mdxs - 1) / DBLOCK_SIZE == 446 if ((slen + sizeof(uint32_t) + mdxs - 1) / DBLOCK_SIZE ==
446 (slen + sizeof(uint32_t) + mds - 1) / DBLOCK_SIZE) 447 (slen + sizeof(uint32_t) + mds - 1) / DBLOCK_SIZE)
447 { 448 {
@@ -461,10 +462,10 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
461 GNUNET_free (uris); 462 GNUNET_free (uris);
462 sptr = &serialized[slen + sizeof(uint32_t)]; 463 sptr = &serialized[slen + sizeof(uint32_t)];
463 ret = 464 ret =
464 GNUNET_CONTAINER_meta_data_serialize (meta_use, &sptr, mds, 465 GNUNET_FS_meta_data_serialize (meta_use, &sptr, mds,
465 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART); 466 GNUNET_FS_META_DATA_SERIALIZE_PART);
466 if (NULL != meta) 467 if (NULL != meta)
467 GNUNET_CONTAINER_meta_data_destroy (meta); 468 GNUNET_FS_meta_data_destroy (meta);
468 if (ret == -1) 469 if (ret == -1)
469 mds = 0; 470 mds = 0;
470 else 471 else
@@ -593,7 +594,7 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
593 uint32_t big; 594 uint32_t big;
594 595
595 size = strlen (GNUNET_DIRECTORY_MAGIC) + sizeof(uint32_t); 596 size = strlen (GNUNET_DIRECTORY_MAGIC) + sizeof(uint32_t);
596 size += GNUNET_CONTAINER_meta_data_get_serialized_size (bld->meta); 597 size += GNUNET_FS_meta_data_get_serialized_size (bld->meta);
597 sizes = NULL; 598 sizes = NULL;
598 perm = NULL; 599 perm = NULL;
599 bes = NULL; 600 bes = NULL;
@@ -643,10 +644,10 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
643 644
644 sptr = &data[off + sizeof(uint32_t)]; 645 sptr = &data[off + sizeof(uint32_t)];
645 ret = 646 ret =
646 GNUNET_CONTAINER_meta_data_serialize (bld->meta, 647 GNUNET_FS_meta_data_serialize (bld->meta,
647 &sptr, 648 &sptr,
648 size - off - sizeof(uint32_t), 649 size - off - sizeof(uint32_t),
649 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); 650 GNUNET_FS_META_DATA_SERIALIZE_FULL);
650 GNUNET_assert (ret != -1); 651 GNUNET_assert (ret != -1);
651 big = htonl (ret); 652 big = htonl (ret);
652 GNUNET_memcpy (&data[off], 653 GNUNET_memcpy (&data[off],
@@ -666,7 +667,7 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
666 GNUNET_free (perm); 667 GNUNET_free (perm);
667 GNUNET_free (bes); 668 GNUNET_free (bes);
668 GNUNET_assert (off == size); 669 GNUNET_assert (off == size);
669 GNUNET_CONTAINER_meta_data_destroy (bld->meta); 670 GNUNET_FS_meta_data_destroy (bld->meta);
670 GNUNET_free (bld); 671 GNUNET_free (bld);
671 return GNUNET_OK; 672 return GNUNET_OK;
672} 673}