commit 0bd15d392c8c1c4dab56c794ec88fdbd7245cc51
parent e5f00fda52a45ebd22716debf0d9af36fb6fce0a
Author: Christian Grothoff <christian@grothoff.org>
Date: Tue, 18 Jan 2022 21:18:30 +0100
-adding logging, minor dthu bugfixes
Diffstat:
4 files changed, 100 insertions(+), 11 deletions(-)
diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c
@@ -265,6 +265,9 @@ u_address_add (void *cls,
struct GDS_Underlay *u = cls;
struct MyAddress *a;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Underlay adds address %s for this peer\n",
+ address);
a = GNUNET_new (struct MyAddress);
a->source = source;
a->url = GNUNET_strdup (address);
@@ -292,6 +295,9 @@ u_address_del (void *ctx)
{
struct MyAddress *a = ctx;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Underlay deletes address %s for this peer\n",
+ a->url);
GNUNET_HELLO_builder_del_address (GDS_my_hello,
a->url);
GNUNET_CONTAINER_DLL_remove (a_head,
diff --git a/src/dht/gnunet-service-dht_clients.c b/src/dht/gnunet-service-dht_clients.c
@@ -562,6 +562,9 @@ handle_local_result (void *cls,
const struct GDS_DATACACHE_BlockData *bd)
{
/* FIXME: use 'cls' instead of looking up the client? */
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Datacache provided result for query key %s\n",
+ GNUNET_h2s (&bd->key));
GDS_CLIENTS_handle_reply (bd,
&bd->key,
0, NULL /* get_path */);
@@ -1081,6 +1084,8 @@ handle_dht_local_hello_get (void *cls,
struct GNUNET_MessageHeader *hdr;
struct GNUNET_MQ_Envelope *env;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Handling request from local client for my HELLO\n");
env = GNUNET_MQ_msg_extra (hdr,
slen,
GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL);
@@ -1134,6 +1139,9 @@ handle_dht_local_hello_offer (void *cls,
struct GNUNET_HELLO_Builder *b;
struct GNUNET_PeerIdentity pid;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Local client provided HELLO URL %s\n",
+ url);
b = GNUNET_HELLO_builder_from_url (url);
if (NULL == b)
{
diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c
@@ -2260,7 +2260,11 @@ GDS_try_connect (void *cls,
if (0 == GNUNET_memcmp (&GDS_my_identity,
pid))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Got a HELLO for my own PID, ignoring it\n");
return; /* that's us! */
+ }
GNUNET_CRYPTO_hash (pid,
sizeof(*pid),
&phash);
@@ -2282,6 +2286,13 @@ GDS_try_connect (void *cls,
alternative address??? */
return;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Discovered peer %s at %s suitable for bucket %d (%u/%u), trying to connect\n",
+ GNUNET_i2s (pid),
+ uri,
+ peer_bucket,
+ bucket->peers_size,
+ bucket_size);
/* new peer that we like! */
GDS_u_try_connect (pid,
uri);
@@ -2492,6 +2503,10 @@ GDS_u_receive (void *cls,
GNUNET_break_op (0);
return;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Handling message of type %u from peer %s\n",
+ ntohs (mh->type),
+ GNUNET_i2s (&pi->id));
if (GNUNET_OK !=
GNUNET_MQ_handle_message (core_handlers,
mh))
diff --git a/src/dhtu/plugin_dhtu_ip.c b/src/dhtu/plugin_dhtu_ip.c
@@ -250,7 +250,7 @@ create_target (struct Plugin *plugin,
{
struct GNUNET_DHTU_Target *dst;
- if (MAX_DESTS >
+ if (MAX_DESTS <=
GNUNET_CONTAINER_multihashmap_size (plugin->dsts))
{
struct GNUNET_HashCode key;
@@ -567,6 +567,55 @@ create_source (struct Plugin *plugin,
/**
+ * Compare two addresses for equality. Only
+ * compares IP address and port. Must only be
+ * called on AF_INET or AF_INET6 addresses.
+ *
+ * @param a1 address to compare
+ * @param a2 address to compare
+ * @param alen number of bytes in @a a1 and @a a2
+ * @return 0 if @a a1 == @a a2.
+ */
+static int
+addrcmp (const struct sockaddr *a1,
+ const struct sockaddr *a2,
+ size_t alen)
+{
+ GNUNET_assert (a1->sa_family == a2->sa_family);
+ switch (a1->sa_family)
+ {
+ case AF_INET:
+ GNUNET_assert (sizeof (struct sockaddr_in) == alen);
+ {
+ const struct sockaddr_in *s1 = (const struct sockaddr_in *) a1;
+ const struct sockaddr_in *s2 = (const struct sockaddr_in *) a2;
+
+ if (s1->sin_port != s2->sin_port)
+ return 1;
+ if (s1->sin_addr.s_addr != s2->sin_addr.s_addr)
+ return 1;
+ break;
+ }
+ case AF_INET6:
+ GNUNET_assert (sizeof (struct sockaddr_in6) == alen);
+ {
+ const struct sockaddr_in6 *s1 = (const struct sockaddr_in6 *) a1;
+ const struct sockaddr_in6 *s2 = (const struct sockaddr_in6 *) a2;
+ if (s1->sin6_port != s2->sin6_port)
+ return 1;
+ if (0 != GNUNET_memcmp (&s1->sin6_addr,
+ &s2->sin6_addr))
+ return 1;
+ break;
+ }
+ default:
+ GNUNET_assert (0);
+ }
+ return 0;
+}
+
+
+/**
* Callback function invoked for each interface found.
*
* @param cls closure
@@ -595,9 +644,9 @@ process_ifcs (void *cls,
src = src->next)
{
if ( (addrlen == src->addrlen) &&
- (0 == memcmp (addr,
- &src->addr,
- addrlen)) )
+ (0 == addrcmp (addr,
+ (const struct sockaddr *) &src->addr,
+ addrlen)) )
{
src->scan_generation = plugin->scan_generation;
return GNUNET_OK;
@@ -691,9 +740,9 @@ find_source (struct Plugin *plugin,
src = src->next)
{
if ( (addrlen == src->addrlen) &&
- (0 == memcmp (addr,
- &src->addr,
- addrlen)) )
+ (0 == addrcmp (addr,
+ (const struct sockaddr *) &src->addr,
+ addrlen)) )
return src;
}
@@ -731,7 +780,6 @@ read_cb (void *cls)
};
struct GNUNET_DHTU_Target *dst = NULL;
struct GNUNET_DHTU_Source *src = NULL;
- struct cmsghdr *cmsg;
ret = recvmsg (GNUNET_NETWORK_get_fd (plugin->sock),
&mh,
@@ -749,11 +797,19 @@ read_cb (void *cls)
return;
}
/* find IP where we received message */
- for (cmsg = CMSG_FIRSTHDR (&mh);
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mh);
NULL != cmsg;
cmsg = CMSG_NXTHDR (&mh,
cmsg))
{
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Got CMSG level %u (%d/%d), type %u (%d/%d)\n",
+ cmsg->cmsg_level,
+ (cmsg->cmsg_level == IPPROTO_IP),
+ (cmsg->cmsg_level == IPPROTO_IPV6),
+ cmsg->cmsg_type,
+ (cmsg->cmsg_type == IP_PKTINFO),
+ (cmsg->cmsg_type == IPV6_RECVPKTINFO));
if ( (cmsg->cmsg_level == IPPROTO_IP) &&
(cmsg->cmsg_type == IP_PKTINFO) )
{
@@ -808,13 +864,17 @@ read_cb (void *cls)
GNUNET_break (0);
}
}
+ if (NULL == src)
+ {
+ GNUNET_break (0);
+ return;
+ }
pid = (const struct GNUNET_PeerIdentity *) buf;
dst = find_target (plugin,
pid,
&sa,
mh.msg_namelen);
- if ( (NULL == src) ||
- (NULL == dst) )
+ if (NULL == dst)
{
GNUNET_break (0);
return;