X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdv%2Fdv.h;h=10b531cedc0e9efcae5a5aeeccd2e7698bd20653;hb=cb3c882dbb05a797728dfd8b5983ade5a8999eac;hp=3063bc9178871d7b3b9bd7ba767f6254c1f1a214;hpb=49da466bce647497cfc034db9e9761804e9d1a36;p=oweals%2Fgnunet.git diff --git a/src/dv/dv.h b/src/dv/dv.h index 3063bc917..10b531ced 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,21 +28,28 @@ #include "gnunet_common.h" -#define DEBUG_DV GNUNET_YES -#define DEBUG_DV_API GNUNET_YES +#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_NO +#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, - struct GNUNET_MessageHeader *msg, - unsigned int distance, + char *msg, + size_t msg_len, + uint32_t distance, char *sender_address, size_t sender_address_len); /** * 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. + * Sender address is copied to the end of this struct, + * followed by the actual message received. */ struct GNUNET_DV_MessageReceived { @@ -54,28 +61,24 @@ struct GNUNET_DV_MessageReceived /** * The sender of the message */ - struct GNUNET_PeerIdentity *sender; + struct GNUNET_PeerIdentity sender; /** - * The message that was sent + * The length of the message that was sent (appended to this end of struct) */ - struct GNUNET_MessageHeader *msg; + 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. */ @@ -99,18 +102,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 { @@ -125,19 +151,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? @@ -147,7 +168,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 @@ -156,10 +182,91 @@ struct GNUNET_DV_SendMessage }; +/** + * 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; + + struct GNUNET_DV_Handle * -GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched, - const struct GNUNET_CONFIGURATION_Handle *cfg, +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