add some extra GNS-record well-formedness checks if logging is enabled
[oweals/gnunet.git] / src / dv / dv.h
index 6f47441e4330fe6d8a0e7501fd2994f893d51199..844cfb5e1cfb5c72724b649cb27562ae476671fc 100644 (file)
@@ -1,10 +1,10 @@
 /*
      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
-     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
 
      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_RECEIPT GNUNET_YES
-#define DEBUG_DV GNUNET_YES
-#define DEBUG_DV_API GNUNET_YES
-
-typedef void (*GNUNET_DV_MessageReceivedHandler) (void *cls,
-                                                  struct GNUNET_PeerIdentity *sender,
-                                                  char *msg,
-                                                  size_t msg_len,
-                                                  unsigned int 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!
- *
- * 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
-   */
-  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.
+ * 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
-   */
-  struct GNUNET_PeerIdentity *sender;
-
-  /**
-   * The message that was sent
+   * Always zero.
    */
-  struct GNUNET_MessageHeader *msg;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * The distance to the peer that we received the message from
+   * The peer that is no longer available.
    */
-  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 send a message over DV via a specific peer
+ * 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_SendMessage
+struct GNUNET_DV_ReceivedMessage
 {
   /**
-   * Type: GNUNET_MESSAGE_TYPE_DV_SEND
+   * Type: #GNUNET_MESSAGE_TYPE_DV_RECV
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Intended final recipient of this message
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * The size of the msgbuf
-   */
-  uint32_t msgbuf_size;
-
-  /**
-   * Message priority
-   */
-  uint32_t priority;
-
-  /**
-   * How long can we delay sending?
-   */
-  struct GNUNET_TIME_Relative timeout;
-
-  /**
-   * Size of the address (appended to end of struct)
+   * The distance to the peer that we received the message from
    */
-  uint32_t addrlen;
+  uint32_t distance GNUNET_PACKED;
 
   /**
-   * The message(s) to be sent.
-   */
-  char *msgbuf;
-
-  /*
-   * Sender, appended to end of struct tells via whom
-   * to send this message.
+   * The (actual) sender of the message
    */
+  struct GNUNET_PeerIdentity sender;
 
+  /* payload follows */
 };
 
+
 /**
- * Message that gets sent between nodes updating dv infos
+ * Message from plugin to DV service, requesting a
+ * message to be routed.
  */
-typedef struct
+struct GNUNET_DV_SendMessage
 {
-  /* Message Header */
-  struct GNUNET_MessageHeader header;
-
   /**
-   * Cost from received from node to neighbor node, takes distance into account
+   * Type: #GNUNET_MESSAGE_TYPE_DV_SEND
    */
-  unsigned int cost GNUNET_PACKED;
+  struct GNUNET_MessageHeader header;
 
   /**
-   * Identity of neighbor we learned information about
+   * Reserved for alignment. 0.
    */
-  struct GNUNET_PeerIdentity neighbor;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * PublicKey of neighbor.
+   * The (actual) target of the message
    */
-  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
+  struct GNUNET_PeerIdentity target;
 
-  /**
-   * 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
 {
+  /**
+   * Type: #GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
+   */
   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?
    */
-  unsigned int 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.
    */
-  unsigned int recipient GNUNET_PACKED;
+  struct GNUNET_PeerIdentity peer;
 
-} p2p_dv_MESSAGE_Data;
+  /**
+   * The network the peer is in
+   */
+  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);
+GNUNET_NETWORK_STRUCT_END
 
 #endif