-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
 
      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
 
 #include "gnunet_common.h"
 
 
 #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,
 
 typedef void (*GNUNET_DV_MessageReceivedHandler) (void *cls,
-                                                  struct GNUNET_PeerIdentity *sender,
-                                                  char *msg,
+                                                  struct GNUNET_PeerIdentity *
+                                                  sender, char *msg,
                                                   size_t msg_len,
                                                   size_t msg_len,
-                                                  unsigned int distance,
+                                                  uint32_t distance,
                                                   char *sender_address,
                                                   size_t sender_address_len);
 
                                                   char *sender_address,
                                                   size_t sender_address_len);
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * DV Message, contains a message that was received
 /**
  * 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.
  *
  * 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;
 
   /**
   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
    */
 
   /**
    * 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.
 
 };
 
 
 /**
  * DV Message, indicates that we have learned of a new DV level peer.
+ * Internal.
  *
  * Sender address is copied to the end of this struct.
  */
  *
  * 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
    */
   /**
    * 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
    */
 
   /**
    * 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
 {
  */
 struct GNUNET_DV_SendMessage
 {
@@ -127,19 +153,14 @@ struct GNUNET_DV_SendMessage
   struct GNUNET_PeerIdentity target;
 
   /**
   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?
 
   /**
    * How long can we delay sending?
@@ -149,7 +170,12 @@ struct GNUNET_DV_SendMessage
   /**
    * Size of the address (appended to end of struct)
    */
   /**
    * 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
 
   /*
    * Sender, appended to end of struct tells via whom
@@ -163,22 +189,28 @@ struct GNUNET_DV_SendMessage
  */
 typedef struct
 {
  */
 typedef struct
 {
+  /* Message Header */
   struct GNUNET_MessageHeader header;
 
   /**
    * Cost from received from node to neighbor node, takes distance into account
    */
   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;
 
 
   /**
    * 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
    */
   /**
    * 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;
 
 
 } p2p_dv_MESSAGE_NeighborInfo;
 
@@ -189,27 +221,55 @@ typedef struct
 {
   struct GNUNET_MessageHeader header;
 
 {
   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.
    */
   /**
    * 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!
    */
 
   /**
    * 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;
 
 
 } 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 *
 
 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
 
 #endif