-add newline
[oweals/gnunet.git] / src / dv / dv.h
index d43befd70927b60ce5ce26dbbdef32a872366f6c..0d42505bcbec2b95b99c7acfcec81055e9d21f43 100644 (file)
@@ -4,7 +4,7 @@
 
      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
 
 #include "gnunet_common.h"
 
-#define DEBUG_DV GNUNET_YES
-#define DEBUG_DV_API GNUNET_YES
+#define DEBUG_DV_GOSSIP GNUNET_EXTRA_LOGGING
+#define DEBUG_DV_GOSSIP_SEND GNUNET_EXTRA_LOGGING
+#define DEBUG_DV_GOSSIP_RECEIPT GNUNET_EXTRA_LOGGING
+#define DEBUG_DV_MESSAGES GNUNET_EXTRA_LOGGING
+#define DEBUG_DV GNUNET_EXTRA_LOGGING
+#define DEBUG_DV_PEER_NUMBERS GNUNET_EXTRA_LOGGING
+#define DEBUG_MESSAGE_DROP GNUNET_EXTRA_LOGGING
 
 typedef void (*GNUNET_DV_MessageReceivedHandler) (void *cls,
-                                                  struct GNUNET_PeerIdentity *sender,
-                                                  char *msg,
+                                                  struct GNUNET_PeerIdentity *
+                                                  sender, char *msg,
                                                   size_t msg_len,
-                                                  unsigned int distance,
+                                                  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!
+ * via DV for this peer! Internal.
  *
  * Sender address is copied to the end of this struct,
  * followed by the actual message received.
@@ -59,25 +66,21 @@ struct GNUNET_DV_MessageReceived
   struct GNUNET_PeerIdentity sender;
 
   /**
-   * The message that was sent
+   * The length of the message that was sent (appended to this end of struct)
    */
-  size_t msg_len;
+  uint32_t msg_len;
 
   /**
    * The distance to the peer that we received the message from
    */
-  size_t distance;
-
-  /**
-   * Length of the sender address, appended to end of this message
-   */
-  size_t sender_address_len;
+  uint32_t distance;
 
 };
 
 
 /**
  * DV Message, indicates that we have learned of a new DV level peer.
+ * Internal.
  *
  * Sender address is copied to the end of this struct.
  */
@@ -101,18 +104,41 @@ struct GNUNET_DV_ConnectMessage
   /**
    * The distance to the peer that we received the message from
    */
-  size_t distance;
+  uint32_t distance;
 
   /**
    * Length of the sender address, appended to end of this message
    */
-  size_t sender_address_len;
+  uint32_t sender_address_len;
 
 };
 
+/**
+ * Message to return result from a send attempt.
+ * Internal.
+ */
+struct GNUNET_DV_SendResultMessage
+{
+  /**
+   * Type: GNUNET_MESSAGE_TYPE_DV_SEND_RESULT
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Unique ID for attempted sent message.
+   */
+  uint32_t uid;
+
+  /**
+   * Result of attempted send, 0 for send okay,
+   * 1 for failure of any reason.
+   */
+  uint32_t result;
+};
 
 /**
- * Message to send a message over DV via a specific peer
+ * Message to send a message over DV via a specific peer.
+ * Internal.
  */
 struct GNUNET_DV_SendMessage
 {
@@ -127,19 +153,14 @@ struct GNUNET_DV_SendMessage
   struct GNUNET_PeerIdentity target;
 
   /**
-   * The message(s) to be sent.
-   */
-  char *msgbuf;
-
-  /**
-   * The size of the msgbuf
+   * Message priority
    */
-  size_t msgbuf_size;
+  uint32_t priority;
 
   /**
-   * Message priority
+   * Unique ID for this message, for confirm callback.
    */
-  size_t priority;
+  uint32_t uid;
 
   /**
    * How long can we delay sending?
@@ -149,7 +170,12 @@ struct GNUNET_DV_SendMessage
   /**
    * Size of the address (appended to end of struct)
    */
-  size_t addrlen;
+  uint32_t addrlen;
+
+  /**
+   * The message(s) to be sent.
+   */
+  char *msgbuf;
 
   /*
    * Sender, appended to end of struct tells via whom
@@ -163,22 +189,28 @@ struct GNUNET_DV_SendMessage
  */
 typedef struct
 {
+  /* Message Header */
   struct GNUNET_MessageHeader header;
 
   /**
    * Cost from received from node to neighbor node, takes distance into account
    */
-  unsigned int cost GNUNET_PACKED;
+  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
    */
-  unsigned int neighbor_id GNUNET_PACKED;
+  uint32_t neighbor_id GNUNET_PACKED;
 
 } p2p_dv_MESSAGE_NeighborInfo;
 
@@ -189,27 +221,55 @@ typedef struct
 {
   struct GNUNET_MessageHeader header;
 
+  /**
+   * Unique ID for this message.  Will be zero unless
+   * message tracking is desired.
+   */
+  uint32_t uid GNUNET_PACKED;
+
   /**
    * Identity of peer that ultimately sent the message.
    * Should be looked up in the set of 'neighbor_id's of
    * the referring peer.
    */
-  unsigned int sender GNUNET_PACKED;
+  uint32_t sender GNUNET_PACKED;
 
   /**
    * Identity of neighbor this message is going to.  Should
    * be looked up in the set of our own identifiers for
    * neighbors!
    */
-  unsigned int recipient GNUNET_PACKED;
+  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;
+
+  /**
+   * Identity of neighbor that was disconnected.
+   */
+  uint32_t peer_id GNUNET_PACKED;
+
+} p2p_dv_MESSAGE_Disconnect;
+GNUNET_NETWORK_STRUCT_END
 
 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_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);
 
 #endif