aboutsummaryrefslogtreecommitdiff
path: root/src/util/container_meta_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/container_meta_data.c')
-rw-r--r--src/util/container_meta_data.c93
1 files changed, 38 insertions, 55 deletions
diff --git a/src/util/container_meta_data.c b/src/util/container_meta_data.c
index 64a58e133..c67e96dac 100644
--- a/src/util/container_meta_data.c
+++ b/src/util/container_meta_data.c
@@ -224,8 +224,7 @@ GNUNET_CONTAINER_meta_data_test_equal (const struct GNUNET_CONTAINER_MetaData
224 j = md2->items; 224 j = md2->items;
225 while (NULL != j) 225 while (NULL != j)
226 { 226 {
227 if ((i->type == j->type) && 227 if ((i->type == j->type) && (i->format == j->format) &&
228 (i->format == j->format) &&
229 (i->data_size == j->data_size) && 228 (i->data_size == j->data_size) &&
230 (0 == memcmp (i->data, j->data, i->data_size))) 229 (0 == memcmp (i->data, j->data, i->data_size)))
231 { 230 {
@@ -265,8 +264,8 @@ GNUNET_CONTAINER_meta_data_insert (struct GNUNET_CONTAINER_MetaData *md,
265 const char *plugin_name, 264 const char *plugin_name,
266 enum EXTRACTOR_MetaType type, 265 enum EXTRACTOR_MetaType type,
267 enum EXTRACTOR_MetaFormat format, 266 enum EXTRACTOR_MetaFormat format,
268 const char *data_mime_type, 267 const char *data_mime_type, const char *data,
269 const char *data, size_t data_len) 268 size_t data_len)
270{ 269{
271 struct MetaItem *prev; 270 struct MetaItem *prev;
272 struct MetaItem *pos; 271 struct MetaItem *pos;
@@ -279,8 +278,7 @@ GNUNET_CONTAINER_meta_data_insert (struct GNUNET_CONTAINER_MetaData *md,
279 { 278 {
280 if (pos->data_size < data_len) 279 if (pos->data_size < data_len)
281 break; 280 break;
282 if ((pos->type == type) && 281 if ((pos->type == type) && (pos->data_size == data_len) &&
283 (pos->data_size == data_len) &&
284 (0 == memcmp (pos->data, data, data_len))) 282 (0 == memcmp (pos->data, data, data_len)))
285 { 283 {
286 if ((pos->mime_type == NULL) && (data_mime_type != NULL)) 284 if ((pos->mime_type == NULL) && (data_mime_type != NULL))
@@ -349,16 +347,13 @@ GNUNET_CONTAINER_meta_data_insert (struct GNUNET_CONTAINER_MetaData *md,
349 * @return 0 (to continue) 347 * @return 0 (to continue)
350 */ 348 */
351static int 349static int
352merge_helper (void *cls, 350merge_helper (void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type,
353 const char *plugin_name, 351 enum EXTRACTOR_MetaFormat format, const char *data_mime_type,
354 enum EXTRACTOR_MetaType type, 352 const char *data, size_t data_len)
355 enum EXTRACTOR_MetaFormat format,
356 const char *data_mime_type, const char *data, size_t data_len)
357{ 353{
358 struct GNUNET_CONTAINER_MetaData *md = cls; 354 struct GNUNET_CONTAINER_MetaData *md = cls;
359 355
360 (void) GNUNET_CONTAINER_meta_data_insert (md, plugin_name, 356 (void) GNUNET_CONTAINER_meta_data_insert (md, plugin_name, type, format,
361 type, format,
362 data_mime_type, data, data_len); 357 data_mime_type, data, data_len);
363 return 0; 358 return 0;
364} 359}
@@ -436,15 +431,13 @@ GNUNET_CONTAINER_meta_data_add_publication_date (struct
436 struct GNUNET_TIME_Absolute t; 431 struct GNUNET_TIME_Absolute t;
437 432
438 t = GNUNET_TIME_absolute_get (); 433 t = GNUNET_TIME_absolute_get ();
439 GNUNET_CONTAINER_meta_data_delete (md, 434 GNUNET_CONTAINER_meta_data_delete (md, EXTRACTOR_METATYPE_PUBLICATION_DATE,
440 EXTRACTOR_METATYPE_PUBLICATION_DATE,
441 NULL, 0); 435 NULL, 0);
442 dat = GNUNET_STRINGS_absolute_time_to_string (t); 436 dat = GNUNET_STRINGS_absolute_time_to_string (t);
443 GNUNET_CONTAINER_meta_data_insert (md, 437 GNUNET_CONTAINER_meta_data_insert (md, "<gnunet>",
444 "<gnunet>",
445 EXTRACTOR_METATYPE_PUBLICATION_DATE, 438 EXTRACTOR_METATYPE_PUBLICATION_DATE,
446 EXTRACTOR_METAFORMAT_UTF8, 439 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
447 "text/plain", dat, strlen (dat) + 1); 440 dat, strlen (dat) + 1);
448 GNUNET_free (dat); 441 GNUNET_free (dat);
449} 442}
450 443
@@ -458,10 +451,9 @@ GNUNET_CONTAINER_meta_data_add_publication_date (struct
458 * @return number of entries 451 * @return number of entries
459 */ 452 */
460int 453int
461GNUNET_CONTAINER_meta_data_iterate (const struct 454GNUNET_CONTAINER_meta_data_iterate (const struct GNUNET_CONTAINER_MetaData *md,
462 GNUNET_CONTAINER_MetaData *md, 455 EXTRACTOR_MetaDataProcessor iter,
463 EXTRACTOR_MetaDataProcessor 456 void *iter_cls)
464 iter, void *iter_cls)
465{ 457{
466 struct MetaItem *pos; 458 struct MetaItem *pos;
467 459
@@ -472,10 +464,9 @@ GNUNET_CONTAINER_meta_data_iterate (const struct
472 pos = md->items; 464 pos = md->items;
473 while (NULL != pos) 465 while (NULL != pos)
474 { 466 {
475 if (0 != iter (iter_cls, 467 if (0 !=
476 pos->plugin_name, 468 iter (iter_cls, pos->plugin_name, pos->type, pos->format,
477 pos->type, 469 pos->mime_type, pos->data, pos->data_size))
478 pos->format, pos->mime_type, pos->data, pos->data_size))
479 return md->item_count; 470 return md->item_count;
480 pos = pos->next; 471 pos = pos->next;
481 } 472 }
@@ -562,9 +553,8 @@ GNUNET_CONTAINER_meta_data_get_first_by_types (const struct
562 * @return number of bytes in thumbnail, 0 if not available 553 * @return number of bytes in thumbnail, 0 if not available
563 */ 554 */
564size_t 555size_t
565GNUNET_CONTAINER_meta_data_get_thumbnail (const struct 556GNUNET_CONTAINER_meta_data_get_thumbnail (const struct GNUNET_CONTAINER_MetaData
566 GNUNET_CONTAINER_MetaData * md, 557 * md, unsigned char **thumb)
567 unsigned char **thumb)
568{ 558{
569 struct MetaItem *pos; 559 struct MetaItem *pos;
570 struct MetaItem *match; 560 struct MetaItem *match;
@@ -576,8 +566,7 @@ GNUNET_CONTAINER_meta_data_get_thumbnail (const struct
576 while (NULL != pos) 566 while (NULL != pos)
577 { 567 {
578 if ((NULL != pos->mime_type) && 568 if ((NULL != pos->mime_type) &&
579 (0 == strncasecmp ("image/", pos->mime_type, 569 (0 == strncasecmp ("image/", pos->mime_type, strlen ("image/"))) &&
580 strlen ("image/"))) &&
581 (pos->format == EXTRACTOR_METAFORMAT_BINARY)) 570 (pos->format == EXTRACTOR_METAFORMAT_BINARY))
582 { 571 {
583 if (match == NULL) 572 if (match == NULL)
@@ -615,12 +604,9 @@ GNUNET_CONTAINER_meta_data_duplicate (const struct GNUNET_CONTAINER_MetaData
615 pos = md->items; 604 pos = md->items;
616 while (NULL != pos) 605 while (NULL != pos)
617 { 606 {
618 GNUNET_CONTAINER_meta_data_insert (ret, 607 GNUNET_CONTAINER_meta_data_insert (ret, pos->plugin_name, pos->type,
619 pos->plugin_name, 608 pos->format, pos->mime_type, pos->data,
620 pos->type, 609 pos->data_size);
621 pos->format,
622 pos->mime_type,
623 pos->data, pos->data_size);
624 pos = pos->next; 610 pos = pos->next;
625 } 611 }
626 return ret; 612 return ret;
@@ -642,8 +628,8 @@ GNUNET_CONTAINER_meta_data_duplicate (const struct GNUNET_CONTAINER_MetaData
642 * GNUNET_NO if compression did not help 628 * GNUNET_NO if compression did not help
643 */ 629 */
644static int 630static int
645try_compression (const char *data, 631try_compression (const char *data, size_t oldSize, char **result,
646 size_t oldSize, char **result, size_t * newSize) 632 size_t * newSize)
647{ 633{
648 char *tmp; 634 char *tmp;
649 uLongf dlen; 635 uLongf dlen;
@@ -656,8 +642,8 @@ try_compression (const char *data,
656 * should be able to overshoot by more to be safe */ 642 * should be able to overshoot by more to be safe */
657#endif 643#endif
658 tmp = GNUNET_malloc (dlen); 644 tmp = GNUNET_malloc (dlen);
659 if (Z_OK == compress2 ((Bytef *) tmp, 645 if (Z_OK ==
660 &dlen, (const Bytef *) data, oldSize, 9)) 646 compress2 ((Bytef *) tmp, &dlen, (const Bytef *) data, oldSize, 9))
661 { 647 {
662 if (dlen < oldSize) 648 if (dlen < oldSize)
663 { 649 {
@@ -990,10 +976,9 @@ GNUNET_CONTAINER_meta_data_get_serialized_size (const struct
990 if (md->sbuf != NULL) 976 if (md->sbuf != NULL)
991 return md->sbuf_size; 977 return md->sbuf_size;
992 ptr = NULL; 978 ptr = NULL;
993 ret = GNUNET_CONTAINER_meta_data_serialize (md, 979 ret =
994 &ptr, 980 GNUNET_CONTAINER_meta_data_serialize (md, &ptr, GNUNET_MAX_MALLOC_CHECKED,
995 GNUNET_MAX_MALLOC_CHECKED, 981 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
996 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
997 if (ret != -1) 982 if (ret != -1)
998 GNUNET_free (ptr); 983 GNUNET_free (ptr);
999 return ret; 984 return ret;
@@ -1018,8 +1003,8 @@ decompress (const char *input, size_t inputSize, size_t outputSize)
1018 1003
1019 olen = outputSize; 1004 olen = outputSize;
1020 output = GNUNET_malloc (olen); 1005 output = GNUNET_malloc (olen);
1021 if (Z_OK == uncompress ((Bytef *) output, 1006 if (Z_OK ==
1022 &olen, (const Bytef *) input, inputSize)) 1007 uncompress ((Bytef *) output, &olen, (const Bytef *) input, inputSize))
1023 { 1008 {
1024 return output; 1009 return output;
1025 } 1010 }
@@ -1119,8 +1104,7 @@ GNUNET_CONTAINER_meta_data_deserialize (const char *input, size_t size)
1119 mdata = &cdata[ic * sizeof (struct MetaDataEntry)]; 1104 mdata = &cdata[ic * sizeof (struct MetaDataEntry)];
1120 for (i = 0; i < ic; i++) 1105 for (i = 0; i < ic; i++)
1121 { 1106 {
1122 memcpy (&ent, 1107 memcpy (&ent, &cdata[i * sizeof (struct MetaDataEntry)],
1123 &cdata[i * sizeof (struct MetaDataEntry)],
1124 sizeof (struct MetaDataEntry)); 1108 sizeof (struct MetaDataEntry));
1125 format = (enum EXTRACTOR_MetaFormat) ntohl (ent.format); 1109 format = (enum EXTRACTOR_MetaFormat) ntohl (ent.format);
1126 if ((format != EXTRACTOR_METAFORMAT_UTF8) && 1110 if ((format != EXTRACTOR_METAFORMAT_UTF8) &&
@@ -1180,11 +1164,10 @@ GNUNET_CONTAINER_meta_data_deserialize (const char *input, size_t size)
1180 mime_type = NULL; 1164 mime_type = NULL;
1181 else 1165 else
1182 mime_type = &mdata[left]; 1166 mime_type = &mdata[left];
1183 GNUNET_CONTAINER_meta_data_insert (md, 1167 GNUNET_CONTAINER_meta_data_insert (md, plugin_name,
1184 plugin_name, 1168 (enum EXTRACTOR_MetaType) ntohl (ent.
1185 (enum EXTRACTOR_MetaType) 1169 type),
1186 ntohl (ent.type), format, mime_type, 1170 format, mime_type, meta_data, dlen);
1187 meta_data, dlen);
1188 } 1171 }
1189 GNUNET_free_non_null (data); 1172 GNUNET_free_non_null (data);
1190 return md; 1173 return md;