Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / dv / dv.h
index 7b32d7d14991626ddbff90596a2feb8373332f7d..844cfb5e1cfb5c72724b649cb27562ae476671fc 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2004, 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 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
 
      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 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
 
      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.
 */
 
 /**
  * @author Christian Grothoff
 */
 
 /**
  * @author Christian Grothoff
- * @author NOT Nathan Evans
  * @file dv/dv.h
  * @file dv/dv.h
+ * @brief IPC messages between DV service and DV plugin
  */
 #ifndef DV_H
 #define DV_H
 
 #include "gnunet_common.h"
 
  */
 #ifndef DV_H
 #define DV_H
 
 #include "gnunet_common.h"
 
-#define DEBUG_DV_GOSSIP GNUNET_NO
-#define DEBUG_DV_GOSSIP_SEND GNUNET_NO
-#define DEBUG_DV_GOSSIP_RECEIPT GNUNET_NO
-#define DEBUG_DV_MESSAGES GNUNET_NO
-#define DEBUG_DV GNUNET_NO
-#define DEBUG_DV_PEER_NUMBERS GNUNET_NO
-#define DEBUG_MESSAGE_DROP GNUNET_NO
-
-typedef void (*GNUNET_DV_MessageReceivedHandler) (void *cls,
-                                                  struct GNUNET_PeerIdentity *sender,
-                                                  char *msg,
-                                                  size_t msg_len,
-                                                  uint32_t distance,
-                                                  char *sender_address,
-                                                  size_t sender_address_len);
+GNUNET_NETWORK_STRUCT_BEGIN
 
 /**
 
 /**
- * DV Message, contains a message that was received
- * via DV for this peer! Internal.
- *
- * Sender address is copied to the end of this struct,
- * followed by the actual message received.
+ * DV service tells plugin about a DV-connection being
+ * now available.
  */
  */
-struct GNUNET_DV_MessageReceived
+struct GNUNET_DV_ConnectMessage
 {
   /**
 {
   /**
-   * Type:  GNUNET_MESSAGE_TYPE_TRANSPORT_DV_MESSAGE
+   * Type: #GNUNET_MESSAGE_TYPE_DV_CONNECT
    */
   struct GNUNET_MessageHeader header;
 
   /**
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * The sender of the message
-   */
-  struct GNUNET_PeerIdentity sender;
-
-  /**
-   * The message that was sent
+   * The distance to the peer that we are now connected to
    */
    */
-  uint32_t msg_len;
+  uint32_t distance GNUNET_PACKED;
 
   /**
 
   /**
-   * The distance to the peer that we received the message from
+   * The other peer (at the given distance).
    */
    */
-  uint32_t distance;
+  struct GNUNET_PeerIdentity peer;
 
   /**
 
   /**
-   * Length of the sender address, appended to end of this message
+   * The network the peer is in
    */
    */
-  uint32_t sender_address_len;
+  uint32_t network GNUNET_PACKED;
 
 };
 
 
 /**
 
 };
 
 
 /**
- * DV Message, indicates that we have learned of a new DV level peer.
- * Internal.
+ * DV service tells plugin about a DV-connection being
+ * no longer available.
  *
  *
- * Sender address is copied to the end of this struct.
+ * Sender address is copied to the end of this struct,
+ * followed by the actual message received.
  */
  */
-struct GNUNET_DV_ConnectMessage
+struct GNUNET_DV_DisconnectMessage
 {
   /**
 {
   /**
-   * Type:  GNUNET_MESSAGE_TYPE_TRANSPORT_DV_MESSAGE
+   * Type: #GNUNET_MESSAGE_TYPE_DV_DISCONNECT
    */
   struct GNUNET_MessageHeader header;
 
   /**
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * The sender of the message
-   */
-  struct GNUNET_PeerIdentity *sender;
-
-  /**
-   * The message that was sent
-   */
-  struct GNUNET_MessageHeader *msg;
-
-  /**
-   * The distance to the peer that we received the message from
+   * Always zero.
    */
    */
-  uint32_t distance;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
 
   /**
-   * Length of the sender address, appended to end of this message
+   * The peer that is no longer available.
    */
    */
-  uint32_t sender_address_len;
+  struct GNUNET_PeerIdentity peer;
 
 };
 
 
 };
 
+
 /**
 /**
- * Message to return result from a send attempt.
- * Internal.
+ * DV Message, contains a message that was received via DV for this
+ * peer.  Send from the DV service to the DV plugin.
+ *
+ * Sender address is copied to the end of this struct,
+ * followed by the actual message received.
  */
  */
-struct GNUNET_DV_SendResultMessage
+struct GNUNET_DV_ReceivedMessage
 {
   /**
 {
   /**
-   * Type: GNUNET_MESSAGE_TYPE_DV_SEND_RESULT
+   * Type: #GNUNET_MESSAGE_TYPE_DV_RECV
    */
   struct GNUNET_MessageHeader header;
 
   /**
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Unique ID for attempted sent message.
+   * The distance to the peer that we received the message from
    */
    */
-  uint32_t uid;
+  uint32_t distance GNUNET_PACKED;
 
   /**
 
   /**
-   * Result of attempted send, 0 for send okay,
-   * 1 for failure of any reason.
+   * The (actual) sender of the message
    */
    */
-  uint32_t result;
+  struct GNUNET_PeerIdentity sender;
+
+  /* payload follows */
 };
 
 };
 
+
 /**
 /**
- * Message to send a message over DV via a specific peer.
- * Internal.
+ * Message from plugin to DV service, requesting a
+ * message to be routed.
  */
 struct GNUNET_DV_SendMessage
 {
   /**
  */
 struct GNUNET_DV_SendMessage
 {
   /**
-   * Type: GNUNET_MESSAGE_TYPE_DV_SEND
+   * Type: #GNUNET_MESSAGE_TYPE_DV_SEND
    */
   struct GNUNET_MessageHeader header;
 
   /**
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Intended final recipient of this message
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * Message priority
-   */
-  uint32_t priority;
-
-  /**
-   * Unique ID for this message, for confirm callback.
-   */
-  uint32_t uid;
-
-  /**
-   * How long can we delay sending?
+   * Reserved for alignment. 0.
    */
    */
-  struct GNUNET_TIME_Relative timeout;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
 
   /**
-   * Size of the address (appended to end of struct)
-   */
-  uint32_t addrlen;
-
-  /**
-   * The message(s) to be sent.
-   */
-  char *msgbuf;
-
-  /*
-   * Sender, appended to end of struct tells via whom
-   * to send this message.
+   * The (actual) target of the message
    */
    */
+  struct GNUNET_PeerIdentity target;
 
 };
 
 
 };
 
-/**
- * Message that gets sent between nodes updating dv infos
- */
-typedef struct
-{
-  /* Message Header */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Cost from received from node to neighbor node, takes distance into account
-   */
-  uint32_t cost GNUNET_PACKED;
-
-  /**
-   * Identity of neighbor we learned information about
-   */
-  struct GNUNET_PeerIdentity neighbor;
-
-  /**
-   * PublicKey of neighbor.
-   */
-  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
-
-  /**
-   * Neighbor ID to use when sending to this peer
-   */
-  uint32_t neighbor_id GNUNET_PACKED;
-
-} p2p_dv_MESSAGE_NeighborInfo;
 
 /**
 
 /**
- * Message that gets sent between nodes carrying information
+ * Message from service to DV plugin, saying that our
+ * distance to another peer changed.
  */
  */
-typedef struct
+struct GNUNET_DV_DistanceUpdateMessage
 {
 {
-  struct GNUNET_MessageHeader header;
-
   /**
   /**
-   * Unique ID for this message.  Will be zero unless
-   * message tracking is desired.
+   * Type: #GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
    */
    */
-  uint32_t uid GNUNET_PACKED;
+  struct GNUNET_MessageHeader header;
 
   /**
 
   /**
-   * Identity of peer that ultimately sent the message.
-   * Should be looked up in the set of 'neighbor_id's of
-   * the referring peer.
+   * What is the new distance?
    */
    */
-  uint32_t sender GNUNET_PACKED;
+  uint32_t distance GNUNET_PACKED;
 
   /**
 
   /**
-   * Identity of neighbor this message is going to.  Should
-   * be looked up in the set of our own identifiers for
-   * neighbors!
+   * The peer for which the distance changed.
    */
    */
-  uint32_t recipient GNUNET_PACKED;
-
-} p2p_dv_MESSAGE_Data;
-
-/**
- * Message that gets sent between nodes indicating a peer
- * was disconnected.
- */
-typedef struct
-{
-  struct GNUNET_MessageHeader header;
+  struct GNUNET_PeerIdentity peer;
 
   /**
 
   /**
-   * Identity of neighbor that was disconnected.
+   * The network the peer is in
    */
    */
-  uint32_t peer_id GNUNET_PACKED;
-
-} p2p_dv_MESSAGE_Disconnect;
+  uint32_t network GNUNET_PACKED;
 
 
+};
 
 
-struct GNUNET_DV_Handle *
-GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched,
-                  const struct GNUNET_CONFIGURATION_Handle *cfg,
-                  GNUNET_DV_MessageReceivedHandler receive_handler,
-                  void *receive_handler_cls);
 
 
-/**
- * Disconnect from the DV service
- *
- * @param handle the current handle to the service to disconnect
- */
-void GNUNET_DV_disconnect(struct GNUNET_DV_Handle *handle);
+GNUNET_NETWORK_STRUCT_END
 
 #endif
 
 #endif