GNUnet  0.17.5
gnunet_transport_plugin.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet
3  Copyright (C) 2009-2014 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 
39 #ifndef PLUGIN_TRANSPORT_H
40 #define PLUGIN_TRANSPORT_H
41 
43 #include "gnunet_scheduler_lib.h"
46 #include "gnunet_ats_service.h"
47 
48 #define TRANSPORT_SESSION_INBOUND_STRING "<inbound>"
49 
63 struct GNUNET_ATS_Session;
64 
65 
79 typedef void
80 (*GNUNET_TRANSPORT_SessionEnd) (void *cls,
81  const struct GNUNET_HELLO_Address *address,
82  struct GNUNET_ATS_Session *session);
83 
84 
93 typedef void
94 (*GNUNET_TRANSPORT_SessionStart) (void *cls,
95  const struct GNUNET_HELLO_Address *address,
96  struct GNUNET_ATS_Session *session,
97  enum GNUNET_NetworkType net);
98 
99 
122 typedef struct GNUNET_TIME_Relative
124  const struct
126  struct GNUNET_ATS_Session *session,
127  const struct
128  GNUNET_MessageHeader *message);
129 
130 
141 typedef enum GNUNET_NetworkType
142 (*GNUNET_TRANSPORT_AddressToType)(void *cls,
143  const struct sockaddr *addr,
144  size_t addrlen);
145 
146 
154 typedef void
156  const struct
158  uint32_t distance);
159 
160 
170 typedef void
172  int add_remove,
173  const struct
175 
176 
193 typedef struct GNUNET_TIME_Relative
194 (*GNUNET_TRANSPORT_TrafficReport) (void *cls,
195  const struct GNUNET_PeerIdentity *peer,
196  size_t amount_recved);
197 
198 
204 typedef const struct GNUNET_MessageHeader *
205 (*GNUNET_TRANSPORT_GetHelloCallback) (void);
206 
207 
214 {
219 
224 
228  void *cls;
229 
234 
244 
249 
256 
262 
268 
274 
280 
286  uint32_t max_connections;
287 };
288 
289 
309 typedef void
311  const struct
312  GNUNET_PeerIdentity *target,
313  int result,
314  size_t size_payload,
315  size_t size_on_wire);
316 
317 
347 typedef ssize_t
349  struct GNUNET_ATS_Session *session,
350  const char *msgbuf,
351  size_t msgbuf_size,
352  unsigned int priority,
353  struct GNUNET_TIME_Relative to,
355  void *cont_cls);
356 
357 
370 typedef int
372  struct GNUNET_ATS_Session *
373  session);
374 
375 
384 typedef unsigned int
386 
387 
400 typedef void
402  const struct
404 
405 
420 typedef void
422  const char *address,
423  int res);
424 
425 
440 typedef void
442  const char *type,
443  const void *addr,
444  size_t addrlen,
445  int numeric,
448  asc,
449  void *asc_cls);
450 
451 
466 typedef int
467 (*GNUNET_TRANSPORT_CheckAddress) (void *cls,
468  const void *addr,
469  size_t addrlen);
470 
471 
481 typedef struct GNUNET_ATS_Session *
482 (*GNUNET_TRANSPORT_CreateSession) (void *cls,
483  const struct GNUNET_HELLO_Address *address);
484 
485 
495 typedef void
497  const struct
499  struct GNUNET_ATS_Session *session);
500 
501 
512 typedef void
514  const struct GNUNET_PeerIdentity *peer,
515  struct GNUNET_ATS_Session *session,
516  struct GNUNET_TIME_Relative delay);
517 
518 
530 typedef const char *
531 (*GNUNET_TRANSPORT_AddressToString) (void *cls,
532  const void *addr,
533  size_t addrlen);
534 
535 
548 typedef int
550  const char *addr,
551  uint16_t addrlen,
552  void **buf,
553  size_t *added);
554 
555 
563 typedef enum GNUNET_NetworkType
565  struct GNUNET_ATS_Session *session);
566 
567 
575 typedef enum GNUNET_NetworkType
577  const struct
579 
580 
593 typedef void
595  struct GNUNET_ATS_Session *session,
596  const struct
598 
599 
612 typedef void
615  sic,
616  void *sic_cls);
617 
618 
624 {
628  void *cls;
629 
638 
645 
652 
659 
666 
673 
678 
689 
695 
701 
707 
712 
717 
722 };
723 
724 
725 /*#ifndef PLUGIN_TRANSPORT_H*/
726 #endif
727  /* end of group */
729  /* end of group addition */
731 
732 /* end of gnunet_transport_plugin.h */
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
Definition: gnunet-abd.c:61
static int res
static char * address
GNS address for this phone.
static int result
Global testing status.
#define info
static struct GNUNET_TIME_Relative delay
When should dkg communication start?
static char buf[2048]
static int numeric
Option -n.
Automatic transport selection and outbound bandwidth determination.
Configuration API.
API to schedule computations using continuation passing style.
API to create, modify and access statistics.
GNUNET_NetworkType
Types of networks (with separate quotas) we support.
Definition: gnunet_nt_lib.h:36
void(* GNUNET_TRANSPORT_SessionInfoCallback)(void *cls, struct GNUNET_ATS_Session *session, const struct GNUNET_TRANSPORT_SessionInfo *info)
Function called by the plugin with information about the current sessions managed by the plugin (for ...
struct GNUNET_TIME_Relative(* GNUNET_TRANSPORT_TrafficReport)(void *cls, const struct GNUNET_PeerIdentity *peer, size_t amount_recved)
Function that will be called whenever the plugin receives data over the network and wants to determin...
int(* GNUNET_TRANSPORT_DisconnectSessionFunction)(void *cls, struct GNUNET_ATS_Session *session)
Function that can be called to force a disconnect from the specified neighbour for the given session ...
enum GNUNET_NetworkType(* GNUNET_TRANSPORT_GetNetworkTypeForAddress)(void *cls, const struct GNUNET_HELLO_Address *address)
Function to obtain the network type for an address.
enum GNUNET_NetworkType(* GNUNET_TRANSPORT_GetNetworkType)(void *cls, struct GNUNET_ATS_Session *session)
Function to obtain the network type for a session.
struct GNUNET_ATS_Session *(* GNUNET_TRANSPORT_CreateSession)(void *cls, const struct GNUNET_HELLO_Address *address)
Create a new session to transmit data to the target This session will used to send data to this peer ...
void(* GNUNET_TRANSPORT_AddressNotification)(void *cls, int add_remove, const struct GNUNET_HELLO_Address *address)
Function that will be called for each address the transport is aware that it might be reachable under...
const struct GNUNET_MessageHeader *(* GNUNET_TRANSPORT_GetHelloCallback)(void)
Function that returns a HELLO message.
void(* GNUNET_TRANSPORT_TransmitContinuation)(void *cls, const struct GNUNET_PeerIdentity *target, int result, size_t size_payload, size_t size_on_wire)
Function called by the GNUNET_TRANSPORT_TransmitFunction upon "completion".
void(* GNUNET_TRANSPORT_DisconnectPeerFunction)(void *cls, const struct GNUNET_PeerIdentity *target)
Function that can be called to force a disconnect from the specified neighbour.
void(* GNUNET_TRANSPORT_SessionStart)(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_ATS_Session *session, enum GNUNET_NetworkType net)
Plugin tells transport service about a new inbound session.
void(* GNUNET_TRANSPORT_UpdateInboundDelay)(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_ATS_Session *session, struct GNUNET_TIME_Relative delay)
Function that will be called whenever the transport service wants to notify the plugin that the inbou...
void(* GNUNET_TRANSPORT_AddressPrettyPrinter)(void *cls, const char *type, const void *addr, size_t addrlen, int numeric, struct GNUNET_TIME_Relative timeout, GNUNET_TRANSPORT_AddressStringCallback asc, void *asc_cls)
Convert the transports address to a nice, human-readable format.
enum GNUNET_NetworkType(* GNUNET_TRANSPORT_AddressToType)(void *cls, const struct sockaddr *addr, size_t addrlen)
Function that can be called by plugins to figure if an address is an loopback, LAN or WAN address.
unsigned int(* GNUNET_TRANSPORT_QueryKeepaliveFactorFunction)(void *cls)
Function that is called to get the keepalive factor.
int(* GNUNET_TRANSPORT_StringToAddress)(void *cls, const char *addr, uint16_t addrlen, void **buf, size_t *added)
Function called to convert a string address to a binary address.
void(* GNUNET_TRANSPORT_SessionEnd)(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_ATS_Session *session)
Function that will be called whenever the plugin internally cleans up a session pointer and hence the...
struct GNUNET_TIME_Relative(* GNUNET_TRANSPORT_PluginReceiveCallback)(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_ATS_Session *session, const struct GNUNET_MessageHeader *message)
Function called by the transport for each received message.
int(* GNUNET_TRANSPORT_CheckAddress)(void *cls, const void *addr, size_t addrlen)
Another peer has suggested an address for this peer and transport plugin.
void(* GNUNET_TRANSPORT_UpdateSessionTimeout)(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_ATS_Session *session)
Function that will be called whenever the transport service wants to notify the plugin that a session...
void(* GNUNET_TRANSPORT_UpdateAddressDistance)(void *cls, const struct GNUNET_HELLO_Address *address, uint32_t distance)
Function called when distance of an address changes.
const char *(* GNUNET_TRANSPORT_AddressToString)(void *cls, const void *addr, size_t addrlen)
Function called for a quick conversion of the binary address to a numeric address.
void(* GNUNET_TRANSPORT_SessionMonitorSetup)(void *cls, GNUNET_TRANSPORT_SessionInfoCallback sic, void *sic_cls)
Begin monitoring sessions of a plugin.
void(* GNUNET_TRANSPORT_AddressStringCallback)(void *cls, const char *address, int res)
Function called by the pretty printer for the resolved address for each human-readable address obtain...
ssize_t(* GNUNET_TRANSPORT_TransmitFunction)(void *cls, struct GNUNET_ATS_Session *session, const char *msgbuf, size_t msgbuf_size, unsigned int priority, struct GNUNET_TIME_Relative to, GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls)
The new send function with just the session and no address.
Session handle for connections.
struct GNUNET_PeerIdentity target
To whom are we talking to.
size_t addrlen
Address length.
An address for communicating with a peer.
Header for all communications.
The identity of the host (wraps the signing key of the peer).
Handle for the service.
Time for relative time used by GNUnet, in microseconds.
The transport service will pass a pointer to a struct of this type as the first and only argument to ...
struct GNUNET_STATISTICS_Handle * stats
Handle for reporting statistics.
GNUNET_TRANSPORT_AddressToType get_address_type
Function that will be called to figure if an address is an loopback, LAN, WAN etc.
GNUNET_TRANSPORT_SessionEnd session_end
Function that must be called by the plugin when a non-NULL session handle stops being valid (is destr...
GNUNET_TRANSPORT_GetHelloCallback get_our_hello
Function that returns our HELLO.
GNUNET_TRANSPORT_AddressNotification notify_address
Function that must be called by each plugin to notify the transport service about the addresses under...
void * cls
Closure for the various callbacks.
GNUNET_TRANSPORT_UpdateAddressDistance update_address_distance
Function that will be called by DV to update distance for an address.
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration to use.
GNUNET_TRANSPORT_SessionStart session_start
Function called by the plugin when a new (incoming) session was created not explicitly created using ...
GNUNET_TRANSPORT_PluginReceiveCallback receive
Function that should be called by the transport plugin whenever a message is received.
const struct GNUNET_PeerIdentity * my_identity
Identity of this peer.
uint32_t max_connections
What is the maximum number of connections that this transport should allow? Transports that do not ha...
Each plugin is required to return a pointer to a struct of this type as the return value from its ent...
void * cls
Closure for all of the callbacks.
GNUNET_TRANSPORT_TransmitFunction send
Function that the transport service will use to transmit data to another peer.
GNUNET_TRANSPORT_UpdateInboundDelay update_inbound_delay
Function that will be called whenever the transport service wants to notify the plugin that the inbou...
GNUNET_TRANSPORT_SessionMonitorSetup setup_monitor
Function to monitor the sessions managed by the plugin.
GNUNET_TRANSPORT_DisconnectPeerFunction disconnect_peer
Function that can be used to force the plugin to disconnect from the given peer and cancel all previo...
GNUNET_TRANSPORT_GetNetworkTypeForAddress get_network_for_address
Function to obtain the network type for an address.
GNUNET_TRANSPORT_DisconnectSessionFunction disconnect_session
Function that can be used to force the plugin to disconnect from the given peer and cancel all previo...
GNUNET_TRANSPORT_QueryKeepaliveFactorFunction query_keepalive_factor
Function that is used to query keepalive factor.
GNUNET_TRANSPORT_AddressPrettyPrinter address_pretty_printer
Function to pretty-print addresses.
GNUNET_TRANSPORT_AddressToString address_to_string
Function that will be called to convert a binary address to a string (numeric conversion only).
GNUNET_TRANSPORT_GetNetworkType get_network
Function to obtain the network type for a session.
GNUNET_TRANSPORT_CreateSession get_session
Function that will be called tell the plugin to create a session object.
GNUNET_TRANSPORT_CheckAddress check_address
Function that will be called to check if a binary address for this plugin is well-formed and correspo...
GNUNET_TRANSPORT_StringToAddress string_to_address
Function that will be called to convert a string address to binary (numeric conversion only).
GNUNET_TRANSPORT_UpdateSessionTimeout update_session_timeout
Function that will be called whenever the transport service wants to notify the plugin that a session...
Information about a plugin's session.
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.