GNUnet 0.27.0
 
Loading...
Searching...
No Matches
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 dependency graph for gnunet-service-cadet_hello.c:

Go to the source code of this file.

Data Structures

struct  PilsRequest
 DLL. More...
 

Macros

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

Functions

static void sign_hello_cb (void *cls, const struct GNUNET_HELLO_Parser *parser, const struct GNUNET_HashCode *hash)
 
static void got_hello (void *cls, const struct GNUNET_PEERSTORE_Record *record, const char *err_msg)
 Process each hello message received from peerinfo.
 
static void error_cb (void *cls)
 
static void sync_cb (void *cls)
 
void GCH_init (const struct GNUNET_CONFIGURATION_Handle *c)
 Initialize the hello subsystem.
 
void GCH_shutdown ()
 Shut down the hello subsystem.
 
struct GNUNET_MessageHeaderGCH_get_mine ()
 Get own hello message.
 

Variables

static struct PilsRequestpils_requests_head
 PILS Operation DLL.
 
static struct PilsRequestpils_requests_tail
 PILS Operation DLL.
 
static struct GNUNET_MessageHeadermine
 Hello message of local peer.
 
static struct GNUNET_PEERSTORE_Handlepeerstore
 Handle to the PEERSTORE service.
 
static struct GNUNET_PEERSTORE_Monitorpeerstore_notify
 Our peerstore notification context.
 

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

◆ sign_hello_cb()

static void sign_hello_cb ( void *  cls,
const struct GNUNET_HELLO_Parser parser,
const struct GNUNET_HashCode hash 
)
static

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

98{
99
103 "Received new PID information with address hash `%s'\n",
104 GNUNET_h2s (hash));
106}
void GCD_hello_update()
Function called by the HELLO subsystem whenever OUR hello changes.
static struct GNUNET_MessageHeader * mine
Hello message of local peer.
#define LOG(level,...)
struct GNUNET_MessageHeader * GNUNET_HELLO_parser_to_dht_hello_msg(const struct GNUNET_HELLO_Parser *parser)
Generate DHT HELLO message from a parser.
Definition hello-uri.c:1208
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_INFO
#define GNUNET_free(ptr)
Wrapper around free.

References GCD_hello_update(), GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_h2s(), GNUNET_HELLO_parser_to_dht_hello_msg(), LOG, and mine.

Referenced by GCH_init().

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

◆ got_hello()

static void got_hello ( void *  cls,
const struct GNUNET_PEERSTORE_Record record,
const char *  err_msg 
)
static

Process each hello message received from peerinfo.

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

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

121{
122 const struct GNUNET_PeerIdentity *my_identity;
123 struct CadetPeer *peer;
124 struct GNUNET_MessageHeader *hello;
125
127 if (! my_identity)
128 return;
129
130 if (NULL == record->value)
131 {
133 return;
134 }
135 hello = record->value;
136 if (0 == GNUNET_memcmp (&record->peer, my_identity))
137 {
139 "Ignoring own HELLOs\n");
141 return;
142 }
143
145 "Hello for %s (%d bytes), expires on %s\n",
146 GNUNET_i2s (&record->peer),
147 ntohs (hello->size),
150 peer = GCP_get (&record->peer,
151 GNUNET_YES);
152 GCP_set_hello (peer,
153 hello);
155}
static void record(void *cls, size_t data_size, const void *data)
Process recorded audio data.
static struct GNUNET_PILS_Handle * pils
Handle to PILS.
Definition gnunet-pils.c:44
static struct GNUNET_PEERSTORE_Monitor * peerstore_notify
Our peerstore notification context.
struct CadetPeer * GCP_get(const struct GNUNET_PeerIdentity *peer_id, int create)
Retrieve the CadetPeer structure associated with the peer.
void GCP_set_hello(struct CadetPeer *cp, const struct GNUNET_MessageHeader *hello)
We got a HELLO for a cp, remember it, and possibly trigger adequate actions (like trying to connect).
static struct GNUNET_PeerIdentity my_identity
Identity of this peer.
const struct GNUNET_PeerIdentity * GNUNET_PILS_get_identity(const struct GNUNET_PILS_Handle *handle)
Return the current peer identity of a given handle.
Definition pils_api.c:727
struct GNUNET_TIME_Absolute GNUNET_HELLO_get_expiration_time_from_msg(const struct GNUNET_MessageHeader *msg)
Get the expiration time for this HELLO.
Definition hello-uri.c:633
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format.
@ GNUNET_YES
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_DEBUG
void GNUNET_PEERSTORE_monitor_next(struct GNUNET_PEERSTORE_Monitor *zm, uint64_t limit)
Calls the monitor processor specified in GNUNET_PEERSTORE_monitor_start for the next record(s).
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition strings.c:665
Struct containing all information regarding a given peer.
Header for all communications.
The identity of the host (wraps the signing key of the peer).

References GCP_get(), GCP_set_hello(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_HELLO_get_expiration_time_from_msg(), GNUNET_i2s(), GNUNET_memcmp, GNUNET_PEERSTORE_monitor_next(), GNUNET_PILS_get_identity(), GNUNET_STRINGS_absolute_time_to_string(), GNUNET_YES, LOG, my_identity, peerstore_notify, pils, record(), and GNUNET_MessageHeader::size.

Referenced by GCH_init().

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

◆ error_cb()

static void error_cb ( void *  cls)
static

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

160{
162 "Error in PEERSTORE monitoring\n");
163}
#define GNUNET_log(kind,...)
@ GNUNET_ERROR_TYPE_WARNING

References GNUNET_ERROR_TYPE_WARNING, and GNUNET_log.

Referenced by GCH_init().

Here is the caller graph for this function:

◆ sync_cb()

static void sync_cb ( void *  cls)
static

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

168{
170 "Done with initial PEERSTORE iteration during monitoring\n");
171}

References GNUNET_ERROR_TYPE_WARNING, and GNUNET_log.

Referenced by GCH_init().

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 180 of file gnunet-service-cadet_hello.c.

181{
187 "peerstore",
188 NULL,
190 &error_cb,
191 NULL,
192 &sync_cb,
193 NULL,
194 &got_hello,
195 NULL);
198 NULL);
199}
static void sync_cb(void *cls)
static void got_hello(void *cls, const struct GNUNET_PEERSTORE_Record *record, const char *err_msg)
Process each hello message received from peerinfo.
static struct GNUNET_PEERSTORE_Handle * peerstore
Handle to the PEERSTORE service.
static void sign_hello_cb(void *cls, const struct GNUNET_HELLO_Parser *parser, const struct GNUNET_HashCode *hash)
static void error_cb(void *cls)
struct GNUNET_PILS_Handle * GNUNET_PILS_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_PILS_PidChangeCallback pid_change_cb, void *cls)
Connect to the PILS service.
Definition pils_api.c:465
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_PEERSTORE_Monitor * GNUNET_PEERSTORE_monitor_start(const struct GNUNET_CONFIGURATION_Handle *cfg, int iterate_first, const char *sub_system, const struct GNUNET_PeerIdentity *peer, const char *key, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_SCHEDULER_TaskCallback sync_cb, void *sync_cb_cls, GNUNET_PEERSTORE_Processor callback, void *callback_cls)
Request watching a given key The monitoring can be filtered to contain only records matching peer and...
struct GNUNET_PEERSTORE_Handle * GNUNET_PEERSTORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the PEERSTORE service.
#define GNUNET_PEERSTORE_HELLO_KEY
Key used for storing HELLO in the peerstore.

References error_cb(), GNUNET_assert, GNUNET_PEERSTORE_connect(), GNUNET_PEERSTORE_HELLO_KEY, GNUNET_PEERSTORE_monitor_start(), GNUNET_PILS_connect(), GNUNET_YES, got_hello(), peerstore, peerstore_notify, pils, sign_hello_cb(), and sync_cb().

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 206 of file gnunet-service-cadet_hello.c.

207{
208 struct PilsRequest *pr;
209
210 if (NULL != peerstore_notify)
211 {
213 peerstore_notify = NULL;
214 }
215 if (NULL != peerstore)
216 {
218 peerstore = NULL;
219 }
220 while (NULL != (pr = pils_requests_head))
221 {
224 pr);
225 if (NULL != pr->op)
227 if (NULL != pr->builder)
229 GNUNET_free (pr);
230 }
231 if (NULL != pils)
232 {
234 pils = NULL;
235 }
236 if (NULL != mine)
237 {
239 mine = NULL;
240 }
241}
static struct PilsRequest * pils_requests_head
PILS Operation DLL.
static struct PilsRequest * pils_requests_tail
PILS Operation DLL.
void GNUNET_PILS_disconnect(struct GNUNET_PILS_Handle *handle)
Disconnect from the PILS service.
Definition pils_api.c:488
void GNUNET_PILS_cancel(struct GNUNET_PILS_Operation *op)
Cancel request.
Definition pils_api.c:623
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
void GNUNET_HELLO_builder_free(struct GNUNET_HELLO_Builder *builder)
Release resources of a builder.
Definition hello-uri.c:398
void GNUNET_PEERSTORE_monitor_stop(struct GNUNET_PEERSTORE_Monitor *zm)
Stop monitoring.
void GNUNET_PEERSTORE_disconnect(struct GNUNET_PEERSTORE_Handle *h)
Disconnect from the PEERSTORE service.
struct GNUNET_PILS_Operation * op
The pils operation.
struct GNUNET_HELLO_Builder * builder
Address builder.

References PilsRequest::builder, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_HELLO_builder_free(), GNUNET_PEERSTORE_disconnect(), GNUNET_PEERSTORE_monitor_stop(), GNUNET_PILS_cancel(), GNUNET_PILS_disconnect(), mine, PilsRequest::op, peerstore, peerstore_notify, pils, pils_requests_head, and pils_requests_tail.

Referenced by shutdown_rest().

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

◆ GCH_get_mine()

struct GNUNET_MessageHeader * GCH_get_mine ( )

Get own hello message.

Returns
Own hello message.

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

251{
252 return mine;
253}

References mine.

Referenced by announce_id().

Here is the caller graph for this function:

Variable Documentation

◆ pils_requests_head

struct PilsRequest* pils_requests_head
static

PILS Operation DLL.

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

Referenced by GCH_shutdown().

◆ pils_requests_tail

struct PilsRequest* pils_requests_tail
static

PILS Operation DLL.

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

Referenced by GCH_shutdown().

◆ mine

struct GNUNET_MessageHeader* mine
static

Hello message of local peer.

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

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

◆ peerstore

struct GNUNET_PEERSTORE_Handle* peerstore
static

Handle to the PEERSTORE service.

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

Referenced by GCH_init(), and GCH_shutdown().

◆ peerstore_notify

struct GNUNET_PEERSTORE_Monitor* peerstore_notify
static

Our peerstore notification context.

We use notification to instantly learn about new peers as they are discovered.

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

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