GNUnet  0.11.x
gnunet_transport_service.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2009-2016 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  */
20 
35 #ifndef GNUNET_TRANSPORT_SERVICE_H
36 #define GNUNET_TRANSPORT_SERVICE_H
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #if 0 /* keep Emacsens' auto-indent happy */
41 }
42 #endif
43 #endif
44 
45 #include "gnunet_util_lib.h"
46 #include "gnunet_ats_service.h"
47 
51 #define GNUNET_TRANSPORT_VERSION 0x00000003
52 
53 
54 /* *************************** HELLO *************************** */
55 
60 
61 
79  const struct GNUNET_MessageHeader *hello,
81  void *cont_cls);
82 
83 
89 void
92 
93 
94 /* *********************** Address to String ******************* */
95 
100 
101 
118 typedef void (*GNUNET_TRANSPORT_AddressToStringCallback) (void *cls,
119  const char *address,
120  int res);
121 
122 
137  const struct GNUNET_CONFIGURATION_Handle *cfg,
138  const struct GNUNET_HELLO_Address *address,
139  int numeric,
142  void *aluc_cls);
143 
144 
150 void
153 
154 
155 /* *********************** Monitoring ************************** */
156 
157 
215 {
220 
225 
230 
235 
240 
245 
251 
258 
266 
272 
283 };
284 
285 
291 const char *
293 
294 
301 int
303 
304 
309 
310 
330  void *cls,
331  const struct GNUNET_PeerIdentity *peer,
332  const struct GNUNET_HELLO_Address *address,
334  struct GNUNET_TIME_Absolute state_timeout);
335 
336 
365  const struct GNUNET_CONFIGURATION_Handle *cfg,
366  const struct GNUNET_PeerIdentity *peer,
367  int one_shot,
369  void *peer_callback_cls);
370 
371 
377 void
380 
381 
382 /* *********************** Blacklisting ************************ */
383 
388 
389 
398  void *cls,
399  const struct GNUNET_PeerIdentity *pid);
400 
401 
419  void *cb_cls);
420 
421 
428 void
430 
431 
436 
442 
443 
448 {
453 
458 
463 
469 
475 };
476 
477 
482 {
487 
496 
500  uint32_t num_msg_pending;
501 
506 
513 
519 
524 };
525 
526 
545  void *cls,
546  struct GNUNET_TRANSPORT_PluginSession *session,
547  void **session_ctx,
548  const struct GNUNET_TRANSPORT_SessionInfo *info);
549 
550 
563  void *cb_cls);
564 
565 
573 void
576 
577 
582 
583 
596 typedef void *(*GNUNET_TRANSPORT_NotifyConnect) (
597  void *cls,
598  const struct GNUNET_PeerIdentity *peer,
599  struct GNUNET_MQ_Handle *mq);
600 
601 
614  void *cls,
615  const struct GNUNET_PeerIdentity *peer,
616  void *handler_cls);
617 
618 
636  void *cls,
637  const struct GNUNET_PeerIdentity *neighbour,
638  void *handlers_cls);
639 
640 
660  const struct GNUNET_PeerIdentity *self,
661  const struct GNUNET_MQ_MessageHandler *handlers,
662  void *cls,
666 
667 
673 void
675 
676 
684 struct GNUNET_MQ_Handle *
686  const struct GNUNET_PeerIdentity *peer);
687 
688 
689 #if 0 /* keep Emacsens' auto-indent happy */
690 {
691 #endif
692 #ifdef __cplusplus
693 }
694 #endif
695 
696 /* ifndef GNUNET_TRANSPORT_SERVICE_H */
697 #endif
698  /* end of group */
700 
701 /* end of gnunet_transport_service.h */
Connection got into trouble, rest of the system still believes it to be up, but we&#39;re getting a new a...
Session is being torn down and about to disappear.
uint32_t num_bytes_pending
Number of bytes pending transmission for this session.
We have some primary connection, but ATS suggested we switch to some alternative; we now sent a SYN m...
void(* GNUNET_TRANSPORT_AddressToStringCallback)(void *cls, const char *address, int res)
Function to call with a textual representation of an address.
Entry in linked list for all offer-HELLO requests.
void * cls
Closure for the callbacks.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
GNUNET_TRANSPORT_PeerState
Possible state of a neighbour.
Sent SYN over new address (either by ATS telling us to switch addresses or from RECONNECT_ATS); if th...
int(* GNUNET_TRANSPORT_BlacklistCallback)(void *cls, const struct GNUNET_PeerIdentity *pid)
Function that decides if a connection is acceptable or not.
We&#39;re finished with the disconnect; and are cleaning up the state now! We put the struct into this st...
int is_inbound
GNUNET_YES if this is an inbound connection, GNUNET_NO if this is an outbound connection, GNUNET_SYSERR if connections of this plugin are so fundamentally bidirectional that they have no &#39;initiator&#39;
enum GNUNET_TRANSPORT_SessionState state
New state of the session.
Context for iterating validation entries.
Abstract representation of a plugin&#39;s session.
Initial session handshake is in progress.
Handle for a plugin session state monitor.
static int numeric
Option -n.
GNUNET_TRANSPORT_SessionMonitorCallback cb
Callback to call.
void GNUNET_TRANSPORT_blacklist_cancel(struct GNUNET_TRANSPORT_Blacklist *br)
Abort the blacklist.
void *(* GNUNET_TRANSPORT_NotifyConnect)(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_MQ_Handle *mq)
Function called to notify transport users that another peer connected to us.
Received a SYN, asking ATS about address suggestions.
const struct GNUNET_HELLO_Address * address
Address used by the session.
struct GNUNET_TRANSPORT_PeerMonitoringContext * GNUNET_TRANSPORT_monitor_peers(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_PeerIdentity *peer, int one_shot, GNUNET_TRANSPORT_PeerIterateCallback peer_callback, void *peer_callback_cls)
Return information about a specific peer or all peers currently known to transport service once or in...
uint32_t num_msg_pending
Number of messages pending transmission for this session.
void(* GNUNET_SCHEDULER_TaskCallback)(void *cls)
Signature of the main function of a task.
struct GNUNET_TIME_Absolute receive_delay
Until when does this plugin refuse to receive to manage staying within the inbound quota...
void GNUNET_TRANSPORT_monitor_peers_cancel(struct GNUNET_TRANSPORT_PeerMonitoringContext *pic)
Cancel request to monitor peers.
int GNUNET_TRANSPORT_is_connected(enum GNUNET_TRANSPORT_PeerState state)
Check if a state is defined as connected.
struct GNUNET_TRANSPORT_CoreHandle * GNUNET_TRANSPORT_core_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_PeerIdentity *self, const struct GNUNET_MQ_MessageHandler *handlers, void *cls, GNUNET_TRANSPORT_NotifyConnect nc, GNUNET_TRANSPORT_NotifyDisconnect nd, GNUNET_TRANSPORT_NotifyExcessBandwidth neb)
Connect to the transport service.
void(* GNUNET_TRANSPORT_NotifyDisconnect)(void *cls, const struct GNUNET_PeerIdentity *peer, void *handler_cls)
Function called to notify transport users that another peer disconnected from us. ...
Information about a plugin&#39;s session.
Fresh peer or completely disconnected.
static struct GNUNET_PEERINFO_IteratorContext * pic
Current iterator context (if active, otherwise NULL).
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.
void GNUNET_TRANSPORT_address_to_string_cancel(struct GNUNET_TRANSPORT_AddressToStringContext *alc)
Cancel request for address conversion.
struct GNUNET_TRANSPORT_Blacklist * GNUNET_TRANSPORT_blacklist(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_TRANSPORT_BlacklistCallback cb, void *cb_cls)
Install a blacklist callback.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
Asked to initiate connection, trying to get address from ATS.
struct GNUNET_TIME_Absolute session_timeout
At what time will this session timeout (unless activity happens)?
struct GNUNET_TRANSPORT_PluginMonitor * GNUNET_TRANSPORT_monitor_plugins(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_TRANSPORT_SessionMonitorCallback cb, void *cb_cls)
Install a plugin session state monitor callback.
Message handler for a specific message type.
static int res
void GNUNET_TRANSPORT_offer_hello_cancel(struct GNUNET_TRANSPORT_OfferHelloHandle *ohh)
Cancel the request to transport to offer the HELLO message.
Handle for blacklisting requests.
const char * GNUNET_TRANSPORT_ps2s(enum GNUNET_TRANSPORT_PeerState state)
Convert a transport state to a human readable string.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
static struct GNUNET_PEERINFO_NotifyContext * nc
Iterator context.
struct GNUNET_TRANSPORT_AddressToStringContext * GNUNET_TRANSPORT_address_to_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_HELLO_Address *address, int numeric, struct GNUNET_TIME_Relative timeout, GNUNET_TRANSPORT_AddressToStringCallback aluc, void *aluc_cls)
Convert a binary address into a human readable address.
Sent SYN message to other peer, waiting for SYN_ACK.
GNUNET_TRANSPORT_BlacklistCallback cb
Function to call for determining if a peer is allowed to communicate with us.
Handle to a message queue.
Definition: mq.c:85
void(* GNUNET_TRANSPORT_SessionMonitorCallback)(void *cls, struct GNUNET_TRANSPORT_PluginSession *session, void **session_ctx, const struct GNUNET_TRANSPORT_SessionInfo *info)
Function called by the plugin with information about the current sessions managed by the plugin (for ...
This is just an update about the session, the state did not change.
The identity of the host (wraps the signing key of the peer).
void(* GNUNET_TRANSPORT_NotifyExcessBandwidth)(void *cls, const struct GNUNET_PeerIdentity *neighbour, void *handlers_cls)
Function called if we have "excess" bandwidth to a peer.
configuration data
Definition: configuration.c:85
An address for communicating with a peer.
Disconnect in progress (we&#39;re sending the DISCONNECT message to the other peer; after that is finishe...
void GNUNET_TRANSPORT_core_disconnect(struct GNUNET_TRANSPORT_CoreHandle *handle)
Disconnect from the transport service.
Automatic transport selection and outbound bandwidth determination.
struct GNUNET_MQ_Handle * mq
Definition: 003.c:5
The session was created (first call for each session object).
struct GNUNET_TRANSPORT_OfferHelloHandle * GNUNET_TRANSPORT_offer_hello(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_MessageHeader *hello, GNUNET_SCHEDULER_TaskCallback cont, void *cont_cls)
Offer the transport service the HELLO of another peer.
void GNUNET_TRANSPORT_monitor_plugins_cancel(struct GNUNET_TRANSPORT_PluginMonitor *pm)
Cancel monitoring the plugin session state.
Header for all communications.
Time for absolute times used by GNUnet, in microseconds.
struct GNUNET_MQ_Handle * GNUNET_TRANSPORT_core_get_mq(struct GNUNET_TRANSPORT_CoreHandle *handle, const struct GNUNET_PeerIdentity *peer)
Checks if a given peer is connected to us and get the message queue.
Got our SYN_ACK/ACK, connection is up.
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
GNUNET_TRANSPORT_SessionState
Possible states of a session in a plugin.
void(* GNUNET_TRANSPORT_PeerIterateCallback)(void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_HELLO_Address *address, enum GNUNET_TRANSPORT_PeerState state, struct GNUNET_TIME_Absolute state_timeout)
Function to call with information about a peer.
Handle for the transport service (includes all of the state for the transport service).
static char * address
GNS address for this phone.
SYN request from other peer was SYN_ACK&#39;ed, waiting for ACK.
GNUNET_SCHEDULER_TaskCallback cont
Function to call once we are done.
Time for relative time used by GNUnet, in microseconds.
static struct GNUNET_TRANSPORT_PluginMonitor * pm
Handle if we are monitoring plugin session activity.