diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-08-11 13:02:01 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-08-11 13:02:01 +0000 |
commit | 2a6e6e1654af25646b0f0812595ecf8e4319f643 (patch) | |
tree | 4ab2e8ba0283c540a1759f3ed3da346efd40ba54 /src/pt | |
parent | 666c8fa4c8e4ff13487dca37f26c26663adff579 (diff) | |
download | gnunet-2a6e6e1654af25646b0f0812595ecf8e4319f643.tar.gz gnunet-2a6e6e1654af25646b0f0812595ecf8e4319f643.zip |
-convert vpn/exit/pt to use new CADET ports
Diffstat (limited to 'src/pt')
-rw-r--r-- | src/pt/gnunet-daemon-pt.c | 139 |
1 files changed, 92 insertions, 47 deletions
diff --git a/src/pt/gnunet-daemon-pt.c b/src/pt/gnunet-daemon-pt.c index 7f4852e4b..443ff8ae6 100644 --- a/src/pt/gnunet-daemon-pt.c +++ b/src/pt/gnunet-daemon-pt.c | |||
@@ -333,7 +333,11 @@ try_open_exit () | |||
333 | struct CadetExit *pos; | 333 | struct CadetExit *pos; |
334 | uint32_t candidate_count; | 334 | uint32_t candidate_count; |
335 | uint32_t candidate_selected; | 335 | uint32_t candidate_selected; |
336 | struct GNUNET_HashCode port; | ||
336 | 337 | ||
338 | GNUNET_CRYPTO_hash (GNUNET_APPLICATION_PORT_INTERNET_RESOLVER, | ||
339 | strlen (GNUNET_APPLICATION_PORT_INTERNET_RESOLVER), | ||
340 | &port); | ||
337 | candidate_count = 0; | 341 | candidate_count = 0; |
338 | for (pos = exit_head; NULL != pos; pos = pos->next) | 342 | for (pos = exit_head; NULL != pos; pos = pos->next) |
339 | if (NULL == pos->cadet_channel) | 343 | if (NULL == pos->cadet_channel) |
@@ -348,11 +352,12 @@ try_open_exit () | |||
348 | if (candidate_selected < candidate_count) | 352 | if (candidate_selected < candidate_count) |
349 | { | 353 | { |
350 | /* move to the head of the DLL */ | 354 | /* move to the head of the DLL */ |
351 | pos->cadet_channel = GNUNET_CADET_channel_create (cadet_handle, | 355 | pos->cadet_channel |
352 | pos, | 356 | = GNUNET_CADET_channel_create (cadet_handle, |
353 | &pos->peer, | 357 | pos, |
354 | GC_u2h (GNUNET_APPLICATION_TYPE_INTERNET_RESOLVER), | 358 | &pos->peer, |
355 | GNUNET_CADET_OPTION_DEFAULT); | 359 | &port, |
360 | GNUNET_CADET_OPTION_DEFAULT); | ||
356 | if (NULL == pos->cadet_channel) | 361 | if (NULL == pos->cadet_channel) |
357 | { | 362 | { |
358 | GNUNET_break (0); | 363 | GNUNET_break (0); |
@@ -488,7 +493,8 @@ finish_request (struct ReplyContext *rc) | |||
488 | gettext_noop ("# DNS requests mapped to VPN"), | 493 | gettext_noop ("# DNS requests mapped to VPN"), |
489 | 1, GNUNET_NO); | 494 | 1, GNUNET_NO); |
490 | GNUNET_DNS_request_answer (rc->rh, | 495 | GNUNET_DNS_request_answer (rc->rh, |
491 | buf_len, buf); | 496 | buf_len, |
497 | buf); | ||
492 | GNUNET_free (buf); | 498 | GNUNET_free (buf); |
493 | } | 499 | } |
494 | GNUNET_DNSPARSER_free_packet (rc->dns); | 500 | GNUNET_DNSPARSER_free_packet (rc->dns); |
@@ -539,16 +545,21 @@ vpn_allocation_callback (void *cls, | |||
539 | } | 545 | } |
540 | GNUNET_STATISTICS_update (stats, | 546 | GNUNET_STATISTICS_update (stats, |
541 | gettext_noop ("# DNS records modified"), | 547 | gettext_noop ("# DNS records modified"), |
542 | 1, GNUNET_NO); | 548 | 1, |
549 | GNUNET_NO); | ||
543 | switch (rc->rec->type) | 550 | switch (rc->rec->type) |
544 | { | 551 | { |
545 | case GNUNET_DNSPARSER_TYPE_A: | 552 | case GNUNET_DNSPARSER_TYPE_A: |
546 | GNUNET_assert (AF_INET == af); | 553 | GNUNET_assert (AF_INET == af); |
547 | GNUNET_memcpy (rc->rec->data.raw.data, address, sizeof (struct in_addr)); | 554 | GNUNET_memcpy (rc->rec->data.raw.data, |
555 | address, | ||
556 | sizeof (struct in_addr)); | ||
548 | break; | 557 | break; |
549 | case GNUNET_DNSPARSER_TYPE_AAAA: | 558 | case GNUNET_DNSPARSER_TYPE_AAAA: |
550 | GNUNET_assert (AF_INET6 == af); | 559 | GNUNET_assert (AF_INET6 == af); |
551 | GNUNET_memcpy (rc->rec->data.raw.data, address, sizeof (struct in6_addr)); | 560 | GNUNET_memcpy (rc->rec->data.raw.data, |
561 | address, | ||
562 | sizeof (struct in6_addr)); | ||
552 | break; | 563 | break; |
553 | default: | 564 | default: |
554 | GNUNET_assert (0); | 565 | GNUNET_assert (0); |
@@ -590,7 +601,8 @@ modify_address (struct ReplyContext *rc, | |||
590 | } | 601 | } |
591 | rc->rec = rec; | 602 | rc->rec = rec; |
592 | rc->rr = GNUNET_VPN_redirect_to_ip (vpn_handle, | 603 | rc->rr = GNUNET_VPN_redirect_to_ip (vpn_handle, |
593 | af, af, | 604 | af, |
605 | af, | ||
594 | rec->data.raw.data, | 606 | rec->data.raw.data, |
595 | GNUNET_TIME_relative_to_absolute (TIMEOUT), | 607 | GNUNET_TIME_relative_to_absolute (TIMEOUT), |
596 | &vpn_allocation_callback, | 608 | &vpn_allocation_callback, |
@@ -642,7 +654,8 @@ submit_request (struct ReplyContext *rc) | |||
642 | if (ipv4_pt) | 654 | if (ipv4_pt) |
643 | { | 655 | { |
644 | rc->offset = i + 1; | 656 | rc->offset = i + 1; |
645 | modify_address (rc, &ra[i]); | 657 | modify_address (rc, |
658 | &ra[i]); | ||
646 | return; | 659 | return; |
647 | } | 660 | } |
648 | break; | 661 | break; |
@@ -650,7 +663,8 @@ submit_request (struct ReplyContext *rc) | |||
650 | if (ipv6_pt) | 663 | if (ipv6_pt) |
651 | { | 664 | { |
652 | rc->offset = i + 1; | 665 | rc->offset = i + 1; |
653 | modify_address (rc, &ra[i]); | 666 | modify_address (rc, |
667 | &ra[i]); | ||
654 | return; | 668 | return; |
655 | } | 669 | } |
656 | break; | 670 | break; |
@@ -716,7 +730,8 @@ dns_post_request_handler (void *cls, | |||
716 | GNUNET_STATISTICS_update (stats, | 730 | GNUNET_STATISTICS_update (stats, |
717 | gettext_noop ("# DNS replies intercepted"), | 731 | gettext_noop ("# DNS replies intercepted"), |
718 | 1, GNUNET_NO); | 732 | 1, GNUNET_NO); |
719 | dns = GNUNET_DNSPARSER_parse (request, request_length); | 733 | dns = GNUNET_DNSPARSER_parse (request, |
734 | request_length); | ||
720 | if (NULL == dns) | 735 | if (NULL == dns) |
721 | { | 736 | { |
722 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 737 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -725,9 +740,12 @@ dns_post_request_handler (void *cls, | |||
725 | return; | 740 | return; |
726 | } | 741 | } |
727 | work = GNUNET_NO; | 742 | work = GNUNET_NO; |
728 | work |= work_test (dns->answers, dns->num_answers); | 743 | work |= work_test (dns->answers, |
729 | work |= work_test (dns->authority_records, dns->num_authority_records); | 744 | dns->num_answers); |
730 | work |= work_test (dns->additional_records, dns->num_additional_records); | 745 | work |= work_test (dns->authority_records, |
746 | dns->num_authority_records); | ||
747 | work |= work_test (dns->additional_records, | ||
748 | dns->num_additional_records); | ||
731 | if (! work) | 749 | if (! work) |
732 | { | 750 | { |
733 | GNUNET_DNS_request_forward (rh); | 751 | GNUNET_DNS_request_forward (rh); |
@@ -767,16 +785,19 @@ transmit_dns_request_to_cadet (void *cls, | |||
767 | mlen = rc->mlen; | 785 | mlen = rc->mlen; |
768 | if (mlen > size) | 786 | if (mlen > size) |
769 | { | 787 | { |
770 | exit->cadet_th = GNUNET_CADET_notify_transmit_ready (exit->cadet_channel, | 788 | exit->cadet_th |
771 | GNUNET_NO, | 789 | = GNUNET_CADET_notify_transmit_ready (exit->cadet_channel, |
772 | TIMEOUT, | 790 | GNUNET_NO, |
773 | mlen, | 791 | TIMEOUT, |
774 | &transmit_dns_request_to_cadet, | 792 | mlen, |
775 | exit); | 793 | &transmit_dns_request_to_cadet, |
794 | exit); | ||
776 | return 0; | 795 | return 0; |
777 | } | 796 | } |
778 | GNUNET_assert (GNUNET_NO == rc->was_transmitted); | 797 | GNUNET_assert (GNUNET_NO == rc->was_transmitted); |
779 | GNUNET_memcpy (buf, rc->cadet_message, mlen); | 798 | GNUNET_memcpy (buf, |
799 | rc->cadet_message, | ||
800 | mlen); | ||
780 | GNUNET_CONTAINER_DLL_remove (exit->transmit_queue_head, | 801 | GNUNET_CONTAINER_DLL_remove (exit->transmit_queue_head, |
781 | exit->transmit_queue_tail, | 802 | exit->transmit_queue_tail, |
782 | rc); | 803 | rc); |
@@ -822,7 +843,8 @@ timeout_request (void *cls) | |||
822 | } | 843 | } |
823 | GNUNET_STATISTICS_update (stats, | 844 | GNUNET_STATISTICS_update (stats, |
824 | gettext_noop ("# DNS requests dropped (timeout)"), | 845 | gettext_noop ("# DNS requests dropped (timeout)"), |
825 | 1, GNUNET_NO); | 846 | 1, |
847 | GNUNET_NO); | ||
826 | GNUNET_DNS_request_drop (rc->rh); | 848 | GNUNET_DNS_request_drop (rc->rh); |
827 | GNUNET_free (rc); | 849 | GNUNET_free (rc); |
828 | if ( (0 == get_channel_weight (exit)) && | 850 | if ( (0 == get_channel_weight (exit)) && |
@@ -1148,12 +1170,13 @@ cadet_channel_end_cb (void *cls, | |||
1148 | } | 1170 | } |
1149 | if ( (NULL == alt->cadet_th) && | 1171 | if ( (NULL == alt->cadet_th) && |
1150 | (NULL != (rc = alt->transmit_queue_head)) ) | 1172 | (NULL != (rc = alt->transmit_queue_head)) ) |
1151 | alt->cadet_th = GNUNET_CADET_notify_transmit_ready (alt->cadet_channel, | 1173 | alt->cadet_th |
1152 | GNUNET_NO, | 1174 | = GNUNET_CADET_notify_transmit_ready (alt->cadet_channel, |
1153 | TIMEOUT, | 1175 | GNUNET_NO, |
1154 | rc->mlen, | 1176 | TIMEOUT, |
1155 | &transmit_dns_request_to_cadet, | 1177 | rc->mlen, |
1156 | alt); | 1178 | &transmit_dns_request_to_cadet, |
1179 | alt); | ||
1157 | } | 1180 | } |
1158 | 1181 | ||
1159 | 1182 | ||
@@ -1233,10 +1256,17 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1233 | struct GNUNET_HashCode dns_key; | 1256 | struct GNUNET_HashCode dns_key; |
1234 | 1257 | ||
1235 | cfg = cfg_; | 1258 | cfg = cfg_; |
1236 | stats = GNUNET_STATISTICS_create ("pt", cfg); | 1259 | stats = GNUNET_STATISTICS_create ("pt", |
1237 | ipv4_pt = GNUNET_CONFIGURATION_get_value_yesno (cfg, "pt", "TUNNEL_IPV4"); | 1260 | cfg); |
1238 | ipv6_pt = GNUNET_CONFIGURATION_get_value_yesno (cfg, "pt", "TUNNEL_IPV6"); | 1261 | ipv4_pt = GNUNET_CONFIGURATION_get_value_yesno (cfg, |
1239 | dns_channel = GNUNET_CONFIGURATION_get_value_yesno (cfg, "pt", "TUNNEL_DNS"); | 1262 | "pt", |
1263 | "TUNNEL_IPV4"); | ||
1264 | ipv6_pt = GNUNET_CONFIGURATION_get_value_yesno (cfg, | ||
1265 | "pt", | ||
1266 | "TUNNEL_IPV6"); | ||
1267 | dns_channel = GNUNET_CONFIGURATION_get_value_yesno (cfg, | ||
1268 | "pt", | ||
1269 | "TUNNEL_DNS"); | ||
1240 | if (! (ipv4_pt || ipv6_pt || dns_channel)) | 1270 | if (! (ipv4_pt || ipv6_pt || dns_channel)) |
1241 | { | 1271 | { |
1242 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1272 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1250,7 +1280,8 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1250 | dns_post_handle | 1280 | dns_post_handle |
1251 | = GNUNET_DNS_connect (cfg, | 1281 | = GNUNET_DNS_connect (cfg, |
1252 | GNUNET_DNS_FLAG_POST_RESOLUTION, | 1282 | GNUNET_DNS_FLAG_POST_RESOLUTION, |
1253 | &dns_post_request_handler, NULL); | 1283 | &dns_post_request_handler, |
1284 | NULL); | ||
1254 | if (NULL == dns_post_handle) | 1285 | if (NULL == dns_post_handle) |
1255 | { | 1286 | { |
1256 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1287 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1279,7 +1310,8 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1279 | dns_pre_handle | 1310 | dns_pre_handle |
1280 | = GNUNET_DNS_connect (cfg, | 1311 | = GNUNET_DNS_connect (cfg, |
1281 | GNUNET_DNS_FLAG_PRE_RESOLUTION, | 1312 | GNUNET_DNS_FLAG_PRE_RESOLUTION, |
1282 | &dns_pre_request_handler, NULL); | 1313 | &dns_pre_request_handler, |
1314 | NULL); | ||
1283 | if (NULL == dns_pre_handle) | 1315 | if (NULL == dns_pre_handle) |
1284 | { | 1316 | { |
1285 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1317 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1288,9 +1320,10 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1288 | GNUNET_SCHEDULER_shutdown (); | 1320 | GNUNET_SCHEDULER_shutdown (); |
1289 | return; | 1321 | return; |
1290 | } | 1322 | } |
1291 | cadet_handle = GNUNET_CADET_connect (cfg, NULL, | 1323 | cadet_handle = GNUNET_CADET_connect (cfg, |
1292 | &cadet_channel_end_cb, | 1324 | NULL, |
1293 | cadet_handlers); | 1325 | &cadet_channel_end_cb, |
1326 | cadet_handlers); | ||
1294 | if (NULL == cadet_handle) | 1327 | if (NULL == cadet_handle) |
1295 | { | 1328 | { |
1296 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1329 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1308,14 +1341,17 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1308 | GNUNET_SCHEDULER_shutdown (); | 1341 | GNUNET_SCHEDULER_shutdown (); |
1309 | return; | 1342 | return; |
1310 | } | 1343 | } |
1311 | GNUNET_CRYPTO_hash ("dns", strlen ("dns"), &dns_key); | 1344 | GNUNET_CRYPTO_hash ("dns", |
1345 | strlen ("dns"), | ||
1346 | &dns_key); | ||
1312 | dht_get = GNUNET_DHT_get_start (dht, | 1347 | dht_get = GNUNET_DHT_get_start (dht, |
1313 | GNUNET_BLOCK_TYPE_DNS, | 1348 | GNUNET_BLOCK_TYPE_DNS, |
1314 | &dns_key, | 1349 | &dns_key, |
1315 | 1, | 1350 | 1, |
1316 | GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, | 1351 | GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, |
1317 | NULL, 0, | 1352 | NULL, 0, |
1318 | &handle_dht_result, NULL); | 1353 | &handle_dht_result, |
1354 | NULL); | ||
1319 | } | 1355 | } |
1320 | } | 1356 | } |
1321 | 1357 | ||
@@ -1328,20 +1364,29 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
1328 | * @return 0 ok, 1 on error | 1364 | * @return 0 ok, 1 on error |
1329 | */ | 1365 | */ |
1330 | int | 1366 | int |
1331 | main (int argc, char *const *argv) | 1367 | main (int argc, |
1368 | char *const *argv) | ||
1332 | { | 1369 | { |
1333 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { | 1370 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { |
1334 | GNUNET_GETOPT_OPTION_END | 1371 | GNUNET_GETOPT_OPTION_END |
1335 | }; | 1372 | }; |
1336 | int ret; | 1373 | int ret; |
1337 | 1374 | ||
1338 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) | 1375 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, |
1376 | argv, | ||
1377 | &argc, | ||
1378 | &argv)) | ||
1339 | return 2; | 1379 | return 2; |
1340 | ret = (GNUNET_OK == | 1380 | ret = (GNUNET_OK == |
1341 | GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-pt", | 1381 | GNUNET_PROGRAM_run (argc, |
1342 | gettext_noop | 1382 | argv, |
1343 | ("Daemon to run to perform IP protocol translation to GNUnet"), | 1383 | "gnunet-daemon-pt", |
1344 | options, &run, NULL)) ? 0 : 1; | 1384 | gettext_noop ("Daemon to run to perform IP protocol translation to GNUnet"), |
1385 | options, | ||
1386 | &run, | ||
1387 | NULL)) | ||
1388 | ? 0 | ||
1389 | : 1; | ||
1345 | GNUNET_free ((void*) argv); | 1390 | GNUNET_free ((void*) argv); |
1346 | return ret; | 1391 | return ret; |
1347 | } | 1392 | } |