X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmulticast%2Fmulticast.h;h=e95299a5e4ed17deb113dae0a637a3b684d20ab8;hb=35e5be0b0b4c7aea5a56d6a62333ab3a964a2972;hp=85c5714e6e34d5ac3ef597a6196fb96cf69d06f3;hpb=a7100389deab562e67d22ff68961b68a62341aec;p=oweals%2Fgnunet.git diff --git a/src/multicast/multicast.h b/src/multicast/multicast.h index 85c5714e6..e95299a5e 100644 --- a/src/multicast/multicast.h +++ b/src/multicast/multicast.h @@ -1,21 +1,19 @@ /* This file is part of GNUnet. - (C) 2012, 2013 Christian Grothoff (and other contributing authors) + Copyright (C) 2012, 2013 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 - by the Free Software Foundation; either version 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - 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. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ /** @@ -27,6 +25,9 @@ #ifndef MULTICAST_H #define MULTICAST_H +#include "platform.h" +#include "gnunet_multicast_service.h" + GNUNET_NETWORK_STRUCT_BEGIN @@ -50,7 +51,7 @@ struct MulticastJoinRequestMessage * * Signature must match the public key of the joining member. */ - struct GNUNET_CRYPTO_EddsaSignature signature; + struct GNUNET_CRYPTO_EcdsaSignature signature; /** * Purpose for the signature and size of the signed data. @@ -60,24 +61,24 @@ struct MulticastJoinRequestMessage /** * Public key of the target group. */ - struct GNUNET_CRYPTO_EddsaPublicKey group_key; + struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key; /** * Public key of the joining member. */ - struct GNUNET_CRYPTO_EddsaPublicKey member_key; + struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key; /** * Peer identity of the joining member. */ - struct GNUNET_PeerIdentity member_peer; + struct GNUNET_PeerIdentity peer; - /* Followed by struct GNUNET_MessageHeader join_request */ + /* Followed by struct GNUNET_MessageHeader join_message */ }; /** - * Header of a join decision sent to a remote peer. + * Header of a join decision message sent to a peer requesting join. */ struct MulticastJoinDecisionMessage { @@ -87,261 +88,138 @@ struct MulticastJoinDecisionMessage struct GNUNET_MessageHeader header; /** - * #GNUNET_YES if the peer was admitted. + * #GNUNET_YES if the peer was admitted + * #GNUNET_NO if entry was refused, + * #GNUNET_SYSERR if the request could not be answered. */ - uint8_t is_admitted; - - /* Followed by the join response message */ -}; - - -/** - * Message sent from the client to the service to notify the service - * about a join decision. - */ -struct MulticastClientJoinDecisionMessage -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION - */ - struct GNUNET_MessageHeader header; + int32_t is_admitted; /** * Number of relays given. */ uint32_t relay_count; - /** - * Public key of the joining member. - */ - struct GNUNET_CRYPTO_EddsaPublicKey member_key; - - /** - * Peer identity of the joining member. - */ - struct GNUNET_PeerIdentity member_peer; - - /** - * #GNUNET_YES if the peer was admitted. - */ - uint8_t is_admitted; - /* Followed by relay_count peer identities */ /* Followed by the join response message */ - }; /** - * Message sent from the client to the service to notify the service - * about the result of a membership test. + * Header added to a struct MulticastJoinDecisionMessage + * when sent between the client and service. */ -struct MulticastMembershipTestResultMessage +struct MulticastJoinDecisionMessageHeader { - /** - * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBERSHIP_TEST_RESULT - */ - struct GNUNET_MessageHeader header; - - /** - * Unique ID that identifies the associated membership test. - */ - uint32_t uid; - - /** - * #GNUNET_YES if the peer is a member, #GNUNET_NO if peer was not a member, - * #GNUNET_SYSERR if we cannot answer the test. - */ - int32_t is_admitted; - -}; - - -/** - * Message sent from the client to the service to give the service - * a replayed message. - */ -struct MulticastReplayResponseMessage -{ - - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION */ struct GNUNET_MessageHeader header; /** - * Unique ID that identifies the associated replay session. + * C->S: Peer to send the join decision to. + * S->C: Peer we received the join decision from. */ - uint32_t uid; + struct GNUNET_PeerIdentity peer; /** - * An `enum GNUNET_MULTICAST_ReplayErrorCode` identifying issues (in NBO). + * C->S: Public key of the member requesting join. + * S->C: Unused. */ - int32_t error_code; - - /* followed by replayed message */ + struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key; + /* Followed by struct MulticastJoinDecisionMessage */ }; /** * Message sent from the client to the service to notify the service - * about the end of a replay session. + * about the result of a membership test. */ -struct MulticastReplayEndMessage +struct MulticastMembershipTestResultMessage { - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBERSHIP_TEST_RESULT */ struct GNUNET_MessageHeader header; /** - * Unique ID that identifies the associated replay session. + * Unique ID that identifies the associated membership test. */ uint32_t uid; -}; - - -/** - * Message sent from the client to the service to notify the service - * about the starting of a multicast group with this peers as its origin. - */ -struct MulticastOriginStartMessage -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START - */ - struct GNUNET_MessageHeader header; - - /** - * Always zero. - */ - uint32_t reserved; - - /** - * Private, non-ephemeral key for the multicast group. - */ - struct GNUNET_CRYPTO_EddsaPrivateKey group_key; - /** - * Last fragment ID sent to the group, used to continue counting fragments if - * we resume operating * a group. + * #GNUNET_YES if the peer is a member + * #GNUNET_NO if peer is not a member, + * #GNUNET_SYSERR if the test could not be answered. */ - uint64_t max_fragment_id; - -}; - - -struct MulticastMemberJoinMessage -{ - /** - * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN - */ - struct GNUNET_MessageHeader header; - - uint32_t relay_count GNUNET_PACKED; - - struct GNUNET_CRYPTO_EddsaPublicKey group_key; - - struct GNUNET_CRYPTO_EddsaPrivateKey member_key; - - struct GNUNET_PeerIdentity origin; - - /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */ - /* Followed by struct GNUNET_MessageHeader join_request */ + int32_t is_admitted; }; /** - * Message sent from the client to the service to broadcast to all group - * members. + * Message sent from the client to the service OR the service to the + * client asking for a message fragment to be replayed. */ -struct MulticastBroadcastMessage +struct MulticastReplayRequestMessage { /** - * + * The message type should be + * #GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST. */ struct GNUNET_MessageHeader header; /** - * #GNUNET_OK normally, #GNUNET_SYSERR if the origin aborted the - * transmission. - */ - int32_t status; - - /** - * Message ID. + * S->C: Public key of the member requesting replay. + * C->S: Unused. */ - uint64_t message_id; + struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key; /** - * Group generation. - */ - uint64_t group_generation; - - /** - * Total message size. + * ID of the message that is being requested. */ - uint64_t total_size; - -}; - - -/** - * Message sent from the client to the service to join a multicast group. - */ -struct MulticastJoinMessage -{ + uint64_t fragment_id; /** - * + * ID of the message that is being requested. */ - struct GNUNET_MessageHeader header; + uint64_t message_id; /** - * Number of relays we (think) we already know about. + * Offset of the fragment that is being requested. */ - uint32_t relay_count; + uint64_t fragment_offset; /** - * Public non-ephemeral key of the mutlicast group. + * Additional flags for the request. */ - struct GNUNET_CRYPTO_EddsaPublicKey group_key; + uint64_t flags; /** - * Our private key for the group. + * Replay request ID. */ - struct GNUNET_CRYPTO_EddsaPrivateKey member_key; - - /* followed by 'relay_count' `struct GNUNET_PeerIdentity`s */ - + uint32_t uid; }; - /** - * Message sent from the client to the service OR the service to the - * client asking for a message fragment to be replayed. + * Message sent from the client to the service to give the service + * a replayed message. */ -struct MulticastReplayRequestMessage +struct MulticastReplayResponseMessage { /** - * The message type can be either - * #GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST or - * #GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST_CANCEL. + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE + * or GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE_END */ struct GNUNET_MessageHeader header; /** - * Replay request ID. + * ID of the message that is being requested. */ - uint32_t uid; + uint64_t fragment_id; /** * ID of the message that is being requested. @@ -358,63 +236,62 @@ struct MulticastReplayRequestMessage */ uint64_t flags; -}; + /** + * An `enum GNUNET_MULTICAST_ReplayErrorCode` identifying issues (in NBO). + */ + int32_t error_code; + /* followed by replayed message */ +}; /** - * Message sent from the client to the service to unicast to the group origin. + * Message sent from the client to the service to notify the service + * about the starting of a multicast group with this peers as its origin. */ -struct MulticastUnicastToOriginMessage +struct MulticastOriginStartMessage { - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START */ struct GNUNET_MessageHeader header; /** - * Reserved (always 0). + * Always zero. */ uint32_t reserved; /** - * Message ID. + * Private, non-ephemeral key for the multicast group. */ - uint64_t message_id; + struct GNUNET_CRYPTO_EddsaPrivateKey group_key; /** - * Total message size. + * Last fragment ID sent to the group, used to continue counting fragments if + * we resume operating * a group. */ - uint64_t total_size; - - /* followed by payload */ - + uint64_t max_fragment_id; }; -/** - * Message sent from the client to the service to - * cancel unicast to the group origin. - */ -struct MulticastUnicastToOriginCancelMessage +struct MulticastMemberJoinMessage { - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN */ struct GNUNET_MessageHeader header; - /** - * Reserved (always 0). - */ - uint32_t reserved; + uint32_t relay_count GNUNET_PACKED; - /** - * Message ID. - */ - uint64_t message_id; + struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key; + + struct GNUNET_CRYPTO_EcdsaPrivateKey member_key; + + struct GNUNET_PeerIdentity origin; + + /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */ + /* Followed by struct GNUNET_MessageHeader join_msg */ };