GNUnet  0.11.x
gnunet_core_service.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2009-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  */
33 #ifndef GNUNET_CORE_SERVICE_H
34 #define GNUNET_CORE_SERVICE_H
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #if 0 /* keep Emacsens' auto-indent happy */
39 }
40 #endif
41 #endif
42 
43 #include "gnunet_util_lib.h"
45 
49 #define GNUNET_CORE_VERSION 0x00000001
50 
52 
58 {
63 
68 
74 
79 
84 
89 
94 
100 };
101 
102 
109 {
114 
118  uint32_t iv_seed GNUNET_PACKED;
119 
124  struct GNUNET_PeerIdentity target;
125 
129  uint32_t challenge GNUNET_PACKED;
130 };
131 
132 
137 {
142 
146  uint32_t iv_seed GNUNET_PACKED;
147 
151  uint32_t challenge GNUNET_PACKED;
152 
156  uint32_t reserved;
157 
162  struct GNUNET_PeerIdentity target;
163 };
164 
165 
167 
171 struct GNUNET_CORE_Handle;
172 
173 
182 typedef void *(*GNUNET_CORE_ConnectEventHandler) (
183  void *cls,
184  const struct GNUNET_PeerIdentity *peer,
185  struct GNUNET_MQ_Handle *mq);
186 
187 
197  void *cls,
198  const struct GNUNET_PeerIdentity *peer,
199  void *peer_cls);
200 
201 
215  void *cls,
216  const struct GNUNET_PeerIdentity *my_identity);
217 
218 
243 struct GNUNET_CORE_Handle *
245  void *cls,
249  const struct GNUNET_MQ_MessageHandler *handlers);
250 
251 
257 void
259 
260 
268 struct GNUNET_MQ_Handle *
270  const struct GNUNET_PeerIdentity *pid);
271 
272 
277 
278 
293 {
298 
303 
308 
315 
325 
331 
338 
347 };
348 
349 
360  void *cls,
361  const struct GNUNET_PeerIdentity *pid,
364 
365 
385  void *peer_cb_cls);
386 
387 
393 void
395 
396 
409 int
411  const struct GNUNET_PeerIdentity *pid);
412 
413 
427 struct GNUNET_MQ_Handle *
429  const struct GNUNET_PeerIdentity *target);
430 
431 
432 #if 0 /* keep Emacsens' auto-indent happy */
433 {
434 #endif
435 #ifdef __cplusplus
436 }
437 #endif
438 
439 /* ifndef GNUNET_CORE_SERVICE_H */
440 #endif
441  /* end of group core */
443 
444 /* end of gnunet_core_service.h */
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
Context for the core service connection.
Definition: core_api.c:77
static struct GNUNET_CADET_Handle * mh
Cadet handle.
Definition: gnunet-cadet.c:92
Response to a PING.
void(* GNUNET_CORE_DisconnectEventHandler)(void *cls, const struct GNUNET_PeerIdentity *peer, void *peer_cls)
Method called whenever a peer disconnects.
Handle to a CORE monitoring operation.
void * cls
Closure for the various callbacks.
Definition: core_api.c:87
void(* GNUNET_CORE_StartupCallback)(void *cls, const struct GNUNET_PeerIdentity *my_identity)
Function called after GNUNET_CORE_connect has succeeded (or failed for good).
GNUNET_CORE_KxState
State machine for our P2P encryption handshake.
static struct GNUNET_PeerIdentity my_identity
Identity of this peer.
We&#39;ve received the other peers session key.
Time for absolute time used by GNUnet, in microseconds and in network byte order. ...
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
void *(* GNUNET_CORE_ConnectEventHandler)(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_MQ_Handle *mq)
Method called whenever a given peer connects.
struct GNUNET_TIME_AbsoluteNBO expiration_time
When does the given ephemeral key expire (end of validity).
header of what an ECC signature signs this must be followed by "size - 8" bytes of the actual signed ...
struct GNUNET_CRYPTO_EddsaSignature signature
An ECC signature of the origin_identity asserting the validity of the given ephemeral key...
struct GNUNET_TIME_AbsoluteNBO creation_time
At what time was this key created (beginning of validity).
enum State state
current state of profiling
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
Definition: gnunet-abd.c:61
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
We&#39;re sending an (encrypted) PING to the other peer to check if it can decrypt.
void(* GNUNET_CORE_MonitorCallback)(void *cls, const struct GNUNET_PeerIdentity *pid, enum GNUNET_CORE_KxState state, struct GNUNET_TIME_Absolute timeout)
Function called by the monitor callback whenever a peer&#39;s connection status changes.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
struct GNUNET_CORE_MonitorHandle * GNUNET_CORE_monitor_start(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CORE_MonitorCallback peer_cb, void *peer_cb_cls)
Monitor connectivity and KX status of all peers known to CORE.
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Information about what is being signed.
Message handler for a specific message type.
void * connects(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_MQ_Handle *mq)
Definition: 010.c:2
void disconnects(void *cls, const struct GNUNET_PeerIdentity *peer)
Definition: 011.c:2
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
This is not a state in a peer&#39;s state machine, but a special value used with the GNUNET_CORE_MonitorC...
struct GNUNET_CRYPTO_EcdhePublicKey ephemeral_key
Ephemeral public ECC key.
struct GNUNET_CORE_Handle * GNUNET_CORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, void *cls, GNUNET_CORE_StartupCallback init, GNUNET_CORE_ConnectEventHandler connects, GNUNET_CORE_DisconnectEventHandler disconnects, const struct GNUNET_MQ_MessageHandler *handlers)
Connect to the core service.
Definition: core_api.c:692
struct GNUNET_MQ_Handle * GNUNET_CORE_mq_create(struct GNUNET_CORE_Handle *h, const struct GNUNET_PeerIdentity *target)
Create a message queue for sending messages to a peer with CORE.
void GNUNET_CORE_disconnect(struct GNUNET_CORE_Handle *handle)
Disconnect from the core service.
Definition: core_api.c:730
The other peer has confirmed our session key + PING with a PONG message encrypted with their session ...
static char * init
Set to the name of a service to start.
Definition: gnunet-arm.c:74
an ECC signature using EdDSA.
struct GNUNET_MQ_Handle * GNUNET_CORE_get_mq(const struct GNUNET_CORE_Handle *h, const struct GNUNET_PeerIdentity *pid)
Obtain the message queue for a connected peer.
Definition: core_api.c:761
Handle to a message queue.
Definition: mq.c:85
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32;.
The identity of the host (wraps the signing key of the peer).
void GNUNET_CORE_monitor_stop(struct GNUNET_CORE_MonitorHandle *mh)
Stop monitoring CORE activity.
#define GNUNET_PACKED
gcc-ism to get packed structs.
configuration data
Definition: configuration.c:84
uint32_t reserved
Reserved, always zero.
struct GNUNET_MessageHeader header
Message type is GNUNET_MESSAGE_TYPE_CORE_EPHEMERAL_KEY.
void * peer_cb_cls
Closure for peer_cb.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and encr...
struct GNUNET_MQ_Handle * mq
Definition: 003.c:5
GNUNET_CORE_MonitorCallback peer_cb
Function called with the peer.
int32_t sender_status
Status of the sender (should be in enum PeerStateMachine), nbo.
int GNUNET_CORE_is_peer_connected_sync(const struct GNUNET_CORE_Handle *h, const struct GNUNET_PeerIdentity *pid)
Check if the given peer is currently connected.
Last state of a KX (when it is being terminated).
Header for all communications.
Time for absolute times used by GNUnet, in microseconds.
We&#39;ve sent our session key.
Message transmitted with the signed ephemeral key of a peer.
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
struct GNUNET_PeerIdentity origin_identity
Public key of the signing peer (persistent version, not the ephemeral public key).
This is not a state in a peer&#39;s state machine, but a special value used with the GNUNET_CORE_MonitorC...
We&#39;re rekeying (or had a timeout), so we have sent the other peer our new ephemeral key...