X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdv%2Fdv.h;h=c0a4828a20592a7f55fc05d9b68a9a9e2931bfd2;hb=37defe2dbd9ea4e5a37710404e8046acbdf4a18e;hp=f80ecd4ed9ddad8d10fedfe9dd42ca36bce16033;hpb=5f9efe3ff20656b7900fc0b503f3e0cbe75eb20a;p=oweals%2Fgnunet.git diff --git a/src/dv/dv.h b/src/dv/dv.h index f80ecd4ed..c0a4828a2 100644 --- a/src/dv/dv.h +++ b/src/dv/dv.h @@ -1,10 +1,10 @@ /* 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 @@ -20,123 +20,98 @@ /** * @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_YES -#define DEBUG_DV_GOSSIP_RECEIPT GNUNET_YES -#define DEBUG_DV GNUNET_YES -#define DEBUG_DV_API GNUNET_YES - -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! - * - * 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 + * The distance to the peer that we are now connected to */ - struct GNUNET_PeerIdentity sender; + uint32_t distance GNUNET_PACKED; /** - * The message that was sent + * The other peer (at the given distance). */ - uint32_t msg_len; - - /** - * 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; + struct GNUNET_PeerIdentity peer; }; /** - * DV Message, indicates that we have learned of a new DV level peer. + * 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 - */ - struct GNUNET_PeerIdentity *sender; - - /** - * The message that was sent + * Always zero. */ - struct GNUNET_MessageHeader *msg; + uint32_t reserved GNUNET_PACKED; /** - * The distance to the peer that we received the message from + * The peer that is no longer available. */ - uint32_t distance; - - /** - * Length of the sender address, appended to end of this message - */ - uint32_t sender_address_len; + struct GNUNET_PeerIdentity peer; }; + /** - * Message to return result from a send attempt + * 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 + * Message from plugin to DV service, requesting a + * message to be routed. */ struct GNUNET_DV_SendMessage { @@ -146,120 +121,67 @@ 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; + uint32_t uid GNUNET_PACKED; /** - * 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. + * 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. */ - unsigned int 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; - /** - * Identity of peer that ultimately sent the message. - * Should be looked up in the set of 'neighbor_id's of - * the referring peer. + * Type: GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED. */ - unsigned int 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? */ - unsigned int 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