diff options
author | Christian Grothoff <christian@grothoff.org> | 2013-09-27 16:37:56 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2013-09-27 16:37:56 +0000 |
commit | 1f5714ff6c83585cb7cd701ca3b7176ef42d3e60 (patch) | |
tree | d68317d8b4e6aafe83c4f3448fdfe1d125777599 | |
parent | 0773a954d6ed9a5c155b9cbceca7a6a316400ba6 (diff) | |
download | gnunet-1f5714ff6c83585cb7cd701ca3b7176ef42d3e60.tar.gz gnunet-1f5714ff6c83585cb7cd701ca3b7176ef42d3e60.zip |
using DNS2GNS record type instead of recycling NS record type in GNS; fixing testcase by properly converting DNS records back to GNS blocks
-rw-r--r-- | src/gns/gnunet-gns.c | 15 | ||||
-rw-r--r-- | src/gns/gnunet-service-gns_interceptor.c | 9 | ||||
-rw-r--r-- | src/gns/gnunet-service-gns_resolver.c | 24 | ||||
-rwxr-xr-x | src/gns/test_gns_ns_lookup.sh | 16 | ||||
-rw-r--r-- | src/include/gnunet_namestore_service.h | 5 | ||||
-rw-r--r-- | src/namestore/namestore_api_common.c | 42 |
6 files changed, 97 insertions, 14 deletions
diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c index 0a6bcf66b..4b0ae38bc 100644 --- a/src/gns/gnunet-gns.c +++ b/src/gns/gnunet-gns.c | |||
@@ -133,7 +133,7 @@ do_shutdown (void *cls, | |||
133 | * | 133 | * |
134 | * @param cls the 'const char *' name that was resolved | 134 | * @param cls the 'const char *' name that was resolved |
135 | * @param rd_count number of records returned | 135 | * @param rd_count number of records returned |
136 | * @param rd array of 'rd_count' records with the results | 136 | * @param rd array of @a rd_count records with the results |
137 | */ | 137 | */ |
138 | static void | 138 | static void |
139 | process_lookup_result (void *cls, uint32_t rd_count, | 139 | process_lookup_result (void *cls, uint32_t rd_count, |
@@ -155,10 +155,21 @@ process_lookup_result (void *cls, uint32_t rd_count, | |||
155 | } | 155 | } |
156 | for (i=0; i<rd_count; i++) | 156 | for (i=0; i<rd_count; i++) |
157 | { | 157 | { |
158 | if ( (rd[i].record_type != rtype) && | ||
159 | (GNUNET_NAMESTORE_TYPE_ANY != rtype) ) | ||
160 | continue; | ||
158 | typename = GNUNET_NAMESTORE_number_to_typename (rd[i].record_type); | 161 | typename = GNUNET_NAMESTORE_number_to_typename (rd[i].record_type); |
159 | string_val = GNUNET_NAMESTORE_value_to_string (rd[i].record_type, | 162 | string_val = GNUNET_NAMESTORE_value_to_string (rd[i].record_type, |
160 | rd[i].data, | 163 | rd[i].data, |
161 | rd[i].data_size); | 164 | rd[i].data_size); |
165 | if (NULL == string_val) | ||
166 | { | ||
167 | fprintf (stderr, | ||
168 | "Record %u of type %d malformed, skipping\n", | ||
169 | (unsigned int) i, | ||
170 | (int) rd[i].record_type); | ||
171 | continue; | ||
172 | } | ||
162 | if (raw) | 173 | if (raw) |
163 | printf ("%s\n", | 174 | printf ("%s\n", |
164 | string_val); | 175 | string_val); |
@@ -166,7 +177,7 @@ process_lookup_result (void *cls, uint32_t rd_count, | |||
166 | printf ("Got `%s' record: %s\n", | 177 | printf ("Got `%s' record: %s\n", |
167 | typename, | 178 | typename, |
168 | string_val); | 179 | string_val); |
169 | GNUNET_free_non_null (string_val); | 180 | GNUNET_free (string_val); |
170 | } | 181 | } |
171 | GNUNET_SCHEDULER_shutdown (); | 182 | GNUNET_SCHEDULER_shutdown (); |
172 | } | 183 | } |
diff --git a/src/gns/gnunet-service-gns_interceptor.c b/src/gns/gnunet-service-gns_interceptor.c index 33c05f743..0ab97db45 100644 --- a/src/gns/gnunet-service-gns_interceptor.c +++ b/src/gns/gnunet-service-gns_interceptor.c | |||
@@ -135,13 +135,16 @@ reply_to_dns (void *cls, uint32_t rd_count, | |||
135 | case GNUNET_DNSPARSER_TYPE_NS: | 135 | case GNUNET_DNSPARSER_TYPE_NS: |
136 | case GNUNET_DNSPARSER_TYPE_CNAME: | 136 | case GNUNET_DNSPARSER_TYPE_CNAME: |
137 | case GNUNET_DNSPARSER_TYPE_PTR: | 137 | case GNUNET_DNSPARSER_TYPE_PTR: |
138 | // FIXME: NO! need to use DNSPARSER! | ||
138 | answer_records[i].data.hostname = (char*)rd[i].data; | 139 | answer_records[i].data.hostname = (char*)rd[i].data; |
139 | break; | 140 | break; |
140 | case GNUNET_DNSPARSER_TYPE_SOA: | 141 | case GNUNET_DNSPARSER_TYPE_SOA: |
142 | // FIXME: NO! need to use DNSPARSER! | ||
141 | answer_records[i].data.soa = | 143 | answer_records[i].data.soa = |
142 | (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data; | 144 | (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data; |
143 | break; | 145 | break; |
144 | case GNUNET_DNSPARSER_TYPE_MX: | 146 | case GNUNET_DNSPARSER_TYPE_MX: |
147 | // FIXME: NO! need to use DNSPARSER! | ||
145 | answer_records[i].data.mx = | 148 | answer_records[i].data.mx = |
146 | (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data; | 149 | (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data; |
147 | break; | 150 | break; |
@@ -163,17 +166,21 @@ reply_to_dns (void *cls, uint32_t rd_count, | |||
163 | case GNUNET_DNSPARSER_TYPE_NS: | 166 | case GNUNET_DNSPARSER_TYPE_NS: |
164 | case GNUNET_DNSPARSER_TYPE_CNAME: | 167 | case GNUNET_DNSPARSER_TYPE_CNAME: |
165 | case GNUNET_DNSPARSER_TYPE_PTR: | 168 | case GNUNET_DNSPARSER_TYPE_PTR: |
169 | // FIXME: NO! need to use DNSPARSER! | ||
166 | additional_records[i].data.hostname = (char*)rd[i].data; | 170 | additional_records[i].data.hostname = (char*)rd[i].data; |
167 | break; | 171 | break; |
168 | case GNUNET_DNSPARSER_TYPE_SOA: | 172 | case GNUNET_DNSPARSER_TYPE_SOA: |
173 | // FIXME: NO! need to use DNSPARSER! | ||
169 | additional_records[i].data.soa = | 174 | additional_records[i].data.soa = |
170 | (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data; | 175 | (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data; |
171 | break; | 176 | break; |
172 | case GNUNET_DNSPARSER_TYPE_MX: | 177 | case GNUNET_DNSPARSER_TYPE_MX: |
178 | // FIXME: NO! need to use DNSPARSER! | ||
173 | additional_records[i].data.mx = | 179 | additional_records[i].data.mx = |
174 | (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data; | 180 | (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data; |
175 | break; | 181 | break; |
176 | default: | 182 | default: |
183 | // FIXME: NO! need to use DNSPARSER! | ||
177 | additional_records[i].data.raw.data_len = rd[i].data_size; | 184 | additional_records[i].data.raw.data_len = rd[i].data_size; |
178 | additional_records[i].data.raw.data = (char*)rd[i].data; | 185 | additional_records[i].data.raw.data = (char*)rd[i].data; |
179 | break; | 186 | break; |
@@ -288,7 +295,7 @@ handle_dns_request (void *cls, | |||
288 | * | 295 | * |
289 | * @param gnu_zone the zone to work in | 296 | * @param gnu_zone the zone to work in |
290 | * @param c the configuration | 297 | * @param c the configuration |
291 | * @return GNUNET_OK on success | 298 | * @return #GNUNET_OK on success |
292 | */ | 299 | */ |
293 | int | 300 | int |
294 | GNS_interceptor_init (const struct GNUNET_CRYPTO_EccPublicSignKey *gnu_zone, | 301 | GNS_interceptor_init (const struct GNUNET_CRYPTO_EccPublicSignKey *gnu_zone, |
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, |
diff --git a/src/gns/test_gns_ns_lookup.sh b/src/gns/test_gns_ns_lookup.sh index 7e9b66bfd..827156974 100755 --- a/src/gns/test_gns_ns_lookup.sh +++ b/src/gns/test_gns_ns_lookup.sh | |||
@@ -6,18 +6,18 @@ TEST_DOMAIN_ALT="homepage.gnu" | |||
6 | TEST_DOMAIN_ALT2="uk.homepage.gnu" | 6 | TEST_DOMAIN_ALT2="uk.homepage.gnu" |
7 | TEST_IP_ALT2="81.187.252.184" | 7 | TEST_IP_ALT2="81.187.252.184" |
8 | TEST_IP="131.159.74.67" | 8 | TEST_IP="131.159.74.67" |
9 | TEST_IP_NS="184.172.157.218" | 9 | TEST_IP_GNS2DNS="184.172.157.218" |
10 | TEST_RECORD_NAME="homepage" | 10 | TEST_RECORD_NAME="homepage" |
11 | TEST_RECORD_NS="gnunet.org" | 11 | TEST_RECORD_GNS2DNS="gnunet.org" |
12 | gnunet-arm -s -c test_gns_lookup.conf | 12 | gnunet-arm -s -c test_gns_lookup.conf |
13 | gnunet-identity -C testego -c test_gns_lookup.conf | 13 | gnunet-identity -C testego -c test_gns_lookup.conf |
14 | gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t A -V $TEST_IP_NS -e never -c test_gns_lookup.conf | 14 | gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t A -V $TEST_IP_GNS2DNS -e never -c test_gns_lookup.conf |
15 | gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t NS -V $TEST_RECORD_NS -e never -c test_gns_lookup.conf | 15 | gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t GNS2DNS -V $TEST_RECORD_GNS2DNS -e never -c test_gns_lookup.conf |
16 | RES_IP=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN -t A -c test_gns_lookup.conf) | 16 | RES_IP=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN -t A -c test_gns_lookup.conf) |
17 | RES_IP_ALT=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT -t A -c test_gns_lookup.conf) | 17 | RES_IP_ALT=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT -t A -c test_gns_lookup.conf) |
18 | RES_IP_ALT2=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT2 -t A -c test_gns_lookup.conf) | 18 | RES_IP_ALT2=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT2 -t A -c test_gns_lookup.conf) |
19 | gnunet-namestore -z testego -d -n www -t A -V $TEST_IP -e never -c test_gns_lookup.conf | 19 | gnunet-namestore -z testego -d -n www -t A -V $TEST_IP -e never -c test_gns_lookup.conf |
20 | gnunet-namestore -z testego -d -n $TEST_RECORD_NAME -t NS -V $TEST_RECORD_NS -e never -c test_gns_lookup.conf | 20 | gnunet-namestore -z testego -d -n $TEST_RECORD_NAME -t GNS2DNS -V $TEST_RECORD_GNS2DNS -e never -c test_gns_lookup.conf |
21 | gnunet-identity -D testego -c test_gns_lookup.conf | 21 | gnunet-identity -D testego -c test_gns_lookup.conf |
22 | gnunet-arm -e -c test_gns_lookup.conf | 22 | gnunet-arm -e -c test_gns_lookup.conf |
23 | 23 | ||
@@ -25,7 +25,7 @@ if [ "$RES_IP" == "$TEST_IP" ] | |||
25 | then | 25 | then |
26 | echo "PASS: Resolved $TEST_DOMAIN to $RES_IP." | 26 | echo "PASS: Resolved $TEST_DOMAIN to $RES_IP." |
27 | else | 27 | else |
28 | echo "Failed to resolve to proper IP for $TEST_DOMAIN, got $RES_IP." | 28 | echo "Failed to resolve to proper IP for $TEST_DOMAIN, got $RES_IP, wanted $TEST_IP." |
29 | exit 1 | 29 | exit 1 |
30 | fi | 30 | fi |
31 | 31 | ||
@@ -33,7 +33,7 @@ if [ "$RES_IP_ALT" == "$TEST_IP" ] | |||
33 | then | 33 | then |
34 | echo "PASS: Resolved $TEST_DOMAIN_ALT to $RES_IP_ALT." | 34 | echo "PASS: Resolved $TEST_DOMAIN_ALT to $RES_IP_ALT." |
35 | else | 35 | else |
36 | echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT, got $RES_IP_ALT." | 36 | echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT, got $RES_IP_ALT, wanted $TEST_IP." |
37 | exit 1 | 37 | exit 1 |
38 | fi | 38 | fi |
39 | 39 | ||
@@ -42,6 +42,6 @@ then | |||
42 | echo "PASS: Resolved $TEST_DOMAIN_ALT2 to $RES_IP_ALT2." | 42 | echo "PASS: Resolved $TEST_DOMAIN_ALT2 to $RES_IP_ALT2." |
43 | exit 0 | 43 | exit 0 |
44 | else | 44 | else |
45 | echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT2, got $RES_IP_ALT2." | 45 | echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT2, got $RES_IP_ALT2, wanted $TEST_IP_ALT2." |
46 | exit 1 | 46 | exit 1 |
47 | fi | 47 | fi |
diff --git a/src/include/gnunet_namestore_service.h b/src/include/gnunet_namestore_service.h index 1f78b40f6..fbb3a285c 100644 --- a/src/include/gnunet_namestore_service.h +++ b/src/include/gnunet_namestore_service.h | |||
@@ -67,6 +67,11 @@ extern "C" | |||
67 | #define GNUNET_NAMESTORE_TYPE_VPN 65539 | 67 | #define GNUNET_NAMESTORE_TYPE_VPN 65539 |
68 | 68 | ||
69 | /** | 69 | /** |
70 | * Record type for delegation to DNS. | ||
71 | */ | ||
72 | #define GNUNET_NAMESTORE_TYPE_GNS2DNS 65540 | ||
73 | |||
74 | /** | ||
70 | * Record type for a social place. | 75 | * Record type for a social place. |
71 | */ | 76 | */ |
72 | #define GNUNET_NAMESTORE_TYPE_PLACE 65541 | 77 | #define GNUNET_NAMESTORE_TYPE_PLACE 65541 |
diff --git a/src/namestore/namestore_api_common.c b/src/namestore/namestore_api_common.c index 42969778f..b5a777083 100644 --- a/src/namestore/namestore_api_common.c +++ b/src/namestore/namestore_api_common.c | |||
@@ -501,7 +501,7 @@ GNUNET_NAMESTORE_block_decrypt (const struct GNUNET_NAMESTORE_Block *block, | |||
501 | * | 501 | * |
502 | * @param type type of the record | 502 | * @param type type of the record |
503 | * @param data value in binary encoding | 503 | * @param data value in binary encoding |
504 | * @param data_size number of bytes in data | 504 | * @param data_size number of bytes in @a data |
505 | * @return NULL on error, otherwise human-readable representation of the value | 505 | * @return NULL on error, otherwise human-readable representation of the value |
506 | */ | 506 | */ |
507 | char * | 507 | char * |
@@ -661,6 +661,23 @@ GNUNET_NAMESTORE_value_to_string (uint32_t type, | |||
661 | } | 661 | } |
662 | return vpn_str; | 662 | return vpn_str; |
663 | } | 663 | } |
664 | case GNUNET_NAMESTORE_TYPE_GNS2DNS: | ||
665 | { | ||
666 | char *ns; | ||
667 | size_t off; | ||
668 | |||
669 | off = 0; | ||
670 | ns = GNUNET_DNSPARSER_parse_name (data, | ||
671 | data_size, | ||
672 | &off); | ||
673 | if ( (NULL == ns) || | ||
674 | (off != data_size) ) | ||
675 | { | ||
676 | GNUNET_break_op (0); | ||
677 | return NULL; | ||
678 | } | ||
679 | return ns; | ||
680 | } | ||
664 | case GNUNET_DNSPARSER_TYPE_SRV: | 681 | case GNUNET_DNSPARSER_TYPE_SRV: |
665 | { | 682 | { |
666 | struct GNUNET_DNSPARSER_SrvRecord *srv; | 683 | struct GNUNET_DNSPARSER_SrvRecord *srv; |
@@ -971,6 +988,28 @@ GNUNET_NAMESTORE_string_to_value (uint32_t type, | |||
971 | vpn->proto = htons ((uint16_t) proto); | 988 | vpn->proto = htons ((uint16_t) proto); |
972 | strcpy ((char*)&vpn[1], s_serv); | 989 | strcpy ((char*)&vpn[1], s_serv); |
973 | return GNUNET_OK; | 990 | return GNUNET_OK; |
991 | case GNUNET_NAMESTORE_TYPE_GNS2DNS: | ||
992 | { | ||
993 | char nsbuf[256]; | ||
994 | size_t off; | ||
995 | |||
996 | off = 0; | ||
997 | if (GNUNET_OK != | ||
998 | GNUNET_DNSPARSER_builder_add_name (nsbuf, | ||
999 | sizeof (nsbuf), | ||
1000 | &off, | ||
1001 | s)) | ||
1002 | { | ||
1003 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1004 | _("Failed to serialize GNS2DNS record with value `%s'\n"), | ||
1005 | s); | ||
1006 | return GNUNET_SYSERR; | ||
1007 | } | ||
1008 | *data_size = off; | ||
1009 | *data = GNUNET_malloc (off); | ||
1010 | memcpy (*data, nsbuf, off); | ||
1011 | return GNUNET_OK; | ||
1012 | } | ||
974 | case GNUNET_DNSPARSER_TYPE_TLSA: | 1013 | case GNUNET_DNSPARSER_TYPE_TLSA: |
975 | *data_size = sizeof (struct GNUNET_TUN_DnsTlsaRecord) + strlen (s) - 6; | 1014 | *data_size = sizeof (struct GNUNET_TUN_DnsTlsaRecord) + strlen (s) - 6; |
976 | *data = tlsa = GNUNET_malloc (*data_size); | 1015 | *data = tlsa = GNUNET_malloc (*data_size); |
@@ -1017,6 +1056,7 @@ static struct { | |||
1017 | { "PSEU", GNUNET_NAMESTORE_TYPE_PSEU }, | 1056 | { "PSEU", GNUNET_NAMESTORE_TYPE_PSEU }, |
1018 | { "LEHO", GNUNET_NAMESTORE_TYPE_LEHO }, | 1057 | { "LEHO", GNUNET_NAMESTORE_TYPE_LEHO }, |
1019 | { "VPN", GNUNET_NAMESTORE_TYPE_VPN }, | 1058 | { "VPN", GNUNET_NAMESTORE_TYPE_VPN }, |
1059 | { "GNS2DNS", GNUNET_NAMESTORE_TYPE_GNS2DNS }, | ||
1020 | { "TLSA", GNUNET_DNSPARSER_TYPE_TLSA }, | 1060 | { "TLSA", GNUNET_DNSPARSER_TYPE_TLSA }, |
1021 | { NULL, UINT32_MAX } | 1061 | { NULL, UINT32_MAX } |
1022 | }; | 1062 | }; |