X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fmesh.h;h=7011bd51ac6ebf495b58ef6603c064d527e22c64;hb=e43078b68951ad8a3daa3a193473e9c321549e1d;hp=e562846f0dc82f5550d03568622714ba53ea4fc6;hpb=d246fec0e9e840408e5cacfc6de038462a269712;p=oweals%2Fgnunet.git diff --git a/src/mesh/mesh.h b/src/mesh/mesh.h index e562846f0..7011bd51a 100644 --- a/src/mesh/mesh.h +++ b/src/mesh/mesh.h @@ -25,69 +25,32 @@ #ifndef MESH_H_ #define MESH_H_ + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + #include #define MESH_DEBUG GNUNET_YES -#define INITIAL_WINDOW_SIZE 8 -#define ACK_THRESHOLD INITIAL_WINDOW_SIZE / 2 - #include "platform.h" -#include "gnunet_common.h" #include "gnunet_util_lib.h" #include "gnunet_peer_lib.h" #include "gnunet_core_service.h" #include "gnunet_protocols.h" #include -/******************************************************************************/ -/******************** MESH LOCAL MESSAGES *************************/ -/******************************************************************************/ -/* Any API call should be documented in the folowing table under API CALL. - * Also, any message type should be documented in the following table, with the - * associated event. - * - * API CALL (GNUNET_MESH_*) MESSAGE USED - * ------------------------ ------------ - * connect GNUNET_MESH_ClientConnect - * disconnect None (network level disconnect) - * - * tunnel_create GNUNET_MESH_TunnelMessage - * tunnel_destroy GNUNET_MESH_TunnelMessage - * tunnel_speed_max GNUNET_MESH_TunnelMessage - * tunnel_speed_min GNUNET_MESH_TunnelMessage - * tunnel_buffer GNUNET_MESH_TunnelMessage - * - * peer_request_connect_add GNUNET_MESH_PeerControl - * peer_request_connect_del GNUNET_MESH_PeerControl - * peer_request_connect_by_type GNUNET_MESH_ConnectPeerByType - * peer_request_connect_by_string GNUNET_MESH_ConnectPeerByString - * - * peer_blacklist GNUNET_MESH_PeerControl - * peer_unblacklist GNUNET_MESH_PeerControl - * - * notify_transmit_ready None (queue / GNUNET_CLIENT_ntf_tmt_rdy) - * notify_transmit_ready_cancel None (clear of internal data structures) - * - * - * EVENT MESSAGE USED - * ----- ------------ - * data GNUNET_MESH_Unicast OR - * GNUNET_MESH_Multicast OR - * GNUNET_MESH_ToOrigin - * data ack GNUNET_MESH_LocalAck - * - * new incoming tunnel GNUNET_MESH_PeerControl - * peer connects to a tunnel GNUNET_MESH_PeerControl - * peer disconnects from a tunnel GNUNET_MESH_PeerControl - */ - /******************************************************************************/ /************************** CONSTANTS ******************************/ /******************************************************************************/ -#define GNUNET_MESH_LOCAL_TUNNEL_ID_CLI 0x80000000 -#define GNUNET_MESH_LOCAL_TUNNEL_ID_SERV 0xB0000000 +#define GNUNET_MESH_LOCAL_CHANNEL_ID_CLI 0x80000000 +#define GNUNET_MESH_LOCAL_CHANNEL_ID_SERV 0xB0000000 #define HIGH_PID 0xFFFF0000 #define LOW_PID 0x0000FFFF @@ -113,277 +76,172 @@ struct GNUNET_MESH_ClientConnect * sizeof(uint16_t) * types */ struct GNUNET_MessageHeader header; - uint16_t applications GNUNET_PACKED; - uint16_t types GNUNET_PACKED; - /* uint32_t list_apps[applications] */ - /* uint16_t list_types[types] */ + /* uint32_t list_ports[] */ }; /** - * Type for tunnel numbering. - * - Local tunnel numbers given by the service (incoming) are >= 0xB0000000 - * - Local tunnel numbers given by the client (created) are >= 0x80000000 - * - Global tunnel numbers are < 0x80000000 + * Type for channel numbering. + * - Local channel numbers given by the service (incoming) are >= 0xB0000000 + * - Local channel numbers given by the client (created) are >= 0x80000000 + * - Global channel numbers are < 0x80000000 */ -typedef uint32_t MESH_TunnelNumber; - -/** - * Message for a client to create and destroy tunnels. - */ -struct GNUNET_MESH_TunnelMessage -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_[CREATE|DESTROY] - * GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_[MAX|MIN] - * - * Size: sizeof(struct GNUNET_MESH_TunnelMessage) - */ - struct GNUNET_MessageHeader header; - - /** - * ID of a tunnel controlled by this client. - */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; -}; +typedef uint32_t MESH_ChannelNumber; /** - * Message for the service to let a client know about created tunnels. + * Message for a client to create and destroy channels. */ -struct GNUNET_MESH_TunnelNotification +struct GNUNET_MESH_ChannelMessage { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_[CREATE|DESTROY] * - * Size: sizeof(struct GNUNET_MESH_TunnelMessage) + * Size: sizeof(struct GNUNET_MESH_ChannelMessage) */ struct GNUNET_MessageHeader header; /** - * ID of a tunnel controlled by this client. + * ID of a channel controlled by this client. */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; + MESH_ChannelNumber channel_id GNUNET_PACKED; /** - * Peer at the other end, if any + * Channel's peer */ struct GNUNET_PeerIdentity peer; /** - * Tunnel options (speed, buffering) - */ - uint32_t opt; -}; - -/** - * Message for announce of regular expressions. - */ -struct GNUNET_MESH_RegexAnnounce -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX - * - * Size: sizeof(struct GNUNET_MESH_RegexAnnounce) + strlen (regex) + * Port of the channel. */ - struct GNUNET_MessageHeader header; + uint32_t port GNUNET_PACKED; /** - * How many characters do we want to put in an edge label. + * Options. */ - uint16_t compression_characters; - - /** - * Is this the last message for this regex? (for regex > 65k) - */ - int16_t last; - - /* regex payload */ + uint32_t opt GNUNET_PACKED; }; /** - * Message for: - * - request adding and deleting peers from a tunnel - * - notify the client that peers have connected: - * -- requested - * -- unrequested (new incoming tunnels) - * - notify the client that peers have disconnected + * Message for mesh data traffic. */ -struct GNUNET_MESH_PeerControl +struct GNUNET_MESH_LocalData { - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_[ADD|DEL|[UN]BLACKLIST] - * (client to service, client created tunnel) - * GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_[CONNECTED|DISCONNECTED] - * (service to client) - * - * Size: sizeof(struct GNUNET_MESH_PeerControl) + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA */ struct GNUNET_MessageHeader header; /** - * ID of a tunnel controlled by this client. + * ID of the channel */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; + uint32_t id GNUNET_PACKED; /** - * Peer to connect/disconnect. + * Payload follows */ - struct GNUNET_PeerIdentity peer; }; /** - * Message for connecting to peers offering a service, by service number. + * Message to allow the client send more data to the service + * (always service -> client). */ -struct GNUNET_MESH_ConnectPeerByType +struct GNUNET_MESH_LocalAck { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_BY_TYPE | - * GNUNET_MESSAGE_TYPE_MESH_LOCAL_DISCONNECT_PEER_BY_TYPE - * - * Size: sizeof(struct GNUNET_MESH_ConnectPeerByType) + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK */ struct GNUNET_MessageHeader header; /** - * ID of a tunnel controlled by this client. + * ID of the channel allowed to send more data. */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; + MESH_ChannelNumber channel_id GNUNET_PACKED; - /** - * Type specification - */ - GNUNET_MESH_ApplicationType type GNUNET_PACKED; }; /** - * Message for connecting to peers offering a service, by service string. + * Message to inform the client about channels in the service. */ -struct GNUNET_MESH_ConnectPeerByString +struct GNUNET_MESH_LocalInfo { - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_STRING - * - * Size: sizeof(struct GNUNET_MESH_ConnectPeerByString) + strlen (string) - */ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO[_TUNNEL] + */ struct GNUNET_MessageHeader header; - /** - * ID of a tunnel controlled by this client. - */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; - - /* String describing the service */ -}; - - -/** - * Message to allow the client send more data to the service - * (always service -> client). - */ -struct GNUNET_MESH_LocalAck -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK - */ - struct GNUNET_MessageHeader header; + /** + * ID of the channel allowed to send more data. + */ + MESH_ChannelNumber channel_id GNUNET_PACKED; - /** - * ID of the tunnel allowed to send more data. - */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; + /** + * ID of the owner of the channel (can be local peer). + */ +// struct GNUNET_PeerIdentity owner; - /** - * ID of the last packet allowed. - */ - uint32_t max_pid GNUNET_PACKED; + /** + * ID of the destination of the channel (can be local peer). + */ + struct GNUNET_PeerIdentity peer; }; - /** - * Message to inform the client about tunnels in the service. + * Message to inform the client about one of the tunnels in the service. */ -struct GNUNET_MESH_LocalMonitor +struct GNUNET_MESH_LocalInfoTunnel { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR[_TUNNEL] + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL[S] */ struct GNUNET_MessageHeader header; /** - * ID of the tunnel allowed to send more data. + * Number of channels. */ - MESH_TunnelNumber tunnel_id GNUNET_PACKED; + uint32_t channels GNUNET_PACKED; /** - * Number of peers in the tunnel. + * ID of the destination of the tunnel (can be local peer). */ - uint32_t npeers GNUNET_PACKED; + struct GNUNET_PeerIdentity destination; /** - * Alignment. + * Number of connections. */ - uint32_t reserved GNUNET_PACKED; + uint32_t connections GNUNET_PACKED; /** - * ID of the owner of the tunnel (can be local peer). + * Encryption state. */ - struct GNUNET_PeerIdentity owner; + uint16_t estate GNUNET_PACKED; - /* struct GNUNET_PeerIdentity peers[npeers] */ + /** + * Connection state. + */ + uint16_t cstate GNUNET_PACKED; + + /* If TUNNEL (no 'S'): GNUNET_PeerIdentity connection_ids[connections] */ + /* If TUNNEL (no 'S'): uint32_t channel_ids[channels] */ }; GNUNET_NETWORK_STRUCT_END -/******************************************************************************/ -/************************ ENUMERATIONS ****************************/ -/******************************************************************************/ + /** - * All the states a peer participating in a tunnel can be in. + * @brief Translate a fwd variable into a string representation, for logging. + * + * @param fwd Is FWD? (#GNUNET_YES or #GNUNET_NO) + * + * @return String representing FWD or BCK. */ -enum MeshPeerState -{ - /** - * Uninitialized status, should never appear in operation. - */ - MESH_PEER_INVALID, - - /** - * Peer is the root and owner of the tree - */ - MESH_PEER_ROOT, - - /** - * Peer only retransmits traffic, is not a final destination - */ - MESH_PEER_RELAY, - - /** - * Path to the peer not known yet - */ - MESH_PEER_SEARCHING, - - /** - * Request sent, not yet answered. - */ - MESH_PEER_WAITING, - - /** - * Peer connected and ready to accept data - */ - MESH_PEER_READY, - - /** - * Peer connected previosly but not responding - */ - MESH_PEER_RECONNECTING -}; +char * +GM_f2s (int fwd); /** @@ -395,7 +253,7 @@ enum MeshPeerState * @return True if bigger (arg1) has a higher value than smaller (arg 2). */ int -GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller); +GM_is_pid_bigger (uint32_t bigger, uint32_t smaller); /** @@ -407,7 +265,7 @@ GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller); * @return Highest ACK value from the two. */ uint32_t -GMC_max_pid (uint32_t a, uint32_t b); +GM_max_pid (uint32_t a, uint32_t b); /** @@ -419,7 +277,7 @@ GMC_max_pid (uint32_t a, uint32_t b); * @return Lowest ACK value from the two. */ uint32_t -GMC_min_pid (uint32_t a, uint32_t b); +GM_min_pid (uint32_t a, uint32_t b); /** @@ -427,12 +285,19 @@ GMC_min_pid (uint32_t a, uint32_t b); * Generated with: * FIND: "#define ([^ ]+)[ ]*([0-9]+)" * REPLACE: " case \2: return "\1"; break;" - * + * * @param m Message type. - * + * * @return Human readable string description. */ const char * -GNUNET_MESH_DEBUG_M2S (uint16_t m); +GM_m2s (uint16_t m); + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif #endif