add some extra GNS-record well-formedness checks if logging is enabled
[oweals/gnunet.git] / src / dv / dv.h
index 10b531cedc0e9efcae5a5aeeccd2e7698bd20653..844cfb5e1cfb5c72724b649cb27562ae476671fc 100644 (file)
@@ -1,6 +1,6 @@
 /*
      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
 
      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 NOT Nathan Evans
  * @file dv/dv.h
+ * @brief IPC messages between DV service and DV plugin
  */
 #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;
 
   /**
-   * The sender of the message
+   * The distance to the peer that we are now connected to
    */
-  struct GNUNET_PeerIdentity sender;
+  uint32_t distance GNUNET_PACKED;
 
   /**
-   * The length of the message that was sent (appended to this end of struct)
+   * The other peer (at the given distance).
    */
-  uint32_t msg_len;
+  struct GNUNET_PeerIdentity peer;
 
   /**
-   * The distance to the peer that we received the message from
+   * The network the peer is in
    */
-  uint32_t distance;
+  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;
 
   /**
-   * The sender of the message
+   * Always zero.
    */
-  struct GNUNET_PeerIdentity *sender;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * The message that was sent
+   * The peer that is no longer available.
    */
-  struct GNUNET_MessageHeader *msg;
-
-  /**
-   * The distance to the peer that we received the message from
-   */
-  uint32_t distance;
-
-  /**
-   * Length of the sender address, appended to end of this message
-   */
-  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;
 
   /**
-   * 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
 {
   /**
-   * Type: GNUNET_MESSAGE_TYPE_DV_SEND
+   * Type: #GNUNET_MESSAGE_TYPE_DV_SEND
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Intended final recipient of this message
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * Message priority
+   * Reserved for alignment. 0.
    */
-  uint32_t priority;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * Unique ID for this message, for confirm callback.
-   */
-  uint32_t uid;
-
-  /**
-   * How long can we delay sending?
-   */
-  struct GNUNET_TIME_Relative timeout;
-
-  /**
-   * 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 (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