diff options
Diffstat (limited to 'src/service/gns/gnunet-service-gns_resolver.c')
-rw-r--r-- | src/service/gns/gnunet-service-gns_resolver.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/service/gns/gnunet-service-gns_resolver.c b/src/service/gns/gnunet-service-gns_resolver.c index aa0189b15..edef6a8ab 100644 --- a/src/service/gns/gnunet-service-gns_resolver.c +++ b/src/service/gns/gnunet-service-gns_resolver.c | |||
@@ -1085,6 +1085,22 @@ dns_result_parser (void *cls, | |||
1085 | rd[i - skip].data_size = buf_off - buf_start; | 1085 | rd[i - skip].data_size = buf_off - buf_start; |
1086 | rd[i - skip].data = &buf[buf_start]; | 1086 | rd[i - skip].data = &buf[buf_start]; |
1087 | break; | 1087 | break; |
1088 | |||
1089 | case GNUNET_DNSPARSER_TYPE_URI: | ||
1090 | buf_start = buf_off; | ||
1091 | if (GNUNET_OK != | ||
1092 | GNUNET_DNSPARSER_builder_add_uri (buf, | ||
1093 | sizeof(buf), | ||
1094 | &buf_off, | ||
1095 | rec->data.uri)) | ||
1096 | { | ||
1097 | GNUNET_break (0); | ||
1098 | skip++; | ||
1099 | continue; | ||
1100 | } | ||
1101 | rd[i - skip].data_size = buf_off - buf_start; | ||
1102 | rd[i - skip].data = &buf[buf_start]; | ||
1103 | break; | ||
1088 | 1104 | ||
1089 | default: | 1105 | default: |
1090 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 1106 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
@@ -2170,6 +2186,45 @@ handle_gns_resolution_result (void *cls, | |||
2170 | } | 2186 | } |
2171 | break; | 2187 | break; |
2172 | 2188 | ||
2189 | case GNUNET_DNSPARSER_TYPE_URI: | ||
2190 | { | ||
2191 | struct GNUNET_DNSPARSER_UriRecord *uri; | ||
2192 | |||
2193 | off = 0; | ||
2194 | uri = GNUNET_DNSPARSER_parse_uri (rd[i].data, | ||
2195 | rd[i].data_size, | ||
2196 | &off); | ||
2197 | if ((NULL == uri) || | ||
2198 | (off != rd[i].data_size)) | ||
2199 | { | ||
2200 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
2201 | _ ("Failed to deserialize URI record with target\n")); | ||
2202 | GNUNET_break_op (0); /* record not well-formed */ | ||
2203 | } | ||
2204 | else | ||
2205 | { | ||
2206 | scratch_start = scratch_off; | ||
2207 | if (GNUNET_OK != | ||
2208 | GNUNET_DNSPARSER_builder_add_uri (scratch, | ||
2209 | sizeof(scratch), | ||
2210 | &scratch_off, | ||
2211 | uri)) | ||
2212 | { | ||
2213 | GNUNET_break (0); | ||
2214 | } | ||
2215 | else | ||
2216 | { | ||
2217 | GNUNET_assert (rd_off < rd_count); | ||
2218 | rd_new[rd_off].data = &scratch[scratch_start]; | ||
2219 | rd_new[rd_off].data_size = scratch_off - scratch_start; | ||
2220 | rd_off++; | ||
2221 | } | ||
2222 | } | ||
2223 | if (NULL != uri) | ||
2224 | GNUNET_DNSPARSER_free_uri (uri); | ||
2225 | } | ||
2226 | break; | ||
2227 | |||
2173 | case GNUNET_GNSRECORD_TYPE_PKEY: | 2228 | case GNUNET_GNSRECORD_TYPE_PKEY: |
2174 | case GNUNET_GNSRECORD_TYPE_EDKEY: | 2229 | case GNUNET_GNSRECORD_TYPE_EDKEY: |
2175 | { | 2230 | { |