GNUnet 0.28.0-dev.5-89-ga1e177ed4
 
Loading...
Searching...
No Matches
transport_api_monitor.c File Reference
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_protocols.h"
#include "gnunet_transport_monitor_service.h"
#include "transport.h"
Include dependency graph for transport_api_monitor.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_TRANSPORT_MonitorContext
 Opaque handle to the transport service for monitors. More...
 
struct  GNUNET_TRANSPORT_LinkListContext
 Opaque handle for a GNUNET_TRANSPORT_links_list() operation. More...
 

Functions

static void reconnect (struct GNUNET_TRANSPORT_MonitorContext *mc)
 (re)connect our monitor to the transport service
 
static void send_start_monitor (struct GNUNET_TRANSPORT_MonitorContext *mc)
 Send message to the transport service about our monitoring desire.
 
static void disconnect (struct GNUNET_TRANSPORT_MonitorContext *mc)
 Disconnect from the transport service.
 
static void error_handler (void *cls, enum GNUNET_MQ_Error error)
 Function called on MQ errors.
 
static int check_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
 Transport service sends us information about what is going on.
 
static void handle_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
 Transport service sends us information about what is going on.
 
static void handle_monitor_end (void *cls, const struct GNUNET_MessageHeader *me)
 One shot was requested, and transport service is done.
 
struct GNUNET_TRANSPORT_MonitorContextGNUNET_TRANSPORT_monitor (const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_PeerIdentity *peer, int one_shot, GNUNET_TRANSPORT_MonitorCallback cb, void *cb_cls)
 Return information about a specific peer or all peers currently known to transport service once or in monitoring mode.
 
void GNUNET_TRANSPORT_monitor_cancel (struct GNUNET_TRANSPORT_MonitorContext *mc)
 Cancel request to monitor peers.
 
static void link_list_done (struct GNUNET_TRANSPORT_LinkListContext *llc)
 Tell the caller we are done and tear the operation down.
 
static void link_list_error_handler (void *cls, enum GNUNET_MQ_Error error)
 Function called on MQ errors.
 
static enum GNUNET_GenericReturnValue check_link_list_response (void *cls, const struct GNUNET_TRANSPORT_LinkListResponse *resp)
 Validate a link listing response.
 
static void handle_link_list_response (void *cls, const struct GNUNET_TRANSPORT_LinkListResponse *resp)
 Handle a link listing response.
 
static void handle_link_list_response_end (void *cls, const struct GNUNET_MessageHeader *msg)
 Handle the end of a link listing.
 
struct GNUNET_TRANSPORT_LinkListContextGNUNET_TRANSPORT_links_list (const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_PeerIdentity *peer, int include_unconfirmed, GNUNET_TRANSPORT_LinkCallback cb, void *cb_cls)
 Ask the transport service for the virtual links it currently has.
 
void GNUNET_TRANSPORT_links_list_cancel (struct GNUNET_TRANSPORT_LinkListContext *llc)
 Cancel a request to list virtual links.
 

Function Documentation

◆ reconnect()

static void reconnect ( struct GNUNET_TRANSPORT_MonitorContext mc)
static

(re)connect our monitor to the transport service

Parameters
mchandle to reconnect

Definition at line 206 of file transport_api_monitor.c.

207{
209 { GNUNET_MQ_hd_var_size (monitor_data,
212 mc),
213 GNUNET_MQ_hd_fixed_size (monitor_end,
216 mc),
218
219 mc->mq =
220 GNUNET_CLIENT_connect (mc->cfg, "transport", handlers, &error_handler, mc);
221 if (NULL == mc->mq)
222 return;
224}
struct GNUNET_MQ_MessageHandlers handlers[]
Definition 003.c:1
static struct GNUNET_TESTBED_Controller * mc
Handle to the master controller.
struct GNUNET_MQ_Handle * GNUNET_CLIENT_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *service_name, const struct GNUNET_MQ_MessageHandler *handlers, GNUNET_MQ_ErrorHandler error_handler, void *error_handler_cls)
Create a message queue to connect to a GNUnet service.
Definition client.c:1060
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
#define GNUNET_MQ_hd_var_size(name, code, str, ctx)
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
#define GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_DATA
Message sent to indicate to a monitor about events.
#define GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_END
Message sent to indicate to a monitor that a one-shot iteration over events is done.
Message handler for a specific message type.
Header for all communications.
static void error_handler(void *cls, enum GNUNET_MQ_Error error)
Function called on MQ errors.
static void send_start_monitor(struct GNUNET_TRANSPORT_MonitorContext *mc)
Send message to the transport service about our monitoring desire.

References error_handler(), GNUNET_CLIENT_connect(), GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_DATA, GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_END, GNUNET_MQ_handler_end, GNUNET_MQ_hd_fixed_size, GNUNET_MQ_hd_var_size, handlers, mc, and send_start_monitor().

Here is the call graph for this function:

◆ send_start_monitor()

static void send_start_monitor ( struct GNUNET_TRANSPORT_MonitorContext mc)
static

Send message to the transport service about our monitoring desire.

Parameters
aiaddress to delete

Definition at line 86 of file transport_api_monitor.c.

87{
88 struct GNUNET_MQ_Envelope *env;
90
91 if (NULL == mc->mq)
92 return;
94 smm->one_shot = htonl ((uint32_t) mc->one_shot);
95 smm->peer = mc->peer;
96 GNUNET_MQ_send (mc->mq, env);
97}
struct GNUNET_MQ_Envelope * env
Definition 005.c:1
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition mq.c:337
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
#define GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_START
Message sent to indicate to the transport that a monitor wants to observe certain events.
Request to start monitoring.
Definition transport.h:710
uint32_t one_shot
GNUNET_YES for one-shot monitoring, GNUNET_NO for continuous monitoring.
Definition transport.h:719
struct GNUNET_PeerIdentity peer
Target identifier to monitor, all zeros for "all peers".
Definition transport.h:724

References env, GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_START, GNUNET_MQ_msg, GNUNET_MQ_send(), mc, GNUNET_TRANSPORT_MonitorStart::one_shot, and GNUNET_TRANSPORT_MonitorStart::peer.

Referenced by reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ disconnect()

static void disconnect ( struct GNUNET_TRANSPORT_MonitorContext mc)
static

Disconnect from the transport service.

Parameters
mcservice to disconnect from

Definition at line 106 of file transport_api_monitor.c.

107{
108 if (NULL == mc->mq)
109 return;
110 GNUNET_MQ_destroy (mc->mq);
111 mc->mq = NULL;
112}
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition mq.c:732

References GNUNET_MQ_destroy(), and mc.

Referenced by error_handler(), GNUNET_TRANSPORT_monitor_cancel(), and handle_monitor_end().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ error_handler()

static void error_handler ( void *  cls,
enum GNUNET_MQ_Error  error 
)
static

Function called on MQ errors.

Reconnects to the service.

Parameters
clsour struct GNUNET_TRANSPORT_MonitorContext *
errorwhat error happened?

Definition at line 122 of file transport_api_monitor.c.

123{
125
127 "MQ failure %d, reconnecting to transport service.\n",
128 error);
129 disconnect (mc);
130 /* TODO: maybe do this with exponential backoff/delay */
131 reconnect (mc);
132}
#define GNUNET_log(kind,...)
@ GNUNET_ERROR_TYPE_INFO
static void reconnect(void)
Adjust exponential back-off and reconnect to the service.
Opaque handle to the transport service for monitors.
static void disconnect(struct GNUNET_TRANSPORT_MonitorContext *mc)
Disconnect from the transport service.

References disconnect(), GNUNET_ERROR_TYPE_INFO, GNUNET_log, mc, and reconnect().

Referenced by reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_monitor_data()

static int check_monitor_data ( void *  cls,
const struct GNUNET_TRANSPORT_MonitorData md 
)
static

Transport service sends us information about what is going on.

Check if md is well-formed.

Parameters
clsour struct GNUNET_TRANSPORT_MonitorContext *
mdthe monitor data we got
Returns
GNUNET_OK if smt is well-formed

Definition at line 144 of file transport_api_monitor.c.

145{
146 (void) cls;
148 return GNUNET_OK;
149}
@ GNUNET_OK
#define GNUNET_MQ_check_zero_termination(m)
Insert code for a "check_" function that verifies that a given variable-length message received over ...

References GNUNET_MQ_check_zero_termination, and GNUNET_OK.

◆ handle_monitor_data()

static void handle_monitor_data ( void *  cls,
const struct GNUNET_TRANSPORT_MonitorData md 
)
static

Transport service sends us information about what is going on.

Parameters
clsour struct GNUNET_TRANSPORT_MonitorContext *
mdmonitor data

Definition at line 159 of file transport_api_monitor.c.

160{
163
164 mi.address = (const char *) &md[1];
165 mi.nt = ntohl (md->nt);
166 mi.cs = ntohl (md->cs);
167 mi.num_msg_pending = ntohl (md->num_msg_pending);
168 mi.num_bytes_pending = ntohl (md->num_bytes_pending);
169 mi.last_validation = GNUNET_TIME_absolute_ntoh (md->last_validation);
170 mi.valid_until = GNUNET_TIME_absolute_ntoh (md->valid_until);
171 mi.next_validation = GNUNET_TIME_absolute_ntoh (md->next_validation);
172 mi.rtt = GNUNET_TIME_relative_ntoh (md->rtt);
173 mc->cb (mc->cb_cls, &md->peer, &mi);
174}
struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a)
Convert relative time from network byte order.
Definition time.c:626
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition time.c:737
uint32_t num_msg_pending
Messages pending (in NBO).
Definition transport.h:768
struct GNUNET_PeerIdentity peer
Target identifier.
Definition transport.h:746
struct GNUNET_TIME_AbsoluteNBO valid_until
Definition transport.h:752
struct GNUNET_TIME_AbsoluteNBO last_validation
Definition transport.h:751
uint32_t num_bytes_pending
Bytes pending (in NBO).
Definition transport.h:773
struct GNUNET_TIME_AbsoluteNBO next_validation
Definition transport.h:753
uint32_t nt
Network type (an enum GNUNET_NetworkType in NBO).
Definition transport.h:741
struct GNUNET_TIME_RelativeNBO rtt
Current round-trip time estimate.
Definition transport.h:758
uint32_t cs
Connection status (in NBO).
Definition transport.h:763
Information about another peer's address.
const char * address
Address we have for the peer, human-readable, 0-terminated, in UTF-8.

References GNUNET_TRANSPORT_MonitorInformation::address, GNUNET_TRANSPORT_MonitorInformation::cs, GNUNET_TRANSPORT_MonitorData::cs, GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_relative_ntoh(), GNUNET_TRANSPORT_MonitorInformation::last_validation, GNUNET_TRANSPORT_MonitorData::last_validation, mc, GNUNET_TRANSPORT_MonitorInformation::next_validation, GNUNET_TRANSPORT_MonitorData::next_validation, GNUNET_TRANSPORT_MonitorInformation::nt, GNUNET_TRANSPORT_MonitorData::nt, GNUNET_TRANSPORT_MonitorInformation::num_bytes_pending, GNUNET_TRANSPORT_MonitorData::num_bytes_pending, GNUNET_TRANSPORT_MonitorInformation::num_msg_pending, GNUNET_TRANSPORT_MonitorData::num_msg_pending, GNUNET_TRANSPORT_MonitorData::peer, GNUNET_TRANSPORT_MonitorInformation::rtt, GNUNET_TRANSPORT_MonitorData::rtt, GNUNET_TRANSPORT_MonitorInformation::valid_until, and GNUNET_TRANSPORT_MonitorData::valid_until.

Here is the call graph for this function:

◆ handle_monitor_end()

static void handle_monitor_end ( void *  cls,
const struct GNUNET_MessageHeader me 
)
static

One shot was requested, and transport service is done.

Parameters
clsour struct GNUNET_TRANSPORT_MonitorContext *
meend message

Definition at line 184 of file transport_api_monitor.c.

185{
187
188 if (GNUNET_YES != mc->one_shot)
189 {
190 GNUNET_break (0);
191 disconnect (mc);
192 reconnect (mc);
193 return;
194 }
195 mc->cb (mc->cb_cls, NULL, NULL);
197}
void GNUNET_TRANSPORT_monitor_cancel(struct GNUNET_TRANSPORT_MonitorContext *mc)
Cancel request to monitor peers.
@ GNUNET_YES
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.

References disconnect(), GNUNET_break, GNUNET_TRANSPORT_monitor_cancel(), GNUNET_YES, mc, and reconnect().

Here is the call graph for this function:

◆ link_list_done()

static void link_list_done ( struct GNUNET_TRANSPORT_LinkListContext llc)
static

Tell the caller we are done and tear the operation down.

Parameters
llcoperation that finished

Definition at line 323 of file transport_api_monitor.c.

324{
326 void *cb_cls = llc->cb_cls;
327
329 cb (cb_cls, NULL, NULL);
330}
static struct GNUNET_TRANSPORT_LinkListContext * llc
Handle to the running listing, NULL once it completed.
void(* GNUNET_TRANSPORT_LinkCallback)(void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_TRANSPORT_LinkInformation *li)
Function called once per virtual link, and a final time with peer and li both NULL to signal the end ...
void GNUNET_TRANSPORT_links_list_cancel(struct GNUNET_TRANSPORT_LinkListContext *llc)
Cancel a request to list virtual links.
GNUNET_TRANSPORT_LinkCallback cb
Function to call with each link, and once with NULL at the end.

References GNUNET_TRANSPORT_LinkListContext::cb, GNUNET_TRANSPORT_LinkListContext::cb_cls, GNUNET_TRANSPORT_links_list_cancel(), and llc.

Referenced by handle_link_list_response_end(), and link_list_error_handler().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ link_list_error_handler()

static void link_list_error_handler ( void *  cls,
enum GNUNET_MQ_Error  error 
)
static

Function called on MQ errors.

There is nothing to retry – this is a one-shot request – so report the end of the listing.

Parameters
clsour struct GNUNET_TRANSPORT_LinkListContext *
errorwhat error happened?

Definition at line 341 of file transport_api_monitor.c.

342{
344
346 "Transport service disconnected while listing links (%d)\n",
347 (int) error);
349}
@ GNUNET_ERROR_TYPE_WARNING
Opaque handle for a GNUNET_TRANSPORT_links_list() operation.
static void link_list_done(struct GNUNET_TRANSPORT_LinkListContext *llc)
Tell the caller we are done and tear the operation down.

References GNUNET_ERROR_TYPE_WARNING, GNUNET_log, link_list_done(), and llc.

Referenced by GNUNET_TRANSPORT_links_list().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_link_list_response()

static enum GNUNET_GenericReturnValue check_link_list_response ( void *  cls,
const struct GNUNET_TRANSPORT_LinkListResponse resp 
)
static

Validate a link listing response.

Parameters
clsour struct GNUNET_TRANSPORT_LinkListContext *
respthe response to check
Returns
GNUNET_OK if resp is well-formed

Definition at line 360 of file transport_api_monitor.c.

363{
364 const char *ccs = (const char *) &resp[1];
365 uint16_t slen = ntohs (resp->header.size) - sizeof (*resp);
366
367 (void) cls;
368 if ((0 == slen) || ('\0' != ccs[slen - 1]))
369 {
370 GNUNET_break (0);
371 return GNUNET_SYSERR;
372 }
373 return GNUNET_OK;
374}
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format.
@ GNUNET_SYSERR
struct GNUNET_MessageHeader header
Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_LINK_LIST_RESPONSE.
Definition transport.h:809

References GNUNET_break, GNUNET_OK, GNUNET_SYSERR, GNUNET_TRANSPORT_LinkListResponse::header, and GNUNET_MessageHeader::size.

◆ handle_link_list_response()

static void handle_link_list_response ( void *  cls,
const struct GNUNET_TRANSPORT_LinkListResponse resp 
)
static

Handle a link listing response.

Parameters
clsour struct GNUNET_TRANSPORT_LinkListContext *
respthe response

Definition at line 384 of file transport_api_monitor.c.

387{
390
391 memset (&li, 0, sizeof (li));
392 li.communicators = (const char *) &resp[1];
393 li.route = (enum GNUNET_TRANSPORT_LinkRoute) ntohl (resp->route);
394 li.confirmed = (int) ntohl (resp->confirmed);
395 li.distance = ntohl (resp->distance);
396 li.num_queues = ntohl (resp->num_queues);
397 li.core_recv_window = (int) (int32_t) ntohl (resp->core_recv_window);
398 li.stalled = ntohl (resp->stalled);
399 li.pending = ntohl (resp->pending);
400 li.fc_retransmit_count = ntohl (resp->fc_retransmit_count);
401 li.available_fc_window_size = GNUNET_ntohll (resp->available_fc_window_size);
402 li.incoming_fc_window_size_ram
404 li.incoming_fc_window_size = GNUNET_ntohll (resp->incoming_fc_window_size);
405 li.incoming_fc_window_size_used
407 li.incoming_fc_window_size_loss
408 = (int64_t) GNUNET_ntohll ((uint64_t) resp->incoming_fc_window_size_loss);
409 li.outbound_fc_window_size = GNUNET_ntohll (resp->outbound_fc_window_size);
410 li.outbound_fc_window_size_used
412 li.last_fc_rtt = GNUNET_TIME_relative_ntoh (resp->last_fc_rtt);
413 li.other_rtt = GNUNET_TIME_relative_ntoh (resp->other_rtt);
414 li.last_fc_transmission
416 llc->cb (llc->cb_cls, &resp->target, &li);
417}
GNUNET_TRANSPORT_LinkRoute
How is a virtual link routed?
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
State of one virtual link, the abstraction CORE sits on top of.
uint32_t stalled
Number of messages whose flow control ACK we are withholding because core_recv_window is exhausted.
Definition transport.h:849
struct GNUNET_TIME_AbsoluteNBO last_fc_transmission
When did we last send a flow control message?
Definition transport.h:910
uint32_t fc_retransmit_count
Number of flow control retransmissions of the running task.
Definition transport.h:859
uint32_t num_queues
Number of queues to the neighbour, 0 if route is GNUNET_TRANSPORT_LINK_ROUTE_DV.
Definition transport.h:836
uint64_t incoming_fc_window_size_ram
RAM currently held for this link.
Definition transport.h:869
uint64_t incoming_fc_window_size_used
How much of incoming_fc_window_size the other peer used.
Definition transport.h:879
uint32_t pending
Number of messages queued for transmission to target.
Definition transport.h:854
int64_t incoming_fc_window_size_loss
Current estimate of the message loss rate for the sender.
Definition transport.h:885
struct GNUNET_TIME_RelativeNBO other_rtt
RTT over all DV paths, as calculated by the target.
Definition transport.h:905
uint64_t outbound_fc_window_size
Window the other peer granted us.
Definition transport.h:890
uint64_t outbound_fc_window_size_used
How much of outbound_fc_window_size we used.
Definition transport.h:895
uint64_t incoming_fc_window_size
Window we last granted the other peer.
Definition transport.h:874
uint32_t route
An ‘enum GNUNET_TRANSPORT_LinkRoute’ in NBO.
Definition transport.h:824
uint32_t distance
Distance of the DV path, 0 if route is GNUNET_TRANSPORT_LINK_ROUTE_DIRECT.
Definition transport.h:830
struct GNUNET_PeerIdentity target
Peer at the other end of the link.
Definition transport.h:814
struct GNUNET_TIME_RelativeNBO last_fc_rtt
RTT of the last flow control exchange.
Definition transport.h:900
uint32_t confirmed
GNUNET_YES if the link is confirmed, i.e.
Definition transport.h:819
int32_t core_recv_window
How many more messages we may hand to CORE before it must acknowledge them.
Definition transport.h:843
uint64_t available_fc_window_size
RAM we are willing to spend on this link.
Definition transport.h:864

References GNUNET_TRANSPORT_LinkInformation::available_fc_window_size, GNUNET_TRANSPORT_LinkListResponse::available_fc_window_size, GNUNET_TRANSPORT_LinkListContext::cb, GNUNET_TRANSPORT_LinkListContext::cb_cls, GNUNET_TRANSPORT_LinkInformation::communicators, GNUNET_TRANSPORT_LinkInformation::confirmed, GNUNET_TRANSPORT_LinkListResponse::confirmed, GNUNET_TRANSPORT_LinkInformation::core_recv_window, GNUNET_TRANSPORT_LinkListResponse::core_recv_window, GNUNET_TRANSPORT_LinkInformation::distance, GNUNET_TRANSPORT_LinkListResponse::distance, GNUNET_TRANSPORT_LinkInformation::fc_retransmit_count, GNUNET_TRANSPORT_LinkListResponse::fc_retransmit_count, GNUNET_ntohll(), GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_relative_ntoh(), GNUNET_TRANSPORT_LinkInformation::incoming_fc_window_size, GNUNET_TRANSPORT_LinkListResponse::incoming_fc_window_size, GNUNET_TRANSPORT_LinkInformation::incoming_fc_window_size_loss, GNUNET_TRANSPORT_LinkListResponse::incoming_fc_window_size_loss, GNUNET_TRANSPORT_LinkInformation::incoming_fc_window_size_ram, GNUNET_TRANSPORT_LinkListResponse::incoming_fc_window_size_ram, GNUNET_TRANSPORT_LinkInformation::incoming_fc_window_size_used, GNUNET_TRANSPORT_LinkListResponse::incoming_fc_window_size_used, GNUNET_TRANSPORT_LinkInformation::last_fc_rtt, GNUNET_TRANSPORT_LinkListResponse::last_fc_rtt, GNUNET_TRANSPORT_LinkInformation::last_fc_transmission, GNUNET_TRANSPORT_LinkListResponse::last_fc_transmission, llc, GNUNET_TRANSPORT_LinkInformation::num_queues, GNUNET_TRANSPORT_LinkListResponse::num_queues, GNUNET_TRANSPORT_LinkInformation::other_rtt, GNUNET_TRANSPORT_LinkListResponse::other_rtt, GNUNET_TRANSPORT_LinkInformation::outbound_fc_window_size, GNUNET_TRANSPORT_LinkListResponse::outbound_fc_window_size, GNUNET_TRANSPORT_LinkInformation::outbound_fc_window_size_used, GNUNET_TRANSPORT_LinkListResponse::outbound_fc_window_size_used, GNUNET_TRANSPORT_LinkInformation::pending, GNUNET_TRANSPORT_LinkListResponse::pending, GNUNET_TRANSPORT_LinkInformation::route, GNUNET_TRANSPORT_LinkListResponse::route, GNUNET_TRANSPORT_LinkInformation::stalled, GNUNET_TRANSPORT_LinkListResponse::stalled, and GNUNET_TRANSPORT_LinkListResponse::target.

Here is the call graph for this function:

◆ handle_link_list_response_end()

static void handle_link_list_response_end ( void *  cls,
const struct GNUNET_MessageHeader msg 
)
static

Handle the end of a link listing.

Parameters
clsour struct GNUNET_TRANSPORT_LinkListContext *
msgthe end message

Definition at line 427 of file transport_api_monitor.c.

429{
431
432 (void) msg;
434}
struct GNUNET_MessageHeader * msg
Definition 005.c:2

References link_list_done(), llc, and msg.

Here is the call graph for this function: