2 This file is part of GNUnet.
3 (C) 2001, 2002, 2003, 2004, 2009, 2011 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @author Christian Grothoff
23 * @author Nathan Evans
32 * Size of the bloom filter the DHT uses to filter peers.
34 #define DHT_BLOOM_SIZE 128
37 GNUNET_NETWORK_STRUCT_BEGIN
40 * Message which indicates the DHT should cancel outstanding
41 * requests and discard any state.
43 struct GNUNET_DHT_ClientGetStopMessage
46 * Type: GNUNET_MESSAGE_TYPE_DHT_GET_STOP
48 struct GNUNET_MessageHeader header;
53 uint32_t reserved GNUNET_PACKED;
56 * Unique ID identifying this request
58 uint64_t unique_id GNUNET_PACKED;
63 struct GNUNET_HashCode key;
69 * DHT GET message sent from clients to service. Indicates that a GET
70 * request should be issued.
72 struct GNUNET_DHT_ClientGetMessage
75 * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET
77 struct GNUNET_MessageHeader header;
80 * Message options, actually an 'enum GNUNET_DHT_RouteOption' value.
82 uint32_t options GNUNET_PACKED;
85 * Replication level for this message
87 uint32_t desired_replication_level GNUNET_PACKED;
90 * The type for the data for the GET request; actually an 'enum
96 * The key to search for
98 struct GNUNET_HashCode key;
101 * Unique ID identifying this request, if 0 then
102 * the client will not expect a response
104 uint64_t unique_id GNUNET_PACKED;
106 /* Possibly followed by xquery, copied to end of this dealy do */
112 * Reply to a GET send from the service to a client.
114 struct GNUNET_DHT_ClientResultMessage
117 * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_RESULT
119 struct GNUNET_MessageHeader header;
122 * The type for the data.
127 * Number of peers recorded in the outgoing path from source to the
128 * storgage location of this message.
130 uint32_t put_path_length GNUNET_PACKED;
133 * The number of peer identities recorded from the storage location
136 uint32_t get_path_length GNUNET_PACKED;
139 * Unique ID of the matching GET request.
141 uint64_t unique_id GNUNET_PACKED;
144 * When does this entry expire?
146 struct GNUNET_TIME_AbsoluteNBO expiration;
149 * The key that was searched for
151 struct GNUNET_HashCode key;
153 /* put path, get path and actual data are copied to end of this dealy do */
159 * Message to insert data into the DHT, sent from clients to DHT service.
161 struct GNUNET_DHT_ClientPutMessage
164 * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT
166 struct GNUNET_MessageHeader header;
169 * The type of data to insert.
171 uint32_t type GNUNET_PACKED;
174 * Message options, actually an 'enum GNUNET_DHT_RouteOption' value.
176 uint32_t options GNUNET_PACKED;
179 * Replication level for this message
181 uint32_t desired_replication_level GNUNET_PACKED;
184 * Unique ID for the PUT message.
186 uint64_t unique_id GNUNET_PACKED;
189 * How long should this data persist?
191 struct GNUNET_TIME_AbsoluteNBO expiration;
194 * The key to store the value under.
196 struct GNUNET_HashCode key;
198 /* DATA copied to end of this message */
204 * Message to confirming receipt of PUT, sent from DHT service to clients.
206 struct GNUNET_DHT_ClientPutConfirmationMessage
209 * Type: GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT_OK
211 struct GNUNET_MessageHeader header;
216 uint32_t reserved GNUNET_PACKED;
219 * Unique ID from the PUT message that is being confirmed.
221 uint64_t unique_id GNUNET_PACKED;
228 * Message to monitor put requests going through peer, DHT service -> clients.
230 struct GNUNET_DHT_MonitorPutMessage
233 * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_PUT
235 struct GNUNET_MessageHeader header;
238 * Message options, actually an 'enum GNUNET_DHT_RouteOption' value.
240 uint32_t options GNUNET_PACKED;
243 * The type of data in the request.
245 uint32_t type GNUNET_PACKED;
250 uint32_t hop_count GNUNET_PACKED;
253 * Replication level for this message
255 uint32_t desired_replication_level GNUNET_PACKED;
258 * Number of peers recorded in the outgoing path from source to the
259 * storage location of this message.
261 uint32_t put_path_length GNUNET_PACKED;
264 * How long should this data persist?
266 struct GNUNET_TIME_AbsoluteNBO expiration_time;
269 * The key to store the value under.
271 struct GNUNET_HashCode key;
273 /* put path (if tracked) */
281 * Message to request monitoring messages, clients -> DHT service.
283 struct GNUNET_DHT_MonitorStartStopMessage
286 * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_(START|STOP)
288 struct GNUNET_MessageHeader header;
291 * The type of data desired, GNUNET_BLOCK_TYPE_ANY for all.
293 uint32_t type GNUNET_PACKED;
296 * Flag whether to notify about GET messages.
298 int16_t get GNUNET_PACKED;
301 * Flag whether to notify about GET_REPONSE messages.
303 int16_t get_resp GNUNET_PACKED;
306 * Flag whether to notify about PUT messages.
308 int16_t put GNUNET_PACKED;
311 * Flag whether to use the provided key to filter messages.
313 int16_t filter_key GNUNET_PACKED;
316 * The key to filter messages by.
318 struct GNUNET_HashCode key;
323 * Message to monitor get requests going through peer, DHT service -> clients.
325 struct GNUNET_DHT_MonitorGetMessage
328 * Type: GNUNET_MESSAGE_TYPE_DHT_MONITOR_PUT
330 struct GNUNET_MessageHeader header;
333 * Message options, actually an 'enum GNUNET_DHT_RouteOption' value.
335 uint32_t options GNUNET_PACKED;
338 * The type of data in the request.
340 uint32_t type GNUNET_PACKED;
345 uint32_t hop_count GNUNET_PACKED;
348 * Replication level for this message
350 uint32_t desired_replication_level GNUNET_PACKED;
353 * Number of peers recorded in the outgoing path from source to the
354 * storage location of this message.
356 uint32_t get_path_length GNUNET_PACKED;
359 * The key to store the value under.
361 struct GNUNET_HashCode key;
363 /* get path (if tracked) */
368 * Message to monitor get results going through peer, DHT service -> clients.
370 struct GNUNET_DHT_MonitorGetRespMessage
373 * Type: GNUNET_MESSAGE_TYPE_DHT_P2P_RESULT
375 struct GNUNET_MessageHeader header;
380 uint32_t type GNUNET_PACKED;
383 * Length of the PUT path that follows (if tracked).
385 uint32_t put_path_length GNUNET_PACKED;
388 * Length of the GET path that follows (if tracked).
390 uint32_t get_path_length GNUNET_PACKED;
393 * When does the content expire?
395 struct GNUNET_TIME_AbsoluteNBO expiration_time;
398 * The key of the corresponding GET request.
400 struct GNUNET_HashCode key;
402 /* put path (if tracked) */
404 /* get path (if tracked) */
410 GNUNET_NETWORK_STRUCT_END