GNUnet debian-0.24.3-28-g4f2a77692
 
Loading...
Searching...
No Matches
gnunet-service-cadet_hello.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2014, 2017 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
27#include "platform.h"
28#include "gnunet_util_lib.h"
31#include "cadet_protocol.h"
36
37#define LOG(level, ...) GNUNET_log_from (level, "cadet-hll", __VA_ARGS__)
38
64
69
74
75
80
85
89static struct GNUNET_PILS_Handle *pils;
90
96
97
98static void
99sign_hello_cb (void *cls,
100 const struct GNUNET_HELLO_Parser *parser,
101 const struct GNUNET_HashCode *hash)
102{
103
107 "Received new PID information with address hash `%s'\n",
108 GNUNET_h2s (hash));
111}
112
113
122static void
123got_hello (void *cls,
124 const struct GNUNET_PEERSTORE_Record *record,
125 const char *err_msg)
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}
157
158
159static void
160error_cb (void *cls)
161{
163 "Error in PEERSTORE monitoring\n");
164}
165
166
167static void
168sync_cb (void *cls)
169{
171 "Done with initial PEERSTORE iteration during monitoring\n");
172}
173
174
180void
182{
188 "peerstore",
189 NULL,
191 &error_cb,
192 NULL,
193 &sync_cb,
194 NULL,
195 &got_hello,
196 NULL);
199 NULL);
200}
201
202
206void
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}
243
244
252{
253 return mine;
254}
255
256
257/* end of gnunet-service-cadet-new_hello.c */
P2P messages used by CADET.
static void record(void *cls, size_t data_size, const void *data)
Process recorded audio data.
struct GNUNET_PeerIdentity my_full_id
Local peer own ID.
Information we track per peer.
void GCD_hello_update()
Function called by the HELLO subsystem whenever OUR hello changes.
cadet service; dealing with DHT requests and results
static void sync_cb(void *cls)
void GCH_shutdown()
Shut down the hello subsystem.
void GCH_init(const struct GNUNET_CONFIGURATION_Handle *c)
Initialize the hello subsystem.
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_Monitor * peerstore_notify
Our peerstore notification context.
static struct GNUNET_PEERSTORE_Handle * peerstore
Handle to the PEERSTORE service.
static struct PilsRequest * pils_requests_head
PILS Operation DLL.
static void sign_hello_cb(void *cls, const struct GNUNET_HELLO_Parser *parser, const struct GNUNET_HashCode *hash)
static struct PilsRequest * pils_requests_tail
PILS Operation DLL.
static struct GNUNET_MessageHeader * mine
Hello message of local peer.
static void error_cb(void *cls)
#define LOG(level,...)
struct GNUNET_MessageHeader * GCH_get_mine()
Get own hello message.
static struct GNUNET_PILS_Handle * pils
Handle to the PILS service.
cadet service; dealing with hello messages
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).
Information we track per peer.
API to the peerstore 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
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
API to create, modify and access statistics.
#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
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
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
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
#define GNUNET_log(kind,...)
#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).
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_WARNING
@ GNUNET_ERROR_TYPE_DEBUG
@ GNUNET_ERROR_TYPE_INFO
#define GNUNET_free(ptr)
Wrapper around free.
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_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.
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).
#define GNUNET_PEERSTORE_HELLO_KEY
Key used for storing HELLO in the peerstore.
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.
Context for building (or parsing) HELLO URIs.
Definition hello-uri.c:184
Context for parsing HELLOs.
Definition hello-uri.c:232
A 512-bit hashcode.
Header for all communications.
Handle to the PEERSTORE service.
A handle for the PILS service.
Definition pils_api.c:82
struct GNUNET_PILS_Operation * op
The pils operation.
struct PilsRequest * next
DLL.
struct PilsRequest * prev
DLL.
struct GNUNET_HELLO_Builder * builder
Address builder.