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_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,
- struct GNUNET_MessageHeader *msg,
- unsigned int distance,
+ char *msg,
+ size_t msg_len,
+ uint32_t distance,
char *sender_address,
size_t sender_address_len);
/**
* 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.
+ * Sender address is copied to the end of this struct,
+ * followed by the actual message received.
*/
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)
*/
- struct GNUNET_MessageHeader *msg;
+ 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.
*/
/**
* 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
{
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?
/**
* 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
*/
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;
{
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;
+
struct GNUNET_DV_Handle *
GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched,
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