add some extra GNS-record well-formedness checks if logging is enabled
[oweals/gnunet.git] / src / dv / dv.h
index 3063bc9178871d7b3b9bd7ba767f6254c1f1a214..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 GNUNET_YES
-#define DEBUG_DV_API GNUNET_YES
-
-typedef void (*GNUNET_DV_MessageReceivedHandler) (void *cls,
-                                                  struct GNUNET_PeerIdentity *sender,
-                                                  struct GNUNET_MessageHeader *msg,
-                                                  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.
+ * 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
    */
-  struct GNUNET_MessageHeader *msg;
+  uint32_t distance GNUNET_PACKED;
 
   /**
-   * The distance to the peer that we received the message from
+   * The other peer (at the given distance).
    */
-  size_t distance;
+  struct GNUNET_PeerIdentity peer;
 
   /**
-   * Length of the sender address, appended to end of this message
+   * The network the peer is in
    */
-  size_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
+   * 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;
+  struct GNUNET_PeerIdentity 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_ReceivedMessage
+{
+  /**
+   * Type: #GNUNET_MESSAGE_TYPE_DV_RECV
+   */
+  struct GNUNET_MessageHeader header;
 
   /**
    * The distance to the peer that we received the message from
    */
-  size_t distance;
+  uint32_t distance GNUNET_PACKED;
 
   /**
-   * Length of the sender address, appended to end of this message
+   * The (actual) sender of the message
    */
-  size_t sender_address_len;
+  struct GNUNET_PeerIdentity sender;
 
+  /* payload follows */
 };
 
 
 /**
- * Message to send a message over DV via a specific peer
+ * 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
+   * Reserved for alignment. 0.
    */
-  struct GNUNET_PeerIdentity target;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * The message(s) to be sent.
+   * The (actual) target of the message
    */
-  char *msgbuf;
+  struct GNUNET_PeerIdentity target;
 
-  /**
-   * The size of the msgbuf
-   */
-  size_t msgbuf_size;
+};
 
+
+/**
+ * Message from service to DV plugin, saying that our
+ * distance to another peer changed.
+ */
+struct GNUNET_DV_DistanceUpdateMessage
+{
   /**
-   * Message priority
+   * Type: #GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
    */
-  size_t priority;
+  struct GNUNET_MessageHeader header;
 
   /**
-   * How long can we delay sending?
+   * What is the new distance?
    */
-  struct GNUNET_TIME_Relative timeout;
+  uint32_t distance GNUNET_PACKED;
 
   /**
-   * Size of the address (appended to end of struct)
+   * The peer for which the distance changed.
    */
-  size_t addrlen;
+  struct GNUNET_PeerIdentity peer;
 
-  /*
-   * Sender, appended to end of struct tells via whom
-   * to send this message.
+  /**
+   * 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