diff options
Diffstat (limited to 'src/namestore/gnunet-service-namestore.c')
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 55 |
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 | ||
474 | static void | 474 | static void |
475 | merge_with_nick_records ( const struct GNUNET_GNSRECORD_Data *nick_rd, | 475 | merge_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 | } |