aboutsummaryrefslogtreecommitdiff
path: root/src/namestore/gnunet-service-namestore.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/namestore/gnunet-service-namestore.c')
-rw-r--r--src/namestore/gnunet-service-namestore.c55
1 files changed, 31 insertions, 24 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c
index 593763894..05bcd94ce 100644
--- a/src/namestore/gnunet-service-namestore.c
+++ b/src/namestore/gnunet-service-namestore.c
@@ -472,20 +472,19 @@ get_nick_record (const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone)
472 472
473 473
474static void 474static void
475merge_with_nick_records ( const struct GNUNET_GNSRECORD_Data *nick_rd, 475merge_with_nick_records (const struct GNUNET_GNSRECORD_Data *nick_rd,
476 unsigned int rdc2, 476 unsigned int rdc2,
477 const struct GNUNET_GNSRECORD_Data *rd2, 477 const struct GNUNET_GNSRECORD_Data *rd2,
478 unsigned int *rdc_res, 478 unsigned int *rdc_res,
479 struct GNUNET_GNSRECORD_Data **rd_res) 479 struct GNUNET_GNSRECORD_Data **rd_res)
480{ 480{
481 uint64_t latest_expiration; 481 uint64_t latest_expiration;
482 int c;
483 size_t req; 482 size_t req;
484 char *data; 483 char *data;
485 int record_offset; 484 int record_offset;
486 size_t data_offset; 485 size_t data_offset;
487 (*rdc_res) = 1 + rdc2;
488 486
487 (*rdc_res) = 1 + rdc2;
489 if (0 == 1 + rdc2) 488 if (0 == 1 + rdc2)
490 { 489 {
491 (*rd_res) = NULL; 490 (*rd_res) = NULL;
@@ -493,16 +492,16 @@ merge_with_nick_records ( const struct GNUNET_GNSRECORD_Data *nick_rd,
493 } 492 }
494 493
495 req = 0; 494 req = 0;
496 for (c=0; c< 1; c++) 495 for (unsigned int c=0; c< 1; c++)
497 req += sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd[c].data_size; 496 req += sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd[c].data_size;
498 for (c=0; c< rdc2; c++) 497 for (unsigned int c=0; c< rdc2; c++)
499 req += sizeof (struct GNUNET_GNSRECORD_Data) + rd2[c].data_size; 498 req += sizeof (struct GNUNET_GNSRECORD_Data) + rd2[c].data_size;
500 (*rd_res) = GNUNET_malloc (req); 499 (*rd_res) = GNUNET_malloc (req);
501 data = (char *) &(*rd_res)[1 + rdc2]; 500 data = (char *) &(*rd_res)[1 + rdc2];
502 data_offset = 0; 501 data_offset = 0;
503 latest_expiration = 0; 502 latest_expiration = 0;
504 503
505 for (c=0; c< rdc2; c++) 504 for (unsigned int c=0; c< rdc2; c++)
506 { 505 {
507 if (0 != (rd2[c].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)) 506 if (0 != (rd2[c].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
508 { 507 {
@@ -514,19 +513,17 @@ merge_with_nick_records ( const struct GNUNET_GNSRECORD_Data *nick_rd,
514 latest_expiration = rd2[c].expiration_time; 513 latest_expiration = rd2[c].expiration_time;
515 (*rd_res)[c] = rd2[c]; 514 (*rd_res)[c] = rd2[c];
516 (*rd_res)[c].data = (void *) &data[data_offset]; 515 (*rd_res)[c].data = (void *) &data[data_offset];
517 // WTF?
518 GNUNET_memcpy ((void *) (*rd_res)[c].data, 516 GNUNET_memcpy ((void *) (*rd_res)[c].data,
519 rd2[c].data, 517 rd2[c].data,
520 rd2[c].data_size); 518 rd2[c].data_size);
521 data_offset += (*rd_res)[c].data_size; 519 data_offset += (*rd_res)[c].data_size;
522 } 520 }
523 record_offset = rdc2; 521 record_offset = rdc2;
524 for (c=0; c< 1; c++) 522 for (unsigned int c=0; c< 1; c++)
525 { 523 {
526 (*rd_res)[c+record_offset] = nick_rd[c]; 524 (*rd_res)[c+record_offset] = nick_rd[c];
527 (*rd_res)[c+record_offset].expiration_time = latest_expiration; 525 (*rd_res)[c+record_offset].expiration_time = latest_expiration;
528 (*rd_res)[c+record_offset].data = (void *) &data[data_offset]; 526 (*rd_res)[c+record_offset].data = (void *) &data[data_offset];
529 // WTF?
530 GNUNET_memcpy ((void *) (*rd_res)[c+record_offset].data, 527 GNUNET_memcpy ((void *) (*rd_res)[c+record_offset].data,
531 nick_rd[c].data, 528 nick_rd[c].data,
532 nick_rd[c].data_size); 529 nick_rd[c].data_size);
@@ -571,15 +568,17 @@ send_lookup_response (struct GNUNET_SERVER_NotificationContext *nc,
571 if ((NULL != nick) && (0 != strcmp(name, GNUNET_GNS_MASTERZONE_STR))) 568 if ((NULL != nick) && (0 != strcmp(name, GNUNET_GNS_MASTERZONE_STR)))
572 { 569 {
573 nick->flags = (nick->flags | GNUNET_GNSRECORD_RF_PRIVATE) ^ GNUNET_GNSRECORD_RF_PRIVATE; 570 nick->flags = (nick->flags | GNUNET_GNSRECORD_RF_PRIVATE) ^ GNUNET_GNSRECORD_RF_PRIVATE;
574 merge_with_nick_records (nick, rd_count, rd, &res_count, &res); 571 merge_with_nick_records (nick,
575 //fprintf (stderr, "Merging %u records for `%s' with NICK records\n",rd_count, name); 572 rd_count,
573 rd,
574 &res_count,
575 &res);
576 GNUNET_free (nick); 576 GNUNET_free (nick);
577 } 577 }
578 else 578 else
579 { 579 {
580 res_count = rd_count; 580 res_count = rd_count;
581 res = (struct GNUNET_GNSRECORD_Data *) rd; 581 res = (struct GNUNET_GNSRECORD_Data *) rd;
582 //fprintf (stderr, "Not merging %u records for `%s' with NICK records\n",rd_count, name);
583 } 582 }
584 583
585 name_len = strlen (name) + 1; 584 name_len = strlen (name) + 1;
@@ -599,8 +598,7 @@ send_lookup_response (struct GNUNET_SERVER_NotificationContext *nc,
599 rd_ser = &name_tmp[name_len]; 598 rd_ser = &name_tmp[name_len];
600 GNUNET_GNSRECORD_records_serialize (res_count, res, rd_ser_len, rd_ser); 599 GNUNET_GNSRECORD_records_serialize (res_count, res, rd_ser_len, rd_ser);
601 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 600 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
602 "Sending `%s' message with %u records and size %zu\n", 601 "Sending RECORD_RESULT message with %u records and size %zu\n",
603 "RECORD_RESULT",
604 res_count, 602 res_count,
605 msg_size); 603 msg_size);
606 GNUNET_SERVER_notification_context_unicast (nc, 604 GNUNET_SERVER_notification_context_unicast (nc,
@@ -776,7 +774,9 @@ lookup_it (void *cls,
776 rlc->found = GNUNET_YES; 774 rlc->found = GNUNET_YES;
777 if (0 != rd_count) 775 if (0 != rd_count)
778 { 776 {
779 if ((NULL != rlc->nick) && (0 != strcmp(label, GNUNET_GNS_MASTERZONE_STR))) 777 if ( (NULL != rlc->nick) &&
778 (0 != strcmp (label,
779 GNUNET_GNS_MASTERZONE_STR)) )
780 { 780 {
781 /* Merge */ 781 /* Merge */
782 rd_res = NULL; 782 rd_res = NULL;
@@ -786,10 +786,14 @@ lookup_it (void *cls,
786 rd_count, rd, 786 rd_count, rd,
787 &rdc_res, &rd_res); 787 &rdc_res, &rd_res);
788 788
789 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rdc_res, rd_res); 789 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rdc_res,
790 rd_res);
790 rlc->res_rd_count = rdc_res; 791 rlc->res_rd_count = rdc_res;
791 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len); 792 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len);
792 GNUNET_GNSRECORD_records_serialize (rdc_res, rd_res, rlc->rd_ser_len , rlc->res_rd); 793 GNUNET_GNSRECORD_records_serialize (rdc_res,
794 rd_res,
795 rlc->rd_ser_len,
796 rlc->res_rd);
793 797
794 GNUNET_free (rd_res); 798 GNUNET_free (rd_res);
795 GNUNET_free (rlc->nick); 799 GNUNET_free (rlc->nick);
@@ -797,10 +801,14 @@ lookup_it (void *cls,
797 } 801 }
798 else 802 else
799 { 803 {
800 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count, rd); 804 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count,
805 rd);
801 rlc->res_rd_count = rd_count; 806 rlc->res_rd_count = rd_count;
802 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len); 807 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len);
803 GNUNET_GNSRECORD_records_serialize (rd_count, rd, rlc->rd_ser_len , rlc->res_rd); 808 GNUNET_GNSRECORD_records_serialize (rd_count,
809 rd,
810 rlc->rd_ser_len,
811 rlc->res_rd);
804 } 812 }
805 } 813 }
806 else 814 else
@@ -923,7 +931,6 @@ handle_record_lookup (void *cls,
923 client, 931 client,
924 &llr_msg->gns_header.header, 932 &llr_msg->gns_header.header,
925 GNUNET_NO); 933 GNUNET_NO);
926
927 GNUNET_free_non_null (rlc.res_rd); 934 GNUNET_free_non_null (rlc.res_rd);
928 GNUNET_free (llr_msg); 935 GNUNET_free (llr_msg);
929} 936}