X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdv%2Fdv.h;h=c0a4828a20592a7f55fc05d9b68a9a9e2931bfd2;hb=37defe2dbd9ea4e5a37710404e8046acbdf4a18e;hp=38c6f2a60a7987fb359c43dac25cbf7c36f20415;hpb=d816ced9a78620f055abc3c556736ee2887f1603;p=oweals%2Fgnunet.git diff --git a/src/dv/dv.h b/src/dv/dv.h index 38c6f2a60..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,202 +20,168 @@ /** * @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 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, - unsigned int 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 - */ - struct GNUNET_PeerIdentity sender; - - /** - * The message that was sent + * The distance to the peer that we are now connected to */ - size_t msg_len; + uint32_t distance GNUNET_PACKED; /** - * The distance to the peer that we received the message from + * The other peer (at the given distance). */ - size_t distance; - - /** - * Length of the sender address, appended to end of this message - */ - size_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 - */ - struct GNUNET_MessageHeader *msg; - - /** - * The distance to the peer that we received the message from + * Always zero. */ - size_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. */ - size_t sender_address_len; + struct GNUNET_PeerIdentity peer; }; /** - * Message to send a message over DV via a specific peer + * 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_SendMessage +struct GNUNET_DV_ReceivedMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DV_SEND + * Type: GNUNET_MESSAGE_TYPE_TRANSPORT_DV_RECV */ struct GNUNET_MessageHeader header; /** - * Intended final recipient of this message + * The distance to the peer that we received the message from */ - struct GNUNET_PeerIdentity target; + uint32_t distance GNUNET_PACKED; /** - * The message(s) to be sent. + * The (actual) sender of the message */ - char *msgbuf; + struct GNUNET_PeerIdentity sender; - /** - * The size of the msgbuf - */ - size_t msgbuf_size; + /* payload follows */ +}; - /** - * Message priority - */ - size_t priority; +/** + * Message from plugin to DV service, requesting a + * message to be routed. + */ +struct GNUNET_DV_SendMessage +{ /** - * How long can we delay sending? + * Type: GNUNET_MESSAGE_TYPE_DV_SEND */ - struct GNUNET_TIME_Relative timeout; + struct GNUNET_MessageHeader header; /** - * Size of the address (appended to end of struct) + * Unique ID for this message, for confirm callback, must never be zero. */ - size_t addrlen; + uint32_t uid GNUNET_PACKED; - /* - * 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 - */ - unsigned int 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 { + /** + * Type: GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED. + */ 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. + * What is the new distance? */ - unsigned int sender GNUNET_PACKED; + uint32_t distance GNUNET_PACKED; /** - * Identity of neighbor this message is going to. Should - * be looked up in the set of our own identifiers for - * neighbors! + * The peer for which the distance changed. */ - unsigned int recipient GNUNET_PACKED; + struct GNUNET_PeerIdentity peer; -} p2p_dv_MESSAGE_Data; +}; -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