aboutsummaryrefslogtreecommitdiff
path: root/src/dv/dv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dv/dv.h')
-rw-r--r--src/dv/dv.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/src/dv/dv.h b/src/dv/dv.h
new file mode 100644
index 0000000..0d42505
--- /dev/null
+++ b/src/dv/dv.h
@@ -0,0 +1,275 @@
+/*
+ This file is part of GNUnet.
+ (C) 2001, 2002, 2003, 2004, 2009 Christian Grothoff (and other contributing authors)
+
+ 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 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ 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.
+*/
+
+/**
+ * @author Christian Grothoff
+ * @author NOT Nathan Evans
+ * @file dv/dv.h
+ */
+#ifndef DV_H
+#define DV_H
+
+#include "gnunet_common.h"
+
+#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,
+ size_t msg_len,
+ 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! Internal.
+ *
+ * Sender address is copied to the end of this struct,
+ * followed by the actual message received.
+ */
+struct GNUNET_DV_MessageReceived
+{
+ /**
+ * Type: GNUNET_MESSAGE_TYPE_TRANSPORT_DV_MESSAGE
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * The sender of the message
+ */
+ struct GNUNET_PeerIdentity sender;
+
+ /**
+ * The length of the message that was sent (appended to this end of struct)
+ */
+ uint32_t msg_len;
+
+ /**
+ * The distance to the peer that we received the message from
+ */
+ 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.
+ */
+struct GNUNET_DV_ConnectMessage
+{
+ /**
+ * Type: GNUNET_MESSAGE_TYPE_TRANSPORT_DV_MESSAGE
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * The sender of the message
+ */
+ struct GNUNET_PeerIdentity *sender;
+
+ /**
+ * The message that was sent
+ */
+ struct GNUNET_MessageHeader *msg;
+
+ /**
+ * The distance to the peer that we received the message from
+ */
+ uint32_t distance;
+
+ /**
+ * Length of the sender address, appended to end of this message
+ */
+ 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.
+ * Internal.
+ */
+struct GNUNET_DV_SendMessage
+{
+ /**
+ * Type: GNUNET_MESSAGE_TYPE_DV_SEND
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * Intended final recipient of this message
+ */
+ struct GNUNET_PeerIdentity target;
+
+ /**
+ * Message priority
+ */
+ uint32_t priority;
+
+ /**
+ * Unique ID for this message, for confirm callback.
+ */
+ uint32_t uid;
+
+ /**
+ * How long can we delay sending?
+ */
+ struct GNUNET_TIME_Relative timeout;
+
+ /**
+ * Size of the address (appended to end of struct)
+ */
+ uint32_t addrlen;
+
+ /**
+ * The message(s) to be sent.
+ */
+ char *msgbuf;
+
+ /*
+ * Sender, appended to end of struct tells via whom
+ * to send this message.
+ */
+
+};
+
+/**
+ * Message that gets sent between nodes updating dv infos
+ */
+typedef struct
+{
+ /* Message Header */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * Cost from received from node to neighbor node, takes distance into account
+ */
+ 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
+ */
+ uint32_t neighbor_id GNUNET_PACKED;
+
+} p2p_dv_MESSAGE_NeighborInfo;
+
+/**
+ * Message that gets sent between nodes carrying information
+ */
+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.
+ */
+ 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!
+ */
+ 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 (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