X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmulticast%2Fmulticast.h;h=76492e868e53a41f379069da178c5209ac1b3f9c;hb=e7356fa5d53b2047a1b087fa61ccf15198aeb0bc;hp=3257af1a4b943a7beea4c01a34696d02215ffef4;hpb=61c39c60565b386e0e12ea669556b030e8cd7180;p=oweals%2Fgnunet.git diff --git a/src/multicast/multicast.h b/src/multicast/multicast.h index 3257af1a4..76492e868 100644 --- a/src/multicast/multicast.h +++ b/src/multicast/multicast.h @@ -22,6 +22,7 @@ * @file multicast/multicast.h * @brief multicast IPC messages * @author Christian Grothoff + * @author Gabor X Toth */ #ifndef MULTICAST_H #define MULTICAST_H @@ -30,24 +31,65 @@ GNUNET_NETWORK_STRUCT_BEGIN /** - * Message sent from the client to the service to notify the service - * about a join decision. + * Header of a join request sent to the origin or another member. */ -struct MulticastJoinDecisionMessage +struct MulticastJoinRequestMessage { + /** + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST + */ + struct GNUNET_MessageHeader header; /** + * Always zero. + */ + uint32_t reserved; + + /** + * ECC signature of the rest of the fields of the join request. * + * Signature must match the public key of the joining member. */ - struct GNUNET_MessageHeader header; + struct GNUNET_CRYPTO_EddsaSignature signature; /** - * Unique ID that identifies the associated join test. + * Purpose for the signature and size of the signed data. */ - uint32_t uid; + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + + /** + * Public key of the target group. + */ + struct GNUNET_CRYPTO_EddsaPublicKey group_key; + + /** + * Public key of the joining member. + */ + struct GNUNET_CRYPTO_EddsaPublicKey member_key; /** - * #GNUNET_YES if the peer was admitted. + * Peer identity of the joining member. + */ + struct GNUNET_PeerIdentity member_peer; + + /* Followed by struct GNUNET_MessageHeader join_request */ +}; + + +/** + * Header of a join decision message sent to a peer requesting join. + */ +struct MulticastJoinDecisionMessage +{ + /** + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION + */ + struct GNUNET_MessageHeader header; + + /** + * #GNUNET_YES if the peer was admitted + * #GNUNET_NO if entry was refused, + * #GNUNET_SYSERR if the request could not be answered. */ int32_t is_admitted; @@ -56,10 +98,36 @@ struct MulticastJoinDecisionMessage */ uint32_t relay_count; - /* followed by 'relay_count' peer identities */ + /* Followed by relay_count peer identities */ + + /* Followed by the join response message */ +}; - /* followed by the join response message */ +/** + * Header added to a struct MulticastJoinDecisionMessage + * when sent between the client and service. + */ +struct MulticastJoinDecisionMessageHeader +{ + /** + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION + */ + struct GNUNET_MessageHeader header; + + /** + * C->S: Peer to send the join decision to. + * S->C: Peer we received the join decision from. + */ + struct GNUNET_PeerIdentity peer; + + /** + * C->S: Public key of the member requesting join. + * S->C: Unused. + */ + struct GNUNET_CRYPTO_EddsaPublicKey member_key; + + /* Followed by struct MulticastJoinDecisionMessage */ }; @@ -67,11 +135,10 @@ struct MulticastJoinDecisionMessage * Message sent from the client to the service to notify the service * about the result of a membership test. */ -struct MulticastMembershipTestResponseMessage +struct MulticastMembershipTestResultMessage { - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBERSHIP_TEST_RESULT */ struct GNUNET_MessageHeader header; @@ -81,11 +148,11 @@ struct MulticastMembershipTestResponseMessage 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. + * #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. */ int32_t is_admitted; - }; @@ -142,9 +209,8 @@ struct MulticastReplayEndMessage */ struct MulticastOriginStartMessage { - /** - * + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START */ struct GNUNET_MessageHeader header; @@ -154,16 +220,36 @@ struct MulticastOriginStartMessage uint32_t reserved; /** - * Private, non-ephemeral key for the mutlicast group. + * 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. */ - struct GNUNET_CRYPTO_EccPrivateKey group_key; + uint64_t max_fragment_id; +}; + + +struct MulticastMemberJoinMessage +{ /** - * Last fragment ID, used to continue counting fragments if we resume operating - * a group. + * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN */ - uint64_t last_fragment_id; + 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 */ }; @@ -222,12 +308,12 @@ struct MulticastJoinMessage /** * Public non-ephemeral key of the mutlicast group. */ - struct GNUNET_CRYPTO_EccPublicSignKey group_key; + struct GNUNET_CRYPTO_EddsaPublicKey group_key; /** * Our private key for the group. */ - struct GNUNET_CRYPTO_EccPrivateKey member_key; + struct GNUNET_CRYPTO_EddsaPrivateKey member_key; /* followed by 'relay_count' `struct GNUNET_PeerIdentity`s */ @@ -329,9 +415,6 @@ struct MulticastUnicastToOriginCancelMessage }; - - - GNUNET_NETWORK_STRUCT_END #endif