X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdv%2Fdv.h;h=0d42505bcbec2b95b99c7acfcec81055e9d21f43;hb=3cd74a0fcf964bee1b4bfd185fb8aa755a3fd089;hp=d43befd70927b60ce5ce26dbbdef32a872366f6c;hpb=54ce17ec50827d3a905a3cb182ccd3c18bbd3668;p=oweals%2Fgnunet.git diff --git a/src/dv/dv.h b/src/dv/dv.h index d43befd70..0d42505bc 100644 --- a/src/dv/dv.h +++ b/src/dv/dv.h @@ -4,7 +4,7 @@ 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 @@ -28,20 +28,27 @@ #include "gnunet_common.h" -#define DEBUG_DV GNUNET_YES -#define DEBUG_DV_API GNUNET_YES +#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, + struct GNUNET_PeerIdentity * + sender, char *msg, size_t msg_len, - unsigned int distance, + 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! + * via DV for this peer! Internal. * * Sender address is copied to the end of this struct, * followed by the actual message received. @@ -59,25 +66,21 @@ 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) */ - size_t msg_len; + 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. */ @@ -101,18 +104,41 @@ struct GNUNET_DV_ConnectMessage /** * 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 { @@ -127,19 +153,14 @@ 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? @@ -149,7 +170,12 @@ struct GNUNET_DV_SendMessage /** * 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 @@ -163,22 +189,28 @@ struct GNUNET_DV_SendMessage */ 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; @@ -189,27 +221,55 @@ 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. */ - 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; +GNUNET_NETWORK_STRUCT_END 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_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