GNUnet  0.11.x
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 
36 #ifndef PLUGIN_TRANSPORT_H
37 #define PLUGIN_TRANSPORT_H
38 
40 #include "gnunet_scheduler_lib.h"
43 #include "gnunet_ats_service.h"
44 
45 #define TRANSPORT_SESSION_INBOUND_STRING "<inbound>"
46 
60 struct GNUNET_ATS_Session;
61 
62 
76 typedef void
77 (*GNUNET_TRANSPORT_SessionEnd) (void *cls,
78  const struct GNUNET_HELLO_Address *address,
79  struct GNUNET_ATS_Session *session);
80 
81 
90 typedef void
91 (*GNUNET_TRANSPORT_SessionStart) (void *cls,
92  const struct GNUNET_HELLO_Address *address,
93  struct GNUNET_ATS_Session *session,
94  enum GNUNET_NetworkType net);
95 
96 
119 typedef struct GNUNET_TIME_Relative
121  const struct
123  struct GNUNET_ATS_Session *session,
124  const struct
125  GNUNET_MessageHeader *message);
126 
127 
138 typedef enum GNUNET_NetworkType
139 (*GNUNET_TRANSPORT_AddressToType)(void *cls,
140  const struct sockaddr *addr,
141  size_t addrlen);
142 
143 
151 typedef void
153  const struct
155  uint32_t distance);
156 
157 
167 typedef void
169  int add_remove,
170  const struct
172 
173 
190 typedef struct GNUNET_TIME_Relative
191 (*GNUNET_TRANSPORT_TrafficReport) (void *cls,
192  const struct GNUNET_PeerIdentity *peer,
193  size_t amount_recved);
194 
195 
201 typedef const struct GNUNET_MessageHeader *
202 (*GNUNET_TRANSPORT_GetHelloCallback) (void);
203 
204 
211 {
216 
221 
225  void *cls;
226 
231 
241 
246 
253 
259 
265 
271 
277 
283  uint32_t max_connections;
284 };
285 
286 
306 typedef void
308  const struct
309  GNUNET_PeerIdentity *target,
310  int result,
311  size_t size_payload,
312  size_t size_on_wire);
313 
314 
344 typedef ssize_t
346  struct GNUNET_ATS_Session *session,
347  const char *msgbuf,
348  size_t msgbuf_size,
349  unsigned int priority,
350  struct GNUNET_TIME_Relative to,
352  void *cont_cls);
353 
354 
367 typedef int
369  struct GNUNET_ATS_Session *
370  session);
371 
372 
381 typedef unsigned int
383 
384 
397 typedef void
399  const struct
401 
402 
417 typedef void
419  const char *address,
420  int res);
421 
422 
437 typedef void
439  const char *type,
440  const void *addr,
441  size_t addrlen,
442  int numeric,
445  asc,
446  void *asc_cls);
447 
448 
463 typedef int
464 (*GNUNET_TRANSPORT_CheckAddress) (void *cls,
465  const void *addr,
466  size_t addrlen);
467 
468 
478 typedef struct GNUNET_ATS_Session *
479 (*GNUNET_TRANSPORT_CreateSession) (void *cls,
480  const struct GNUNET_HELLO_Address *address);
481 
482 
492 typedef void
494  const struct
496  struct GNUNET_ATS_Session *session);
497 
498 
509 typedef void
511  const struct GNUNET_PeerIdentity *peer,
512  struct GNUNET_ATS_Session *session,
513  struct GNUNET_TIME_Relative delay);
514 
515 
527 typedef const char *
528 (*GNUNET_TRANSPORT_AddressToString) (void *cls,
529  const void *addr,
530  size_t addrlen);
531 
532 
545 typedef int
547  const char *addr,
548  uint16_t addrlen,
549  void **buf,
550  size_t *added);
551 
552 
560 typedef enum GNUNET_NetworkType
562  struct GNUNET_ATS_Session *session);
563 
564 
572 typedef enum GNUNET_NetworkType
574  const struct
576 
577 
590 typedef void
592  struct GNUNET_ATS_Session *session,
593  const struct
595 
596 
609 typedef void
612  sic,
613  void *sic_cls);
614 
615 
621 {
625  void *cls;
626 
635 
642 
649 
656 
663 
670 
675 
686 
692 
698 
704 
709 
714 
719 };
720 
721 
722 /*#ifndef PLUGIN_TRANSPORT_H*/
723 #endif
724  /* end of group */
726 
727 /* 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.
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.
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.