GNUnet  0.10.x
Data Structures | Macros | Functions
peerinfo_api.c File Reference

API to access peerinfo service. More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_protocols.h"
#include "peerinfo.h"
Include dependency graph for peerinfo_api.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_PEERINFO_IteratorContext
 Context for an iteration request. More...
 
struct  GNUNET_PEERINFO_Handle
 Handle to the peerinfo service. More...
 

Macros

#define LOG(kind, ...)   GNUNET_log_from(kind, "peerinfo-api", __VA_ARGS__)
 

Functions

static void reconnect (struct GNUNET_PEERINFO_Handle *h)
 Close the existing connection to PEERINFO and reconnect. More...
 
struct GNUNET_PEERINFO_HandleGNUNET_PEERINFO_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Connect to the peerinfo service. More...
 
void GNUNET_PEERINFO_disconnect (struct GNUNET_PEERINFO_Handle *h)
 Disconnect from the peerinfo service. More...
 
static void reconnect_task (void *cls)
 Task scheduled to re-try connecting to the peerinfo service. More...
 
static void do_reconnect (struct GNUNET_PEERINFO_Handle *h)
 We encountered an error, reconnect to the PEERINFO service. More...
 
static void mq_error_handler (void *cls, enum GNUNET_MQ_Error error)
 We got a disconnect after asking regex to do the announcement. More...
 
static int check_info (void *cls, const struct InfoMessage *im)
 Function called when we receive an info message. More...
 
static void handle_info (void *cls, const struct InfoMessage *im)
 Handle info message. More...
 
static void send_ic_request (struct GNUNET_PEERINFO_Handle *h)
 Send the next IC request at the head of the queue. More...
 
static void handle_end_iteration (void *cls, const struct GNUNET_MessageHeader *msg)
 Type of a function to call when we receive a message from the service. More...
 
struct GNUNET_PEERINFO_IteratorContextGNUNET_PEERINFO_iterate (struct GNUNET_PEERINFO_Handle *h, int include_friend_only, const struct GNUNET_PeerIdentity *peer, GNUNET_PEERINFO_Processor callback, void *callback_cls)
 Call a method for each known matching host. More...
 
void GNUNET_PEERINFO_iterate_cancel (struct GNUNET_PEERINFO_IteratorContext *ic)
 Cancel an iteration over peer information. More...
 
struct GNUNET_MQ_EnvelopeGNUNET_PEERINFO_add_peer (struct GNUNET_PEERINFO_Handle *h, const struct GNUNET_HELLO_Message *hello, GNUNET_SCHEDULER_TaskCallback cont, void *cont_cls)
 Add a host to the persistent list. More...
 

Detailed Description

API to access peerinfo service.

Author
Christian Grothoff

Definition in file peerinfo_api.c.

Macro Definition Documentation

◆ LOG

#define LOG (   kind,
  ... 
)    GNUNET_log_from(kind, "peerinfo-api", __VA_ARGS__)

Function Documentation

◆ reconnect()

static void reconnect ( struct GNUNET_PEERINFO_Handle h)
static

Close the existing connection to PEERINFO and reconnect.

Parameters
hhandle to the service

Definition at line 435 of file peerinfo_api.c.

References GNUNET_PEERINFO_Handle::cfg, GNUNET_CLIENT_connect(), GNUNET_MESSAGE_TYPE_PEERINFO_INFO, GNUNET_MESSAGE_TYPE_PEERINFO_INFO_END, GNUNET_MQ_destroy(), GNUNET_MQ_handler_end, GNUNET_MQ_hd_fixed_size, GNUNET_MQ_hd_var_size, GNUNET_SCHEDULER_cancel(), GNUNET_PEERINFO_Handle::ic_head, GNUNET_PEERINFO_Handle::mq, mq_error_handler(), GNUNET_PEERINFO_Handle::r_task, and send_ic_request().

Referenced by GNUNET_PEERINFO_connect(), handle_end_iteration(), and reconnect_task().

436 {
440  struct InfoMessage,
441  h),
442  GNUNET_MQ_hd_fixed_size(end_iteration,
444  struct GNUNET_MessageHeader,
445  h),
447  };
448 
449  if (NULL != h->r_task)
450  {
452  h->r_task = NULL;
453  }
454  if (NULL != h->mq)
455  {
456  GNUNET_MQ_destroy(h->mq);
457  h->mq = NULL;
458  }
459  h->mq = GNUNET_CLIENT_connect(h->cfg,
460  "peerinfo",
461  handlers,
463  h);
464  if (NULL != h->ic_head)
465  send_ic_request(h);
466 }
struct GNUNET_MQ_Handle * mq
Connection to the service.
Definition: peerinfo_api.c:92
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:900
static void send_ic_request(struct GNUNET_PEERINFO_Handle *h)
Send the next IC request at the head of the queue.
Definition: peerinfo_api.c:350
Message used to inform the client about a particular peer; this message is optionally followed by a H...
Definition: peerinfo.h:100
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: peerinfo_api.c:87
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
#define GNUNET_MQ_hd_var_size(name, code, str, ctx)
static void mq_error_handler(void *cls, enum GNUNET_MQ_Error error)
We got a disconnect after asking regex to do the announcement.
Definition: peerinfo_api.c:231
Message handler for a specific message type.
struct GNUNET_SCHEDULER_Task * r_task
ID for a reconnect task.
Definition: peerinfo_api.c:107
#define GNUNET_MESSAGE_TYPE_PEERINFO_INFO
Information about one of the peers.
Header for all communications.
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:821
#define GNUNET_MESSAGE_TYPE_PEERINFO_INFO_END
End of information about other peers.
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:956
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reconnect_task()

static void reconnect_task ( void *  cls)
static

Task scheduled to re-try connecting to the peerinfo service.

Parameters
clsthe struct GNUNET_PEERINFO_Handle *

Definition at line 185 of file peerinfo_api.c.

References GNUNET_PEERINFO_IteratorContext::h, GNUNET_PEERINFO_Handle::r_task, and reconnect().

Referenced by do_reconnect().

186 {
187  struct GNUNET_PEERINFO_Handle *h = cls;
188 
189  h->r_task = NULL;
190  reconnect(h);
191 }
Handle to the peerinfo service.
Definition: peerinfo_api.c:83
static void reconnect(struct GNUNET_PEERINFO_Handle *h)
Close the existing connection to PEERINFO and reconnect.
Definition: peerinfo_api.c:435
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
struct GNUNET_SCHEDULER_Task * r_task
ID for a reconnect task.
Definition: peerinfo_api.c:107
Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_reconnect()

static void do_reconnect ( struct GNUNET_PEERINFO_Handle h)
static

We encountered an error, reconnect to the PEERINFO service.

Parameters
hhandle to reconnect

Definition at line 200 of file peerinfo_api.c.

References _, GNUNET_PEERINFO_IteratorContext::callback, GNUNET_PEERINFO_IteratorContext::callback_cls, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_MQ_destroy(), GNUNET_SCHEDULER_add_now(), GNUNET_PEERINFO_Handle::ic_head, GNUNET_PEERINFO_Handle::ic_tail, GNUNET_PEERINFO_Handle::mq, GNUNET_PEERINFO_Handle::r_task, and reconnect_task().

Referenced by mq_error_handler().

201 {
203 
204  GNUNET_MQ_destroy(h->mq);
205  h->mq = NULL;
206  if (NULL != ic)
207  {
209  h->ic_tail,
210  ic);
211  if (NULL != ic->callback)
212  ic->callback(ic->callback_cls,
213  NULL,
214  NULL,
215  _("Failed to receive response from `PEERINFO' service."));
216  GNUNET_free(ic);
217  }
219  h);
220 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_MQ_Handle * mq
Connection to the service.
Definition: peerinfo_api.c:92
struct GNUNET_PEERINFO_IteratorContext * ic_tail
Tail of iterator DLL.
Definition: peerinfo_api.c:102
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
Context for an iteration request.
Definition: peerinfo_api.c:37
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1264
void * callback_cls
Closure for callback.
Definition: peerinfo_api.c:61
static void reconnect_task(void *cls)
Task scheduled to re-try connecting to the peerinfo service.
Definition: peerinfo_api.c:185
struct GNUNET_SCHEDULER_Task * r_task
ID for a reconnect task.
Definition: peerinfo_api.c:107
GNUNET_PEERINFO_Processor callback
Function to call with the results.
Definition: peerinfo_api.c:56
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:821
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mq_error_handler()

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

We got a disconnect after asking regex to do the announcement.

Retry.

Parameters
clsthe struct GNUNET_PEERINFO_Handle to retry
errorerror code

Definition at line 231 of file peerinfo_api.c.

References do_reconnect(), and GNUNET_PEERINFO_IteratorContext::h.

Referenced by reconnect().

233 {
234  struct GNUNET_PEERINFO_Handle *h = cls;
235 
236  do_reconnect(h);
237 }
Handle to the peerinfo service.
Definition: peerinfo_api.c:83
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
static void do_reconnect(struct GNUNET_PEERINFO_Handle *h)
We encountered an error, reconnect to the PEERINFO service.
Definition: peerinfo_api.c:200
Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_info()

static int check_info ( void *  cls,
const struct InfoMessage im 
)
static

Function called when we receive an info message.

Check it is well-formed.

Parameters
clsclosure
immessage received
Returns
GNUNET_OK if the message is OK

Definition at line 250 of file peerinfo_api.c.

References GNUNET_break, GNUNET_ERROR_TYPE_ERROR, GNUNET_HELLO_get_id(), GNUNET_HELLO_size(), GNUNET_i2s(), GNUNET_memcmp, GNUNET_OK, GNUNET_SYSERR, GNUNET_YES, GNUNET_PEERINFO_IteratorContext::h, GNUNET_PEERINFO_IteratorContext::have_peer, InfoMessage::header, GNUNET_PEERINFO_Handle::ic_head, LOG, GNUNET_PEERINFO_IteratorContext::peer, InfoMessage::peer, InfoMessage::reserved, and GNUNET_MessageHeader::size.

252 {
253  struct GNUNET_PEERINFO_Handle *h = cls;
255  uint16_t ms = ntohs(im->header.size) - sizeof(*im);
256 
257  if (0 != ntohl(im->reserved))
258  {
259  GNUNET_break(0);
260  return GNUNET_SYSERR;
261  }
262  if (NULL == ic)
263  {
264  /* didn't expect a response, bad */
265  GNUNET_break(0);
266  return GNUNET_SYSERR;
267  }
268  if ((GNUNET_YES == ic->have_peer) &&
269  (0 != GNUNET_memcmp(&ic->peer,
270  &im->peer)))
271  {
272  /* bogus message (from a different iteration call?); out of sequence! */
274  "Received HELLO for peer `%s', expected peer `%s'\n",
275  GNUNET_i2s(&im->peer),
276  GNUNET_i2s(&ic->peer));
277  GNUNET_break(0);
278  return GNUNET_SYSERR;
279  }
280  if (ms > sizeof(struct GNUNET_MessageHeader))
281  {
282  const struct GNUNET_HELLO_Message *hello;
283  struct GNUNET_PeerIdentity id;
284 
285  hello = (const struct GNUNET_HELLO_Message *)&im[1];
286  if (ms != GNUNET_HELLO_size(hello))
287  {
288  /* malformed message */
289  GNUNET_break(0);
290  return GNUNET_SYSERR;
291  }
292  if (GNUNET_OK !=
293  GNUNET_HELLO_get_id(hello,
294  &id))
295  {
296  /* malformed message */
297  GNUNET_break(0);
298  return GNUNET_SYSERR;
299  }
300  if (0 != GNUNET_memcmp(&im->peer,
301  &id))
302  {
303  /* malformed message */
304  GNUNET_break(0);
305  return GNUNET_SYSERR;
306  }
307  }
308  else if (0 != ms)
309  {
310  /* malformed message */
311  GNUNET_break(0);
312  return GNUNET_SYSERR;
313  }
314  return GNUNET_OK;
315 }
int GNUNET_HELLO_get_id(const struct GNUNET_HELLO_Message *hello, struct GNUNET_PeerIdentity *peer)
Get the peer identity from a HELLO message.
Definition: hello.c:662
Handle to the peerinfo service.
Definition: peerinfo_api.c:83
A HELLO message is used to exchange information about transports with other peers.
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
static struct GNUNET_IDENTITY_Handle * id
Handle to identity service.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#define LOG(kind,...)
Definition: peerinfo_api.c:31
Context for an iteration request.
Definition: peerinfo_api.c:37
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
struct GNUNET_PeerIdentity peer
About which peer are we talking here?
Definition: peerinfo.h:114
uint32_t reserved
Always zero.
Definition: peerinfo.h:109
struct GNUNET_MessageHeader header
Type will be GNUNET_MESSAGE_TYPE_PEERINFO_INFO.
Definition: peerinfo.h:104
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
The identity of the host (wraps the signing key of the peer).
uint16_t GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello)
Return the size of the given HELLO message.
Definition: hello.c:643
Header for all communications.
struct GNUNET_PeerIdentity peer
Peer we are interested in (only valid if iteration was restricted to one peer).
Definition: peerinfo_api.c:66
#define GNUNET_YES
Definition: gnunet_common.h:77
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
Here is the call graph for this function:

◆ handle_info()

static void handle_info ( void *  cls,
const struct InfoMessage im 
)
static

Handle info message.

Parameters
clsclosure
immessage received

Definition at line 325 of file peerinfo_api.c.

References GNUNET_PEERINFO_IteratorContext::callback, GNUNET_PEERINFO_IteratorContext::callback_cls, GNUNET_PEERINFO_IteratorContext::h, InfoMessage::header, GNUNET_PEERINFO_Handle::ic_head, InfoMessage::peer, and GNUNET_MessageHeader::size.

327 {
328  struct GNUNET_PEERINFO_Handle *h = cls;
330  const struct GNUNET_HELLO_Message *hello = NULL;
331  uint16_t ms;
332 
333  ms = ntohs(im->header.size);
334  if (ms > sizeof(struct InfoMessage))
335  hello = (const struct GNUNET_HELLO_Message *)&im[1];
336  if (NULL != ic->callback)
337  ic->callback(ic->callback_cls,
338  &im->peer,
339  hello,
340  NULL);
341 }
Handle to the peerinfo service.
Definition: peerinfo_api.c:83
A HELLO message is used to exchange information about transports with other peers.
Message used to inform the client about a particular peer; this message is optionally followed by a H...
Definition: peerinfo.h:100
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
Context for an iteration request.
Definition: peerinfo_api.c:37
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
struct GNUNET_PeerIdentity peer
About which peer are we talking here?
Definition: peerinfo.h:114
void * callback_cls
Closure for callback.
Definition: peerinfo_api.c:61
struct GNUNET_MessageHeader header
Type will be GNUNET_MESSAGE_TYPE_PEERINFO_INFO.
Definition: peerinfo.h:104
GNUNET_PEERINFO_Processor callback
Function to call with the results.
Definition: peerinfo_api.c:56

◆ send_ic_request()

static void send_ic_request ( struct GNUNET_PEERINFO_Handle h)
static

Send the next IC request at the head of the queue.

Parameters
hhandle

Definition at line 350 of file peerinfo_api.c.

References env, GNUNET_break, GNUNET_ERROR_TYPE_DEBUG, GNUNET_i2s(), GNUNET_MESSAGE_TYPE_PEERINFO_GET, GNUNET_MESSAGE_TYPE_PEERINFO_GET_ALL, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_NO, GNUNET_PEERINFO_IteratorContext::have_peer, GNUNET_PEERINFO_Handle::ic_head, ListPeerMessage::include_friend_only, ListAllPeersMessage::include_friend_only, GNUNET_PEERINFO_IteratorContext::include_friend_only, LOG, GNUNET_PEERINFO_Handle::mq, ListPeerMessage::peer, and GNUNET_PEERINFO_IteratorContext::peer.

Referenced by GNUNET_PEERINFO_iterate(), handle_end_iteration(), and reconnect().

351 {
353  struct GNUNET_MQ_Envelope *env;
354  struct ListAllPeersMessage *lapm;
355  struct ListPeerMessage *lpm;
356 
357  if (NULL == ic)
358  {
359  GNUNET_break(0);
360  return;
361  }
362  if (NULL == h->mq)
363  {
364  GNUNET_break(0);
365  return;
366  }
367  if (GNUNET_NO == ic->have_peer)
368  {
370  "Requesting list of peers from PEERINFO service\n");
371  env = GNUNET_MQ_msg(lapm,
373  lapm->include_friend_only = htonl(ic->include_friend_only);
374  }
375  else
376  {
378  "Requesting information on peer `%s' from PEERINFO service\n",
379  GNUNET_i2s(&ic->peer));
380  env = GNUNET_MQ_msg(lpm,
382  lpm->include_friend_only = htonl(ic->include_friend_only);
383  lpm->peer = ic->peer;
384  }
385  GNUNET_MQ_send(h->mq,
386  env);
387 }
uint32_t include_friend_only
Include friend only HELLOs and peers in callbacks.
Definition: peerinfo.h:73
#define GNUNET_MESSAGE_TYPE_PEERINFO_GET
Request update and listing of a peer.
struct GNUNET_MQ_Handle * mq
Connection to the service.
Definition: peerinfo_api.c:92
uint32_t include_friend_only
Include friend only HELLOs and peers in callbacks.
Definition: peerinfo.h:51
struct GNUNET_PeerIdentity peer
Restrict to peers with this identity (optional field, check header.size!).
Definition: peerinfo.h:57
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
#define GNUNET_NO
Definition: gnunet_common.h:78
#define LOG(kind,...)
Definition: peerinfo_api.c:31
Context for an iteration request.
Definition: peerinfo_api.c:37
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
Message requesting a listing of all peers, restricted to the specified peer identity.
Definition: peerinfo.h:64
int include_friend_only
Only include friends in reply?
Definition: peerinfo_api.c:76
Message requesting a listing of peers, restricted to the specified peer identity. ...
Definition: peerinfo.h:42
#define GNUNET_MESSAGE_TYPE_PEERINFO_GET_ALL
Request update and listing of all peers.
struct GNUNET_PeerIdentity peer
Peer we are interested in (only valid if iteration was restricted to one peer).
Definition: peerinfo_api.c:66
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:351
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_end_iteration()

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

Type of a function to call when we receive a message from the service.

Call the iterator with the result and (if applicable) continue to receive more messages or trigger processing the next event (if applicable).

Parameters
clsclosure
msgmessage received, NULL on timeout or fatal error

Definition at line 400 of file peerinfo_api.c.

References GNUNET_PEERINFO_IteratorContext::callback, GNUNET_PEERINFO_IteratorContext::callback_cls, GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_PEERINFO_IteratorContext::h, GNUNET_PEERINFO_Handle::ic_head, GNUNET_PEERINFO_Handle::ic_tail, LOG, reconnect(), and send_ic_request().

402 {
403  struct GNUNET_PEERINFO_Handle *h = cls;
405 
406  if (NULL == ic)
407  {
408  /* didn't expect a response, reconnect */
409  GNUNET_break(0);
410  reconnect(h);
411  return;
412  }
414  "Received end of list of peers from PEERINFO service\n");
416  h->ic_tail,
417  ic);
418  if (NULL != h->ic_head)
419  send_ic_request(h);
420  if (NULL != ic->callback)
421  ic->callback(ic->callback_cls,
422  NULL,
423  NULL,
424  NULL);
425  GNUNET_free(ic);
426 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the peerinfo service.
Definition: peerinfo_api.c:83
static void reconnect(struct GNUNET_PEERINFO_Handle *h)
Close the existing connection to PEERINFO and reconnect.
Definition: peerinfo_api.c:435
static void send_ic_request(struct GNUNET_PEERINFO_Handle *h)
Send the next IC request at the head of the queue.
Definition: peerinfo_api.c:350
struct GNUNET_PEERINFO_IteratorContext * ic_tail
Tail of iterator DLL.
Definition: peerinfo_api.c:102
struct GNUNET_PEERINFO_IteratorContext * ic_head
Head of iterator DLL.
Definition: peerinfo_api.c:97
#define LOG(kind,...)
Definition: peerinfo_api.c:31
Context for an iteration request.
Definition: peerinfo_api.c:37
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
void * callback_cls
Closure for callback.
Definition: peerinfo_api.c:61
GNUNET_PEERINFO_Processor callback
Function to call with the results.
Definition: peerinfo_api.c:56
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function: