social: separate host/guest/place API; add missing method cb params; improve docs
[oweals/gnunet.git] / src / multicast / multicast.h
index 3257af1a4b943a7beea4c01a34696d02215ffef4..76492e868e53a41f379069da178c5209ac1b3f9c 100644 (file)
@@ -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