aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-dns2gns.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-08-05 21:54:27 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-08-05 21:54:27 +0000
commitaf7ad2182af66e9f1c1b7dc0a5f754196896bd3e (patch)
tree712f5e08e568ed0ee5e1a832da508d102a1866eb /src/gns/gnunet-dns2gns.c
parent038d060e230f7de937b8f8787d594f01fa647958 (diff)
downloadgnunet-af7ad2182af66e9f1c1b7dc0a5f754196896bd3e.tar.gz
gnunet-af7ad2182af66e9f1c1b7dc0a5f754196896bd3e.zip
-dns2gns
Diffstat (limited to 'src/gns/gnunet-dns2gns.c')
-rw-r--r--src/gns/gnunet-dns2gns.c38
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,