X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fmesh.h;h=bbfad3225f56c9e26fd5ca8885b45e5b7cd246d8;hb=89c9cb7c978a7a79776d940cadf13740c315b632;hp=a29c63f8845f61d908f3d7e8aef0201811da4107;hpb=78821fe96de53ff40851c11cf2134654a0b63640;p=oweals%2Fgnunet.git diff --git a/src/mesh/mesh.h b/src/mesh/mesh.h index a29c63f88..bbfad3225 100644 --- a/src/mesh/mesh.h +++ b/src/mesh/mesh.h @@ -27,81 +27,132 @@ #define MESH_H_ #include -#include +#include #include "gnunet_common.h" /******************************************************************************/ -/******************** MESH NETWORK MESSAGES **************************/ +/******************** MESH LOCAL MESSAGES *************************/ /******************************************************************************/ -/* API CALL MESSAGE USED - * -------- ------------ - * connect GNUNET_MESH_Connect - * disconnect None (network level disconnect) +/* 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_create GNUNET_MESH_TunnelMessage + * tunnel_destroy GNUNET_MESH_TunnelMessage * - * peer_request_connect_add GNUNET_MESH_ConnectPeer - * peer_request_connect_del GNUNET_MESH_ConnectPeer - * peer_request_connect_by_type GNUNET_MESH_ConnectPeerByType + * peer_request_connect_add GNUNET_MESH_PeerControl + * peer_request_connect_del GNUNET_MESH_PeerControl + * peer_request_connect_by_type GNUNET_MESH_ConnectPeerByType * - * notify_transmit_ready GNUNET_MESH_Control - * notify_transmit_ready_cancel None + * notify_transmit_ready GNUNET_MESH_TransmitReady + * notify_transmit_ready_cancel None (clear of internal data structures) + * + * + * + * EVENT MESSAGE USED + * ----- ------------ + * notify_transmit_ready reply GNUNET_MESH_TransmitReady + * notify_transmit_ready data GNUNET_MESH_Data OR + * GNUNET_MESH_DataBroadcast + * 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_MARK 0x80000000 -struct GNUNET_MESH_Connect { + +/******************************************************************************/ +/************************** MESSAGES ******************************/ +/******************************************************************************/ + +/** + * Message for a client to register to the service + */ +struct GNUNET_MESH_ClientConnect { /** * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT * - * Size: sizeof(struct GNUNET_MESH_Connect) + messages_subscribed * sizeof (message_type) + * Size: sizeof(struct GNUNET_MESH_ClientConnect) + + * sizeof(uint16_t) * types + + * sizeof(MESH_ApplicationType) * applications */ struct GNUNET_MessageHeader header; - - /* uint16_t messages_subscribed[] */ + uint16_t types GNUNET_PACKED; + uint16_t applications GNUNET_PACKED; + /* uint16_t list_types[types] */ + /* uint16_t list_apps[applications] */ }; /** - * + * Type for tunnel numbering. + * - Local tunnel numbers are >= 0x80000000 + * - Global tunnel 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] + * + * Size: sizeof(struct GNUNET_MESH_TunnelMessage) */ struct GNUNET_MessageHeader header; - /** - * ID of a tunnel controlled by this client. - */ - uint32_t tunnel_id GNUNET_PACKED; + /** + * ID of a tunnel controlled by this client. + */ + MESH_TunnelNumber tunnel_id 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 + */ struct GNUNET_MESH_PeerControl { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_[ADD|DEL] (client to service, client created tunnel) - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOTIFY[CONNECT|DISCONNECT] (service to client) + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_[ADD|DEL] + * (client to service, client created tunnel) + * GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_[CONNECTED|DISCONNECTED] + * (service to client) * * Size: sizeof(struct GNUNET_MESH_PeerControl) */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * ID of a tunnel controlled by this client. */ - uint32_t tunnel_id GNUNET_PACKED; + MESH_TunnelNumber tunnel_id GNUNET_PACKED; /** * Peer to connect/disconnect. */ - struct GNUNET_PeerIdentity peer; + struct GNUNET_PeerIdentity peer; }; - - +/** + * Message for connecting to peers offering a certain service. + */ struct GNUNET_MESH_ConnectPeerByType { /** * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_BY_TYPE @@ -111,84 +162,77 @@ struct GNUNET_MESH_ConnectPeerByType { /** * ID of a tunnel controlled by this client. */ - uint32_t tunnel_id GNUNET_PACKED; + MESH_TunnelNumber tunnel_id GNUNET_PACKED; /** * Type specification */ - GNUNET_MESH_ApplicationType type; + GNUNET_MESH_ApplicationType type GNUNET_PACKED; }; -struct GNUNET_MESH_RequestTransmitReady { +/** + * Message for notifying the service that the client wants to send data or + * notifying a client that the service is ready to accept data. + */ +struct GNUNET_MESH_TransmitReady { /** * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_REQUEST_TRANSMIT_READY + * GNUNET_MESSAGE_TYPE_MESH_LOCAL_NOTIFY_TRANSMIT_READY */ struct GNUNET_MessageHeader header; - /** - * ID of a tunnel controlled by this client. - */ - uint32_t tunnel_id GNUNET_PACKED; - - /** - * Size of message we would like to transmit to this tunnel - */ - uint32_t msg_size GNUNET_PACKED; -}; - -struct GNUNET_MESH_NotifyTransmitReady { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_NOTIFY_TRANSMIT_READY + * ID of a tunnel controlled by this client. */ - struct GNUNET_MessageHeader header; + MESH_TunnelNumber tunnel_id GNUNET_PACKED; - /** - * ID of a tunnel controlled by this client. - */ - uint32_t tunnel_id GNUNET_PACKED; - - /** - * Size of message we can now transmit to this tunnel - */ - uint32_t msg_size GNUNET_PACKED; + /** + * Size of message we would like to transmit to this tunnel + */ + uint32_t msg_size GNUNET_PACKED; }; +/** + * Message to encapsulate data transmitted to/from the service + */ struct GNUNET_MESH_Data { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA (client to service, or service to client) - * + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA + * (client to service, or service to client) * Size: sizeof(struct GNUNET_MESH_Data) + sizeof (data) */ struct GNUNET_MessageHeader header; - /** - * ID of a tunnel controlled by this client. - */ - uint32_t tunnel_id GNUNET_PACKED; + /** + * ID of a tunnel controlled by this client. + */ + MESH_TunnelNumber tunnel_id GNUNET_PACKED; - /** - * Source or destination of the message (depending on direction). - */ - struct GNUNET_PeerIdentity destination; + /** + * Source or destination of the message (depending on direction). + */ + struct GNUNET_PeerIdentity peer_id; /* uint8_t data[] */ }; - +/** + * Message to encapsulate broadcast data transmitted to the service + */ struct GNUNET_MESH_DataBroadcast { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA_BROADCAST (client to service only, client created tunnel) - * + * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA_BROADCAST + * (client to service only, client created tunnel) * Size: sizeof(struct GNUNET_MESH_DataBroadcast) + sizeof (data) */ struct GNUNET_MessageHeader header; - /** - * ID of a tunnel controlled by this client. - */ - uint32_t tunnel_id GNUNET_PACKED; + /** + * ID of a tunnel controlled by this client. + */ + MESH_TunnelNumber tunnel_id GNUNET_PACKED; /* uint8_t data[] */ };