/*
This file is part of GNUnet.
- (C) 2001, 2002, 2003, 2004, 2009 Christian Grothoff (and other contributing authors)
+ (C) 2013 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 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
/**
* @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_GOSSIP GNUNET_NO
-#define DEBUG_DV_GOSSIP_SEND GNUNET_NO
-#define DEBUG_DV_GOSSIP_RECEIPT GNUNET_NO
-#define DEBUG_DV_MESSAGES GNUNET_YES
-#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,
- 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.
+ * 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_TRANSPORT_DV_CONNECT
*/
struct GNUNET_MessageHeader header;
/**
- * The sender of the message
- */
- struct GNUNET_PeerIdentity sender;
-
- /**
- * The message that was sent
- */
- uint32_t msg_len;
-
- /**
- * The distance to the peer that we received the message from
+ * The distance to the peer that we are now connected to
*/
- uint32_t distance;
+ uint32_t distance GNUNET_PACKED;
/**
- * Length of the sender address, appended to end of this message
+ * The other peer (at the given distance).
*/
- uint32_t sender_address_len;
+ struct GNUNET_PeerIdentity peer;
};
/**
- * DV Message, indicates that we have learned of a new DV level peer.
- * Internal.
+ * 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_TRANSPORT_DV_DISCONNECT
*/
struct GNUNET_MessageHeader header;
/**
- * The sender of the message
+ * Always zero.
*/
- 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;
+ uint32_t reserved GNUNET_PACKED;
/**
- * Length of the sender address, appended to end of this message
+ * The peer that is no longer available.
*/
- uint32_t sender_address_len;
+ struct GNUNET_PeerIdentity peer;
};
+
/**
- * Message to return result from a send attempt.
- * Internal.
+ * 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_SendResultMessage
+struct GNUNET_DV_ReceivedMessage
{
/**
- * Type: GNUNET_MESSAGE_TYPE_DV_SEND_RESULT
+ * Type: GNUNET_MESSAGE_TYPE_TRANSPORT_DV_RECV
*/
struct GNUNET_MessageHeader header;
/**
- * Unique ID for attempted sent message.
+ * The distance to the peer that we received the message from
*/
- uint32_t uid;
+ uint32_t distance GNUNET_PACKED;
/**
- * Result of attempted send, 0 for send okay,
- * 1 for failure of any reason.
+ * The (actual) sender of the message
*/
- uint32_t result;
+ struct GNUNET_PeerIdentity sender;
+
+ /* payload follows */
};
+
/**
- * Message to send a message over DV via a specific peer.
- * Internal.
+ * Message from plugin to DV service, requesting a
+ * message to be routed.
*/
struct GNUNET_DV_SendMessage
{
struct GNUNET_MessageHeader header;
/**
- * Intended final recipient of this message
- */
- struct GNUNET_PeerIdentity target;
-
- /**
- * The size of the msgbuf
+ * Unique ID for this message, for confirm callback, must never be zero.
*/
- uint32_t msgbuf_size;
-
- /**
- * 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;
+ uint32_t uid GNUNET_PACKED;
/**
- * The message(s) to be sent.
- */
- char *msgbuf;
-
- /*
- * Sender, appended to end of struct tells via whom
- * to send this message.
+ * The (actual) target of the message
*/
+ struct GNUNET_PeerIdentity target;
};
+
/**
- * Message that gets sent between nodes updating dv infos
+ * Message from service to DV plugin, saying that a
+ * SEND request was handled.
*/
-typedef struct
+struct GNUNET_DV_AckMessage
{
- /* Message Header */
- struct GNUNET_MessageHeader header;
-
/**
- * Cost from received from node to neighbor node, takes distance into account
+ * Type: GNUNET_MESSAGE_TYPE_DV_SEND_ACK or
+ * GNUNET_MESSAGE_TYPE_DV_SEND_NACK.
*/
- uint32_t cost GNUNET_PACKED;
+ struct GNUNET_MessageHeader header;
/**
- * Identity of neighbor we learned information about
+ * Which message is being acknowledged?
*/
- struct GNUNET_PeerIdentity neighbor;
+ uint32_t uid GNUNET_PACKED;
/**
- * PublicKey of neighbor.
+ * The (actual) target of the message
*/
- struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
+ struct GNUNET_PeerIdentity target;
- /**
- * 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
+ * Message from service to DV plugin, saying that our
+ * distance to another peer changed.
*/
-typedef struct
+struct GNUNET_DV_DistanceUpdateMessage
{
- struct GNUNET_MessageHeader header;
-
-#if DEBUG_DV_MESSAGES
/**
- * Unique ID for this message.
- */
- uint32_t uid GNUNET_PACKED;
-#else
- /*
- * Alignment.
+ * Type: GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
*/
- uint32_t reserved GNUNET_PACKED;
-#endif
-
- /**
- * 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;
+ struct GNUNET_MessageHeader header;
/**
- * Identity of neighbor this message is going to. Should
- * be looked up in the set of our own identifiers for
- * neighbors!
+ * What is the new distance?
*/
- 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;
+ uint32_t distance GNUNET_PACKED;
/**
- * Identity of neighbor that was disconnected.
+ * The peer for which the distance changed.
*/
- uint32_t peer_id GNUNET_PACKED;
+ struct GNUNET_PeerIdentity peer;
-} p2p_dv_MESSAGE_Disconnect;
+};
-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