diff options
author | Philipp Tölke <toelke@in.tum.de> | 2010-12-15 08:26:28 +0000 |
---|---|---|
committer | Philipp Tölke <toelke@in.tum.de> | 2010-12-15 08:26:28 +0000 |
commit | 8ce70f1c033b262e4641e875d29308f34838e094 (patch) | |
tree | 685affe0db48253c0117c7b60e3b3010cc3681b3 /src | |
parent | 4bd7ac5418b648e1b46a8b718a817059ac5b280b (diff) | |
download | gnunet-8ce70f1c033b262e4641e875d29308f34838e094.tar.gz gnunet-8ce70f1c033b262e4641e875d29308f34838e094.zip |
Turn the IP-Address around in the hash.
Diffstat (limited to 'src')
-rw-r--r-- | src/vpn/gnunet-daemon-vpn.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/vpn/gnunet-daemon-vpn.c b/src/vpn/gnunet-daemon-vpn.c index 3b3dbfab0..cc9f755ee 100644 --- a/src/vpn/gnunet-daemon-vpn.c +++ b/src/vpn/gnunet-daemon-vpn.c | |||
@@ -379,8 +379,11 @@ helper_write(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tsdkctx) { | |||
379 | static int | 379 | static int |
380 | address_mapping_exists(unsigned char addr[]) { | 380 | address_mapping_exists(unsigned char addr[]) { |
381 | GNUNET_HashCode* key = alloca(sizeof(GNUNET_HashCode)); | 381 | GNUNET_HashCode* key = alloca(sizeof(GNUNET_HashCode)); |
382 | unsigned char* k = (unsigned char*)key; | ||
382 | memset(key, 0, sizeof(GNUNET_HashCode)); | 383 | memset(key, 0, sizeof(GNUNET_HashCode)); |
383 | memcpy(key, addr, 16); | 384 | unsigned int i; |
385 | for (i = 0; i < 16; i++) | ||
386 | k[15-i] = addr[i]; | ||
384 | 387 | ||
385 | return GNUNET_CONTAINER_multihashmap_contains(hashmap, key); | 388 | return GNUNET_CONTAINER_multihashmap_contains(hashmap, key); |
386 | } | 389 | } |
@@ -533,9 +536,9 @@ connect_to_service_dns (void *cls, | |||
533 | */ | 536 | */ |
534 | void | 537 | void |
535 | new_ip6addr(char* buf, struct answer_packet* pkt) { | 538 | new_ip6addr(char* buf, struct answer_packet* pkt) { |
536 | memcpy(buf, (int[]){htons(0x1234)}, 2); | 539 | memcpy(buf+14, (int[]){htons(0x3412)}, 2); |
537 | memcpy(buf+2, &pkt->service_descr.service_descriptor, 6); | 540 | memcpy(buf+8, &pkt->service_descr.service_descriptor, 6); |
538 | memcpy(buf+8, &pkt->service_descr.peer, 8); | 541 | memcpy(buf, &pkt->service_descr.peer, 8); |
539 | } | 542 | } |
540 | /*}}}*/ | 543 | /*}}}*/ |
541 | 544 | ||
@@ -582,7 +585,14 @@ process_answer(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tc) { | |||
582 | GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Could not store to hashmap\n"); | 585 | GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Could not store to hashmap\n"); |
583 | } | 586 | } |
584 | 587 | ||
585 | memcpy(((char*)pkt)+ntohs(pkt->addroffset), &key, 16); | 588 | /* |
589 | * Copy the newly generated backward ip-address to the packet | ||
590 | */ | ||
591 | char* c = ((char*)pkt)+ntohs(pkt->addroffset); | ||
592 | char* k = (char*)&key; | ||
593 | unsigned int i; | ||
594 | for (i = 0; i < 16; i++) | ||
595 | c[15-i] = k[i]; | ||
586 | 596 | ||
587 | list = GNUNET_malloc(htons(pkt->hdr.size) + 2*sizeof(struct answer_packet_list*)); | 597 | list = GNUNET_malloc(htons(pkt->hdr.size) + 2*sizeof(struct answer_packet_list*)); |
588 | 598 | ||
@@ -602,13 +612,13 @@ process_answer(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tc) { | |||
602 | unsigned char c1 = s[(4*i)+1]; | 612 | unsigned char c1 = s[(4*i)+1]; |
603 | unsigned char c2 = s[(4*i)+3]; | 613 | unsigned char c2 = s[(4*i)+3]; |
604 | if (c1 <= '9') | 614 | if (c1 <= '9') |
605 | k[15-i] = c1 - '0'; | 615 | k[i] = c1 - '0'; |
606 | else | 616 | else |
607 | k[15-i] = c1 - 87; /* 87 is the difference between 'a' and 10 */ | 617 | k[i] = c1 - 87; /* 87 is the difference between 'a' and 10 */ |
608 | if (c2 <= '9') | 618 | if (c2 <= '9') |
609 | k[15-i] += 16*(c2 - '0'); | 619 | k[i] += 16*(c2 - '0'); |
610 | else | 620 | else |
611 | k[15-i] += 16*(c2 - 87); | 621 | k[i] += 16*(c2 - 87); |
612 | } | 622 | } |
613 | 623 | ||
614 | struct map_entry* map_entry = GNUNET_CONTAINER_multihashmap_get(hashmap, &key); | 624 | struct map_entry* map_entry = GNUNET_CONTAINER_multihashmap_get(hashmap, &key); |