aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-service-gns_resolver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gns/gnunet-service-gns_resolver.c')
-rw-r--r--src/gns/gnunet-service-gns_resolver.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c
index 66029a21c..75a49a575 100644
--- a/src/gns/gnunet-service-gns_resolver.c
+++ b/src/gns/gnunet-service-gns_resolver.c
@@ -752,6 +752,7 @@ dns_result_parser (void *cls,
752 unsigned int skip; 752 unsigned int skip;
753 char buf[UINT16_MAX]; 753 char buf[UINT16_MAX];
754 size_t buf_off; 754 size_t buf_off;
755 size_t buf_start;
755 756
756 buf_off = 0; 757 buf_off = 0;
757 skip = 0; 758 skip = 0;
@@ -804,6 +805,7 @@ dns_result_parser (void *cls,
804 case GNUNET_DNSPARSER_TYPE_CNAME: 805 case GNUNET_DNSPARSER_TYPE_CNAME:
805 case GNUNET_DNSPARSER_TYPE_PTR: 806 case GNUNET_DNSPARSER_TYPE_PTR:
806 case GNUNET_DNSPARSER_TYPE_NS: 807 case GNUNET_DNSPARSER_TYPE_NS:
808 buf_start = buf_off;
807 if (GNUNET_OK != 809 if (GNUNET_OK !=
808 GNUNET_DNSPARSER_builder_add_name (buf, 810 GNUNET_DNSPARSER_builder_add_name (buf,
809 sizeof (buf), 811 sizeof (buf),
@@ -814,8 +816,11 @@ dns_result_parser (void *cls,
814 skip++; 816 skip++;
815 continue; 817 continue;
816 } 818 }
819 rd[i - skip].data_size = buf_off - buf_start;
820 rd[i - skip].data = &buf[buf_start];
817 break; 821 break;
818 case GNUNET_DNSPARSER_TYPE_SOA: 822 case GNUNET_DNSPARSER_TYPE_SOA:
823 buf_start = buf_off;
819 if (GNUNET_OK != 824 if (GNUNET_OK !=
820 GNUNET_DNSPARSER_builder_add_soa (buf, 825 GNUNET_DNSPARSER_builder_add_soa (buf,
821 sizeof (buf), 826 sizeof (buf),
@@ -826,8 +831,11 @@ dns_result_parser (void *cls,
826 skip++; 831 skip++;
827 continue; 832 continue;
828 } 833 }
834 rd[i - skip].data_size = buf_off - buf_start;
835 rd[i - skip].data = &buf[buf_start];
829 break; 836 break;
830 case GNUNET_DNSPARSER_TYPE_MX: 837 case GNUNET_DNSPARSER_TYPE_MX:
838 buf_start = buf_off;
831 if (GNUNET_OK != 839 if (GNUNET_OK !=
832 GNUNET_DNSPARSER_builder_add_mx (buf, 840 GNUNET_DNSPARSER_builder_add_mx (buf,
833 sizeof (buf), 841 sizeof (buf),
@@ -838,8 +846,11 @@ dns_result_parser (void *cls,
838 skip++; 846 skip++;
839 continue; 847 continue;
840 } 848 }
849 rd[i - skip].data_size = buf_off - buf_start;
850 rd[i - skip].data = &buf[buf_start];
841 break; 851 break;
842 case GNUNET_DNSPARSER_TYPE_SRV: 852 case GNUNET_DNSPARSER_TYPE_SRV:
853 buf_start = buf_off;
843 if (GNUNET_OK != 854 if (GNUNET_OK !=
844 GNUNET_DNSPARSER_builder_add_srv (buf, 855 GNUNET_DNSPARSER_builder_add_srv (buf,
845 sizeof (buf), 856 sizeof (buf),
@@ -850,6 +861,8 @@ dns_result_parser (void *cls,
850 skip++; 861 skip++;
851 continue; 862 continue;
852 } 863 }
864 rd[i - skip].data_size = buf_off - buf_start;
865 rd[i - skip].data = &buf[buf_start];
853 break; 866 break;
854 default: 867 default:
855 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 868 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1197,6 +1210,11 @@ handle_gns_resolution_result (void *cls,
1197 rh); 1210 rh);
1198 return; 1211 return;
1199 } 1212 }
1213 case GNUNET_NAMESTORE_TYPE_GNS2DNS:
1214 {
1215 /* delegation to DNS */
1216 goto do_recurse;
1217 }
1200 default: 1218 default:
1201 break; 1219 break;
1202 } 1220 }
@@ -1392,6 +1410,7 @@ handle_gns_resolution_result (void *cls,
1392 GNS_resolver_lookup_cancel (rh); 1410 GNS_resolver_lookup_cancel (rh);
1393 return; 1411 return;
1394 } 1412 }
1413 do_recurse:
1395 /* need to recurse, check if we can */ 1414 /* need to recurse, check if we can */
1396 for (i=0;i<rd_count;i++) 1415 for (i=0;i<rd_count;i++)
1397 { 1416 {
@@ -1428,7 +1447,7 @@ handle_gns_resolution_result (void *cls,
1428 rh->task_id = GNUNET_SCHEDULER_add_now (&recursive_resolution, 1447 rh->task_id = GNUNET_SCHEDULER_add_now (&recursive_resolution,
1429 rh); 1448 rh);
1430 return; 1449 return;
1431 case GNUNET_DNSPARSER_TYPE_NS: 1450 case GNUNET_NAMESTORE_TYPE_GNS2DNS:
1432 { 1451 {
1433 char *ns; 1452 char *ns;
1434 /* resolution continues within DNS */ 1453 /* resolution continues within DNS */
@@ -1527,9 +1546,10 @@ handle_gns_resolution_result (void *cls,
1527 created from the remainder of the GNS name and the 1546 created from the remainder of the GNS name and the
1528 name in the NS record */ 1547 name in the NS record */
1529 GNUNET_asprintf (&ac->label, 1548 GNUNET_asprintf (&ac->label,
1530 "%.*s.%s", 1549 "%.*s%s%s",
1531 (int) rh->name_resolution_pos, 1550 (int) rh->name_resolution_pos,
1532 rh->name, 1551 rh->name,
1552 (0 != rh->name_resolution_pos) ? "." : "",
1533 ns); 1553 ns);
1534 GNUNET_free (ns); 1554 GNUNET_free (ns);
1535 GNUNET_CONTAINER_DLL_insert_tail (rh->ac_head, 1555 GNUNET_CONTAINER_DLL_insert_tail (rh->ac_head,