Merge branch 'master' of gnunet.org:gnunet
[oweals/gnunet.git] / src / multicast / multicast.h
index 9abf3802cfd1f63f970333dfbf4714d3a9cac6cd..aeb3c0b41426998f15776a1ccfe35be22c6d972b 100644 (file)
@@ -1,6 +1,6 @@
 /*
      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
@@ -14,8 +14,8 @@
 
      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.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
@@ -27,6 +27,9 @@
 #ifndef MULTICAST_H
 #define MULTICAST_H
 
+#include "platform.h"
+#include "gnunet_multicast_service.h"
+
 GNUNET_NETWORK_STRUCT_BEGIN
 
 
@@ -60,19 +63,19 @@ 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_EcdsaPublicKey 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 */
 };
 
 
@@ -125,7 +128,7 @@ struct MulticastJoinDecisionMessageHeader
    * C->S: Public key of the member requesting join.
    * S->C: Unused.
    */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_key;
+  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
 
   /* Followed by struct MulticastJoinDecisionMessage */
 };
@@ -157,189 +160,68 @@ struct MulticastMembershipTestResultMessage
 
 
 /**
- * Message sent from the client to the service to give the service
- * a replayed message.
- */
-struct MulticastReplayResponseMessage
-{
-
-  /**
-   *
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Unique ID that identifies the associated replay session.
-   */
-  uint32_t uid;
-
-  /**
-   * 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 notify the service
- * about the end of a replay session.
- */
-struct MulticastReplayEndMessage
-{
-
-  /**
-   *
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Unique ID that identifies the associated replay session.
-   */
-  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.
+ * Message sent from the client to the service OR the service to the
+ * client asking for a message fragment to be replayed.
  */
-struct MulticastOriginStartMessage
+struct MulticastReplayRequestMessage
 {
-  /**
-   * 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.
-   */
-  uint64_t max_fragment_id;
-
-};
 
-
-struct MulticastMemberJoinMessage
-{
   /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN
+   * The message type should be
+   * #GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST.
    */
   struct GNUNET_MessageHeader header;
 
-  uint32_t relay_count GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey group_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 */
-};
-
-
-/**
- * Message sent from the client to the service to broadcast to all group
- * members.
- */
-struct MulticastBroadcastMessage
-{
-
   /**
-   *
+   * S->C: Public key of the member requesting replay.
+   * C->S: Unused.
    */
-  struct GNUNET_MessageHeader header;
+  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
 
   /**
-   * #GNUNET_OK normally, #GNUNET_SYSERR if the origin aborted the
-   * transmission.
+   * ID of the message that is being requested.
    */
-  int32_t status;
+  uint64_t fragment_id;
 
   /**
-   * Message ID.
+   * ID of the message that is being requested.
    */
   uint64_t message_id;
 
   /**
-   * Group generation.
-   */
-  uint64_t group_generation;
-
-  /**
-   * Total message size.
-   */
-  uint64_t total_size;
-
-};
-
-
-/**
- * Message sent from the client to the service to join a multicast group.
- */
-struct MulticastJoinMessage
-{
-
-  /**
-   *
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * 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_EcdsaPrivateKey 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.
@@ -356,63 +238,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 */
 };