GNUnet  0.11.x
Macros | Functions | Variables
gnunet-service-cadet_hello.c File Reference

spread knowledge about how to contact us (get HELLO from peerinfo), and remember HELLOs of other peers we have an interest in More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_statistics_service.h"
#include "gnunet_peerinfo_service.h"
#include "cadet_protocol.h"
#include "gnunet-service-cadet.h"
#include "gnunet-service-cadet_dht.h"
#include "gnunet-service-cadet_hello.h"
#include "gnunet-service-cadet_peer.h"
Include dependency graph for gnunet-service-cadet_hello.c:

Go to the source code of this file.

Macros

#define LOG(level, ...)   GNUNET_log_from (level, "cadet-hll", __VA_ARGS__)
 

Functions

static void got_hello (void *cls, const struct GNUNET_PeerIdentity *id, const struct GNUNET_HELLO_Message *hello, const char *err_msg)
 Process each hello message received from peerinfo. More...
 
void GCH_init (const struct GNUNET_CONFIGURATION_Handle *c)
 Initialize the hello subsystem. More...
 
void GCH_shutdown ()
 Shut down the hello subsystem. More...
 
const struct GNUNET_HELLO_MessageGCH_get_mine (void)
 Get own hello message. More...
 

Variables

static struct GNUNET_HELLO_Messagemine
 Hello message of local peer. More...
 
static struct GNUNET_PEERINFO_Handlepeerinfo
 Handle to peerinfo service. More...
 
static struct GNUNET_PEERINFO_NotifyContextnc
 Iterator context. More...
 

Detailed Description

spread knowledge about how to contact us (get HELLO from peerinfo), and remember HELLOs of other peers we have an interest in

Author
Bartlomiej Polot
Christian Grothoff

Definition in file gnunet-service-cadet_hello.c.

Macro Definition Documentation

◆ LOG

#define LOG (   level,
  ... 
)    GNUNET_log_from (level, "cadet-hll", __VA_ARGS__)

Definition at line 38 of file gnunet-service-cadet_hello.c.

Function Documentation

◆ got_hello()

static void got_hello ( void *  cls,
const struct GNUNET_PeerIdentity id,
const struct GNUNET_HELLO_Message hello,
const char *  err_msg 
)
static

Process each hello message received from peerinfo.

Parameters
clsClosure (unused).
peerIdentity of the peer.
helloHello of the peer.
err_msgError message.

Definition at line 65 of file gnunet-service-cadet_hello.c.

69 {
70  struct CadetPeer *peer;
71 
72  if ((NULL == id) ||
73  (NULL == hello))
74  return;
75  if (0 == GNUNET_memcmp (id,
76  &my_full_id))
77  {
78  GNUNET_free (mine);
79  mine = (struct GNUNET_HELLO_Message *) GNUNET_copy_message (&hello->header);
81  return;
82  }
83 
85  "Hello for %s (%d bytes), expires on %s\n",
86  GNUNET_i2s (id),
87  GNUNET_HELLO_size (hello),
90  peer = GCP_get (id,
91  GNUNET_YES);
93  hello);
94 }
struct GNUNET_PeerIdentity my_full_id
Local peer own ID.
void GCD_hello_update()
Function called by the HELLO subsystem whenever OUR hello changes.
static struct GNUNET_HELLO_Message * mine
Hello message of local peer.
#define LOG(level,...)
void GCP_set_hello(struct CadetPeer *cp, const struct GNUNET_HELLO_Message *hello)
We got a HELLO for a peer, remember it, and possibly trigger adequate actions (like trying to connect...
struct CadetPeer * GCP_get(const struct GNUNET_PeerIdentity *peer_id, int create)
Retrieve the CadetPeer structure associated with the peer.
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
@ GNUNET_YES
Definition: gnunet_common.h:97
uint16_t GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello)
Return the size of the given HELLO message.
Definition: hello.c:652
struct GNUNET_TIME_Absolute GNUNET_HELLO_get_last_expiration(const struct GNUNET_HELLO_Message *msg)
When does the last address in the given HELLO expire?
Definition: hello.c:892
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_DEBUG
struct GNUNET_MessageHeader * GNUNET_copy_message(const struct GNUNET_MessageHeader *msg)
Create a copy of the given message.
#define GNUNET_free(ptr)
Wrapper around free.
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:604
Peer description.
struct GNUNET_HELLO_Message * hello
Hello message of the peer.
A HELLO message is used to exchange information about transports with other peers.
struct GNUNET_MessageHeader header
Type will be GNUNET_MESSAGE_TYPE_HELLO.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.

References GCD_hello_update(), GCP_get(), GCP_set_hello(), GNUNET_copy_message(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_HELLO_get_last_expiration(), GNUNET_HELLO_size(), GNUNET_i2s(), GNUNET_memcmp, GNUNET_STRINGS_absolute_time_to_string(), GNUNET_YES, GNUNET_HELLO_Message::header, CadetPeer::hello, LOG, mine, my_full_id, and peer.

Referenced by GCH_init().

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

◆ GCH_init()

void GCH_init ( const struct GNUNET_CONFIGURATION_Handle c)

Initialize the hello subsystem.

Parameters
cConfiguration.

Definition at line 103 of file gnunet-service-cadet_hello.c.

104 {
105  GNUNET_assert (NULL == nc);
108  GNUNET_NO,
109  &got_hello,
110  NULL);
111 }
static void got_hello(void *cls, const struct GNUNET_PeerIdentity *id, const struct GNUNET_HELLO_Message *hello, const char *err_msg)
Process each hello message received from peerinfo.
static struct GNUNET_PEERINFO_Handle * peerinfo
Handle to peerinfo service.
static struct GNUNET_PEERINFO_NotifyContext * nc
Iterator context.
@ GNUNET_NO
Definition: gnunet_common.h:94
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_PEERINFO_NotifyContext * GNUNET_PEERINFO_notify(const struct GNUNET_CONFIGURATION_Handle *cfg, int include_friend_only, GNUNET_PEERINFO_Processor callback, void *callback_cls)
Call a method whenever our known information about peers changes.
struct GNUNET_PEERINFO_Handle * GNUNET_PEERINFO_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the peerinfo service.
Definition: peerinfo_api.c:130

References GNUNET_assert, GNUNET_NO, GNUNET_PEERINFO_connect(), GNUNET_PEERINFO_notify(), got_hello(), nc, and peerinfo.

Referenced by run().

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

◆ GCH_shutdown()

void GCH_shutdown ( void  )

Shut down the hello subsystem.

Definition at line 118 of file gnunet-service-cadet_hello.c.

119 {
120  if (NULL != nc)
121  {
123  nc = NULL;
124  }
125  if (NULL != peerinfo)
126  {
128  peerinfo = NULL;
129  }
130  if (NULL != mine)
131  {
132  GNUNET_free (mine);
133  mine = NULL;
134  }
135 }
void GNUNET_PEERINFO_notify_cancel(struct GNUNET_PEERINFO_NotifyContext *nc)
Stop notifying about changes.
void GNUNET_PEERINFO_disconnect(struct GNUNET_PEERINFO_Handle *h)
Disconnect from the peerinfo service.
Definition: peerinfo_api.c:156

References GNUNET_free, GNUNET_PEERINFO_disconnect(), GNUNET_PEERINFO_notify_cancel(), mine, nc, and peerinfo.

Referenced by shutdown_rest().

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

◆ GCH_get_mine()

const struct GNUNET_HELLO_Message* GCH_get_mine ( void  )

Get own hello message.

Returns
Own hello message.

Definition at line 144 of file gnunet-service-cadet_hello.c.

145 {
146  return mine;
147 }

References mine.

Referenced by announce_id().

Here is the caller graph for this function:

Variable Documentation

◆ mine

struct GNUNET_HELLO_Message* mine
static

Hello message of local peer.

Definition at line 43 of file gnunet-service-cadet_hello.c.

Referenced by GCH_get_mine(), GCH_shutdown(), and got_hello().

◆ peerinfo

struct GNUNET_PEERINFO_Handle* peerinfo
static

Handle to peerinfo service.

Definition at line 48 of file gnunet-service-cadet_hello.c.

Referenced by GCH_init(), and GCH_shutdown().

◆ nc

struct GNUNET_PEERINFO_NotifyContext* nc
static