diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-08-05 21:54:27 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-08-05 21:54:27 +0000 |
commit | af7ad2182af66e9f1c1b7dc0a5f754196896bd3e (patch) | |
tree | 712f5e08e568ed0ee5e1a832da508d102a1866eb /src/gns/gnunet-dns2gns.c | |
parent | 038d060e230f7de937b8f8787d594f01fa647958 (diff) | |
download | gnunet-af7ad2182af66e9f1c1b7dc0a5f754196896bd3e.tar.gz gnunet-af7ad2182af66e9f1c1b7dc0a5f754196896bd3e.zip |
-dns2gns
Diffstat (limited to 'src/gns/gnunet-dns2gns.c')
-rw-r--r-- | src/gns/gnunet-dns2gns.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/src/gns/gnunet-dns2gns.c b/src/gns/gnunet-dns2gns.c index 426cbd102..5c4247727 100644 --- a/src/gns/gnunet-dns2gns.c +++ b/src/gns/gnunet-dns2gns.c | |||
@@ -245,7 +245,16 @@ result_processor (void *cls, | |||
245 | rec); | 245 | rec); |
246 | break; | 246 | break; |
247 | case GNUNET_DNSPARSER_TYPE_CNAME: | 247 | case GNUNET_DNSPARSER_TYPE_CNAME: |
248 | GNUNET_break (0); // FIXME: CNAME is handled by the GNS resolver! We never return this unless explicitly requested! | 248 | rec.name = GNUNET_strdup (packet->queries[0].name); |
249 | rec.data.hostname = strdup (rd[i].data); | ||
250 | rec.class = GNUNET_DNSPARSER_CLASS_INTERNET; | ||
251 | rec.type = GNUNET_DNSPARSER_TYPE_CNAME; | ||
252 | memcpy (rec.data.hostname, | ||
253 | rd[i].data, | ||
254 | rd[i].data_size); | ||
255 | GNUNET_array_append (packet->answers, | ||
256 | packet->num_answers, | ||
257 | rec); | ||
249 | break; | 258 | break; |
250 | default: | 259 | default: |
251 | /* skip */ | 260 | /* skip */ |
@@ -277,6 +286,7 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock, | |||
277 | char *name; | 286 | char *name; |
278 | size_t name_len; | 287 | size_t name_len; |
279 | enum GNUNET_GNS_RecordType type; | 288 | enum GNUNET_GNS_RecordType type; |
289 | int use_gns; | ||
280 | 290 | ||
281 | packet = GNUNET_DNSPARSER_parse (udp_msg, udp_msg_size); | 291 | packet = GNUNET_DNSPARSER_parse (udp_msg, udp_msg_size); |
282 | if (NULL == packet) | 292 | if (NULL == packet) |
@@ -316,21 +326,33 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock, | |||
316 | request); | 326 | request); |
317 | name = GNUNET_strdup (packet->queries[0].name); | 327 | name = GNUNET_strdup (packet->queries[0].name); |
318 | name_len = strlen (name); | 328 | name_len = strlen (name); |
329 | use_gns = GNUNET_NO; | ||
319 | if ( (name_len > strlen (".zkey.eu")) && | 330 | if ( (name_len > strlen (".zkey.eu")) && |
320 | (0 == strcasecmp (".zkey.eu", | 331 | (0 == strcasecmp (".zkey.eu", |
321 | &name[name_len - strlen (".zkey.eu")])) ) | 332 | &name[name_len - strlen (".zkey.eu")])) ) |
322 | { | 333 | { |
323 | //FIXME here check if the top label after zkey.eu is a hash and append | 334 | if (0 == strcasecmp ("fcfs.zkey.eu", |
324 | //correct TLD appropriately | 335 | &name[name_len - strlen ("fcfs.zkey.eu")])) |
325 | name[name_len - strlen (".zkey.eu")] = '\0'; | 336 | { |
326 | strcat (name, ".gnunet"); /* little hack, only works because | 337 | name[name_len - strlen ("zkey.eu")] = '\0'; |
327 | ".zkey.eu" is longer than ".gnunet" */ | 338 | strcat (name, ".gnunet"); |
339 | } | ||
340 | else | ||
341 | name[name_len - strlen (".eu")] = '\0'; | ||
328 | name_len = strlen (name); | 342 | name_len = strlen (name); |
329 | } | 343 | } |
330 | if ( (name_len > strlen (".gnunet")) && | 344 | if ( (name_len > strlen (".gnunet")) && |
331 | (0 == strcasecmp (".gnunet", | 345 | (0 == strcasecmp (".gnunet", |
332 | &name[name_len - strlen (".gnunet")])) ) | 346 | &name[name_len - strlen (".gnunet")])) ) |
333 | { | 347 | use_gns = GNUNET_YES; |
348 | |||
349 | if ( (name_len > strlen (".zkey")) && | ||
350 | (0 == strcasecmp (".zkey", | ||
351 | &name[name_len - strlen (".zkey")])) ) | ||
352 | use_gns = GNUNET_YES; | ||
353 | |||
354 | if (GNUNET_YES == use_gns) | ||
355 | { | ||
334 | type = packet->queries[0].type; | 356 | type = packet->queries[0].type; |
335 | request->lookup = GNUNET_GNS_lookup (gns, | 357 | request->lookup = GNUNET_GNS_lookup (gns, |
336 | name, | 358 | name, |