[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] branch master updated: more work towards fixing #5
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] branch master updated: more work towards fixing #5385 |
Date: |
Sun, 27 Jan 2019 04:05:19 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new d3f013aba more work towards fixing #5385
d3f013aba is described below
commit d3f013aba71486c121800d279cd1d3af4425c412
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Jan 27 04:05:12 2019 +0100
more work towards fixing #5385
---
src/cadet/Makefile.am | 3 +-
src/cadet/cadet.h | 97 +++++++++++--
src/cadet/cadet_api_get_channel.c | 90 +++++++++---
.../{cadet_api_get_peer.c => cadet_api_get_path.c} | 135 +++++++++---------
src/cadet/cadet_api_list_peers.c | 76 +++++-----
src/cadet/gnunet-cadet.c | 123 +++++++---------
src/cadet/gnunet-service-cadet.c | 158 +++------------------
src/include/gnunet_cadet_service.h | 142 +++++++++++-------
src/include/gnunet_protocols.h | 30 +++-
9 files changed, 438 insertions(+), 416 deletions(-)
diff --git a/src/cadet/Makefile.am b/src/cadet/Makefile.am
index 8f4cd20d4..80ad76737 100644
--- a/src/cadet/Makefile.am
+++ b/src/cadet/Makefile.am
@@ -34,7 +34,8 @@ lib_LTLIBRARIES = \
libgnunetcadet_la_SOURCES = \
cadet_api.c \
- cadet_api_get_peer.c \
+ cadet_api_get_channel.c \
+ cadet_api_get_path.c \
cadet_api_get_tunnel.c \
cadet_api_list_peers.c \
cadet_api_list_tunnels.c \
diff --git a/src/cadet/cadet.h b/src/cadet/cadet.h
index 226288284..51296ae50 100644
--- a/src/cadet/cadet.h
+++ b/src/cadet/cadet.h
@@ -249,23 +249,96 @@ struct GNUNET_CADET_LocalInfo
/**
- * Message to inform the client about one of the peers in the service.
- *
- * TODO: split into two messages!
+ * Message to inform the client about channels in the service.
*/
-struct GNUNET_CADET_LocalInfoPeer
+struct GNUNET_CADET_RequestPathInfoMessage
{
/**
- * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER or
- * #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS
+ * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PATH
*/
struct GNUNET_MessageHeader header;
-
+
+ /**
+ * Always zero.
+ */
+ uint32_t resered GNUNET_PACKED;
+
+ /**
+ * ID of the destination of the channel (can be local peer).
+ */
+ struct GNUNET_PeerIdentity peer;
+};
+
+
+/**
+ * Message to inform the client about channels in the service.
+ */
+struct GNUNET_CADET_ChannelInfoMessage
+{
+ /**
+ * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL.
+ */
+ struct GNUNET_MessageHeader header;
+
/**
- * Offset the peer has in the path this message is about.
+ * Root of the channel
*/
- uint16_t offset GNUNET_PACKED;
+ struct GNUNET_PeerIdentity root;
+ /**
+ * Destination of the channel
+ */
+ struct GNUNET_PeerIdentity dest;
+
+ /* FIXME: expand! */
+};
+
+
+/**
+ * Message to as the service about information on a channel.
+ */
+struct GNUNET_CADET_RequestChannelInfoMessage
+{
+ /**
+ * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_CHANNEL.
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * Target of the channel.
+ */
+ struct GNUNET_PeerIdentity target;
+
+};
+
+
+/**
+ * Message to inform the client about one of the paths known to the service.
+ */
+struct GNUNET_CADET_LocalInfoPath
+{
+ /**
+ * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH.
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * Zero.
+ */
+ uint32_t reserved GNUNET_PACKED;
+};
+
+
+/**
+ * Message to inform the client about one of the peers in the service.
+ */
+struct GNUNET_CADET_LocalInfoPeers
+{
+ /**
+ * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS
+ */
+ struct GNUNET_MessageHeader header;
+
/**
* Number of paths.
*/
@@ -277,17 +350,15 @@ struct GNUNET_CADET_LocalInfoPeer
int16_t tunnel GNUNET_PACKED;
/**
- * We are finished with the paths.
+ * Shortest known path.
*/
- uint16_t finished_with_paths;
+ uint32_t best_path_length GNUNET_PACKED;
/**
* ID of the peer (can be local peer).
*/
struct GNUNET_PeerIdentity destination;
- /* If type == PEER (no 'S'): GNUNET_PeerIdentity paths[]
- * (each path ends in destination) */
};
diff --git a/src/cadet/cadet_api_get_channel.c
b/src/cadet/cadet_api_get_channel.c
index 1249777c2..81f0691f1 100644
--- a/src/cadet/cadet_api_get_channel.c
+++ b/src/cadet/cadet_api_get_channel.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2011, 2017 GNUnet e.V.
+ Copyright (C) 2011, 2017, 2019 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -72,14 +72,66 @@ struct GNUNET_CADET_ChannelMonitor
*/
struct GNUNET_PeerIdentity peer;
- /**
- * Channel we want information about.
- */
- uint32_t /* UGH */ channel_number;
-
};
+/**
+ * Check that message received from CADET service is well-formed.
+ *
+ * @param cls unused
+ * @param message the message we got
+ * @return #GNUNET_OK if the message is well-formed,
+ * #GNUNET_SYSERR otherwise
+ */
+static int
+check_channel_info (void *cls,
+ const struct GNUNET_CADET_ChannelInfoMessage *message)
+{
+ (void) cls;
+
+ return GNUNET_OK;
+}
+
+
+/**
+ * Process a local peer info reply, pass info to the user.
+ *
+ * @param cls Closure
+ * @param message Message itself.
+ */
+static void
+handle_channel_info (void *cls,
+ const struct GNUNET_CADET_ChannelInfoMessage *message)
+{
+ struct GNUNET_CADET_ChannelMonitor *cm = cls;
+ struct GNUNET_CADET_ChannelInternals ci;
+
+ ci.root = message->root;
+ ci.dest = message->dest;
+ cm->channel_cb (cm->channel_cb_cls,
+ &ci);
+ GNUNET_CADET_get_channel_cancel (cm);
+}
+
+
+/**
+ * Process a local peer info reply, pass info to the user.
+ *
+ * @param cls Closure
+ * @param message Message itself.
+ */
+static void
+handle_channel_info_end (void *cls,
+ const struct GNUNET_MessageHeader *message)
+{
+ struct GNUNET_CADET_ChannelMonitor *cm = cls;
+
+ cm->channel_cb (cm->channel_cb_cls,
+ NULL);
+ GNUNET_CADET_get_channel_cancel (cm);
+}
+
+
/**
* Reconnect to the service and try again.
*
@@ -120,11 +172,18 @@ static void
reconnect (void *cls)
{
struct GNUNET_CADET_ChannelMonitor *cm = cls;
- struct GNUNET_MQ_MessageHandler *handlers[] = {
- FIXME,
+ struct GNUNET_MQ_MessageHandler handlers[] = {
+ GNUNET_MQ_hd_fixed_size (channel_info_end,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL_END,
+ struct GNUNET_MessageHeader,
+ cm),
+ GNUNET_MQ_hd_var_size (channel_info,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL,
+ struct GNUNET_CADET_ChannelInfoMessage,
+ cm),
GNUNET_MQ_handler_end ()
};
- struct GNUNET_MessageHeader *msg;
+ struct GNUNET_CADET_RequestChannelInfoMessage *msg;
struct GNUNET_MQ_Envelope *env;
cm->reconnect_task = NULL;
@@ -136,7 +195,8 @@ reconnect (void *cls)
if (NULL == cm->mq)
return;
env = GNUNET_MQ_msg (msg,
- type);
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_CHANNEL);
+ msg->target = cm->peer;
GNUNET_MQ_send (cm->mq,
env);
}
@@ -147,7 +207,6 @@ reconnect (void *cls)
*
* @param cfg configuration to use
* @param peer ID of the other end of the channel.
- * @param channel_number Channel number.
* @param callback Function to call with the requested data.
* @param callback_cls Closure for @c callback.
* @return NULL on error
@@ -155,7 +214,6 @@ reconnect (void *cls)
struct GNUNET_CADET_ChannelMonitor *
GNUNET_CADET_get_channel (const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_PeerIdentity *peer,
- uint32_t /* UGH */ channel_number,
GNUNET_CADET_ChannelCB callback,
void *callback_cls)
{
@@ -167,10 +225,10 @@ GNUNET_CADET_get_channel (const struct
GNUNET_CONFIGURATION_Handle *cfg,
return NULL;
}
cm = GNUNET_new (struct GNUNET_CADET_ChannelMonitor);
- cm->peer_cb = callback;
- cm->peer_cb_cls = callback_cls;
+ cm->channel_cb = callback;
+ cm->channel_cb_cls = callback_cls;
cm->cfg = cfg;
- cm->id = *id;
+ cm->peer = *peer;
reconnect (cm);
if (NULL == cm->mq)
{
@@ -190,7 +248,7 @@ GNUNET_CADET_get_channel (const struct
GNUNET_CONFIGURATION_Handle *cfg,
void *
GNUNET_CADET_get_channel_cancel (struct GNUNET_CADET_ChannelMonitor *cm)
{
- void *ret = cm->peer_cb_cls;
+ void *ret = cm->channel_cb_cls;
if (NULL != cm->mq)
GNUNET_MQ_destroy (cm->mq);
diff --git a/src/cadet/cadet_api_get_peer.c b/src/cadet/cadet_api_get_path.c
similarity index 61%
rename from src/cadet/cadet_api_get_peer.c
rename to src/cadet/cadet_api_get_path.c
index 6276de3a4..2f35e365e 100644
--- a/src/cadet/cadet_api_get_peer.c
+++ b/src/cadet/cadet_api_get_path.c
@@ -18,7 +18,7 @@
SPDX-License-Identifier: AGPL3.0-or-later
*/
/**
- * @file cadet/cadet_api_get_peer.c
+ * @file cadet/cadet_api_get_path.c
* @brief cadet api: client implementation of cadet service
* @author Bartlomiej Polot
* @author Christian Grothoff
@@ -34,18 +34,18 @@
/**
* Operation handle.
*/
-struct GNUNET_CADET_GetPeer
+struct GNUNET_CADET_GetPath
{
/**
* Monitor callback
*/
- GNUNET_CADET_PeerCB peer_cb;
+ GNUNET_CADET_PathCB path_cb;
/**
- * Closure for @c peer_cb.
+ * Closure for @c path_cb.
*/
- void *peer_cb_cls;
+ void *path_cb_cls;
/**
* Message queue to talk to CADET service.
@@ -84,10 +84,10 @@ struct GNUNET_CADET_GetPeer
* #GNUNET_SYSERR otherwise
*/
static int
-check_get_peer (void *cls,
- const struct GNUNET_CADET_LocalInfoPeer *message)
+check_get_path (void *cls,
+ const struct GNUNET_CADET_LocalInfoPath *message)
{
- size_t msize = sizeof (struct GNUNET_CADET_LocalInfoPeer);
+ size_t msize = sizeof (struct GNUNET_CADET_LocalInfoPath);
size_t esize;
(void) cls;
@@ -113,54 +113,44 @@ check_get_peer (void *cls,
* @param message Message itself.
*/
static void
-handle_get_peer (void *cls,
- const struct GNUNET_CADET_LocalInfoPeer *message)
+handle_get_path (void *cls,
+ const struct GNUNET_CADET_LocalInfoPath *message)
{
- struct GNUNET_CADET_GetPeer *gp = cls;
- const struct GNUNET_PeerIdentity *paths_array;
- unsigned int paths;
- unsigned int path_length;
- int neighbor;
- unsigned int peers;
-
- paths = ntohs (message->paths);
- paths_array = (const struct GNUNET_PeerIdentity *) &message[1];
- peers = (ntohs (message->header.size) - sizeof (*message))
- / sizeof (struct GNUNET_PeerIdentity);
- path_length = 0;
- neighbor = GNUNET_NO;
-
- for (unsigned int i = 0; i < peers; i++)
- {
- path_length++;
- if (0 == memcmp (&paths_array[i],
- &message->destination,
- sizeof (struct GNUNET_PeerIdentity)))
- {
- if (1 == path_length)
- neighbor = GNUNET_YES;
- path_length = 0;
- }
- }
+ struct GNUNET_CADET_GetPath *gp = cls;
+ struct GNUNET_CADET_PeerPathDetail ppd;
+
+ ppd.peer = gp->id;
+ ppd.path = (const struct GNUNET_PeerIdentity *) &message[1];
+ ppd.path_length = (ntohs (message->header.size) - sizeof (*message))
+ / sizeof (struct GNUNET_PeerIdentity);
+ gp->path_cb (gp->path_cb_cls,
+ &ppd);
+}
+
+
+/**
+ * Process a local peer info reply, pass info to the user.
+ *
+ * @param cls Closure
+ * @param message Message itself.
+ */
+static void
+handle_get_path_end (void *cls,
+ const struct GNUNET_MessageHeader *message)
+{
+ struct GNUNET_CADET_GetPath *gp = cls;
- /* Call Callback with tunnel info */
- paths_array = (const struct GNUNET_PeerIdentity *) &message[1];
- gp->peer_cb (gp->peer_cb_cls,
- &message->destination,
- (int) ntohs (message->tunnel),
- neighbor,
- paths,
- paths_array,
- (int) ntohs (message->offset),
- (int) ntohs (message->finished_with_paths));
- GNUNET_CADET_get_peer_cancel (gp);
+ (void) message;
+ gp->path_cb (gp->path_cb_cls,
+ NULL);
+ GNUNET_CADET_get_path_cancel (gp);
}
/**
* Reconnect to the service and try again.
*
- * @param cls a `struct GNUNET_CADET_GetPeer` operation
+ * @param cls a `struct GNUNET_CADET_GetPath` operation
*/
static void
reconnect (void *cls);
@@ -169,14 +159,14 @@ reconnect (void *cls);
/**
* Function called on connection trouble. Reconnects.
*
- * @param cls a `struct GNUNET_CADET_GetPeer`
+ * @param cls a `struct GNUNET_CADET_GetPath`
* @param error error code from MQ
*/
static void
error_handler (void *cls,
enum GNUNET_MQ_Error error)
{
- struct GNUNET_CADET_GetPeer *gp = cls;
+ struct GNUNET_CADET_GetPath *gp = cls;
GNUNET_MQ_destroy (gp->mq);
gp->mq = NULL;
@@ -191,20 +181,24 @@ error_handler (void *cls,
/**
* Reconnect to the service and try again.
*
- * @param cls a `struct GNUNET_CADET_GetPeer` operation
+ * @param cls a `struct GNUNET_CADET_GetPath` operation
*/
static void
reconnect (void *cls)
{
- struct GNUNET_CADET_GetPeer *gp = cls;
+ struct GNUNET_CADET_GetPath *gp = cls;
struct GNUNET_MQ_MessageHandler handlers[] = {
- GNUNET_MQ_hd_var_size (get_peer,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER,
- struct GNUNET_CADET_LocalInfoPeer,
+ GNUNET_MQ_hd_var_size (get_path,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH,
+ struct GNUNET_CADET_LocalInfoPath,
gp),
+ GNUNET_MQ_hd_fixed_size (get_path_end,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH_END,
+ struct GNUNET_MessageHeader,
+ gp),
GNUNET_MQ_handler_end ()
};
- struct GNUNET_CADET_LocalInfo *msg;
+ struct GNUNET_CADET_RequestPathInfoMessage *msg;
struct GNUNET_MQ_Envelope *env;
gp->reconnect_task = NULL;
@@ -216,7 +210,7 @@ reconnect (void *cls)
if (NULL == gp->mq)
return;
env = GNUNET_MQ_msg (msg,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PATH);
msg->peer = gp->id;
GNUNET_MQ_send (gp->mq,
env);
@@ -224,31 +218,30 @@ reconnect (void *cls)
/**
- * Request information about a peer known to the running cadet peer.
- * The callback will be called for the tunnel once.
+ * Request information about paths known to the running cadet peer.
*
* @param cfg configuration to use
- * @param id Peer whose tunnel to examine.
+ * @param id Peer whose paths to examine.
* @param callback Function to call with the requested data.
* @param callback_cls Closure for @c callback.
* @return NULL on error
*/
-struct GNUNET_CADET_GetPeer *
-GNUNET_CADET_get_peer (const struct GNUNET_CONFIGURATION_Handle *cfg,
+struct GNUNET_CADET_GetPath *
+GNUNET_CADET_get_path (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_PeerIdentity *id,
- GNUNET_CADET_PeerCB callback,
+ GNUNET_CADET_PathCB callback,
void *callback_cls)
{
- struct GNUNET_CADET_GetPeer *gp;
+ struct GNUNET_CADET_GetPath *gp;
if (NULL == callback)
{
GNUNET_break (0);
return NULL;
}
- gp = GNUNET_new (struct GNUNET_CADET_GetPeer);
- gp->peer_cb = callback;
- gp->peer_cb_cls = callback_cls;
+ gp = GNUNET_new (struct GNUNET_CADET_GetPath);
+ gp->path_cb = callback;
+ gp->path_cb_cls = callback_cls;
gp->cfg = cfg;
gp->id = *id;
reconnect (gp);
@@ -265,12 +258,12 @@ GNUNET_CADET_get_peer (const struct
GNUNET_CONFIGURATION_Handle *cfg,
* Cancel @a gp operation.
*
* @param gp operation to cancel
- * @return closure from #GNUNET_CADET_get_peer().
+ * @return closure from #GNUNET_CADET_get_path().
*/
void *
-GNUNET_CADET_get_peer_cancel (struct GNUNET_CADET_GetPeer *gp)
+GNUNET_CADET_get_path_cancel (struct GNUNET_CADET_GetPath *gp)
{
- void *ret = gp->peer_cb_cls;
+ void *ret = gp->path_cb_cls;
if (NULL != gp->mq)
GNUNET_MQ_destroy (gp->mq);
@@ -281,4 +274,4 @@ GNUNET_CADET_get_peer_cancel (struct GNUNET_CADET_GetPeer
*gp)
}
-/* end of cadet_api_get_peer.c */
+/* end of cadet_api_get_path.c */
diff --git a/src/cadet/cadet_api_list_peers.c b/src/cadet/cadet_api_list_peers.c
index cc6948a36..4dc6d02f5 100644
--- a/src/cadet/cadet_api_list_peers.c
+++ b/src/cadet/cadet_api_list_peers.c
@@ -71,59 +71,43 @@ struct GNUNET_CADET_PeersLister
/**
- * Check that message received from CADET service is well-formed.
+ * Process a local reply about info on all tunnels, pass info to the user.
*
- * @param cls the `struct GNUNET_CADET_PeersLister`
- * @param message the message we got
- * @return #GNUNET_OK if the message is well-formed,
- * #GNUNET_SYSERR otherwise
+ * @param cls a `struct GNUNET_CADET_PeersLister`
+ * @param info Message itself.
*/
-static int
-check_get_peers (void *cls,
- const struct GNUNET_MessageHeader *message)
+static void
+handle_get_peers (void *cls,
+ const struct GNUNET_CADET_LocalInfoPeers *info)
{
- size_t esize;
-
- (void) cls;
- esize = ntohs (message->size);
- if (sizeof (struct GNUNET_CADET_LocalInfoPeer) == esize)
- return GNUNET_OK;
- if (sizeof (struct GNUNET_MessageHeader) == esize)
- return GNUNET_OK;
- return GNUNET_SYSERR;
+ struct GNUNET_CADET_PeersLister *pl = cls;
+ struct GNUNET_CADET_PeerListEntry ple;
+
+ ple.peer = info->destination;
+ ple.have_tunnel = (int) ntohs (info->tunnel);
+ ple.n_paths = (unsigned int) ntohs (info->paths);
+ ple.best_path_length = (unsigned int) ntohl (info->best_path_length);
+ pl->peers_cb (pl->peers_cb_cls,
+ &ple);
}
-// FIXME: use two different message types instead of this mess!
/**
- * Process a local reply about info on all tunnels, pass info to the user.
+ * Process a end of list reply about info on all peers.
*
* @param cls a `struct GNUNET_CADET_PeersLister`
* @param msg Message itself.
*/
static void
-handle_get_peers (void *cls,
- const struct GNUNET_MessageHeader *msg)
+handle_get_peers_end (void *cls,
+ const struct GNUNET_MessageHeader *msg)
{
struct GNUNET_CADET_PeersLister *pl = cls;
- const struct GNUNET_CADET_LocalInfoPeer *info =
- (const struct GNUNET_CADET_LocalInfoPeer *) msg;
-
- if (sizeof (struct GNUNET_CADET_LocalInfoPeer) == ntohs (msg->size))
- pl->peers_cb (pl->peers_cb_cls,
- &info->destination,
- (int) ntohs (info->tunnel),
- (unsigned int) ntohs (info->paths),
- 0);
- else
- {
- pl->peers_cb (pl->peers_cb_cls,
- NULL,
- 0,
- 0,
- 0);
- GNUNET_CADET_list_peers_cancel (pl);
- }
+ (void) msg;
+
+ pl->peers_cb (pl->peers_cb_cls,
+ NULL);
+ GNUNET_CADET_list_peers_cancel (pl);
}
@@ -168,10 +152,14 @@ reconnect (void *cls)
{
struct GNUNET_CADET_PeersLister *pl = cls;
struct GNUNET_MQ_MessageHandler handlers[] = {
- GNUNET_MQ_hd_var_size (get_peers,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS,
- struct GNUNET_MessageHeader,
- pl),
+ GNUNET_MQ_hd_fixed_size (get_peers,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS,
+ struct GNUNET_CADET_LocalInfoPeers,
+ pl),
+ GNUNET_MQ_hd_fixed_size (get_peers_end,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS_END,
+ struct GNUNET_MessageHeader,
+ pl),
GNUNET_MQ_handler_end ()
};
struct GNUNET_MessageHeader *msg;
@@ -186,7 +174,7 @@ reconnect (void *cls)
if (NULL == pl->mq)
return;
env = GNUNET_MQ_msg (msg,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS);
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PEERS);
GNUNET_MQ_send (pl->mq,
env);
}
diff --git a/src/cadet/gnunet-cadet.c b/src/cadet/gnunet-cadet.c
index b36113318..3386f7464 100644
--- a/src/cadet/gnunet-cadet.c
+++ b/src/cadet/gnunet-cadet.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2012, 2017 GNUnet e.V.
+ Copyright (C) 2012, 2017, 2019 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -101,6 +101,16 @@ static struct GNUNET_CADET_Handle *mh;
*/
static const struct GNUNET_CONFIGURATION_Handle *my_cfg;
+/**
+ * Active get path operation.
+ */
+static struct GNUNET_CADET_GetPath *gpo;
+
+/**
+ * Active peer listing operation.
+ */
+struct GNUNET_CADET_PeersLister *plo;
+
/**
* Channel handle.
*/
@@ -210,6 +220,16 @@ shutdown_task (void *cls)
{
GNUNET_CADET_channel_destroy (ch);
ch = NULL;
+ }
+ if (NULL != gpo)
+ {
+ GNUNET_CADET_get_path_cancel (gpo);
+ gpo = NULL;
+ }
+ if (NULL != plo)
+ {
+ GNUNET_CADET_list_peers_cancel (plo);
+ plo = NULL;
}
if (NULL != mh)
{
@@ -496,93 +516,52 @@ handle_data (void *cls,
* After last peer has been reported, an additional call with NULL is done.
*
* @param cls Closure.
- * @param peer Peer, or NULL on "EOF".
- * @param tunnel Do we have a tunnel towards this peer?
- * @param n_paths Number of known paths towards this peer.
- * @param best_path How long is the best path?
- * (0 = unknown, 1 = ourselves, 2 = neighbor)
+ * @param ple information about peer, or NULL on "EOF".
*/
static void
peers_callback (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- int tunnel,
- unsigned int n_paths,
- unsigned int best_path)
+ const struct GNUNET_CADET_PeerListEntry *ple)
{
- if (NULL == peer)
+ if (NULL == ple)
{
+ plo = NULL;
GNUNET_SCHEDULER_shutdown();
return;
}
FPRINTF (stdout,
"%s tunnel: %c, paths: %u\n",
- GNUNET_i2s_full (peer),
- tunnel ? 'Y' : 'N',
- n_paths);
+ GNUNET_i2s_full (&ple->peer),
+ ple->have_tunnel ? 'Y' : 'N',
+ ple->n_paths);
}
/**
- * Method called to retrieve information about a specific peer
+ * Method called to retrieve information about paths to a specific peer
* known to the service.
*
* @param cls Closure.
- * @param peer Peer ID.
- * @param tunnel Do we have a tunnel towards this peer? #GNUNET_YES/#GNUNET_NO
- * @param neighbor Is this a direct neighbor? #GNUNET_YES/#GNUNET_NO
- * @param n_paths Number of paths known towards peer.
- * @param paths Array of PEER_IDs representing all paths to reach the peer.
- * Each path starts with the local peer.
- * Each path ends with the destination peer (given in @c peer).
+ * @param ppd path detail
*/
static void
-peer_callback (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- int tunnel,
- int neighbor,
- unsigned int n_paths,
- const struct GNUNET_PeerIdentity *paths,
- int offset,
- int finished_with_paths)
+path_callback (void *cls,
+ const struct GNUNET_CADET_PeerPathDetail *ppd)
{
- unsigned int i;
- const struct GNUNET_PeerIdentity *p;
-
-
- if (GNUNET_YES == finished_with_paths)
+ if (NULL == ppd)
{
+ gpo = NULL;
GNUNET_SCHEDULER_shutdown();
return;
}
-
- if (offset == 0){
- FPRINTF (stdout,
- "%s [TUNNEL: %s, NEIGHBOR: %s, PATHS: %u]\n",
- GNUNET_i2s_full (peer),
- tunnel ? "Y" : "N",
- neighbor ? "Y" : "N",
- n_paths);
- }else{
- p = paths;
- FPRINTF (stdout,
- "Indirekt path with offset %u: ",
- offset);
- for (i = 0; i <= offset && NULL != p;)
- {
- FPRINTF (stdout,
- "%s ",
- GNUNET_i2s (p));
- i++;
- p++;
- }
-
+ FPRINTF (stdout,
+ "Path of length %u: ",
+ ppd->path_length);
+ for (unsigned int i = 0; i < ppd->path_length; i++)
FPRINTF (stdout,
- "\n");
-
- }
-
-
-
+ "%s ",
+ GNUNET_i2s (&ppd->path[i]));
+ FPRINTF (stdout,
+ "\n");
}
@@ -669,11 +648,9 @@ static void
get_peers (void *cls)
{
job = NULL;
-#if FIXME5385
- GNUNET_CADET_list_peers (my_cfg,
- &peers_callback,
- NULL);
-#endif
+ plo = GNUNET_CADET_list_peers (my_cfg,
+ &peers_callback,
+ NULL);
}
@@ -699,12 +676,10 @@ show_peer (void *cls)
GNUNET_SCHEDULER_shutdown();
return;
}
-#if FIXME5385
- GNUNET_CADET_get_peer (my_cfg,
- &pid,
- &peer_callback,
- NULL);
-#endif
+ gpo = GNUNET_CADET_get_path (my_cfg,
+ &pid,
+ &path_callback,
+ NULL);
}
diff --git a/src/cadet/gnunet-service-cadet.c b/src/cadet/gnunet-service-cadet.c
index ae5d48943..a62ce4cb0 100644
--- a/src/cadet/gnunet-service-cadet.c
+++ b/src/cadet/gnunet-service-cadet.c
@@ -821,7 +821,7 @@ get_all_peers_iterator (void *cls,
struct CadetClient *c = cls;
struct CadetPeer *p = value;
struct GNUNET_MQ_Envelope *env;
- struct GNUNET_CADET_LocalInfoPeer *msg;
+ struct GNUNET_CADET_LocalInfoPeers *msg;
env = GNUNET_MQ_msg (msg,
GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS);
@@ -829,6 +829,7 @@ get_all_peers_iterator (void *cls,
msg->paths = htons (GCP_count_paths (p));
msg->tunnel = htons (NULL != GCP_get_tunnel (p,
GNUNET_NO));
+ msg->best_path_length = htonl (0); // FIXME: get length of shortest known
path!
GNUNET_MQ_send (c->mq,
env);
return GNUNET_YES;
@@ -852,7 +853,7 @@ handle_get_peers (void *cls,
GCP_iterate_all (&get_all_peers_iterator,
c);
env = GNUNET_MQ_msg (reply,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS);
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS_END);
GNUNET_MQ_send (c->mq,
env);
GNUNET_SERVICE_client_continue (c->client);
@@ -876,10 +877,9 @@ path_info_iterator (void *cls,
{
struct GNUNET_MQ_Handle *mq = cls;
struct GNUNET_MQ_Envelope *env;
- struct GNUNET_CADET_LocalInfoPeer *resp;
+ struct GNUNET_CADET_LocalInfoPath *resp;
struct GNUNET_PeerIdentity *id;
- uint16_t path_size;
- unsigned int i;
+ size_t path_size;
unsigned int path_length;
path_length = GCPP_get_length (path);
@@ -893,18 +893,13 @@ path_info_iterator (void *cls,
}
env = GNUNET_MQ_msg_extra (resp,
path_size,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
-
-
- resp->offset = htons(off);
- resp->finished_with_paths = htons(0);
-
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH);
id = (struct GNUNET_PeerIdentity *) &resp[1];
/* Don't copy first peer. First peer is always the local one. Last
* peer is always the destination (leave as 0, EOL).
*/
- for (i = 0; i <= off; i++)
+ for (unsigned int i = 0; i <= off; i++)
id[i] = *GCP_get_id (GCPP_get_peer_at_offset (path,
i));
GNUNET_MQ_send (mq,
@@ -912,70 +907,32 @@ path_info_iterator (void *cls,
return GNUNET_YES;
}
-/**
- * Getting summary information about the number of paths and if a tunnel
exists,
- * and the indirect paths to a peer, if there are ones.
- *
- * @param cls Closure ().
- * @param peer Peer ID (tunnel remote peer).
- * @param value Peer info.
- * @return #GNUNET_YES, to keep iterating.
- */
-static void
-get_peer_info (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- struct CadetPeer *p)
-{
- struct CadetClient *c = cls;
- struct GNUNET_MQ_Envelope *env;
- struct GNUNET_CADET_LocalInfoPeer *msg;
-
- env = GNUNET_MQ_msg (msg,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
- msg->offset = htons(0);
- msg->destination = *peer;
- msg->paths = htons (GCP_count_paths (p));
- msg->tunnel = htons (NULL != GCP_get_tunnel (p,
- GNUNET_NO));
- msg->finished_with_paths = htons(0);
- GNUNET_MQ_send (c->mq,
- env);
- GCP_iterate_indirect_paths (p,
- &path_info_iterator,
- c->mq);
-}
-
/**
- * Handler for client's SHOW_PEER request.
+ * Handler for client's #GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PATH
request.
*
* @param cls Identification of the client.
* @param msg The actual message.
*/
static void
-handle_show_peer (void *cls,
- const struct GNUNET_CADET_LocalInfo *msg)
+handle_show_path (void *cls,
+ const struct GNUNET_CADET_RequestPathInfoMessage *msg)
{
struct CadetClient *c = cls;
struct CadetPeer *p;
struct GNUNET_MQ_Envelope *env;
- struct GNUNET_CADET_LocalInfoPeer *resp;
+ struct GNUNET_MessageHeader *resp;
p = GCP_get (&msg->peer,
GNUNET_NO);
- if (NULL != p){
- get_peer_info(c, &(msg->peer), p);
- }
-
-
+ if (NULL != p)
+ GCP_iterate_indirect_paths (p,
+ &path_info_iterator,
+ c->mq);
env = GNUNET_MQ_msg (resp,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
- resp->finished_with_paths = htons(1);
- resp->destination = msg->peer;
-
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH_END);
GNUNET_MQ_send (c->mq,
env);
-
GNUNET_SERVICE_client_continue (c->client);
}
@@ -1143,77 +1100,6 @@ handle_info_tunnel (void *cls,
}
-/**
- * Iterator over all peers to dump info for each peer.
- *
- * @param cls Closure (unused).
- * @param peer Peer ID (tunnel remote peer).
- * @param value Peer info.
- *
- * @return #GNUNET_YES, to keep iterating.
- */
-static int
-show_peer_iterator (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- void *value)
-{
- struct CadetPeer *p = value;
- struct CadetTunnel *t;
-
- t = GCP_get_tunnel (p,
- GNUNET_NO);
- if (NULL != t)
- GCT_debug (t,
- GNUNET_ERROR_TYPE_ERROR);
- LOG (GNUNET_ERROR_TYPE_ERROR, "\n");
- return GNUNET_YES;
-}
-
-
-/**
- * Handler for client's INFO_DUMP request.
- *
- * @param cls Identification of the client.
- * @param message The actual message.
- */
-static void
-handle_info_dump (void *cls,
- const struct GNUNET_MessageHeader *message)
-{
- struct CadetClient *c = cls;
-
- LOG (GNUNET_ERROR_TYPE_INFO,
- "Received dump info request from client %u\n",
- c->id);
-
- LOG (GNUNET_ERROR_TYPE_ERROR,
- "*************************** DUMP START ***************************\n");
- for (struct CadetClient *ci = clients_head;
- NULL != ci;
- ci = ci->next)
- {
- LOG (GNUNET_ERROR_TYPE_ERROR,
- "Client %u (%p), handle: %p, ports: %u, channels: %u\n",
- ci->id,
- ci,
- ci->client,
- (NULL != c->ports)
- ? GNUNET_CONTAINER_multihashmap_size (ci->ports)
- : 0,
- GNUNET_CONTAINER_multihashmap32_size (ci->channels));
- }
- LOG (GNUNET_ERROR_TYPE_ERROR, "***************************\n");
- GCP_iterate_all (&show_peer_iterator,
- NULL);
-
- LOG (GNUNET_ERROR_TYPE_ERROR,
- "**************************** DUMP END ****************************\n");
-
- GNUNET_SERVICE_client_continue (c->client);
-}
-
-
-
/**
* Callback called when a client connects to the service.
*
@@ -1541,12 +1427,12 @@ GNUNET_SERVICE_MAIN
struct GNUNET_CADET_LocalAck,
NULL),
GNUNET_MQ_hd_fixed_size (get_peers,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PEERS,
struct GNUNET_MessageHeader,
NULL),
- GNUNET_MQ_hd_fixed_size (show_peer,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER,
- struct GNUNET_CADET_LocalInfo,
+ GNUNET_MQ_hd_fixed_size (show_path,
+ GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PATH,
+ struct GNUNET_CADET_RequestPathInfoMessage,
NULL),
GNUNET_MQ_hd_fixed_size (info_tunnels,
GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNELS,
@@ -1556,10 +1442,6 @@ GNUNET_SERVICE_MAIN
GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNEL,
struct GNUNET_CADET_LocalInfo,
NULL),
- GNUNET_MQ_hd_fixed_size (info_dump,
- GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_DUMP,
- struct GNUNET_MessageHeader,
- NULL),
GNUNET_MQ_handler_end ());
/* end of gnunet-service-cadet-new.c */
diff --git a/src/include/gnunet_cadet_service.h
b/src/include/gnunet_cadet_service.h
index 846260a08..ce44be88a 100644
--- a/src/include/gnunet_cadet_service.h
+++ b/src/include/gnunet_cadet_service.h
@@ -325,7 +325,7 @@ GC_u2h (uint32_t port);
/**
- * Struct to retrieve info about a channel.
+ * Union to retrieve info about a channel.
*/
union GNUNET_CADET_ChannelInfo
{
@@ -352,7 +352,7 @@ union GNUNET_CADET_ChannelInfo
*/
const union GNUNET_CADET_ChannelInfo *
GNUNET_CADET_channel_get_info (struct GNUNET_CADET_Channel *channel,
- enum GNUNET_CADET_ChannelOption option,
+ enum GNUNET_CADET_ChannelOption option,
...);
@@ -367,26 +367,35 @@ GNUNET_CADET_channel_get_info (struct
GNUNET_CADET_Channel *channel,
/******************************************************************************/
+/**
+ * Internal details about a channel.
+ */
+struct GNUNET_CADET_ChannelInternals
+{
+ /**
+ * Root of the channel
+ */
+ struct GNUNET_PeerIdentity root;
+
+ /**
+ * Destination of the channel
+ */
+ struct GNUNET_PeerIdentity dest;
+
+ // to be expanded!
+};
+
+
/**
* Method called to retrieve information about a specific channel the cadet
peer
* is aware of, including all transit nodes.
*
* @param cls Closure.
- * @param root Root of the channel.
- * @param dest Destination of the channel.
- * @param port Destination port of the channel.
- * @param root_channel_number Local number for root, if known.
- * @param dest_channel_number Local number for dest, if known.
- * @param public_channel_numbe Number for P2P, always known.
+ * @param info internal details, NULL for end of list
*/
typedef void
(*GNUNET_CADET_ChannelCB) (void *cls,
- const struct GNUNET_PeerIdentity *root,
- const struct GNUNET_PeerIdentity *dest,
- uint32_t /* UGH */ port,
- uint32_t /* ugh */ root_channel_number,
- uint32_t /* ugh */ dest_channel_number,
- uint32_t /* ugh */ public_channel_number);
+ const struct GNUNET_CADET_ChannelInternals *info);
/**
@@ -396,18 +405,16 @@ struct GNUNET_CADET_ChannelMonitor;
/**
- * Request information about a specific channel of the running cadet peer.
+ * Request information about channels to @a peer from the local peer.
*
* @param cfg configuration to use
* @param peer ID of the other end of the channel.
- * @param channel_number Channel number.
* @param callback Function to call with the requested data.
* @param callback_cls Closure for @c callback.
*/
struct GNUNET_CADET_ChannelMonitor *
GNUNET_CADET_get_channel (const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_PeerIdentity *peer,
- uint32_t /* UGH */ channel_number,
GNUNET_CADET_ChannelCB callback,
void *callback_cls);
@@ -422,6 +429,33 @@ void *
GNUNET_CADET_get_channel_cancel (struct GNUNET_CADET_ChannelMonitor *cm);
+/**
+ * Information we return per peer.
+ */
+struct GNUNET_CADET_PeerListEntry
+{
+ /**
+ * Which peer is the information about?
+ */
+ struct GNUNET_PeerIdentity peer;
+
+ /**
+ * Do we have a tunnel to this peer?
+ */
+ int have_tunnel;
+
+ /**
+ * Number of disjoint known paths to @e peer.
+ */
+ unsigned int n_paths;
+
+ /**
+ * Length of the shortest path (0 = unknown, 1 = ourselves, 2 = direct
neighbour).
+ */
+ unsigned int best_path_length;
+};
+
+
/**
* Method called to retrieve information about all peers in CADET, called
* once per peer.
@@ -429,18 +463,11 @@ GNUNET_CADET_get_channel_cancel (struct
GNUNET_CADET_ChannelMonitor *cm);
* After last peer has been reported, an additional call with NULL is done.
*
* @param cls Closure.
- * @param peer Peer, or NULL on "EOF".
- * @param tunnel Do we have a tunnel towards this peer?
- * @param n_paths Number of known paths towards this peer.
- * @param best_path How long is the best path?
- * (0 = unknown, 1 = ourselves, 2 = neighbor)
+ * @param ple information about a peer, or NULL on "EOF".
*/
typedef void
(*GNUNET_CADET_PeersCB) (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- int tunnel,
- unsigned int n_paths,
- unsigned int best_path);
+ const struct GNUNET_CADET_PeerListEntry *ple);
/**
@@ -476,50 +503,61 @@ GNUNET_CADET_list_peers_cancel (struct
GNUNET_CADET_PeersLister *pl);
/**
- * Method called to retrieve information about a specific peer
+ * Detailed information we return per peer.
+ */
+struct GNUNET_CADET_PeerPathDetail
+{
+ /**
+ * Peer this is about.
+ */
+ struct GNUNET_PeerIdentity peer;
+
+ /**
+ * Number of entries on the @e path.
+ */
+ unsigned int path_length;
+
+ /**
+ * Array of PEER_IDs representing all paths to reach the peer. Each
+ * path starts with the first hop (local peer not included). Each
+ * path ends with the destination peer (given in @e peer).
+ */
+ const struct GNUNET_PeerIdentity *path;
+
+};
+
+
+/**
+ * Method called to retrieve information about a specific path
* known to the service.
*
* @param cls Closure.
- * @param peer Peer ID.
- * @param tunnel Do we have a tunnel towards this peer? #GNUNET_YES/#GNUNET_NO
- * @param neighbor Is this a direct neighbor? #GNUNET_YES/#GNUNET_NO
- * @param n_paths Number of paths known towards peer.
- * @param paths Array of PEER_IDs representing all paths to reach the peer.
- * Each path starts with the first hop (local peer not included).
- * Each path ends with the destination peer (given in @c peer).
+ * @param ppd details about a path to the peer, NULL for end of information
*/
typedef void
-(*GNUNET_CADET_PeerCB) (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- int tunnel,
- int neighbor,
- unsigned int n_paths,
- const struct GNUNET_PeerIdentity *paths,
- int offset,
- int finished_with_paths);
+(*GNUNET_CADET_PathCB) (void *cls,
+ const struct GNUNET_CADET_PeerPathDetail *ppd);
/**
- * Handle to cancel #GNUNET_CADET_get_peer() operation.
+ * Handle to cancel #GNUNET_CADET_get_path() operation.
*/
-struct GNUNET_CADET_GetPeer;
+struct GNUNET_CADET_GetPath;
/**
* Request information about a peer known to the running cadet peer.
- * The callback will be called for the tunnel once.
- * Only one info request (of any kind) can be active at once.
*
* @param cfg configuration to use
- * @param id Peer whose tunnel to examine.
+ * @param id Peer whose paths we want to examine.
* @param callback Function to call with the requested data.
* @param callback_cls Closure for @c callback.
* @return NULL on error
*/
-struct GNUNET_CADET_GetPeer *
-GNUNET_CADET_get_peer (const struct GNUNET_CONFIGURATION_Handle *cfg,
+struct GNUNET_CADET_GetPath *
+GNUNET_CADET_get_path (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_PeerIdentity *id,
- GNUNET_CADET_PeerCB callback,
+ GNUNET_CADET_PathCB callback,
void *callback_cls);
@@ -527,10 +565,10 @@ GNUNET_CADET_get_peer (const struct
GNUNET_CONFIGURATION_Handle *cfg,
* Cancel @a gp operation.
*
* @param gp operation to cancel
- * @return closure from #GNUNET_CADET_get_peer().
+ * @return closure from #GNUNET_CADET_get_path().
*/
void *
-GNUNET_CADET_get_peer_cancel (struct GNUNET_CADET_GetPeer *gp);
+GNUNET_CADET_get_path_cancel (struct GNUNET_CADET_GetPath *gp);
/**
diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h
index 7ef8dca8e..1b1bdc099 100644
--- a/src/include/gnunet_protocols.h
+++ b/src/include/gnunet_protocols.h
@@ -2854,7 +2854,7 @@ extern "C"
/**
* Local information about all channels of service.
*/
-#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNELS 1030
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_CHANNEL 1030
/**
* Local information of service about a specific channel.
@@ -2887,26 +2887,42 @@ extern "C"
#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS 1036
/**
- * Local information of service about a specific peer.
+ * Local information of service about a specific path.
*/
-#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER 1037
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH 1037
/**
- * Debug request.
+ * End of local information of service about channels.
*/
-#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_DUMP 1038
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL_END 1038
/**
* End of local information about all peers known to the service.
*/
-#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER_END 1039
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS_END 1039
+
+/**
+ * Request local information about all peers known to the service.
+ */
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PEERS 1040
+
+/**
+ * End of local information of service about a specific path.
+ */
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PATH_END 1041
+
+/**
+ * Request local information of service about paths to specific peer.
+ */
+#define GNUNET_MESSAGE_TYPE_CADET_LOCAL_REQUEST_INFO_PATH 1042
+
/******************************** Application
*******************************/
/**
* Traffic (net-cat style) used by the Command Line Interface.
*/
-#define GNUNET_MESSAGE_TYPE_CADET_CLI 1040
+#define GNUNET_MESSAGE_TYPE_CADET_CLI 1059
/******************************************************************************/
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnunet] branch master updated: more work towards fixing #5385,
gnunet <=