X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdht%2Fdht.h;h=772471a7c40a78c2a163f8716f0aeb6491bb6f69;hb=d0b4927e6ab7e8b9874dd7807055e77fb4c5163f;hp=2bafc369491562620455012ebbd3ac77a0b688a2;hpb=b85f126feb0f722be9c37a5ba0fa1a053b82a704;p=oweals%2Fgnunet.git diff --git a/src/dht/dht.h b/src/dht/dht.h index 2bafc3694..772471a7c 100644 --- a/src/dht/dht.h +++ b/src/dht/dht.h @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2009 Christian Grothoff (and other contributing authors) + (C) 2001, 2002, 2003, 2004, 2009, 2011 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 @@ -24,22 +24,26 @@ * @file dht/dht.h */ -#ifndef DHT_H_ -#define DHT_H_ +#ifndef DHT_H +#define DHT_H -#define DEBUG_DHT GNUNET_NO -typedef void (*GNUNET_DHT_MessageReceivedHandler) (void *cls, - const struct GNUNET_MessageHeader - * msg); +/** + * Size of the bloom filter the DHT uses to filter peers. + */ +#define DHT_BLOOM_SIZE 128 + + +GNUNET_NETWORK_STRUCT_BEGIN /** - * FIXME. + * Message which indicates the DHT should cancel outstanding + * requests and discard any state. */ -struct GNUNET_DHT_StopMessage +struct GNUNET_DHT_ClientGetStopMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_MESSAGE + * Type: GNUNET_MESSAGE_TYPE_DHT_GET_STOP */ struct GNUNET_MessageHeader header; @@ -53,146 +57,356 @@ struct GNUNET_DHT_StopMessage */ uint64_t unique_id GNUNET_PACKED; + /** + * Key of this request + */ + struct GNUNET_HashCode key; + }; /** - * Generic DHT message, wrapper for other message types + * DHT GET message sent from clients to service. Indicates that a GET + * request should be issued. */ -struct GNUNET_DHT_RouteMessage +struct GNUNET_DHT_ClientGetMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_ROUTE + * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET */ struct GNUNET_MessageHeader header; /** - * Message options + * Message options, actually an 'enum GNUNET_DHT_RouteOption' value. */ uint32_t options GNUNET_PACKED; + /** + * Replication level for this message + */ + uint32_t desired_replication_level GNUNET_PACKED; + + /** + * The type for the data for the GET request; actually an 'enum + * GNUNET_BLOCK_Type'. + */ + uint32_t type; + /** * The key to search for */ - GNUNET_HashCode key; + struct GNUNET_HashCode key; /** - * Unique ID identifying this request + * Unique ID identifying this request, if 0 then + * the client will not expect a response */ uint64_t unique_id GNUNET_PACKED; + /* Possibly followed by xquery, copied to end of this dealy do */ + +}; + + +/** + * Reply to a GET send from the service to a client. + */ +struct GNUNET_DHT_ClientResultMessage +{ /** - * Replication level for this message + * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_RESULT */ - uint32_t desired_replication_level GNUNET_PACKED; + struct GNUNET_MessageHeader header; + + /** + * The type for the data. + */ + uint32_t type; + + /** + * Number of peers recorded in the outgoing path from source to the + * storgage location of this message. + */ + uint32_t put_path_length GNUNET_PACKED; + + /** + * The number of peer identities recorded from the storage location + * to this peer. + */ + uint32_t get_path_length GNUNET_PACKED; + + /** + * Unique ID of the matching GET request. + */ + uint64_t unique_id GNUNET_PACKED; /** - * Is this message uniquely identified? If so it will - * be fire and forget, if not we will wait for a receipt - * from the service. + * When does this entry expire? + */ + struct GNUNET_TIME_AbsoluteNBO expiration; + + /** + * The key that was searched for */ - uint32_t unique GNUNET_PACKED; + struct GNUNET_HashCode key; - /* GNUNET_MessageHeader *enc actual DHT message, copied to end of this dealy do */ + /* put path, get path and actual data are copied to end of this dealy do */ }; -struct GNUNET_DHT_RouteResultMessage + +/** + * Message to insert data into the DHT, sent from clients to DHT service. + */ +struct GNUNET_DHT_ClientPutMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_ROUTE_RESULT + * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT */ struct GNUNET_MessageHeader header; /** - * Message options + * The type of data to insert. + */ + uint32_t type GNUNET_PACKED; + + /** + * Message options, actually an 'enum GNUNET_DHT_RouteOption' value. */ uint32_t options GNUNET_PACKED; /** - * The key that was searched for + * Replication level for this message */ - GNUNET_HashCode key; + uint32_t desired_replication_level GNUNET_PACKED; /** - * Unique ID identifying this request + * Unique ID for the PUT message. */ uint64_t unique_id GNUNET_PACKED; - /* GNUNET_MessageHeader *enc actual DHT message, copied to end of this dealy do */ + /** + * How long should this data persist? + */ + struct GNUNET_TIME_AbsoluteNBO expiration; + + /** + * The key to store the value under. + */ + struct GNUNET_HashCode key; + + /* DATA copied to end of this message */ + }; + /** - * Message to insert data into the DHT + * Message to confirming receipt of PUT, sent from DHT service to clients. */ -struct GNUNET_DHT_PutMessage +struct GNUNET_DHT_ClientPutConfirmationMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_PUT + * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT_OK */ struct GNUNET_MessageHeader header; /** - * The type of data to insert. + * Always zero. + */ + uint32_t reserved GNUNET_PACKED; + + /** + * Unique ID from the PUT message that is being confirmed. + */ + uint64_t unique_id GNUNET_PACKED; + +}; + + + +/** + * Message to monitor put requests going through peer, DHT service -> clients. + */ +struct GNUNET_DHT_MonitorPutMessage +{ + /** + * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_PUT + */ + struct GNUNET_MessageHeader header; + + /** + * Message options, actually an 'enum GNUNET_DHT_RouteOption' value. + */ + uint32_t options GNUNET_PACKED; + + /** + * The type of data in the request. + */ + uint32_t type GNUNET_PACKED; + + /** + * Hop count so far. + */ + uint32_t hop_count GNUNET_PACKED; + + /** + * Replication level for this message + */ + uint32_t desired_replication_level GNUNET_PACKED; + + /** + * Number of peers recorded in the outgoing path from source to the + * storage location of this message. */ - size_t type GNUNET_PACKED; + uint32_t put_path_length GNUNET_PACKED; /** * How long should this data persist? */ - struct GNUNET_TIME_AbsoluteNBO expiration; + struct GNUNET_TIME_AbsoluteNBO expiration_time; /** - * The size of the data, appended to the end of this message. + * The key to store the value under. */ - size_t data_size GNUNET_PACKED; + struct GNUNET_HashCode key; + + /* put path (if tracked) */ + + /* Payload */ }; /** - * Message to request data from the DHT + * Message to request monitoring messages, clients -> DHT service. */ -struct GNUNET_DHT_GetMessage +struct GNUNET_DHT_MonitorStartStopMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_GET + * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_(START|STOP) */ struct GNUNET_MessageHeader header; /** - * The type for the data for the GET request + * The type of data desired, GNUNET_BLOCK_TYPE_ANY for all. */ - uint32_t type; + uint32_t type GNUNET_PACKED; + + /** + * Flag whether to notify about GET messages. + */ + int16_t get GNUNET_PACKED; + + /** + * Flag whether to notify about GET_REPONSE messages. + */ + int16_t get_resp GNUNET_PACKED; + /** + * Flag whether to notify about PUT messages. + */ + int16_t put GNUNET_PACKED; + + /** + * Flag whether to use the provided key to filter messages. + */ + int16_t filter_key GNUNET_PACKED; + + /** + * The key to filter messages by. + */ + struct GNUNET_HashCode key; }; + /** - * Message to return data from the DHT + * Message to monitor get requests going through peer, DHT service -> clients. */ -struct GNUNET_DHT_GetResultMessage +struct GNUNET_DHT_MonitorGetMessage { /** - * Type: GNUNET_MESSAGE_TYPE_DHT_GET_RESULT + * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_PUT */ struct GNUNET_MessageHeader header; /** - * The type for the data for the GET request + * Message options, actually an 'enum GNUNET_DHT_RouteOption' value. */ - uint32_t type; + uint32_t options GNUNET_PACKED; /** - * The key to search for + * The type of data in the request. */ - GNUNET_HashCode key; + uint32_t type GNUNET_PACKED; /** - * When does this entry expire? + * Hop count + */ + uint32_t hop_count GNUNET_PACKED; + + /** + * Replication level for this message */ - struct GNUNET_TIME_Absolute expiration; + uint32_t desired_replication_level GNUNET_PACKED; + + /** + * Number of peers recorded in the outgoing path from source to the + * storage location of this message. + */ + uint32_t get_path_length GNUNET_PACKED; + + /** + * The key to store the value under. + */ + struct GNUNET_HashCode key; + + /* get path (if tracked) */ + +}; + +/** + * Message to monitor get results going through peer, DHT service -> clients. + */ +struct GNUNET_DHT_MonitorGetRespMessage +{ + /** + * Type: GNUNET_MESSAGE_TYPE_DHT_P2P_RESULT + */ + struct GNUNET_MessageHeader header; + + /** + * Content type. + */ + uint32_t type GNUNET_PACKED; + + /** + * Length of the PUT path that follows (if tracked). + */ + uint32_t put_path_length GNUNET_PACKED; + + /** + * Length of the GET path that follows (if tracked). + */ + uint32_t get_path_length GNUNET_PACKED; + + /** + * When does the content expire? + */ + struct GNUNET_TIME_AbsoluteNBO expiration_time; + + /** + * The key of the corresponding GET request. + */ + struct GNUNET_HashCode key; + + /* put path (if tracked) */ + + /* get path (if tracked) */ + + /* Payload */ }; +GNUNET_NETWORK_STRUCT_END -#endif /* DHT_H_ */ +#endif