X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftransport.h;h=17e4f3c215d5659a5231cfddd9e815618df6df0f;hb=547d531bb3088bf00a0ae5777fa09c7893b7b370;hp=75cdd729c2f0510a5ae760877cda68d2fa0e4c78;hpb=cfa7d229b27b9c387351c9bf3c8a9eb7994de13a;p=oweals%2Fgnunet.git diff --git a/src/transport/transport.h b/src/transport/transport.h index 75cdd729c..17e4f3c21 100644 --- a/src/transport/transport.h +++ b/src/transport/transport.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + Copyright (C) 2009-2014 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -72,11 +72,12 @@ * @param bandwidth_out outbound bandwidth in NBO * */ +typedef void +(*NotifyConnect) (void *cls, + const struct GNUNET_PeerIdentity *peer, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out); -typedef void (*NotifyConnect) (void *cls, - const struct GNUNET_PeerIdentity *peer, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out); GNUNET_NETWORK_STRUCT_BEGIN @@ -89,7 +90,7 @@ struct StartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_START + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_START */ struct GNUNET_MessageHeader header; @@ -117,7 +118,7 @@ struct ConnectInfoMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT */ struct GNUNET_MessageHeader header; @@ -146,7 +147,7 @@ struct DisconnectInfoMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT */ struct GNUNET_MessageHeader header; @@ -162,29 +163,6 @@ struct DisconnectInfoMessage }; -/** - * Message type for sending a request connect message - * to the transport service. Must be done before transport - * api will allow messages to be queued/sent to transport - * service for transmission to a peer. - */ -struct TransportRequestConnectMessage -{ - /** - * Message header - */ - struct GNUNET_MessageHeader header; - - /** - * For alignment. - */ - uint32_t reserved; - - /** - * Identity of the peer we would like to connect to. - */ - struct GNUNET_PeerIdentity peer; -}; /** * Message used to set a particular bandwidth quota. Sent TO the @@ -195,7 +173,7 @@ struct QuotaSetMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA */ struct GNUNET_MessageHeader header; @@ -220,7 +198,7 @@ struct InboundMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_RECV + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_RECV */ struct GNUNET_MessageHeader header; @@ -240,19 +218,18 @@ struct SendOkMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK */ struct GNUNET_MessageHeader header; /** - * GNUNET_OK if the transmission succeeded, - * GNUNET_SYSERR if it failed (i.e. network disconnect); + * #GNUNET_OK if the transmission succeeded, + * #GNUNET_SYSERR if it failed (i.e. network disconnect); * in either case, it is now OK for this client to * send us another message for the given peer. */ uint32_t success GNUNET_PACKED; - /** * Size of message sent */ @@ -265,15 +242,37 @@ struct SendOkMessage uint32_t bytes_physical GNUNET_PACKED; /** - * Latency estimate. + * Which peer can send more now? + */ + struct GNUNET_PeerIdentity peer; + +}; + +/** + * Message used to notify the transport API about an address to string + * conversion. Message is followed by the string with the humand-readable + * address. For each lookup, multiple results may be returned. The + * last message must have a @e res of #GNUNET_OK and an @e addr_len + * of zero. + */ +struct AddressToStringResultMessage +{ + + /** + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING_REPLY */ - struct GNUNET_TIME_RelativeNBO latency; + struct GNUNET_MessageHeader header; /** - * Which peer can send more now? + * #GNUNET_OK if the conversion succeeded, + * #GNUNET_SYSERR if it failed */ - struct GNUNET_PeerIdentity peer; + uint32_t res GNUNET_PACKED; + /** + * Length of the following string, zero if @e is #GNUNET_SYSERR + */ + uint32_t addr_len GNUNET_PACKED; }; @@ -285,14 +284,14 @@ struct OutboundMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_SEND + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SEND */ struct GNUNET_MessageHeader header; /** - * Message priority. + * Always zero. */ - uint32_t priority GNUNET_PACKED; + uint32_t reserved GNUNET_PACKED; /** * Allowed delay. @@ -316,7 +315,7 @@ struct AddressLookupMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING */ struct GNUNET_MessageHeader header; @@ -332,24 +331,29 @@ struct AddressLookupMessage uint16_t addrlen GNUNET_PACKED; /** - * timeout to give up. + * timeout to give up (for DNS resolution timeout mostly) */ struct GNUNET_TIME_RelativeNBO timeout; - /* followed by 'addrlen' bytes of the actual address, then + /* followed by @e addrlen bytes of the actual address, then * followed by the 0-terminated name of the transport */ }; -#if 0 /** - * Message from the library to the transport service - * asking for human readable addresses known for a peer. + * Message from the transport service to the library containing information + * about a peer. Information contained are: + * - current address used to communicate with this peer + * - state + * - state timeout + * + * Memory layout: + * [AddressIterateResponseMessage][address[addrlen]][transportname[pluginlen]] */ -struct PeerLookupMessage +struct ValidationIterateResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_PEER_ADDRESS_LOOKUP + * Type is #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_VALIDATION_RESPONSE */ struct GNUNET_MessageHeader header; @@ -359,38 +363,88 @@ struct PeerLookupMessage uint32_t reserved; /** - * timeout to give up. FIXME: remove in the future. + * Peer identity */ - struct GNUNET_TIME_RelativeNBO timeout; + struct GNUNET_PeerIdentity peer; /** - * The identity of the peer to look up. + * Local info about the address */ - struct GNUNET_PeerIdentity peer; -}; -#endif + uint32_t local_address_info GNUNET_PACKED; + + /** + * Address length + */ + uint32_t addrlen GNUNET_PACKED; + + /** + * Length of the plugin name + */ + uint32_t pluginlen GNUNET_PACKED; + + /** + * State + */ + uint32_t state GNUNET_PACKED; + /** + * At what time did we successfully validate the address last. + * Will be NEVER if the address failed validation. + */ + struct GNUNET_TIME_AbsoluteNBO last_validation; + + /** + * Until when is the address believed to be valid. + * Will be ZERO if the address is not belived to be valid. + */ + struct GNUNET_TIME_AbsoluteNBO valid_until; + + /** + * When will we next try to validate the address (typically + * done before @e valid_until happens). + */ + struct GNUNET_TIME_AbsoluteNBO next_validation; +}; /** * Message from the library to the transport service * asking for binary addresses known for a peer. */ -struct PeerIterateMessage +struct ValidationMonitorMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_VALIDATION_REQUEST */ struct GNUNET_MessageHeader header; /** * One shot call or continous replies? */ - uint32_t one_shot; + uint32_t one_shot GNUNET_PACKED; /** - * timeout to give up. FIXME: remove in the future + * The identity of the peer to look up. */ - struct GNUNET_TIME_AbsoluteNBO timeout; + struct GNUNET_PeerIdentity peer; + +}; + + +/** + * Message from the library to the transport service + * asking for binary addresses known for a peer. + */ +struct PeerMonitorMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_REQUEST + */ + struct GNUNET_MessageHeader header; + + /** + * One shot call or continous replies? + */ + uint32_t one_shot GNUNET_PACKED; /** * The identity of the peer to look up. @@ -407,24 +461,34 @@ struct PeerIterateMessage struct TrafficMetricMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_TRAFFIC_METRIC + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_TRAFFIC_METRIC */ struct GNUNET_MessageHeader header; /** - * SEND, RECEIVE or BOTH? + * Always zero. + */ + uint32_t reserved GNUNET_PACKED; + + /** + * The identity of the peer to look up. */ - uint16_t direction; + struct GNUNET_PeerIdentity peer; /** - * Traffic metrics count + * Fake properties to generate. */ - uint16_t ats_count; + struct GNUNET_ATS_PropertiesNBO properties; /** - * The identity of the peer to look up. + * Fake delay to add on inbound traffic. */ - struct GNUNET_PeerIdentity peer; + struct GNUNET_TIME_RelativeNBO delay_in; + + /** + * Fake delay to add on outbound traffic. + */ + struct GNUNET_TIME_RelativeNBO delay_out; }; @@ -441,7 +505,7 @@ struct TrafficMetricMessage struct PeerIterateResponseMessage { /** - * Type is #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE_RESPONSE + * Type is #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_RESPONSE */ struct GNUNET_MessageHeader header; @@ -461,7 +525,12 @@ struct PeerIterateResponseMessage struct GNUNET_TIME_AbsoluteNBO state_timeout; /** - * State this peer is in as #GNUNET_TRANSPORT_PeerState enumeration element + * Local info about the address + */ + uint32_t local_address_info GNUNET_PACKED; + + /** + * State this peer is in as an `enum GNUNET_TRANSPORT_PeerState` */ uint32_t state GNUNET_PACKED; @@ -486,13 +555,13 @@ struct BlacklistMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_QUERY or - * GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_REPLY. + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_QUERY or + * #GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_REPLY. */ struct GNUNET_MessageHeader header; /** - * 0 for the query, GNUNET_OK (allowed) or GNUNET_SYSERR (disallowed) + * 0 for the query, #GNUNET_OK (allowed) or #GNUNET_SYSERR (disallowed) * for the response. */ uint32_t is_allowed GNUNET_PACKED; @@ -503,6 +572,80 @@ struct BlacklistMessage struct GNUNET_PeerIdentity peer; }; + + +/** + * Transport-level connection status update. + */ +struct TransportPluginMonitorMessage +{ + + /** + * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_EVENT. + */ + struct GNUNET_MessageHeader header; + + /** + * An `enum GNUNET_TRANSPORT_SessionState` in NBO. + */ + uint16_t session_state GNUNET_PACKED; + + /** + * #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 'initiator' + * Value given in NBO. + */ + int16_t is_inbound GNUNET_PACKED; + + /** + * Number of messages waiting transmission. + */ + uint32_t msgs_pending GNUNET_PACKED; + + /** + * Number of bytes waiting for transmission. + */ + uint32_t bytes_pending GNUNET_PACKED; + + /** + * When will this transport plugin session time out? + */ + struct GNUNET_TIME_AbsoluteNBO timeout; + + /** + * Until how long is this plugin currently blocked from reading? + */ + struct GNUNET_TIME_AbsoluteNBO delay; + + /** + * Which peer is this connection for? + */ + struct GNUNET_PeerIdentity peer; + + /** + * Unique identifier for the session. + */ + uint64_t session_id; + + /** + * Length of the plugin name in bytes, including 0-termination. + */ + uint16_t plugin_name_len GNUNET_PACKED; + + /** + * Length of the plugin address in bytes. + */ + uint16_t plugin_address_len GNUNET_PACKED; + + /* followed by 0-terminated plugin name and + @e plugin_address_len bytes of plugin address */ + +}; + + GNUNET_NETWORK_STRUCT_END /* end of transport.h */