aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-12-15 08:26:28 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-12-15 08:26:28 +0000
commit8ce70f1c033b262e4641e875d29308f34838e094 (patch)
tree685affe0db48253c0117c7b60e3b3010cc3681b3 /src
parent4bd7ac5418b648e1b46a8b718a817059ac5b280b (diff)
downloadgnunet-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.c28
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) {
379static int 379static int
380address_mapping_exists(unsigned char addr[]) { 380address_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 */
534void 537void
535new_ip6addr(char* buf, struct answer_packet* pkt) { 538new_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);