aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/core.h2
-rw-r--r--src/core/gnunet-service-core.c7
-rw-r--r--src/core/test_core_api.c2
-rw-r--r--src/core/test_core_api_peer1.conf8
-rw-r--r--src/core/test_core_api_peer2.conf8
-rw-r--r--src/include/gnunet_common.h14
-rw-r--r--src/resolver/test_resolver_api.c23
-rw-r--r--src/transport/gnunet-service-transport.c40
-rw-r--r--src/transport/plugin_transport_tcp.c55
-rw-r--r--src/transport/transport.h2
-rw-r--r--src/transport/transport_api.c9
-rw-r--r--src/util/common_logging.c46
-rw-r--r--src/util/network.c38
-rw-r--r--src/util/service.c12
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]
10PORT = 12465 10PORT = 12465
11PLUGINS = tcp 11PLUGINS = tcp
12#PREFIX = xterm -T transport1 -e 12PREFIX = 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 14DEBUG = YES
15 15
16[arm] 16[arm]
17PORT = 12466 17PORT = 12466
@@ -33,8 +33,8 @@ PORT = 12469
33PORT = 12470 33PORT = 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 36PREFIX = xterm -T core1 -e
37#DEBUG = YES 37DEBUG = YES
38 38
39[testing] 39[testing]
40WEAKRANDOM = YES 40WEAKRANDOM = 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]
10PORT = 22465 10PORT = 22465
11PLUGINS = tcp 11PLUGINS = tcp
12#PREFIX = xterm -T transport2 -e 12PREFIX = 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 14DEBUG = YES
15 15
16[arm] 16[arm]
17PORT = 22466 17PORT = 22466
@@ -31,9 +31,9 @@ PORT = 22469
31 31
32[core] 32[core]
33PORT = 22470 33PORT = 22470
34#PREFIX = xterm -T core2 -e 34PREFIX = 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 36DEBUG = YES
37 37
38[testing] 38[testing]
39WEAKRANDOM = YES 39WEAKRANDOM = 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 */
218const char *GNUNET_i2s (const struct GNUNET_PeerIdentity *pid); 218const 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 */
231const 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 */
413const 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
45struct GNUNET_NETWORK_TransmitHandle 45struct 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}