GNUnet debian-0.24.3-28-g4f2a77692
 
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_PILS_Handlepils
 Handle to the PILS 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 37 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 99 of file gnunet-service-cadet_hello.c.

102{
103
107 "Received new PID information with address hash `%s'\n",
108 GNUNET_h2s (hash));
111}
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_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:1172
const struct GNUNET_PeerIdentity * GNUNET_HELLO_parser_get_id(const struct GNUNET_HELLO_Parser *parser)
Get the PeerIdentity for this builder.
Definition hello-uri.c:353
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_get_id(), GNUNET_HELLO_parser_to_dht_hello_msg(), LOG, mine, and my_full_id.

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

126{
127 struct CadetPeer *peer;
128 struct GNUNET_MessageHeader *hello;
129
130 if (NULL == record->value)
131 {
133 return;
134 }
135 hello = record->value;
136 if (0 == GNUNET_memcmp (&record->peer,
137 &my_full_id))
138 {
140 "Ignoring own HELLOs\n");
142 return;
143 }
144
146 "Hello for %s (%d bytes), expires on %s\n",
147 GNUNET_i2s (&record->peer),
148 ntohs (hello->size),
151 peer = GCP_get (&record->peer,
152 GNUNET_YES);
153 GCP_set_hello (peer,
154 hello);
156}
static void record(void *cls, size_t data_size, const void *data)
Process recorded audio data.
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).
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:597
#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:660
Struct containing all information regarding a given peer.
Header for all communications.

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_STRINGS_absolute_time_to_string(), GNUNET_YES, LOG, my_full_id, peerstore_notify, 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 160 of file gnunet-service-cadet_hello.c.

161{
163 "Error in PEERSTORE monitoring\n");
164}
#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 168 of file gnunet-service-cadet_hello.c.

169{
171 "Done with initial PEERSTORE iteration during monitoring\n");
172}

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

182{
188 "peerstore",
189 NULL,
191 &error_cb,
192 NULL,
193 &sync_cb,
194 NULL,
195 &got_hello,
196 NULL);
199 NULL);
200}
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)
static struct GNUNET_PILS_Handle * pils
Handle to the PILS service.
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:367
#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 207 of file gnunet-service-cadet_hello.c.

208{
209 struct PilsRequest *pr;
210
211 if (NULL != peerstore_notify)
212 {
214 peerstore_notify = NULL;
215 }
216 if (NULL != peerstore)
217 {
219 peerstore = NULL;
220 }
221 while (NULL != (pr = pils_requests_head))
222 {
225 pr);
226 if (NULL != pr->op)
228 if (NULL != pr->builder)
230 GNUNET_free (pr);
231 }
232 if (NULL != pils)
233 {
235 pils = NULL;
236 }
237 if (NULL != mine)
238 {
240 mine = NULL;
241 }
242}
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:390
void GNUNET_PILS_cancel(struct GNUNET_PILS_Operation *op)
Cancel request.
Definition pils_api.c:495
#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:397
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 251 of file gnunet-service-cadet_hello.c.

252{
253 return mine;
254}

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 68 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 73 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 79 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 84 of file gnunet-service-cadet_hello.c.

Referenced by GCH_init(), and GCH_shutdown().

◆ pils

struct GNUNET_PILS_Handle* pils
static

Handle to the PILS service.

Definition at line 89 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 95 of file gnunet-service-cadet_hello.c.

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