diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/core.h | 2 | ||||
-rw-r--r-- | src/core/gnunet-service-core.c | 7 | ||||
-rw-r--r-- | src/core/test_core_api.c | 2 | ||||
-rw-r--r-- | src/core/test_core_api_peer1.conf | 8 | ||||
-rw-r--r-- | src/core/test_core_api_peer2.conf | 8 | ||||
-rw-r--r-- | src/include/gnunet_common.h | 14 | ||||
-rw-r--r-- | src/resolver/test_resolver_api.c | 23 | ||||
-rw-r--r-- | src/transport/gnunet-service-transport.c | 40 | ||||
-rw-r--r-- | src/transport/plugin_transport_tcp.c | 55 | ||||
-rw-r--r-- | src/transport/transport.h | 2 | ||||
-rw-r--r-- | src/transport/transport_api.c | 9 | ||||
-rw-r--r-- | src/util/common_logging.c | 46 | ||||
-rw-r--r-- | src/util/network.c | 38 | ||||
-rw-r--r-- | src/util/service.c | 12 |
14 files changed, 156 insertions, 110 deletions
diff --git a/src/core/core.h b/src/core/core.h index 840c7e143..9f520bf40 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
@@ -26,7 +26,7 @@ | |||
26 | #include "gnunet_crypto_lib.h" | 26 | #include "gnunet_crypto_lib.h" |
27 | #include "gnunet_time_lib.h" | 27 | #include "gnunet_time_lib.h" |
28 | 28 | ||
29 | #define DEBUG_CORE GNUNET_NO | 29 | #define DEBUG_CORE GNUNET_YES |
30 | 30 | ||
31 | /** | 31 | /** |
32 | * Definition of bits in the InitMessage's options field that specify | 32 | * Definition of bits in the InitMessage's options field that specify |
diff --git a/src/core/gnunet-service-core.c b/src/core/gnunet-service-core.c index 2fbb4ca05..44df8a867 100644 --- a/src/core/gnunet-service-core.c +++ b/src/core/gnunet-service-core.c | |||
@@ -1606,6 +1606,8 @@ send_connect_continuation (void *cls, size_t size, void *buf) | |||
1606 | "Asked to send message to disconnected peer `%4s' and connection failed. Discarding message.\n", | 1606 | "Asked to send message to disconnected peer `%4s' and connection failed. Discarding message.\n", |
1607 | GNUNET_i2s (&sm->peer)); | 1607 | GNUNET_i2s (&sm->peer)); |
1608 | GNUNET_free (sm); | 1608 | GNUNET_free (sm); |
1609 | /* FIXME: do we need to do something here to let the | ||
1610 | client know about the failure!? */ | ||
1609 | return 0; | 1611 | return 0; |
1610 | } | 1612 | } |
1611 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1613 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -1659,8 +1661,9 @@ handle_client_send (void *cls, | |||
1659 | if (n == NULL) | 1661 | if (n == NULL) |
1660 | { | 1662 | { |
1661 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1663 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1662 | "Not yet connected to `%4s', will try to establish connection\n", | 1664 | "Not yet connected to `%4s', will try to establish connection within %llu ms\n", |
1663 | GNUNET_i2s (&sm->peer)); | 1665 | GNUNET_i2s (&sm->peer), |
1666 | sm->deadline.value); | ||
1664 | msize += sizeof (struct SendMessage); | 1667 | msize += sizeof (struct SendMessage); |
1665 | /* ask transport to connect to the peer */ | 1668 | /* ask transport to connect to the peer */ |
1666 | /* FIXME: this code does not handle the | 1669 | /* FIXME: this code does not handle the |
diff --git a/src/core/test_core_api.c b/src/core/test_core_api.c index e1b3dcd0d..1151f3ebb 100644 --- a/src/core/test_core_api.c +++ b/src/core/test_core_api.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include "gnunet_scheduler_lib.h" | 34 | #include "gnunet_scheduler_lib.h" |
35 | #include "gnunet_transport_service.h" | 35 | #include "gnunet_transport_service.h" |
36 | 36 | ||
37 | #define VERBOSE GNUNET_NO | 37 | #define VERBOSE GNUNET_YES |
38 | 38 | ||
39 | #define START_ARM GNUNET_YES | 39 | #define START_ARM GNUNET_YES |
40 | 40 | ||
diff --git a/src/core/test_core_api_peer1.conf b/src/core/test_core_api_peer1.conf index fb060e3e6..3c7020688 100644 --- a/src/core/test_core_api_peer1.conf +++ b/src/core/test_core_api_peer1.conf | |||
@@ -9,9 +9,9 @@ PORT = 12464 | |||
9 | [transport] | 9 | [transport] |
10 | PORT = 12465 | 10 | PORT = 12465 |
11 | PLUGINS = tcp | 11 | PLUGINS = tcp |
12 | #PREFIX = xterm -T transport1 -e | 12 | PREFIX = xterm -T transport1 -e |
13 | #PREFIX = xterm -T transport1 -e valgrind --tool=memcheck | 13 | #PREFIX = xterm -T transport1 -e valgrind --tool=memcheck |
14 | #DEBUG = YES | 14 | DEBUG = YES |
15 | 15 | ||
16 | [arm] | 16 | [arm] |
17 | PORT = 12466 | 17 | PORT = 12466 |
@@ -33,8 +33,8 @@ PORT = 12469 | |||
33 | PORT = 12470 | 33 | PORT = 12470 |
34 | #PREFIX = xterm -T core1 -e valgrind --tool=memcheck | 34 | #PREFIX = xterm -T core1 -e valgrind --tool=memcheck |
35 | #PREFIX = xterm -T core1 -e gdb -x cmd --args | 35 | #PREFIX = xterm -T core1 -e gdb -x cmd --args |
36 | #PREFIX = xterm -T core1 -e | 36 | PREFIX = xterm -T core1 -e |
37 | #DEBUG = YES | 37 | DEBUG = YES |
38 | 38 | ||
39 | [testing] | 39 | [testing] |
40 | WEAKRANDOM = YES | 40 | WEAKRANDOM = YES |
diff --git a/src/core/test_core_api_peer2.conf b/src/core/test_core_api_peer2.conf index e3862da0f..2e994d27a 100644 --- a/src/core/test_core_api_peer2.conf +++ b/src/core/test_core_api_peer2.conf | |||
@@ -9,9 +9,9 @@ PORT = 22464 | |||
9 | [transport] | 9 | [transport] |
10 | PORT = 22465 | 10 | PORT = 22465 |
11 | PLUGINS = tcp | 11 | PLUGINS = tcp |
12 | #PREFIX = xterm -T transport2 -e | 12 | PREFIX = xterm -T transport2 -e |
13 | #PREFIX = xterm -T transport2 -e valgrind --tool=memcheck | 13 | #PREFIX = xterm -T transport2 -e valgrind --tool=memcheck |
14 | #DEBUG = YES | 14 | DEBUG = YES |
15 | 15 | ||
16 | [arm] | 16 | [arm] |
17 | PORT = 22466 | 17 | PORT = 22466 |
@@ -31,9 +31,9 @@ PORT = 22469 | |||
31 | 31 | ||
32 | [core] | 32 | [core] |
33 | PORT = 22470 | 33 | PORT = 22470 |
34 | #PREFIX = xterm -T core2 -e | 34 | PREFIX = xterm -T core2 -e |
35 | #PREFIX = xterm -T core2 -e valgrind --tool=memcheck | 35 | #PREFIX = xterm -T core2 -e valgrind --tool=memcheck |
36 | #DEBUG = YES | 36 | DEBUG = YES |
37 | 37 | ||
38 | [testing] | 38 | [testing] |
39 | WEAKRANDOM = YES | 39 | WEAKRANDOM = YES |
diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h index 61b572eb8..afc9b0bcb 100644 --- a/src/include/gnunet_common.h +++ b/src/include/gnunet_common.h | |||
@@ -217,6 +217,20 @@ void GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls); | |||
217 | */ | 217 | */ |
218 | const char *GNUNET_i2s (const struct GNUNET_PeerIdentity *pid); | 218 | const char *GNUNET_i2s (const struct GNUNET_PeerIdentity *pid); |
219 | 219 | ||
220 | |||
221 | /** | ||
222 | * Convert a "struct sockaddr*" (IPv4 or IPv6 address) to a string | ||
223 | * (for printing debug messages). This is one of the very few calls | ||
224 | * in the entire API that is NOT reentrant! | ||
225 | * | ||
226 | * @param addr the address | ||
227 | * @param addrlen the length of the address | ||
228 | * @return nicely formatted string for the address | ||
229 | * will be overwritten by next call to GNUNET_a2s. | ||
230 | */ | ||
231 | const char *GNUNET_a2s (const struct sockaddr *addr, | ||
232 | socklen_t addrlen); | ||
233 | |||
220 | /** | 234 | /** |
221 | * Convert error type to string. | 235 | * Convert error type to string. |
222 | * | 236 | * |
diff --git a/src/resolver/test_resolver_api.c b/src/resolver/test_resolver_api.c index 240879d73..cadd52e0c 100644 --- a/src/resolver/test_resolver_api.c +++ b/src/resolver/test_resolver_api.c | |||
@@ -44,26 +44,9 @@ check_hostname (void *cls, const struct sockaddr *sa, socklen_t salen) | |||
44 | (*ok) &= ~8; | 44 | (*ok) &= ~8; |
45 | return; | 45 | return; |
46 | } | 46 | } |
47 | if (salen == sizeof (struct sockaddr_in)) | 47 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
48 | { | 48 | _("Got IP address `%s' for our host.\n"), |
49 | struct sockaddr_in *in = (struct sockaddr_in *) sa; | 49 | GNUNET_a2s (sa, salen)); |
50 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
51 | _("Got IP address `%s' for our host.\n"), | ||
52 | inet_ntop (AF_INET, &in->sin_addr, buf, sizeof (buf))); | ||
53 | } | ||
54 | else if (salen == sizeof (struct sockaddr_in6)) | ||
55 | { | ||
56 | struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) sa; | ||
57 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
58 | _("Got IP address `%s' for our host.\n"), | ||
59 | inet_ntop (AF_INET6, &in6->sin6_addr, buf, sizeof (buf))); | ||
60 | } | ||
61 | else | ||
62 | { | ||
63 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
64 | _("Got address of bogus length %u\n"), salen); | ||
65 | GNUNET_assert (0); | ||
66 | } | ||
67 | } | 50 | } |
68 | 51 | ||
69 | 52 | ||
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index c44d5ef04..18b50b38a 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c | |||
@@ -753,6 +753,8 @@ transmit_to_client_callback (void *cls, size_t size, void *buf) | |||
753 | 753 | ||
754 | if (buf == NULL) | 754 | if (buf == NULL) |
755 | { | 755 | { |
756 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
757 | "Transmission to client failed, closing connection.\n"); | ||
756 | /* fatal error with client, free message queue! */ | 758 | /* fatal error with client, free message queue! */ |
757 | while (NULL != (q = client->message_queue_head)) | 759 | while (NULL != (q = client->message_queue_head)) |
758 | { | 760 | { |
@@ -927,9 +929,15 @@ transmit_send_continuation (void *cls, | |||
927 | GNUNET_assert (rl != NULL); | 929 | GNUNET_assert (rl != NULL); |
928 | } | 930 | } |
929 | if (result == GNUNET_OK) | 931 | if (result == GNUNET_OK) |
930 | rl->timeout = GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | 932 | { |
933 | rl->timeout = GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | ||
934 | } | ||
931 | else | 935 | else |
932 | rl->connected = GNUNET_NO; | 936 | { |
937 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
938 | "Transmission failed, marking connection as down.\n"); | ||
939 | rl->connected = GNUNET_NO; | ||
940 | } | ||
933 | if (!mq->internal_msg) | 941 | if (!mq->internal_msg) |
934 | rl->transmit_ready = GNUNET_YES; | 942 | rl->transmit_ready = GNUNET_YES; |
935 | if (mq->client != NULL) | 943 | if (mq->client != NULL) |
@@ -1389,7 +1397,8 @@ plugin_env_notify_address (void *cls, | |||
1389 | 1397 | ||
1390 | #if DEBUG_TRANSPORT | 1398 | #if DEBUG_TRANSPORT |
1391 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1399 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1392 | "Plugin `%s' informs us about a new address\n", name); | 1400 | "Plugin `%s' informs us about a new address `%s'\n", name, |
1401 | GNUNET_a2s(addr, addrlen)); | ||
1393 | #endif | 1402 | #endif |
1394 | abex = GNUNET_TIME_relative_to_absolute (expires); | 1403 | abex = GNUNET_TIME_relative_to_absolute (expires); |
1395 | GNUNET_assert (p == find_transport (name)); | 1404 | GNUNET_assert (p == find_transport (name)); |
@@ -1618,7 +1627,7 @@ cleanup_validation (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1618 | else | 1627 | else |
1619 | pos = prev->next; | 1628 | pos = prev->next; |
1620 | continue; | 1629 | continue; |
1621 | } | 1630 | } |
1622 | prev = pos; | 1631 | prev = pos; |
1623 | pos = pos->next; | 1632 | pos = pos->next; |
1624 | } | 1633 | } |
@@ -1654,6 +1663,7 @@ struct CheckHelloValidatedContext | |||
1654 | * Validation list being build. | 1663 | * Validation list being build. |
1655 | */ | 1664 | */ |
1656 | struct ValidationList *e; | 1665 | struct ValidationList *e; |
1666 | |||
1657 | }; | 1667 | }; |
1658 | 1668 | ||
1659 | 1669 | ||
@@ -1671,6 +1681,7 @@ run_validation (void *cls, | |||
1671 | struct TransportPlugin *tp; | 1681 | struct TransportPlugin *tp; |
1672 | struct ValidationAddress *va; | 1682 | struct ValidationAddress *va; |
1673 | struct ValidationChallengeMessage *vcm; | 1683 | struct ValidationChallengeMessage *vcm; |
1684 | struct GNUNET_PeerIdentity id; | ||
1674 | 1685 | ||
1675 | tp = find_transport (tname); | 1686 | tp = find_transport (tname); |
1676 | if (tp == NULL) | 1687 | if (tp == NULL) |
@@ -1682,6 +1693,16 @@ run_validation (void *cls, | |||
1682 | tname); | 1693 | tname); |
1683 | return GNUNET_OK; | 1694 | return GNUNET_OK; |
1684 | } | 1695 | } |
1696 | GNUNET_CRYPTO_hash (&e->publicKey, | ||
1697 | sizeof (struct | ||
1698 | GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), | ||
1699 | &id.hashPubKey); | ||
1700 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1701 | "Scheduling validation of address `%s' via `%s' for `%4s'\n", | ||
1702 | GNUNET_a2s(addr, addrlen), | ||
1703 | tname, | ||
1704 | GNUNET_i2s(&id)); | ||
1705 | |||
1685 | va = GNUNET_malloc (sizeof (struct ValidationAddress) + | 1706 | va = GNUNET_malloc (sizeof (struct ValidationAddress) + |
1686 | sizeof (struct ValidationChallengeMessage) + addrlen); | 1707 | sizeof (struct ValidationChallengeMessage) + addrlen); |
1687 | va->next = e->addresses; | 1708 | va->next = e->addresses; |
@@ -1699,7 +1720,7 @@ run_validation (void *cls, | |||
1699 | vcm->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_HELLO); | 1720 | vcm->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_HELLO); |
1700 | vcm->challenge = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, | 1721 | vcm->challenge = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, |
1701 | (unsigned int) -1); | 1722 | (unsigned int) -1); |
1702 | /* Note: vcm->target is set in check_hello_validated */ | 1723 | vcm->target = id; |
1703 | memcpy (&vcm[1], addr, addrlen); | 1724 | memcpy (&vcm[1], addr, addrlen); |
1704 | return GNUNET_OK; | 1725 | return GNUNET_OK; |
1705 | } | 1726 | } |
@@ -1752,10 +1773,6 @@ check_hello_validated (void *cls, | |||
1752 | va = chvc->e->addresses; | 1773 | va = chvc->e->addresses; |
1753 | while (va != NULL) | 1774 | while (va != NULL) |
1754 | { | 1775 | { |
1755 | GNUNET_CRYPTO_hash (&chvc->e->publicKey, | ||
1756 | sizeof (struct | ||
1757 | GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), | ||
1758 | &va->msg->target.hashPubKey); | ||
1759 | #if DEBUG_TRANSPORT | 1776 | #if DEBUG_TRANSPORT |
1760 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1777 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1761 | "Establishing `%s' connection to validate `%s' of `%4s' (sending our `%s')\n", | 1778 | "Establishing `%s' connection to validate `%s' of `%4s' (sending our `%s')\n", |
@@ -1841,6 +1858,11 @@ process_hello (struct TransportPlugin *plugin, | |||
1841 | GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded))) | 1858 | GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded))) |
1842 | { | 1859 | { |
1843 | /* TODO: call to stats? */ | 1860 | /* TODO: call to stats? */ |
1861 | #if DEBUG_TRANSPORT | ||
1862 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1863 | "`%s' message for peer `%4s' is already pending; ignoring new message\n", | ||
1864 | "HELLO", GNUNET_i2s (&target)); | ||
1865 | #endif | ||
1844 | return GNUNET_OK; | 1866 | return GNUNET_OK; |
1845 | } | 1867 | } |
1846 | e = e->next; | 1868 | e = e->next; |
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 6ebb257a1..4ab555ad6 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c | |||
@@ -38,7 +38,7 @@ | |||
38 | #include "plugin_transport.h" | 38 | #include "plugin_transport.h" |
39 | #include "transport.h" | 39 | #include "transport.h" |
40 | 40 | ||
41 | #define DEBUG_TCP GNUNET_NO | 41 | #define DEBUG_TCP GNUNET_YES |
42 | 42 | ||
43 | /** | 43 | /** |
44 | * After how long do we expire an address that we | 44 | * After how long do we expire an address that we |
@@ -440,8 +440,6 @@ connect_and_create_session (struct Plugin *plugin, | |||
440 | struct GNUNET_NETWORK_SocketHandle *conn; | 440 | struct GNUNET_NETWORK_SocketHandle *conn; |
441 | struct Session *session; | 441 | struct Session *session; |
442 | int af; | 442 | int af; |
443 | char buf[INET6_ADDRSTRLEN]; | ||
444 | uint16_t port; | ||
445 | 443 | ||
446 | session = plugin->sessions; | 444 | session = plugin->sessions; |
447 | while (session != NULL) | 445 | while (session != NULL) |
@@ -456,20 +454,9 @@ connect_and_create_session (struct Plugin *plugin, | |||
456 | } | 454 | } |
457 | 455 | ||
458 | if (addrlen == sizeof (struct sockaddr_in)) | 456 | if (addrlen == sizeof (struct sockaddr_in)) |
459 | { | 457 | af = AF_INET; |
460 | af = AF_INET; | ||
461 | inet_ntop (af, | ||
462 | &((struct sockaddr_in *) addr)->sin_addr, buf, sizeof (buf)); | ||
463 | port = ntohs (((struct sockaddr_in *) addr)->sin_port); | ||
464 | } | ||
465 | else if (addrlen == sizeof (struct sockaddr_in6)) | 458 | else if (addrlen == sizeof (struct sockaddr_in6)) |
466 | { | 459 | af = AF_INET6; |
467 | af = AF_INET6; | ||
468 | inet_ntop (af, | ||
469 | &((struct sockaddr_in6 *) addr)->sin6_addr, | ||
470 | buf, sizeof (buf)); | ||
471 | port = ntohs (((struct sockaddr_in6 *) addr)->sin6_port); | ||
472 | } | ||
473 | else | 460 | else |
474 | { | 461 | { |
475 | GNUNET_break_op (0); | 462 | GNUNET_break_op (0); |
@@ -485,8 +472,8 @@ connect_and_create_session (struct Plugin *plugin, | |||
485 | #if DEBUG_TCP | 472 | #if DEBUG_TCP |
486 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, | 473 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, |
487 | "tcp", | 474 | "tcp", |
488 | "Failed to create connection to peer at `%s:%u'.\n", | 475 | "Failed to create connection to peer at `%s'.\n", |
489 | buf, port); | 476 | GNUNET_a2s(addr, addrlen)); |
490 | #endif | 477 | #endif |
491 | return NULL; | 478 | return NULL; |
492 | } | 479 | } |
@@ -499,8 +486,10 @@ connect_and_create_session (struct Plugin *plugin, | |||
499 | #if DEBUG_TCP | 486 | #if DEBUG_TCP |
500 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, | 487 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, |
501 | "tcp", | 488 | "tcp", |
502 | "Creating new session %p with `%s:%u' based on `%s' request.\n", | 489 | "Creating new session %p with `%s' based on `%s' request.\n", |
503 | session, buf, port, "send_to"); | 490 | session, |
491 | GNUNET_a2s(addr, addrlen), | ||
492 | "send_to"); | ||
504 | #endif | 493 | #endif |
505 | return session; | 494 | return session; |
506 | } | 495 | } |
@@ -541,7 +530,9 @@ do_transmit (void *cls, size_t size, void *buf) | |||
541 | { | 530 | { |
542 | #if DEBUG_TCP | 531 | #if DEBUG_TCP |
543 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, | 532 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, |
544 | "tcp", "Timeout trying to transmit\n"); | 533 | "tcp", |
534 | "Timeout trying to transmit to peer `%4s', discarding message queue.\n", | ||
535 | GNUNET_i2s(&session->target)); | ||
545 | #endif | 536 | #endif |
546 | /* timeout */ | 537 | /* timeout */ |
547 | while (NULL != (pm = session->pending_messages)) | 538 | while (NULL != (pm = session->pending_messages)) |
@@ -1095,7 +1086,11 @@ tcp_plugin_cancel (void *cls, | |||
1095 | struct PendingMessage *pm; | 1086 | struct PendingMessage *pm; |
1096 | struct Session *session; | 1087 | struct Session *session; |
1097 | struct Session *next; | 1088 | struct Session *next; |
1098 | 1089 | ||
1090 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, | ||
1091 | "tcp", | ||
1092 | "Asked to close session with `%4s'\n", | ||
1093 | GNUNET_i2s(target)); | ||
1099 | session = plugin->sessions; | 1094 | session = plugin->sessions; |
1100 | while (session != NULL) | 1095 | while (session != NULL) |
1101 | { | 1096 | { |
@@ -1315,8 +1310,6 @@ tcp_plugin_address_suggested (void *cls, const void *addr, size_t addrlen) | |||
1315 | char buf[sizeof (struct sockaddr_in6)]; | 1310 | char buf[sizeof (struct sockaddr_in6)]; |
1316 | struct sockaddr_in *v4; | 1311 | struct sockaddr_in *v4; |
1317 | struct sockaddr_in6 *v6; | 1312 | struct sockaddr_in6 *v6; |
1318 | char dst[INET6_ADDRSTRLEN]; | ||
1319 | uint16_t port; | ||
1320 | 1313 | ||
1321 | if ((addrlen != sizeof (struct sockaddr_in)) && | 1314 | if ((addrlen != sizeof (struct sockaddr_in)) && |
1322 | (addrlen != sizeof (struct sockaddr_in6))) | 1315 | (addrlen != sizeof (struct sockaddr_in6))) |
@@ -1329,21 +1322,17 @@ tcp_plugin_address_suggested (void *cls, const void *addr, size_t addrlen) | |||
1329 | { | 1322 | { |
1330 | v4 = (struct sockaddr_in *) buf; | 1323 | v4 = (struct sockaddr_in *) buf; |
1331 | v4->sin_port = htons (check_port (plugin, ntohs (v4->sin_port))); | 1324 | v4->sin_port = htons (check_port (plugin, ntohs (v4->sin_port))); |
1332 | inet_ntop (AF_INET, &v4->sin_addr, dst, sizeof (dst)); | ||
1333 | port = ntohs (v4->sin_port); | ||
1334 | } | 1325 | } |
1335 | else | 1326 | else |
1336 | { | 1327 | { |
1337 | v6 = (struct sockaddr_in6 *) buf; | 1328 | v6 = (struct sockaddr_in6 *) buf; |
1338 | v6->sin6_port = htons (check_port (plugin, ntohs (v6->sin6_port))); | 1329 | v6->sin6_port = htons (check_port (plugin, ntohs (v6->sin6_port))); |
1339 | inet_ntop (AF_INET6, &v6->sin6_addr, dst, sizeof (dst)); | ||
1340 | port = ntohs (v6->sin6_port); | ||
1341 | } | 1330 | } |
1342 | #if DEBUG_TCP | 1331 | #if DEBUG_TCP |
1343 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, | 1332 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, |
1344 | "tcp", | 1333 | "tcp", |
1345 | "Informing transport service about my address `%s:%u'.\n", | 1334 | "Informing transport service about my address `%s'.\n", |
1346 | dst, port); | 1335 | GNUNET_a2s(addr, addrlen)); |
1347 | #endif | 1336 | #endif |
1348 | plugin->env->notify_address (plugin->env->cls, | 1337 | plugin->env->notify_address (plugin->env->cls, |
1349 | "tcp", | 1338 | "tcp", |
@@ -1627,7 +1616,6 @@ process_interfaces (void *cls, | |||
1627 | const struct sockaddr *addr, socklen_t addrlen) | 1616 | const struct sockaddr *addr, socklen_t addrlen) |
1628 | { | 1617 | { |
1629 | struct Plugin *plugin = cls; | 1618 | struct Plugin *plugin = cls; |
1630 | char dst[INET6_ADDRSTRLEN]; | ||
1631 | int af; | 1619 | int af; |
1632 | struct sockaddr_in *v4; | 1620 | struct sockaddr_in *v4; |
1633 | struct sockaddr_in6 *v6; | 1621 | struct sockaddr_in6 *v6; |
@@ -1636,19 +1624,18 @@ process_interfaces (void *cls, | |||
1636 | if (af == AF_INET) | 1624 | if (af == AF_INET) |
1637 | { | 1625 | { |
1638 | v4 = (struct sockaddr_in *) addr; | 1626 | v4 = (struct sockaddr_in *) addr; |
1639 | inet_ntop (AF_INET, &v4->sin_addr, dst, sizeof (dst)); | ||
1640 | v4->sin_port = htons (plugin->adv_port); | 1627 | v4->sin_port = htons (plugin->adv_port); |
1641 | } | 1628 | } |
1642 | else | 1629 | else |
1643 | { | 1630 | { |
1644 | GNUNET_assert (af == AF_INET6); | 1631 | GNUNET_assert (af == AF_INET6); |
1645 | v6 = (struct sockaddr_in6 *) addr; | 1632 | v6 = (struct sockaddr_in6 *) addr; |
1646 | inet_ntop (AF_INET6, &v6->sin6_addr, dst, sizeof (dst)); | ||
1647 | v6->sin6_port = htons (plugin->adv_port); | 1633 | v6->sin6_port = htons (plugin->adv_port); |
1648 | } | 1634 | } |
1649 | GNUNET_log_from (GNUNET_ERROR_TYPE_INFO | | 1635 | GNUNET_log_from (GNUNET_ERROR_TYPE_INFO | |
1650 | GNUNET_ERROR_TYPE_BULK, | 1636 | GNUNET_ERROR_TYPE_BULK, |
1651 | "tcp", _("Found address `%s' (%s)\n"), dst, name); | 1637 | "tcp", _("Found address `%s' (%s)\n"), |
1638 | GNUNET_a2s(addr, addrlen), name); | ||
1652 | plugin->env->notify_address (plugin->env->cls, | 1639 | plugin->env->notify_address (plugin->env->cls, |
1653 | "tcp", | 1640 | "tcp", |
1654 | addr, addrlen, GNUNET_TIME_UNIT_FOREVER_REL); | 1641 | addr, addrlen, GNUNET_TIME_UNIT_FOREVER_REL); |
diff --git a/src/transport/transport.h b/src/transport/transport.h index 8e1291005..8ad26f2c1 100644 --- a/src/transport/transport.h +++ b/src/transport/transport.h | |||
@@ -27,7 +27,7 @@ | |||
27 | #include "gnunet_time_lib.h" | 27 | #include "gnunet_time_lib.h" |
28 | #include "gnunet_transport_service.h" | 28 | #include "gnunet_transport_service.h" |
29 | 29 | ||
30 | #define DEBUG_TRANSPORT GNUNET_NO | 30 | #define DEBUG_TRANSPORT GNUNET_YES |
31 | 31 | ||
32 | /** | 32 | /** |
33 | * For how long do we allow unused bandwidth | 33 | * For how long do we allow unused bandwidth |
diff --git a/src/transport/transport_api.c b/src/transport/transport_api.c index 8bca5084d..f7ce56afc 100644 --- a/src/transport/transport_api.c +++ b/src/transport/transport_api.c | |||
@@ -1564,16 +1564,17 @@ demultiplexer (void *cls, const struct GNUNET_MessageHeader *msg) | |||
1564 | remove_neighbour (h, &dim->peer); | 1564 | remove_neighbour (h, &dim->peer); |
1565 | break; | 1565 | break; |
1566 | case GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK: | 1566 | case GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK: |
1567 | #if DEBUG_TRANSPORT | ||
1568 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1569 | "Receiving `%s' message.\n", "SEND_OK"); | ||
1570 | #endif | ||
1571 | if (size != sizeof (struct SendOkMessage)) | 1567 | if (size != sizeof (struct SendOkMessage)) |
1572 | { | 1568 | { |
1573 | GNUNET_break (0); | 1569 | GNUNET_break (0); |
1574 | break; | 1570 | break; |
1575 | } | 1571 | } |
1576 | okm = (const struct SendOkMessage *) msg; | 1572 | okm = (const struct SendOkMessage *) msg; |
1573 | #if DEBUG_TRANSPORT | ||
1574 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1575 | "Receiving `%s' message, transmission %s.\n", "SEND_OK", | ||
1576 | ntohl(okm->success) == GNUNET_OK ? "succeeded" : "failed"); | ||
1577 | #endif | ||
1577 | n = find_neighbour (h, &okm->peer); | 1578 | n = find_neighbour (h, &okm->peer); |
1578 | GNUNET_assert (n != NULL); | 1579 | GNUNET_assert (n != NULL); |
1579 | n->transmit_ok = GNUNET_YES; | 1580 | n->transmit_ok = GNUNET_YES; |
diff --git a/src/util/common_logging.c b/src/util/common_logging.c index 2fdd17ca7..8ea099122 100644 --- a/src/util/common_logging.c +++ b/src/util/common_logging.c | |||
@@ -398,6 +398,52 @@ GNUNET_i2s (const struct GNUNET_PeerIdentity *pid) | |||
398 | return (const char *) ret.encoding; | 398 | return (const char *) ret.encoding; |
399 | } | 399 | } |
400 | 400 | ||
401 | |||
402 | |||
403 | /** | ||
404 | * Convert a "struct sockaddr*" (IPv4 or IPv6 address) to a string | ||
405 | * (for printing debug messages). This is one of the very few calls | ||
406 | * in the entire API that is NOT reentrant! | ||
407 | * | ||
408 | * @param addr the address | ||
409 | * @param addrlen the length of the address | ||
410 | * @return nicely formatted string for the address | ||
411 | * will be overwritten by next call to GNUNET_a2s. | ||
412 | */ | ||
413 | const char *GNUNET_a2s (const struct sockaddr *addr, | ||
414 | socklen_t addrlen) | ||
415 | { | ||
416 | static char buf[INET6_ADDRSTRLEN+8]; | ||
417 | static char b2[6]; | ||
418 | const struct sockaddr_in * v4; | ||
419 | const struct sockaddr_in6 *v6; | ||
420 | switch (addr->sa_family) | ||
421 | { | ||
422 | case AF_INET: | ||
423 | v4 = (const struct sockaddr_in*)addr; | ||
424 | inet_ntop(AF_INET, &v4->sin_addr, buf, INET_ADDRSTRLEN); | ||
425 | if (0 == ntohs(v4->sin_port)) | ||
426 | return buf; | ||
427 | strcat (buf, ":"); | ||
428 | sprintf (b2, "%u", ntohs(v4->sin_port)); | ||
429 | strcat (buf, b2); | ||
430 | return buf; | ||
431 | case AF_INET6: | ||
432 | v6 = (const struct sockaddr_in6*)addr; | ||
433 | buf[0] = '['; | ||
434 | inet_ntop(AF_INET6, &v6->sin6_addr, &buf[1], INET6_ADDRSTRLEN); | ||
435 | if (0 == ntohs(v6->sin6_port)) | ||
436 | return &buf[1]; | ||
437 | strcat (buf, "]:"); | ||
438 | sprintf (b2, "%u", ntohs(v6->sin6_port)); | ||
439 | strcat (buf, b2); | ||
440 | return buf; | ||
441 | default: | ||
442 | return _("invalid address"); | ||
443 | } | ||
444 | } | ||
445 | |||
446 | |||
401 | /** | 447 | /** |
402 | * Initializer | 448 | * Initializer |
403 | */ | 449 | */ |
diff --git a/src/util/network.c b/src/util/network.c index 7fd6f6c47..0526bc844 100644 --- a/src/util/network.c +++ b/src/util/network.c | |||
@@ -40,7 +40,7 @@ | |||
40 | #include "gnunet_network_lib.h" | 40 | #include "gnunet_network_lib.h" |
41 | #include "gnunet_scheduler_lib.h" | 41 | #include "gnunet_scheduler_lib.h" |
42 | 42 | ||
43 | #define DEBUG_NETWORK GNUNET_NO | 43 | #define DEBUG_NETWORK GNUNET_YES |
44 | 44 | ||
45 | struct GNUNET_NETWORK_TransmitHandle | 45 | struct GNUNET_NETWORK_TransmitHandle |
46 | { | 46 | { |
@@ -234,9 +234,7 @@ GNUNET_NETWORK_socket_create_from_accept (struct GNUNET_SCHEDULER_Handle | |||
234 | { | 234 | { |
235 | struct GNUNET_NETWORK_SocketHandle *ret; | 235 | struct GNUNET_NETWORK_SocketHandle *ret; |
236 | char addr[32]; | 236 | char addr[32]; |
237 | char msg[INET6_ADDRSTRLEN]; | ||
238 | socklen_t addrlen; | 237 | socklen_t addrlen; |
239 | int fam; | ||
240 | int fd; | 238 | int fd; |
241 | int aret; | 239 | int aret; |
242 | struct sockaddr_in *v4; | 240 | struct sockaddr_in *v4; |
@@ -287,19 +285,9 @@ GNUNET_NETWORK_socket_create_from_accept (struct GNUNET_SCHEDULER_Handle | |||
287 | (GNUNET_YES != (aret = access (access_cls, uaddr, addrlen)))) | 285 | (GNUNET_YES != (aret = access (access_cls, uaddr, addrlen)))) |
288 | { | 286 | { |
289 | if (aret == GNUNET_NO) | 287 | if (aret == GNUNET_NO) |
290 | { | 288 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
291 | fam = ((struct sockaddr *) addr)->sa_family; | 289 | _("Access denied to `%s'\n"), |
292 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 290 | GNUNET_a2s(uaddr, addrlen)); |
293 | _("Access denied to `%s'\n"), | ||
294 | inet_ntop (fam, | ||
295 | (fam == AF_INET6) | ||
296 | ? (const void *) &((struct sockaddr_in6 *) | ||
297 | &addr)->sin6_addr : (const | ||
298 | void | ||
299 | *) | ||
300 | &((struct sockaddr_in *) &addr)->sin_addr, | ||
301 | msg, sizeof (msg))); | ||
302 | } | ||
303 | GNUNET_break (0 == SHUTDOWN (fd, SHUT_RDWR)); | 291 | GNUNET_break (0 == SHUTDOWN (fd, SHUT_RDWR)); |
304 | GNUNET_break (0 == CLOSE (fd)); | 292 | GNUNET_break (0 == CLOSE (fd)); |
305 | GNUNET_free (uaddr); | 293 | GNUNET_free (uaddr); |
@@ -493,12 +481,22 @@ connect_continuation (void *cls, | |||
493 | (0 != getsockopt (sock->sock, SOL_SOCKET, SO_ERROR, &error, &len)) || | 481 | (0 != getsockopt (sock->sock, SOL_SOCKET, SO_ERROR, &error, &len)) || |
494 | (error != 0) || (errno != 0)) | 482 | (error != 0) || (errno != 0)) |
495 | { | 483 | { |
484 | #if DEBUG_NETWORK | ||
485 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
486 | "Failed to establish TCP connection to `%s'\n", | ||
487 | GNUNET_a2s(sock->addr, sock->addrlen)); | ||
488 | #endif | ||
496 | /* connect failed / timed out */ | 489 | /* connect failed / timed out */ |
497 | GNUNET_break (0 == CLOSE (sock->sock)); | 490 | GNUNET_break (0 == CLOSE (sock->sock)); |
498 | sock->sock = -1; | 491 | sock->sock = -1; |
499 | if (GNUNET_SYSERR == try_connect (sock)) | 492 | if (GNUNET_SYSERR == try_connect (sock)) |
500 | { | 493 | { |
501 | /* failed for good */ | 494 | /* failed for good */ |
495 | #if DEBUG_NETWORK | ||
496 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
497 | "Failed to establish TCP connection, no further addresses to try.\n"); | ||
498 | #endif | ||
499 | /* connect failed / timed out */ | ||
502 | GNUNET_break (sock->ai_pos == NULL); | 500 | GNUNET_break (sock->ai_pos == NULL); |
503 | freeaddrinfo (sock->ai); | 501 | freeaddrinfo (sock->ai); |
504 | sock->ai = NULL; | 502 | sock->ai = NULL; |
@@ -1052,10 +1050,6 @@ transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1052 | ssize_t ret; | 1050 | ssize_t ret; |
1053 | size_t have; | 1051 | size_t have; |
1054 | 1052 | ||
1055 | #if DEBUG_NETWORK | ||
1056 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1057 | "Transmit ready called --- will try to send\n"); | ||
1058 | #endif | ||
1059 | GNUNET_assert (sock->write_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK); | 1053 | GNUNET_assert (sock->write_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK); |
1060 | sock->write_task = GNUNET_SCHEDULER_NO_PREREQUISITE_TASK; | 1054 | sock->write_task = GNUNET_SCHEDULER_NO_PREREQUISITE_TASK; |
1061 | if (sock->connect_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK) | 1055 | if (sock->connect_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK) |
@@ -1091,6 +1085,10 @@ transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1091 | #endif | 1085 | #endif |
1092 | goto SCHEDULE_WRITE; | 1086 | goto SCHEDULE_WRITE; |
1093 | } | 1087 | } |
1088 | #if DEBUG_NETWORK | ||
1089 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1090 | "Transmit ready called --- will try to send\n"); | ||
1091 | #endif | ||
1094 | GNUNET_assert (sock->write_buffer_off >= sock->write_buffer_pos); | 1092 | GNUNET_assert (sock->write_buffer_off >= sock->write_buffer_pos); |
1095 | process_notify (sock); | 1093 | process_notify (sock); |
1096 | have = sock->write_buffer_off - sock->write_buffer_pos; | 1094 | have = sock->write_buffer_off - sock->write_buffer_pos; |
diff --git a/src/util/service.c b/src/util/service.c index cf9703235..8d72a749a 100644 --- a/src/util/service.c +++ b/src/util/service.c | |||
@@ -620,34 +620,26 @@ check_access (void *cls, const struct sockaddr *addr, socklen_t addrlen) | |||
620 | const struct sockaddr_in *i4; | 620 | const struct sockaddr_in *i4; |
621 | const struct sockaddr_in6 *i6; | 621 | const struct sockaddr_in6 *i6; |
622 | int ret; | 622 | int ret; |
623 | char buf[INET6_ADDRSTRLEN]; | ||
624 | uint16_t port; | ||
625 | 623 | ||
626 | switch (addr->sa_family) | 624 | switch (addr->sa_family) |
627 | { | 625 | { |
628 | case AF_INET: | 626 | case AF_INET: |
629 | GNUNET_assert (addrlen == sizeof (struct sockaddr_in)); | 627 | GNUNET_assert (addrlen == sizeof (struct sockaddr_in)); |
630 | i4 = (const struct sockaddr_in *) addr; | 628 | i4 = (const struct sockaddr_in *) addr; |
631 | port = ntohs (i4->sin_port); | ||
632 | ret = ((sctx->v4_allowed == NULL) || | 629 | ret = ((sctx->v4_allowed == NULL) || |
633 | (check_ipv4_listed (sctx->v4_allowed, | 630 | (check_ipv4_listed (sctx->v4_allowed, |
634 | &i4->sin_addr))) | 631 | &i4->sin_addr))) |
635 | && ((sctx->v4_denied == NULL) || | 632 | && ((sctx->v4_denied == NULL) || |
636 | (!check_ipv4_listed (sctx->v4_denied, &i4->sin_addr))); | 633 | (!check_ipv4_listed (sctx->v4_denied, &i4->sin_addr))); |
637 | if (ret != GNUNET_OK) | ||
638 | inet_ntop (AF_INET, &i4->sin_addr, buf, sizeof (buf)); | ||
639 | break; | 634 | break; |
640 | case AF_INET6: | 635 | case AF_INET6: |
641 | GNUNET_assert (addrlen == sizeof (struct sockaddr_in6)); | 636 | GNUNET_assert (addrlen == sizeof (struct sockaddr_in6)); |
642 | i6 = (const struct sockaddr_in6 *) addr; | 637 | i6 = (const struct sockaddr_in6 *) addr; |
643 | port = ntohs (i6->sin6_port); | ||
644 | ret = ((sctx->v6_allowed == NULL) || | 638 | ret = ((sctx->v6_allowed == NULL) || |
645 | (check_ipv6_listed (sctx->v6_allowed, | 639 | (check_ipv6_listed (sctx->v6_allowed, |
646 | &i6->sin6_addr))) | 640 | &i6->sin6_addr))) |
647 | && ((sctx->v6_denied == NULL) || | 641 | && ((sctx->v6_denied == NULL) || |
648 | (!check_ipv6_listed (sctx->v6_denied, &i6->sin6_addr))); | 642 | (!check_ipv6_listed (sctx->v6_denied, &i6->sin6_addr))); |
649 | if (ret != GNUNET_OK) | ||
650 | inet_ntop (AF_INET6, &i6->sin6_addr, buf, sizeof (buf)); | ||
651 | break; | 643 | break; |
652 | default: | 644 | default: |
653 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 645 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
@@ -657,8 +649,8 @@ check_access (void *cls, const struct sockaddr *addr, socklen_t addrlen) | |||
657 | if (ret != GNUNET_OK) | 649 | if (ret != GNUNET_OK) |
658 | { | 650 | { |
659 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 651 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
660 | _("Access from `%s:%u' denied to service `%s'\n"), | 652 | _("Access from `%s' denied to service `%s'\n"), |
661 | buf, port, sctx->serviceName); | 653 | GNUNET_a2s(addr, addrlen), sctx->serviceName); |
662 | } | 654 | } |
663 | return ret; | 655 | return ret; |
664 | } | 656 | } |