aboutsummaryrefslogtreecommitdiff
path: root/src/fs
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-01-03 21:42:52 +0000
committerChristian Grothoff <christian@grothoff.org>2010-01-03 21:42:52 +0000
commit3c5249af8087b0b1a4f131a3e19a9759639ab5db (patch)
tree697ff622324a7d259dc59da63205f398661a56fa /src/fs
parentebd1325d27e2062f3fb8e92766178ab0660c2dac (diff)
downloadgnunet-3c5249af8087b0b1a4f131a3e19a9759639ab5db.tar.gz
gnunet-3c5249af8087b0b1a4f131a3e19a9759639ab5db.zip
adapting main code base to work with libextractor 0.6 API; testcases will follow later
Diffstat (limited to 'src/fs')
-rw-r--r--src/fs/fs_directory.c49
-rw-r--r--src/fs/fs_file_information.c4
-rw-r--r--src/fs/fs_getopt.c31
-rw-r--r--src/fs/fs_publish.c14
-rw-r--r--src/fs/fs_uri.c31
-rw-r--r--src/fs/gnunet-directory.c21
-rw-r--r--src/fs/gnunet-publish.c66
-rw-r--r--src/fs/gnunet-search.c21
8 files changed, 149 insertions, 88 deletions
diff --git a/src/fs/fs_directory.c b/src/fs/fs_directory.c
index e037130c8..48578c650 100644
--- a/src/fs/fs_directory.c
+++ b/src/fs/fs_directory.c
@@ -36,10 +36,6 @@
36#include "gnunet_fs_service.h" 36#include "gnunet_fs_service.h"
37#include "fs.h" 37#include "fs.h"
38 38
39#ifndef EXTRACTOR_GNUNET_FULL_DATA
40#define EXTRACTOR_GNUNET_FULL_DATA 137
41#endif
42
43/** 39/**
44 * String that is used to indicate that a file 40 * String that is used to indicate that a file
45 * is a GNUnet directory. 41 * is a GNUnet directory.
@@ -60,7 +56,7 @@ GNUNET_FS_meta_data_test_for_directory (const struct GNUNET_CONTAINER_MetaData *
60 char *mime; 56 char *mime;
61 int ret; 57 int ret;
62 58
63 mime = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_MIMETYPE); 59 mime = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_METATYPE_MIMETYPE);
64 if (mime == NULL) 60 if (mime == NULL)
65 return GNUNET_SYSERR; 61 return GNUNET_SYSERR;
66 ret = (0 == strcmp (mime, GNUNET_FS_DIRECTORY_MIME)) ? GNUNET_YES : GNUNET_NO; 62 ret = (0 == strcmp (mime, GNUNET_FS_DIRECTORY_MIME)) ? GNUNET_YES : GNUNET_NO;
@@ -80,7 +76,7 @@ GNUNET_FS_meta_data_make_directory (struct GNUNET_CONTAINER_MetaData *md)
80{ 76{
81 char *mime; 77 char *mime;
82 78
83 mime = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_MIMETYPE); 79 mime = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_METATYPE_MIMETYPE);
84 if (mime != NULL) 80 if (mime != NULL)
85 { 81 {
86 GNUNET_break (0 == strcmp (mime, 82 GNUNET_break (0 == strcmp (mime,
@@ -89,8 +85,12 @@ GNUNET_FS_meta_data_make_directory (struct GNUNET_CONTAINER_MetaData *md)
89 return; 85 return;
90 } 86 }
91 GNUNET_CONTAINER_meta_data_insert (md, 87 GNUNET_CONTAINER_meta_data_insert (md,
92 EXTRACTOR_MIMETYPE, 88 "<gnunet>",
93 GNUNET_FS_DIRECTORY_MIME); 89 EXTRACTOR_METATYPE_MIMETYPE,
90 EXTRACTOR_METAFORMAT_UTF8,
91 "text/plain",
92 GNUNET_FS_DIRECTORY_MIME,
93 strlen (GNUNET_FS_DIRECTORY_MIME)+1);
94} 94}
95 95
96 96
@@ -225,9 +225,9 @@ GNUNET_FS_directory_list_contents (size_t size,
225 } 225 }
226 pos += mdSize; 226 pos += mdSize;
227 filename = GNUNET_CONTAINER_meta_data_get_by_type (md, 227 filename = GNUNET_CONTAINER_meta_data_get_by_type (md,
228 EXTRACTOR_FILENAME); 228 EXTRACTOR_METATYPE_FILENAME);
229 file_data = GNUNET_CONTAINER_meta_data_get_by_type (md, 229 file_data = GNUNET_CONTAINER_meta_data_get_by_type (md,
230 EXTRACTOR_GNUNET_FULL_DATA); 230 EXTRACTOR_METATYPE_GNUNET_FULL_DATA);
231 if (dep != NULL) 231 if (dep != NULL)
232 dep (dep_cls, 232 dep (dep_cls,
233 filename, 233 filename,
@@ -322,6 +322,7 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
322 size_t mdxs; 322 size_t mdxs;
323 char *uris; 323 char *uris;
324 char *ser; 324 char *ser;
325 char *sptr;
325 size_t slen; 326 size_t slen;
326 struct GNUNET_CONTAINER_MetaData *meta; 327 struct GNUNET_CONTAINER_MetaData *meta;
327 const struct GNUNET_CONTAINER_MetaData *meta_use; 328 const struct GNUNET_CONTAINER_MetaData *meta_use;
@@ -340,25 +341,24 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
340 fsize = 0; /* not given */ 341 fsize = 0; /* not given */
341 if (fsize > MAX_INLINE_SIZE) 342 if (fsize > MAX_INLINE_SIZE)
342 fsize = 0; /* too large */ 343 fsize = 0; /* too large */
343 if ( (NULL == data) ||
344 (NULL != memchr (data, 0, fsize)) )
345 fsize = 0; /* must not have 0's in data! */
346 uris = GNUNET_FS_uri_to_string (uri); 344 uris = GNUNET_FS_uri_to_string (uri);
347 slen = strlen (uris) + 1; 345 slen = strlen (uris) + 1;
348 mds = 346 mds =
349 GNUNET_CONTAINER_meta_data_get_serialized_size (md, 347 GNUNET_CONTAINER_meta_data_get_serialized_size (md);
350 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
351 meta_use = md; 348 meta_use = md;
352 meta = NULL; 349 meta = NULL;
353 if (fsize > 0) 350 if (fsize > 0)
354 { 351 {
355 meta = GNUNET_CONTAINER_meta_data_duplicate (md); 352 meta = GNUNET_CONTAINER_meta_data_duplicate (md);
356 GNUNET_CONTAINER_meta_data_insert (meta, 353 GNUNET_CONTAINER_meta_data_insert (meta,
357 EXTRACTOR_GNUNET_FULL_DATA, 354 "<gnunet>",
358 data); 355 EXTRACTOR_METATYPE_GNUNET_FULL_DATA,
356 EXTRACTOR_METAFORMAT_BINARY,
357 NULL,
358 data,
359 fsize);
359 mdxs = 360 mdxs =
360 GNUNET_CONTAINER_meta_data_get_serialized_size (meta, 361 GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
361 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
362 if ( (slen + sizeof (uint32_t) + mdxs - 1) / DBLOCK_SIZE == 362 if ( (slen + sizeof (uint32_t) + mdxs - 1) / DBLOCK_SIZE ==
363 (slen + sizeof (uint32_t) + mds - 1) / DBLOCK_SIZE) 363 (slen + sizeof (uint32_t) + mds - 1) / DBLOCK_SIZE)
364 { 364 {
@@ -376,8 +376,9 @@ GNUNET_FS_directory_builder_add (struct GNUNET_FS_DirectoryBuilder *bld,
376 ser = (char*) &e[1]; 376 ser = (char*) &e[1];
377 memcpy (ser, uris, slen); 377 memcpy (ser, uris, slen);
378 GNUNET_free (uris); 378 GNUNET_free (uris);
379 sptr = &ser[slen + sizeof(uint32_t)];
379 ret = GNUNET_CONTAINER_meta_data_serialize (meta_use, 380 ret = GNUNET_CONTAINER_meta_data_serialize (meta_use,
380 &ser[slen + sizeof(uint32_t)], 381 &sptr,
381 mds, 382 mds,
382 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART); 383 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART);
383 if (NULL != meta) 384 if (NULL != meta)
@@ -503,6 +504,7 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
503 void **rdata) 504 void **rdata)
504{ 505{
505 char *data; 506 char *data;
507 char *sptr;
506 size_t *sizes; 508 size_t *sizes;
507 unsigned int *perm; 509 unsigned int *perm;
508 unsigned int i; 510 unsigned int i;
@@ -516,8 +518,7 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
516 uint32_t big; 518 uint32_t big;
517 519
518 size = 8 + sizeof (uint32_t); 520 size = 8 + sizeof (uint32_t);
519 size += GNUNET_CONTAINER_meta_data_get_serialized_size (bld->meta, 521 size += GNUNET_CONTAINER_meta_data_get_serialized_size (bld->meta);
520 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
521 sizes = NULL; 522 sizes = NULL;
522 perm = NULL; 523 perm = NULL;
523 bes = NULL; 524 bes = NULL;
@@ -560,9 +561,9 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
560 memcpy (data, GNUNET_DIRECTORY_MAGIC, 8); 561 memcpy (data, GNUNET_DIRECTORY_MAGIC, 8);
561 off = 8; 562 off = 8;
562 563
564 sptr = &data[off + sizeof (uint32_t)];
563 ret = GNUNET_CONTAINER_meta_data_serialize (bld->meta, 565 ret = GNUNET_CONTAINER_meta_data_serialize (bld->meta,
564 &data[off + 566 &sptr,
565 sizeof (uint32_t)],
566 size - off - sizeof (uint32_t), 567 size - off - sizeof (uint32_t),
567 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); 568 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
568 GNUNET_assert (ret != -1); 569 GNUNET_assert (ret != -1);
diff --git a/src/fs/fs_file_information.c b/src/fs/fs_file_information.c
index c28635198..9c193f88b 100644
--- a/src/fs/fs_file_information.c
+++ b/src/fs/fs_file_information.c
@@ -364,7 +364,7 @@ struct DirScanCls
364 /** 364 /**
365 * Metadata extractors to use. 365 * Metadata extractors to use.
366 */ 366 */
367 struct EXTRACTOR_Extractor *extractors; 367 struct EXTRACTOR_PluginList *extractors;
368 368
369 /** 369 /**
370 * Function to call on each directory entry. 370 * Function to call on each directory entry.
@@ -518,7 +518,7 @@ GNUNET_FS_directory_scanner_default (void *cls,
518 void *proc_cls, 518 void *proc_cls,
519 char **emsg) 519 char **emsg)
520{ 520{
521 struct EXTRACTOR_Extractor *ex = cls; 521 struct EXTRACTOR_PluginList *ex = cls;
522 struct DirScanCls dsc; 522 struct DirScanCls dsc;
523 523
524 dsc.extractors = ex; 524 dsc.extractors = ex;
diff --git a/src/fs/fs_getopt.c b/src/fs/fs_getopt.c
index a0d232641..f985ed8d0 100644
--- a/src/fs/fs_getopt.c
+++ b/src/fs/fs_getopt.c
@@ -131,7 +131,7 @@ GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext*
131 131
132{ 132{
133 struct GNUNET_CONTAINER_MetaData **mm = scls; 133 struct GNUNET_CONTAINER_MetaData **mm = scls;
134 EXTRACTOR_KeywordType type; 134 enum EXTRACTOR_MetaType type;
135 const char *typename; 135 const char *typename;
136 const char *typename_i18n; 136 const char *typename_i18n;
137 struct GNUNET_CONTAINER_MetaData *meta; 137 struct GNUNET_CONTAINER_MetaData *meta;
@@ -151,17 +151,23 @@ GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext*
151 "utf-8" 151 "utf-8"
152#endif 152#endif
153 ); 153 );
154 type = EXTRACTOR_getHighestKeywordTypeNumber (); 154 type = EXTRACTOR_metatype_get_max ();
155 while (type > 0) 155 while (type > 0)
156 { 156 {
157 type--; 157 type--;
158 typename = EXTRACTOR_getKeywordTypeAsString (type); 158 typename = EXTRACTOR_metatype_to_string (type);
159 typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename); 159 typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
160 if ((strlen (tmp) >= strlen (typename) + 1) && 160 if ((strlen (tmp) >= strlen (typename) + 1) &&
161 (tmp[strlen (typename)] == ':') && 161 (tmp[strlen (typename)] == ':') &&
162 (0 == strncmp (typename, tmp, strlen (typename)))) 162 (0 == strncmp (typename, tmp, strlen (typename))))
163 { 163 {
164 GNUNET_CONTAINER_meta_data_insert (meta, type, &tmp[strlen (typename) + 1]); 164 GNUNET_CONTAINER_meta_data_insert (meta,
165 "<gnunet>",
166 type,
167 EXTRACTOR_METAFORMAT_UTF8,
168 "text/plain",
169 &tmp[strlen (typename) + 1],
170 strlen (&tmp[strlen (typename) + 1])+1);
165 GNUNET_free (tmp); 171 GNUNET_free (tmp);
166 tmp = NULL; 172 tmp = NULL;
167 break; 173 break;
@@ -170,8 +176,13 @@ GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext*
170 (tmp[strlen (typename_i18n)] == ':') && 176 (tmp[strlen (typename_i18n)] == ':') &&
171 (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n)))) 177 (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
172 { 178 {
173 GNUNET_CONTAINER_meta_data_insert (meta, type, 179 GNUNET_CONTAINER_meta_data_insert (meta,
174 &tmp[strlen (typename_i18n) + 1]); 180 "<gnunet>",
181 type,
182 EXTRACTOR_METAFORMAT_UTF8,
183 "text/plain",
184 &tmp[strlen (typename_i18n) + 1],
185 strlen (&tmp[strlen (typename_i18n) + 1]) + 1);
175 GNUNET_free (tmp); 186 GNUNET_free (tmp);
176 tmp = NULL; 187 tmp = NULL;
177 break; 188 break;
@@ -179,7 +190,13 @@ GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext*
179 } 190 }
180 if (tmp != NULL) 191 if (tmp != NULL)
181 { 192 {
182 GNUNET_CONTAINER_meta_data_insert (meta, EXTRACTOR_UNKNOWN, tmp); 193 GNUNET_CONTAINER_meta_data_insert (meta,
194 "<gnunet>",
195 EXTRACTOR_METATYPE_UNKNOWN,
196 EXTRACTOR_METAFORMAT_UTF8,
197 "text/plain",
198 tmp,
199 strlen(tmp) + 1);
183 GNUNET_free (tmp); 200 GNUNET_free (tmp);
184 printf (_ 201 printf (_
185 ("Unknown metadata type in metadata option `%s'. Using metadata type `unknown' instead.\n"), 202 ("Unknown metadata type in metadata option `%s'. Using metadata type `unknown' instead.\n"),
diff --git a/src/fs/fs_publish.c b/src/fs/fs_publish.c
index 46b342cab..02ddb2a0d 100644
--- a/src/fs/fs_publish.c
+++ b/src/fs/fs_publish.c
@@ -842,7 +842,7 @@ do_upload (void *cls,
842 while (NULL != p->dir) 842 while (NULL != p->dir)
843 { 843 {
844 fn = GNUNET_CONTAINER_meta_data_get_by_type (p->meta, 844 fn = GNUNET_CONTAINER_meta_data_get_by_type (p->meta,
845 EXTRACTOR_FILENAME); 845 EXTRACTOR_METATYPE_FILENAME);
846 p = p->dir; 846 p = p->dir;
847 GNUNET_asprintf (&p->emsg, 847 GNUNET_asprintf (&p->emsg,
848 _("Recursive upload failed at `%s'"), 848 _("Recursive upload failed at `%s'"),
@@ -1305,6 +1305,7 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
1305 char *uris; 1305 char *uris;
1306 size_t size; 1306 size_t size;
1307 char *kbe; 1307 char *kbe;
1308 char *sptr;
1308 1309
1309 pkc = GNUNET_malloc (sizeof (struct PublishKskContext)); 1310 pkc = GNUNET_malloc (sizeof (struct PublishKskContext));
1310 pkc->h = h; 1311 pkc->h = h;
@@ -1324,8 +1325,7 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
1324 return; 1325 return;
1325 } 1326 }
1326 } 1327 }
1327 pkc->mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (meta, 1328 pkc->mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
1328 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART);
1329 GNUNET_assert (pkc->mdsize >= 0); 1329 GNUNET_assert (pkc->mdsize >= 0);
1330 uris = GNUNET_FS_uri_to_string (uri); 1330 uris = GNUNET_FS_uri_to_string (uri);
1331 pkc->slen = strlen (uris) + 1; 1331 pkc->slen = strlen (uris) + 1;
@@ -1339,8 +1339,9 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
1339 kbe = (char *) &pkc->kb[1]; 1339 kbe = (char *) &pkc->kb[1];
1340 memcpy (kbe, uris, pkc->slen); 1340 memcpy (kbe, uris, pkc->slen);
1341 GNUNET_free (uris); 1341 GNUNET_free (uris);
1342 sptr = &kbe[pkc->slen];
1342 pkc->mdsize = GNUNET_CONTAINER_meta_data_serialize (meta, 1343 pkc->mdsize = GNUNET_CONTAINER_meta_data_serialize (meta,
1343 &kbe[pkc->slen], 1344 &sptr,
1344 pkc->mdsize, 1345 pkc->mdsize,
1345 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART); 1346 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART);
1346 if (pkc->mdsize == -1) 1347 if (pkc->mdsize == -1)
@@ -1480,8 +1481,7 @@ GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h,
1480 if (update == NULL) 1481 if (update == NULL)
1481 update = ""; 1482 update = "";
1482 nidlen = strlen (update) + 1; 1483 nidlen = strlen (update) + 1;
1483 mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (meta, 1484 mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
1484 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART);
1485 1485
1486 size = sizeof (struct SBlock) + slen + nidlen + mdsize; 1486 size = sizeof (struct SBlock) + slen + nidlen + mdsize;
1487 if (size > MAX_SBLOCK_SIZE) 1487 if (size > MAX_SBLOCK_SIZE)
@@ -1496,7 +1496,7 @@ GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h,
1496 memcpy (dest, uris, slen); 1496 memcpy (dest, uris, slen);
1497 dest += slen; 1497 dest += slen;
1498 mdsize = GNUNET_CONTAINER_meta_data_serialize (meta, 1498 mdsize = GNUNET_CONTAINER_meta_data_serialize (meta,
1499 dest, 1499 &dest,
1500 mdsize, 1500 mdsize,
1501 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART); 1501 GNUNET_CONTAINER_META_DATA_SERIALIZE_PART);
1502 if (mdsize == -1) 1502 if (mdsize == -1)
diff --git a/src/fs/fs_uri.c b/src/fs/fs_uri.c
index 02310a080..16b6e26e9 100644
--- a/src/fs/fs_uri.c
+++ b/src/fs/fs_uri.c
@@ -1469,19 +1469,34 @@ GNUNET_FS_uri_test_loc (const struct GNUNET_FS_Uri *uri)
1469 * Adds it to the URI. 1469 * Adds it to the URI.
1470 * 1470 *
1471 * @param cls URI to update 1471 * @param cls URI to update
1472 * @param type type of the meta data 1472 * @param plugin_name name of the plugin that produced this value;
1473 * @param data value of the meta data 1473 * special values can be used (i.e. '<zlib>' for zlib being
1474 * @return GNUNET_OK (always) 1474 * used in the main libextractor library and yielding
1475 * meta data).
1476 * @param type libextractor-type describing the meta data
1477 * @param format basic format information about data
1478 * @param data_mime_type mime-type of data (not of the original file);
1479 * can be NULL (if mime-type is not known)
1480 * @param data actual meta-data found
1481 * @param data_len number of bytes in data
1482 * @return 0 (always)
1475 */ 1483 */
1476static int 1484static int
1477gather_uri_data (void *cls, 1485gather_uri_data (void *cls,
1478 EXTRACTOR_KeywordType type, 1486 const char *plugin_name,
1479 const char *data) 1487 enum EXTRACTOR_MetaType type,
1488 enum EXTRACTOR_MetaFormat format,
1489 const char *data_mime_type,
1490 const char *data,
1491 size_t data_len)
1480{ 1492{
1481 struct GNUNET_FS_Uri *uri = cls; 1493 struct GNUNET_FS_Uri *uri = cls;
1482 char *nkword; 1494 char *nkword;
1483 int j; 1495 int j;
1484 1496
1497 if ( (format != EXTRACTOR_METAFORMAT_UTF8) &&
1498 (format != EXTRACTOR_METAFORMAT_C_STRING) )
1499 return 0;
1485 for (j = uri->data.ksk.keywordCount - 1; j >= 0; j--) 1500 for (j = uri->data.ksk.keywordCount - 1; j >= 0; j--)
1486 if (0 == strcmp (&uri->data.ksk.keywords[j][1], data)) 1501 if (0 == strcmp (&uri->data.ksk.keywords[j][1], data))
1487 return GNUNET_OK; 1502 return GNUNET_OK;
@@ -1489,7 +1504,7 @@ gather_uri_data (void *cls,
1489 strcpy (nkword, " "); /* not mandatory */ 1504 strcpy (nkword, " "); /* not mandatory */
1490 strcat (nkword, data); 1505 strcat (nkword, data);
1491 uri->data.ksk.keywords[uri->data.ksk.keywordCount++] = nkword; 1506 uri->data.ksk.keywords[uri->data.ksk.keywordCount++] = nkword;
1492 return GNUNET_OK; 1507 return 0;
1493} 1508}
1494 1509
1495 1510
@@ -1514,8 +1529,8 @@ GNUNET_FS_uri_ksk_create_from_meta_data (const struct GNUNET_CONTAINER_MetaData
1514 ret->data.ksk.keywords = NULL; 1529 ret->data.ksk.keywords = NULL;
1515 ret->data.ksk.keywords 1530 ret->data.ksk.keywords
1516 = GNUNET_malloc (sizeof (char *) * 1531 = GNUNET_malloc (sizeof (char *) *
1517 GNUNET_CONTAINER_meta_data_get_contents (md, NULL, NULL)); 1532 GNUNET_CONTAINER_meta_data_iterate (md, NULL, NULL));
1518 GNUNET_CONTAINER_meta_data_get_contents (md, &gather_uri_data, ret); 1533 GNUNET_CONTAINER_meta_data_iterate (md, &gather_uri_data, ret);
1519 return ret; 1534 return ret;
1520 1535
1521} 1536}
diff --git a/src/fs/gnunet-directory.c b/src/fs/gnunet-directory.c
index 6201c5dbb..3ea76985e 100644
--- a/src/fs/gnunet-directory.c
+++ b/src/fs/gnunet-directory.c
@@ -36,13 +36,20 @@ static int ret;
36 */ 36 */
37static int 37static int
38item_printer (void *cls, 38item_printer (void *cls,
39 EXTRACTOR_KeywordType type, 39 const char *plugin_name,
40 const char *data) 40 enum EXTRACTOR_MetaType type,
41 enum EXTRACTOR_MetaFormat format,
42 const char *data_mime_type,
43 const char *data,
44 size_t data_size)
41{ 45{
46 if ( (format != EXTRACTOR_METAFORMAT_UTF8) &&
47 (format != EXTRACTOR_METAFORMAT_C_STRING) )
48 return 0;
42 printf ("\t%20s: %s\n", 49 printf ("\t%20s: %s\n",
43 dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, 50 dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN,
44 EXTRACTOR_getKeywordTypeAsString (type)), data); 51 EXTRACTOR_metatype_to_string (type)), data);
45 return GNUNET_OK; 52 return 0;
46} 53}
47 54
48 55
@@ -75,9 +82,9 @@ print_entry (void *cls,
75 string = GNUNET_FS_uri_to_string (uri); 82 string = GNUNET_FS_uri_to_string (uri);
76 printf ("%s:\n", string); 83 printf ("%s:\n", string);
77 GNUNET_free (string); 84 GNUNET_free (string);
78 GNUNET_CONTAINER_meta_data_get_contents (meta, 85 GNUNET_CONTAINER_meta_data_iterate (meta,
79 &item_printer, 86 &item_printer,
80 NULL); 87 NULL);
81} 88}
82 89
83 90
diff --git a/src/fs/gnunet-publish.c b/src/fs/gnunet-publish.c
index e3918f6fb..65f437f11 100644
--- a/src/fs/gnunet-publish.c
+++ b/src/fs/gnunet-publish.c
@@ -140,43 +140,57 @@ progress_cb (void *cls,
140 * @param cls closure 140 * @param cls closure
141 * @param type type of the meta data 141 * @param type type of the meta data
142 * @param data value of the meta data 142 * @param data value of the meta data
143 * @return GNUNET_OK to continue to iterate, GNUNET_SYSERR to abort 143 * @return always 0
144 */ 144 */
145static int 145static int
146meta_printer (void *cls, 146meta_printer (void *cls,
147 EXTRACTOR_KeywordType type, 147 const char *plugin_name,
148 const char *data) 148 enum EXTRACTOR_MetaType type,
149 enum EXTRACTOR_MetaFormat format,
150 const char *data_mime_type,
151 const char *data,
152 size_t data_size)
149{ 153{
150 if ( (type == EXTRACTOR_FILENAME) || 154 if ( (format != EXTRACTOR_METAFORMAT_UTF8) &&
151 (EXTRACTOR_isBinaryType (type)) ) 155 (format != EXTRACTOR_METAFORMAT_C_STRING) )
152 return GNUNET_OK; 156 return 0;
157 if (type == EXTRACTOR_METATYPE_FILENAME)
158 return 0;
153 fprintf (stdout, 159 fprintf (stdout,
154 "%s - %s", 160 "%s - %s",
155 EXTRACTOR_getKeywordTypeAsString (type), 161 EXTRACTOR_metatype_to_string (type),
156 data); 162 data);
157 return GNUNET_OK; 163 return 0;
158} 164}
159 165
160 166
161/** 167/**
162 * Merge metadata entries (except binary 168 * Merge metadata entries.
163 * metadata).
164 * 169 *
165 * @param cls closure, target metadata structure 170 * @param cls closure, target metadata structure
166 * @param type type of the meta data 171 * @param type type of the meta data
167 * @param data value of the meta data 172 * @param data value of the meta data
168 * @return GNUNET_OK to continue to iterate, GNUNET_SYSERR to abort 173 * @return always 0
169 */ 174 */
170static int 175static int
171meta_merger (void *cls, 176meta_merger (void *cls,
172 EXTRACTOR_KeywordType type, 177 const char *plugin_name,
173 const char *data) 178 enum EXTRACTOR_MetaType type,
179 enum EXTRACTOR_MetaFormat format,
180 const char *data_mime_type,
181 const char *data,
182 size_t data_size)
174{ 183{
175 struct GNUNET_CONTAINER_MetaData *m = cls; 184 struct GNUNET_CONTAINER_MetaData *m = cls;
185
176 GNUNET_CONTAINER_meta_data_insert (m, 186 GNUNET_CONTAINER_meta_data_insert (m,
187 plugin_name,
177 type, 188 type,
178 data); 189 format,
179 return GNUNET_OK; 190 data_mime_type,
191 data,
192 data_size);
193 return 0;
180} 194}
181 195
182 196
@@ -227,16 +241,16 @@ publish_inspector (void *cls,
227 } 241 }
228 if (NULL != meta) 242 if (NULL != meta)
229 { 243 {
230 GNUNET_CONTAINER_meta_data_get_contents (meta, 244 GNUNET_CONTAINER_meta_data_iterate (meta,
231 &meta_merger, 245 &meta_merger,
232 m); 246 m);
233 GNUNET_CONTAINER_meta_data_destroy (meta); 247 GNUNET_CONTAINER_meta_data_destroy (meta);
234 meta = NULL; 248 meta = NULL;
235 } 249 }
236 if (extract_only) 250 if (extract_only)
237 { 251 {
238 fn = GNUNET_CONTAINER_meta_data_get_by_type (meta, 252 fn = GNUNET_CONTAINER_meta_data_get_by_type (meta,
239 EXTRACTOR_FILENAME); 253 EXTRACTOR_METATYPE_FILENAME);
240 fs = GNUNET_STRINGS_byte_size_fancy (length); 254 fs = GNUNET_STRINGS_byte_size_fancy (length);
241 fprintf (stdout, 255 fprintf (stdout,
242 _("Keywords for file `%s' (%s)\n"), 256 _("Keywords for file `%s' (%s)\n"),
@@ -244,9 +258,9 @@ publish_inspector (void *cls,
244 fs); 258 fs);
245 GNUNET_free (fn); 259 GNUNET_free (fn);
246 GNUNET_free (fs); 260 GNUNET_free (fs);
247 GNUNET_CONTAINER_meta_data_get_contents (meta, 261 GNUNET_CONTAINER_meta_data_iterate (meta,
248 &meta_printer, 262 &meta_printer,
249 NULL); 263 NULL);
250 fprintf (stdout, "\n"); 264 fprintf (stdout, "\n");
251 } 265 }
252 if (GNUNET_FS_meta_data_test_for_directory (meta)) 266 if (GNUNET_FS_meta_data_test_for_directory (meta))
@@ -275,7 +289,7 @@ run (void *cls,
275{ 289{
276 struct GNUNET_FS_FileInformation *fi; 290 struct GNUNET_FS_FileInformation *fi;
277 struct GNUNET_FS_Namespace *namespace; 291 struct GNUNET_FS_Namespace *namespace;
278 EXTRACTOR_ExtractorList *l; 292 struct EXTRACTOR_PluginList *l;
279 char *ex; 293 char *ex;
280 char *emsg; 294 char *emsg;
281 295
@@ -377,13 +391,13 @@ run (void *cls,
377 l = NULL; 391 l = NULL;
378 if (! disable_extractor) 392 if (! disable_extractor)
379 { 393 {
380 l = EXTRACTOR_loadDefaultLibraries (); 394 l = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
381 if (GNUNET_OK == 395 if (GNUNET_OK ==
382 GNUNET_CONFIGURATION_get_value_string (cfg, "FS", "EXTRACTORS", 396 GNUNET_CONFIGURATION_get_value_string (cfg, "FS", "EXTRACTORS",
383 &ex)) 397 &ex))
384 { 398 {
385 if (strlen (ex) > 0) 399 if (strlen (ex) > 0)
386 l = EXTRACTOR_loadConfigLibraries (l, ex); 400 l = EXTRACTOR_plugin_add_config (l, ex, EXTRACTOR_OPTION_DEFAULT_POLICY);
387 GNUNET_free (ex); 401 GNUNET_free (ex);
388 } 402 }
389 } 403 }
@@ -396,7 +410,7 @@ run (void *cls,
396 priority, 410 priority,
397 GNUNET_TIME_relative_to_absolute (DEFAULT_EXPIRATION), 411 GNUNET_TIME_relative_to_absolute (DEFAULT_EXPIRATION),
398 &emsg); 412 &emsg);
399 EXTRACTOR_removeAll (l); 413 EXTRACTOR_plugin_remove_all (l);
400 if (fi == NULL) 414 if (fi == NULL)
401 { 415 {
402 fprintf (stderr, 416 fprintf (stderr,
diff --git a/src/fs/gnunet-search.c b/src/fs/gnunet-search.c
index 067d77159..4836f9d83 100644
--- a/src/fs/gnunet-search.c
+++ b/src/fs/gnunet-search.c
@@ -45,12 +45,19 @@ static int verbose;
45 45
46static int 46static int
47item_printer (void *cls, 47item_printer (void *cls,
48 EXTRACTOR_KeywordType type, 48 const char *plugin_name,
49 const char *data) 49 enum EXTRACTOR_MetaType type,
50 enum EXTRACTOR_MetaFormat format,
51 const char *data_mime_type,
52 const char *data,
53 size_t data_size)
50{ 54{
55 if ( (format != EXTRACTOR_METAFORMAT_UTF8) &&
56 (format != EXTRACTOR_METAFORMAT_C_STRING) )
57 return 0;
51 printf ("\t%20s: %s\n", 58 printf ("\t%20s: %s\n",
52 dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, 59 dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN,
53 EXTRACTOR_getKeywordTypeAsString (type)), 60 EXTRACTOR_metatype_to_string (type)),
54 data); 61 data);
55 return GNUNET_OK; 62 return GNUNET_OK;
56} 63}
@@ -86,7 +93,7 @@ progress_cb (void *cls,
86 printf ("%s:\n", uri); 93 printf ("%s:\n", uri);
87 filename = 94 filename =
88 GNUNET_CONTAINER_meta_data_get_by_type (info->value.search.specifics.result.meta, 95 GNUNET_CONTAINER_meta_data_get_by_type (info->value.search.specifics.result.meta,
89 EXTRACTOR_FILENAME); 96 EXTRACTOR_METATYPE_FILENAME);
90 if (filename != NULL) 97 if (filename != NULL)
91 { 98 {
92 while (NULL != (dotdot = strstr (filename, ".."))) 99 while (NULL != (dotdot = strstr (filename, "..")))
@@ -98,9 +105,9 @@ progress_cb (void *cls,
98 else 105 else
99 printf ("gnunet-download %s\n", uri); 106 printf ("gnunet-download %s\n", uri);
100 if (verbose) 107 if (verbose)
101 GNUNET_CONTAINER_meta_data_get_contents (info->value.search.specifics.result.meta, 108 GNUNET_CONTAINER_meta_data_iterate (info->value.search.specifics.result.meta,
102 &item_printer, 109 &item_printer,
103 NULL); 110 NULL);
104 printf ("\n"); 111 printf ("\n");
105 fflush(stdout); 112 fflush(stdout);
106 GNUNET_free_non_null (filename); 113 GNUNET_free_non_null (filename);