diff options
-rw-r--r-- | src/transport/plugin_transport_http.c | 39 | ||||
-rw-r--r-- | src/transport/test_plugin_transport_http.c | 29 |
2 files changed, 61 insertions, 7 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c index 1b5f5ed11..8828e3438 100644 --- a/src/transport/plugin_transport_http.c +++ b/src/transport/plugin_transport_http.c | |||
@@ -1199,11 +1199,42 @@ static int | |||
1199 | http_plugin_address_suggested (void *cls, | 1199 | http_plugin_address_suggested (void *cls, |
1200 | void *addr, size_t addrlen) | 1200 | void *addr, size_t addrlen) |
1201 | { | 1201 | { |
1202 | /* struct Plugin *plugin = cls; */ | 1202 | struct IPv4HttpAddress *v4; |
1203 | struct IPv6HttpAddress *v6; | ||
1203 | 1204 | ||
1204 | /* check if the address is plausible; if so, | 1205 | if ((addrlen != sizeof (struct IPv4HttpAddress)) && |
1205 | add it to our list! */ | 1206 | (addrlen != sizeof (struct IPv6HttpAddress))) |
1206 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Plugin: http_plugin_address_suggested\n"); | 1207 | { |
1208 | GNUNET_break_op (0); | ||
1209 | return GNUNET_SYSERR; | ||
1210 | } | ||
1211 | if (addrlen == sizeof (struct IPv4HttpAddress)) | ||
1212 | { | ||
1213 | v4 = (struct IPv4HttpAddress *) addr; | ||
1214 | |||
1215 | v4->u_port = ntohs (v4->u_port); | ||
1216 | if (v4->u_port != plugin->port_inbound) | ||
1217 | { | ||
1218 | GNUNET_break_op (0); | ||
1219 | return GNUNET_SYSERR; | ||
1220 | } | ||
1221 | } | ||
1222 | else | ||
1223 | { | ||
1224 | v6 = (struct IPv6HttpAddress *) addr; | ||
1225 | if (IN6_IS_ADDR_LINKLOCAL (&v6->ipv6_addr)) | ||
1226 | { | ||
1227 | GNUNET_break_op (0); | ||
1228 | return GNUNET_SYSERR; | ||
1229 | } | ||
1230 | v6->u6_port = ntohs (v6->u6_port); | ||
1231 | if (v6->u6_port != plugin->port_inbound) | ||
1232 | { | ||
1233 | GNUNET_break_op (0); | ||
1234 | return GNUNET_SYSERR; | ||
1235 | } | ||
1236 | |||
1237 | } | ||
1207 | return GNUNET_OK; | 1238 | return GNUNET_OK; |
1208 | } | 1239 | } |
1209 | 1240 | ||
diff --git a/src/transport/test_plugin_transport_http.c b/src/transport/test_plugin_transport_http.c index 728ab7db3..9eb952348 100644 --- a/src/transport/test_plugin_transport_http.c +++ b/src/transport/test_plugin_transport_http.c | |||
@@ -394,7 +394,7 @@ static void pretty_printer_cb (void *cls, | |||
394 | { | 394 | { |
395 | if (NULL==address) | 395 | if (NULL==address) |
396 | return; | 396 | return; |
397 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Plugin returned: `%s'\n",address); | 397 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Plugin returnedp pretty address: `%s'\n",address); |
398 | fail_pretty_printer_count++; | 398 | fail_pretty_printer_count++; |
399 | } | 399 | } |
400 | 400 | ||
@@ -421,6 +421,7 @@ run (void *cls, | |||
421 | struct Plugin_Address * tmp; | 421 | struct Plugin_Address * tmp; |
422 | const char * addr_str; | 422 | const char * addr_str; |
423 | unsigned int count_str_addr; | 423 | unsigned int count_str_addr; |
424 | unsigned int suggest_res; | ||
424 | 425 | ||
425 | fail_pretty_printer = GNUNET_YES; | 426 | fail_pretty_printer = GNUNET_YES; |
426 | fail_notify_address = GNUNET_YES; | 427 | fail_notify_address = GNUNET_YES; |
@@ -485,8 +486,11 @@ run (void *cls, | |||
485 | { | 486 | { |
486 | cur = addr_head; | 487 | cur = addr_head; |
487 | 488 | ||
488 | api->address_pretty_printer(NULL,"http",cur->addr,cur->addrlen,GNUNET_NO,TEST_TIMEOUT,&pretty_printer_cb,NULL); | 489 | api->address_pretty_printer (NULL,"http",cur->addr,cur->addrlen,GNUNET_NO,TEST_TIMEOUT,&pretty_printer_cb,NULL); |
489 | addr_str = api->address_to_string(NULL,cur->addr,cur->addrlen); | 490 | addr_str = api->address_to_string (NULL,cur->addr,cur->addrlen); |
491 | suggest_res = api->check_address (NULL,cur->addr,cur->addrlen); | ||
492 | |||
493 | GNUNET_assert (GNUNET_OK == suggest_res); | ||
490 | GNUNET_assert (NULL != addr_str); | 494 | GNUNET_assert (NULL != addr_str); |
491 | count_str_addr++; | 495 | count_str_addr++; |
492 | 496 | ||
@@ -501,6 +505,25 @@ run (void *cls, | |||
501 | fail_pretty_printer=GNUNET_NO; | 505 | fail_pretty_printer=GNUNET_NO; |
502 | fail_addr_to_str=GNUNET_NO; | 506 | fail_addr_to_str=GNUNET_NO; |
503 | 507 | ||
508 | /* Suggesting addresses with wrong port*/ | ||
509 | struct IPv4HttpAddress failing_addr; | ||
510 | failing_addr.ipv4_addr = INADDR_LOOPBACK; | ||
511 | failing_addr.u_port = 0; | ||
512 | suggest_res = api->check_address (NULL,&failing_addr,sizeof (struct IPv4HttpAddress)); | ||
513 | GNUNET_assert (GNUNET_SYSERR == suggest_res); | ||
514 | |||
515 | /* Suggesting addresses with wrong size*/ | ||
516 | failing_addr.ipv4_addr = INADDR_LOOPBACK; | ||
517 | failing_addr.u_port = 0; | ||
518 | suggest_res = api->check_address (NULL,&failing_addr,sizeof (struct IPv6HttpAddress)); | ||
519 | GNUNET_assert (GNUNET_SYSERR == suggest_res); | ||
520 | |||
521 | /* Suggesting addresses with wrong address*/ | ||
522 | failing_addr.ipv4_addr = 0; | ||
523 | failing_addr.u_port = 12389; | ||
524 | suggest_res = api->check_address (NULL,&failing_addr,sizeof (struct IPv4HttpAddress)); | ||
525 | GNUNET_assert (GNUNET_SYSERR == suggest_res); | ||
526 | |||
504 | /* testing finished, shutting down */ | 527 | /* testing finished, shutting down */ |
505 | if ((fail_notify_address == GNUNET_NO) && (fail_pretty_printer == GNUNET_NO) && (fail_addr_to_str == GNUNET_NO) ) | 528 | if ((fail_notify_address == GNUNET_NO) && (fail_pretty_printer == GNUNET_NO) && (fail_addr_to_str == GNUNET_NO) ) |
506 | fail = 0; | 529 | fail = 0; |