Move 3 ASN1 dissectors to 'clean' group; move 1 PIDL dissector to 'dirty' group.
[metze/wireshark/wip.git] / epan / dissectors / packet-edonkey.h
1 /* packet-edonkey.h
2  * Declarations for edonkey dissection
3  * Copyright 2003, Xuan Zhang <xz@aemail4u.com>
4  * Copyright 2007, Stefano Picerno <stefano.picerno@gmail.com>
5  * Copyright 2008, Stefan Monhof <stefan.monhof@stud.uni-due.de>
6  *
7  * eDonkey dissector based on protocol descriptions from mldonkey:
8  *  http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/edonkey-protocol.txt 
9  *  http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/overnet-protocol.txt
10  *
11  * Kademlia dissector based on source code inspection of aMule 2.1.3 and eMule 0.48a
12  * Modified and added on the basis of information and names from the eMule 0.49a source code
13  *
14  * $Id$
15  *
16  * Wireshark - Network traffic analyzer
17  * By Gerald Combs <gerald@wireshark.org>
18  * Copyright 1998 Gerald Combs
19  *
20  * This program is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU General Public License
22  * as published by the Free Software Foundation; either version 2
23  * of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with this program; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33  */
34
35 void proto_register_edonkey(void);
36
37 #define EDONKEY_MAX_SNAP_SIZE   1500
38 #define EDONKEY_TCP_HEADER_LENGTH  5
39 #define EDONKEY_UDP_HEADER_LENGTH  2
40
41 /* Definitions for EDONKEY protocols */
42 #define EDONKEY_PROTO_EDONKEY        0xe3  /* eDonkey */
43 #define EDONKEY_PROTO_EMULE_EXT      0xc5  /* eMule extensions */
44 #define EDONKEY_PROTO_EMULE_COMP     0xd4  /* eMule compressed (data is zlib compressed) */
45
46 /* Definitions for EDONKEY messages */
47 /* EDONKEY TCP MESSAGES */
48 /* Client <-> Server */
49 #define EDONKEY_MSG_HELLO                0x01
50 #define EDONKEY_MSG_BAD_PROTO            0x05  
51 #define EDONKEY_MSG_GET_SERVER_LIST      0x14
52 #define EDONKEY_MSG_OFFER_FILES          0x15
53 #define EDONKEY_MSG_SEARCH_FILES         0x16
54 #define EDONKEY_MSG_DISCONNECT           0x18
55 #define EDONKEY_MSG_GET_SOURCES          0x19
56 #define EDONKEY_MSG_SEARCH_USER          0x1a
57 /* define EDONKEY_MSG_UNKNOWN            0x1b */
58 #define EDONKEY_MSG_CLIENT_CB_REQ        0x1c
59 /* define EDONKEY_MSG_UNKNOWN            0x20 */
60 #define EDONKEY_MSG_MORE_RESULTS         0x21
61 #define EDONKEY_MSG_GET_SOURCES_OBFU     0x23
62 #define EDONKEY_MSG_SERVER_LIST          0x32
63 #define EDONKEY_MSG_SEARCH_FILE_RESULTS  0x33
64 #define EDONKEY_MSG_SERVER_STATUS        0x34
65 #define EDONKEY_MSG_SERVER_CB_REQ        0x35
66 #define EDONKEY_MSG_CALLBACK_FAIL        0x36
67 #define EDONKEY_MSG_SERVER_MESSAGE       0x38
68 #define EDONKEY_MSG_ID_CHANGE            0x40
69 #define EDONKEY_MSG_SERVER_INFO_DATA     0x41
70 #define EDONKEY_MSG_FOUND_SOURCES        0x42
71 #define EDONKEY_MSG_SEARCH_USER_RESULTS  0x43
72 #define EDONKEY_MSG_FOUND_SOURCES_OBFU   0x44
73
74 /* Client <-> Client */
75 #define EDONKEY_MSG_HELLO_CLIENT         0x10 /* 0x01 0x10 */
76 #define EDONKEY_MSG_SENDING_PART         0x46 
77 #define EDONKEY_MSG_REQUEST_PARTS        0x47
78 #define EDONKEY_MSG_NO_SUCH_FILE         0x48
79 #define EDONKEY_MSG_END_OF_DOWNLOAD      0x49
80 #define EDONKEY_MSG_VIEW_FILES           0x4a
81 #define EDONKEY_MSG_VIEW_FILES_ANSWER    0x4b
82 #define EDONKEY_MSG_HELLO_ANSWER         0x4c
83 #define EDONKEY_MSG_NEW_CLIENT_ID        0x4d
84 #define EDONKEY_MSG_CLIENT_MESSAGE       0x4e
85 #define EDONKEY_MSG_FILE_STATUS_REQUEST  0x4f
86 #define EDONKEY_MSG_FILE_STATUS          0x50
87 #define EDONKEY_MSG_HASHSET_REQUEST      0x51
88 #define EDONKEY_MSG_HASHSET_ANSWER       0x52
89 /*#define EDONKEY_MSG_UNKNOWN              0x53 */
90 #define EDONKEY_MSG_SLOT_REQUEST         0x54
91 #define EDONKEY_MSG_SLOT_GIVEN           0x55
92 #define EDONKEY_MSG_SLOT_RELEASE         0x56
93 #define EDONKEY_MSG_SLOT_TAKEN           0x57
94 #define EDONKEY_MSG_FILE_REQUEST         0x58 
95 #define EDONKEY_MSG_FILE_REQUEST_ANSWER  0x59
96 /*#define EDONKEY_MSG_UNKNOWN              0x5b*/
97 #define EDONKEY_MSG_GET_SHARED_DIRS      0x5d
98 #define EDONKEY_MSG_GET_SHARED_FILES     0x5e
99 #define EDONKEY_MSG_SHARED_DIRS          0x5f
100 #define EDONKEY_MSG_SHARED_FILES         0x60
101 #define EDONKEY_MSG_SHARED_DENIED        0x61
102
103 /* OVERNET EXTENSIONS */
104 /*#define OVERNET_MSG_UNKNOWN              0x62*/
105 /*#define OVERNET_MSG_UNKNOWN              0x63*/
106
107 /* EMULE EXTENSIONS */
108 #define EMULE_MSG_HELLO                  0x01
109 #define EMULE_MSG_HELLO_ANSWER           0x02
110 #define EMULE_MSG_DATA_COMPRESSED        0x40
111 #define EMULE_MSG_QUEUE_RANKING          0x60
112 #define EMULE_MSG_FILE_DESC              0x61
113 #define EMULE_MSG_SOURCES_REQUEST        0x81
114 #define EMULE_MSG_SOURCES_ANSWER         0x82
115 #define EMULE_MSG_PUBLIC_KEY             0x85
116 #define EMULE_MSG_SIGNATURE              0x86
117 #define EMULE_MSG_SEC_IDENT_STATE        0x87
118 #define EMULE_MSG_MULTIPACKET            0x92
119 #define EMULE_MSG_MULTIPACKET_ANSWER     0x93
120 #define EMULE_MSG_CALLBACK               0x99
121 #define EMULE_MSG_AICH_REQUEST           0x9b
122 #define EMULE_MSG_AICH_ANSWER            0x9c
123 #define EMULE_MSG_AICHFILEHASH_ANSWER    0x9d
124 #define EMULE_MSG_AICHFILEHASH_REQUEST   0x9e
125 #define EMULE_MSG_DATA_COMPRESSED_64     0xa1
126 #define EMULE_MSG_SENDING_PART_64        0xa2
127 #define EMULE_MSG_REQUEST_PARTS_64       0xa3
128 #define EMULE_MSG_MULTIPACKET_EXT        0xa4
129
130 /* EDONKEY UDP MESSAGES */
131 #define EDONKEY_MSG_UDP_SERVER_STATUS_REQUEST      0x96
132 #define EDONKEY_MSG_UDP_SERVER_STATUS              0x97
133 #define EDONKEY_MSG_UDP_SEARCH_FILE                0x98
134 #define EDONKEY_MSG_UDP_SEARCH_FILE_RESULTS        0x99
135 #define EDONKEY_MSG_UDP_GET_SOURCES                0x9a
136 #define EDONKEY_MSG_UDP_FOUND_SOURCES              0x9b
137 #define EDONKEY_MSG_UDP_CALLBACK_REQUEST           0x9c
138 #define EDONKEY_MSG_UDP_CALLBACK_FAIL              0x9e
139 /* #define EDONKEY_MSG_UDP_UNKNOWN                    0xa0 */
140 #define EDONKEY_MSG_UDP_SERVER_LIST                0xa1
141 #define EDONKEY_MSG_UDP_GET_SERVER_INFO            0xa2
142 #define EDONKEY_MSG_UDP_SERVER_INFO                0xa3
143 #define EDONKEY_MSG_UDP_GET_SERVER_LIST            0xa4
144
145 /* EMULE UDP EXTENSIONS */
146 #define EMULE_MSG_UDP_REASKFILEPING      0x90
147 #define EMULE_MSG_UDP_REASKACK           0x91
148 #define EMULE_MSG_UDP_FILE_NOT_FOUND     0x92
149 #define EMULE_MSG_UDP_QUEUE_FULL         0x93
150
151 /* OVERNET UDP EXTENSIONS */
152 #define OVERNET_MSG_UDP_CONNECT                     0x0a
153 #define OVERNET_MSG_UDP_CONNECT_REPLY               0x0b
154 #define OVERNET_MSG_UDP_PUBLICIZE                   0x0c
155 #define OVERNET_MSG_UDP_PUBLICIZE_ACK               0x0d
156 #define OVERNET_MSG_UDP_SEARCH                      0x0e
157 #define OVERNET_MSG_UDP_SEARCH_NEXT                 0x0f
158 #define OVERNET_MSG_UDP_SEARCH_INFO                 0x10
159 #define OVERNET_MSG_UDP_SEARCH_RESULT               0x11
160 #define OVERNET_MSG_UDP_SEARCH_END                  0x12
161 #define OVERNET_MSG_UDP_PUBLISH                     0x13
162 #define OVERNET_MSG_UDP_PUBLISH_ACK                 0x14
163 #define OVERNET_MSG_UDP_IDENTIFY_REPLY              0x15
164 #define OVERNET_MSG_UDP_IDENTIFY_ACK                0x16
165 #define OVERNET_MSG_UDP_FIREWALL_CONNECTION         0x18
166 #define OVERNET_MSG_UDP_FIREWALL_CONNECTION_ACK     0x19
167 #define OVERNET_MSG_UDP_FIREWALL_CONNECTION_NACK    0x1a
168 #define OVERNET_MSG_UDP_IP_QUERY                    0x1b 
169 #define OVERNET_MSG_UDP_IP_QUERY_ANSWER             0x1c 
170 #define OVERNET_MSG_UDP_IP_QUERY_END                0x1d 
171 #define OVERNET_MSG_UDP_IDENTIFY                    0x1e 
172 /*#define OVERNET_MSG_UDP_UNKNOWN                    0x21  */
173
174 /* EDONKEY META TAG TYPES */
175 #define EDONKEY_MTAG_UNKNOWN             0x00
176 #define EDONKEY_MTAG_HASH                0x01
177 #define EDONKEY_MTAG_STRING              0x02
178 #define EDONKEY_MTAG_DWORD               0x03
179 #define EDONKEY_MTAG_FLOAT               0x04
180 #define EDONKEY_MTAG_BOOL                0x05
181 #define EDONKEY_MTAG_BOOL_ARRAY          0x06
182 #define EDONKEY_MTAG_BLOB                0x07
183 #define EDONKEY_MTAG_WORD                0x08
184 #define EDONKEY_MTAG_BYTE                0x09
185 #define EDONKEY_MTAG_BSOB                0x0a
186 #define EDONKEY_MTAG_STR1                0x11
187 #define EDONKEY_MTAG_STR16               0x20
188 #define EDONKEY_MTAG_SHORTNAME           0x80
189
190 /* EDONKEY SPECIAL TAGS */
191 #define EDONKEY_STAG_UNKNOWN             0x00
192 #define EDONKEY_STAG_NAME                0x01
193 #define EDONKEY_STAG_SIZE                0x02
194 #define EDONKEY_STAG_TYPE                0x03
195 #define EDONKEY_STAG_FORMAT              0x04
196 #define EDONKEY_STAG_COLLECTION          0x05
197 #define EDONKEY_STAG_PART_PATH           0x06
198 #define EDONKEY_STAG_PART_HASH           0x07
199 #define EDONKEY_STAG_COPIED              0x08
200 #define EDONKEY_STAG_GAP_START           0x09
201 #define EDONKEY_STAG_GAP_END             0x0a
202 #define EDONKEY_STAG_DESCRIPTION         0x0b
203 #define EDONKEY_STAG_PING                0x0c
204 #define EDONKEY_STAG_FAIL                0x0d
205 #define EDONKEY_STAG_PREFERENCE          0x0e
206 #define EDONKEY_STAG_PORT                0x0f
207 #define EDONKEY_STAG_IP                  0x10
208 #define EDONKEY_STAG_VERSION             0x11
209 #define EDONKEY_STAG_TEMPFILE            0x12
210 #define EDONKEY_STAG_PRIORITY            0x13
211 #define EDONKEY_STAG_STATUS              0x14
212 #define EDONKEY_STAG_AVAILABILITY        0x15
213 #define EDONKEY_STAG_QTIME               0x16
214 #define EDONKEY_STAG_PARTS               0x17
215 #define EDONKEY_STAG_MOD_VERSION         0x55
216
217 /* EMULE SPECIAL TAGS */
218 #define EMULE_STAG_COMPRESSION         0x20
219 #define EMULE_STAG_UDP_CLIENT_PORT     0x21
220 #define EMULE_STAG_UDP_VERSION         0x22
221 #define EMULE_STAG_SOURCE_EXCHANGE     0x23
222 #define EMULE_STAG_COMMENTS            0x24
223 #define EMULE_STAG_EXTENDED_REQUEST    0x25
224 #define EMULE_STAG_COMPATIBLE_CLIENT   0x26
225 #define EMULE_STAG_COMPLETE_SOURCES    0x30
226 #define EMULE_STAG_SIZE_HI             0x3a
227 #define EMULE_STAG_SERVER_VERSION      0x91
228 #define EMULE_STAG_COMPAT_OPTIONS1     0xef
229 #define EMULE_STAG_UDPPORTS            0xf9
230 #define EMULE_STAG_MISCOPTIONS1        0xfa
231 #define EMULE_STAG_VERSION             0xfb
232 #define EMULE_STAG_BUDDYIP             0xfc
233 #define EMULE_STAG_BUDDYUDP            0xfd
234 #define EMULE_STAG_MISCOPTIONS2        0xfe
235
236 /* EDONKEY SEARCH TYPES */
237 #define EDONKEY_SEARCH_BOOL              0x00
238 #define EDONKEY_SEARCH_NAME              0x01
239 #define EDONKEY_SEARCH_META              0x02
240 #define EDONKEY_SEARCH_LIMIT             0x03
241
242 /* EDONKEY SEARCH OPERATORS */
243 #define EDONKEY_SEARCH_AND               0x00
244 #define EDONKEY_SEARCH_OR                0x01
245 #define EDONKEY_SEARCH_ANDNOT            0x02
246
247 /* EDONKEY SEARCH MIN/MAX   */
248 #define EDONKEY_SEARCH_MIN               0x01
249 #define EDONKEY_SEARCH_MAX               0x02
250
251 /* KADEMLIA TAGS */
252 #define KADEMLIA_TAGTYPE_HASH                   0x01
253 #define KADEMLIA_TAGTYPE_STRING                 0x02
254 #define KADEMLIA_TAGTYPE_UINT32                 0x03
255 #define KADEMLIA_TAGTYPE_FLOAT32                0x04
256 #define KADEMLIA_TAGTYPE_BOOL                   0x05
257 #define KADEMLIA_TAGTYPE_BOOLARRAY              0x06
258 #define KADEMLIA_TAGTYPE_BLOB                   0x07
259 #define KADEMLIA_TAGTYPE_UINT16                 0x08
260 #define KADEMLIA_TAGTYPE_UINT8                  0x09
261 #define KADEMLIA_TAGTYPE_BSOB                   0x0A
262 #define KADEMLIA_TAGTYPE_UINT64                 0x0B
263
264 #define KADEMLIA_TAGTYPE_STR1                   0x11
265 #define KADEMLIA_TAGTYPE_STR2                   0x12
266 #define KADEMLIA_TAGTYPE_STR3                   0x13
267 #define KADEMLIA_TAGTYPE_STR4                   0x14
268 #define KADEMLIA_TAGTYPE_STR5                   0x15
269 #define KADEMLIA_TAGTYPE_STR6                   0x16
270 #define KADEMLIA_TAGTYPE_STR7                   0x17
271 #define KADEMLIA_TAGTYPE_STR8                   0x18
272 #define KADEMLIA_TAGTYPE_STR9                   0x19
273 #define KADEMLIA_TAGTYPE_STR10                  0x1A
274 #define KADEMLIA_TAGTYPE_STR11                  0x1B
275 #define KADEMLIA_TAGTYPE_STR12                  0x1C
276 #define KADEMLIA_TAGTYPE_STR13                  0x1D
277 #define KADEMLIA_TAGTYPE_STR14                  0x1E
278 #define KADEMLIA_TAGTYPE_STR15                  0x1F
279 #define KADEMLIA_TAGTYPE_STR16                  0x20
280 #define KADEMLIA_TAGTYPE_STR17                  0x21
281 #define KADEMLIA_TAGTYPE_STR18                  0x22
282 #define KADEMLIA_TAGTYPE_STR19                  0x23
283 #define KADEMLIA_TAGTYPE_STR20                  0x24
284 #define KADEMLIA_TAGTYPE_STR21                  0x25
285 #define KADEMLIA_TAGTYPE_STR22                  0x26
286
287 #define KADEMLIA_TAG_MEDIA_ARTIST               0xD0    /* <string> */
288 #define KADEMLIA_TAG_MEDIA_ALBUM                0xD1    /* <string> */
289 #define KADEMLIA_TAG_MEDIA_TITLE                0xD2    /* <string> */
290 #define KADEMLIA_TAG_MEDIA_LENGTH               0xD3    /* <uint32> !!! */
291 #define KADEMLIA_TAG_MEDIA_BITRATE              0xD4    /* <uint32> */
292 #define KADEMLIA_TAG_MEDIA_CODEC                0xD5    /* <string> */
293 #define KADEMLIA_TAG_USER_COUNT                 0xF4    /* <uint32> */
294 #define KADEMLIA_TAG_FILE_COUNT                 0xF5    /* <uint32> */
295 #define KADEMLIA_TAG_FILECOMMENT                0xF6    /* <string> */
296 #define KADEMLIA_TAG_FILERATING                 0xF7    /* <uint8> */
297 #define KADEMLIA_TAG_BUDDYHASH                  0xF8    /* <string> */
298 #define KADEMLIA_TAG_CLIENTLOWID                0xF9    /* <uint32> */
299 #define KADEMLIA_TAG_SERVERPORT                 0xFA    /* <uint16> */
300 #define KADEMLIA_TAG_SERVERIP                   0xFB    /* <uint32> */
301 #define KADEMLIA_TAG_SOURCEUPORT                0xFC    /* <uint16> */
302 #define KADEMLIA_TAG_SOURCEPORT                 0xFD    /* <uint16> */
303 #define KADEMLIA_TAG_SOURCEIP                   0xFE    /* <uint32> */
304 #define KADEMLIA_TAG_SOURCETYPE                 0xFF    /* <uint8> */
305
306 #define EDONKEY_PROTO_ADU_KADEMLIA              0xA4
307 #define EDONKEY_PROTO_ADU_KADEMLIA_COMP         0xA5
308
309 #define EDONKEY_PROTO_KADEMLIA                  0xE4
310 #define EDONKEY_PROTO_KADEMLIA_COMP             0xE5
311
312 /* KADEMLIA (opcodes) (udp) */
313 #define KADEMLIA_BOOTSTRAP_REQ                  0x00    /* <PEER (sender) [25]> */
314 #define KADEMLIA2_BOOTSTRAP_REQ                 0x01   /*  */
315
316 #define KADEMLIA_BOOTSTRAP_RES                  0x08    /* <CNT [2]> <PEER [25]>*(CNT) */
317 #define KADEMLIA2_BOOTSTRAP_RES                 0x09   /*  */
318
319 #define KADEMLIA_HELLO_REQ                      0x10    /* <PEER (sender) [25]> */
320 #define KADEMLIA2_HELLO_REQ                     0x11   /*  */
321
322 #define KADEMLIA_HELLO_RES                      0x18    /* <PEER (receiver) [25]> */
323 #define KADEMLIA2_HELLO_RES                     0x19   /*  */
324
325 #define KADEMLIA_REQ                            0x20    /* <TYPE [1]> <HASH (target) [16]> <HASH (receiver) 16> */
326 #define KADEMLIA2_REQ                           0x21   /*  */
327
328 #define KADEMLIA_RES                            0x28    /* <HASH (target) [16]> <CNT> <PEER [25]>*(CNT) */
329 #define KADEMLIA2_RES                           0x29   /*  */
330
331 #define KADEMLIA_SEARCH_REQ                     0x30    /* <HASH (key) [16]> <ext 0/1 [1]> <SEARCH_TREE>[ext] */
332 /*#define UNUSED                                0x31    Old Opcode, don't use. */
333 #define KADEMLIA_SEARCH_NOTES_REQ               0x32    /* <HASH (key) [16]> */
334 #define KADEMLIA2_SEARCH_KEY_REQ                0x33   /*  */
335 #define KADEMLIA2_SEARCH_SOURCE_REQ             0x34   /*  */
336 #define KADEMLIA2_SEARCH_NOTES_REQ              0x35   /*  */
337
338 #define KADEMLIA_SEARCH_RES                     0x38    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
339 /*#define UNUSED                                0x39    Old Opcode, don't use. */
340 #define KADEMLIA_SEARCH_NOTES_RES               0x3A    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
341 #define KADEMLIA2_SEARCH_RES                    0x3B   /*  */
342
343 #define KADEMLIA_PUBLISH_REQ                    0x40    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
344 /*#define UNUSED                                0x41    Old Opcode, don't use. */
345 #define KADEMLIA_PUBLISH_NOTES_REQ              0x42    /* <HASH (key) [16]> <HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
346 #define KADEMLIA2_PUBLISH_KEY_REQ               0x43   /*  */
347 #define KADEMLIA2_PUBLISH_SOURCE_REQ            0x44   /*  */
348 #define KADEMLIA2_PUBLISH_NOTES_REQ             0x45   /*  */
349
350 #define KADEMLIA_PUBLISH_RES                    0x48    /* <HASH (key) [16]> */
351 /*#define UNUSED                                0x49    Old Opcode, don't use. */
352 #define KADEMLIA_PUBLISH_NOTES_RES              0x4A    /* <HASH (key) [16]> */
353 #define KADEMLIA2_PUBLISH_RES                   0x4B   /*  */
354
355 #define KADEMLIA_FIREWALLED_REQ                 0x50    /* <TCPPORT (sender) [2]> */
356 #define KADEMLIA_FINDBUDDY_REQ                  0x51    /* <TCPPORT (sender) [2]> */
357 #define KADEMLIA_CALLBACK_REQ                   0x52    /* <TCPPORT (sender) [2]> */
358
359 #define KADEMLIA_FIREWALLED_RES                 0x58    /* <IP (sender) [4]> */
360 #define KADEMLIA_FIREWALLED_ACK_RES             0x59    /* (null) */
361 #define KADEMLIA_FINDBUDDY_RES                  0x5A    /* <TCPPORT (sender) [2]> */
362
363 /* KADEMLIA (parameter) */
364 #define KADEMLIA_FIND_VALUE                     0x02
365 #define KADEMLIA_STORE                          0x04
366 #define KADEMLIA_FIND_NODE                      0x0B
367
368 /* Kad search + some unused tags to mirror the ed2k ones. */
369 #define KADEMLIA_TAG_FILENAME                   0x01    /* <string> */
370 #define KADEMLIA_TAG_FILESIZE                   0x02    /* <uint32> */
371 #define KADEMLIA_TAG_FILESIZE_HI                0x3A    /* <uint32> */
372 #define KADEMLIA_TAG_FILETYPE                   0x03    /* <string> */
373 #define KADEMLIA_TAG_FILEFORMAT                 0x04    /* <string> */
374 #define KADEMLIA_TAG_COLLECTION                 0x05
375 #define KADEMLIA_TAG_PART_PATH                  0x06    /* <string> */
376 #define KADEMLIA_TAG_PART_HASH                  0x07
377 #define KADEMLIA_TAG_COPIED                     0x08    /* <uint32> */
378 #define KADEMLIA_TAG_GAP_START                  0x09    /* <uint32> */
379 #define KADEMLIA_TAG_GAP_END                    0x0A    /* <uint32> */
380 #define KADEMLIA_TAG_DESCRIPTION                0x0B    /* <string> */
381 #define KADEMLIA_TAG_PING                       0x0C
382 #define KADEMLIA_TAG_FAIL                       0x0D
383 #define KADEMLIA_TAG_PREFERENCE                 0x0E
384 #define KADEMLIA_TAG_PORT                       0x0F
385 #define KADEMLIA_TAG_IP_ADDRESS                 0x10
386 #define KADEMLIA_TAG_VERSION                    0x11    /* <string> */
387 #define KADEMLIA_TAG_TEMPFILE                   0x12    /* <string> */
388 #define KADEMLIA_TAG_PRIORITY                   0x13    /* <uint32> */
389 #define KADEMLIA_TAG_STATUS                     0x14    /* <uint32> */
390 #define KADEMLIA_TAG_SOURCES                    0x15    /* <uint32> */
391 #define KADEMLIA_TAG_PERMISSIONS                0x16
392 #define KADEMLIA_TAG_QTIME                      0x16
393 #define KADEMLIA_TAG_PARTS                      0x17
394 #define KADEMLIA_TAG_MEDIA_ARTIST               0xD0    /* <string> */
395 #define KADEMLIA_TAG_MEDIA_ALBUM                0xD1    /* <string> */
396 #define KADEMLIA_TAG_MEDIA_TITLE                0xD2    /* <string> */
397 #define KADEMLIA_TAG_MEDIA_LENGTH               0xD3    /* <uint32> !!! */
398 #define KADEMLIA_TAG_MEDIA_BITRATE              0xD4    /* <uint32> */
399 #define KADEMLIA_TAG_MEDIA_CODEC                0xD5    /* <string> */
400 #define KADEMLIA_TAG_ENCRYPTION                 0xF3    /* <uint8> */
401 #define KADEMLIA_TAG_FILERATING                 0xF7    /* <uint8> */
402 #define KADEMLIA_TAG_BUDDYHASH                  0xF8    /* <string> */
403 #define KADEMLIA_TAG_CLIENTLOWID                0xF9    /* <uint32> */
404 #define KADEMLIA_TAG_SERVERPORT                 0xFA    /* <uint16> */
405 #define KADEMLIA_TAG_SERVERIP                   0xFB    /* <uint32> */
406 #define KADEMLIA_TAG_SOURCEUPORT                0xFC    /* <uint16> */
407 #define KADEMLIA_TAG_SOURCEPORT                 0xFD    /* <uint16> */
408 #define KADEMLIA_TAG_SOURCEIP                   0xFE    /* <uint32> */
409 #define KADEMLIA_TAG_SOURCETYPE                 0xFF    /* <uint8> */
410
411 /* KADEMLIA (version) */
412 #define KADEMLIA_VERSION1_46c                   0x01   /*45b - 46c*/
413 #define KADEMLIA_VERSION2_47a                   0x02   /*47a*/
414 #define KADEMLIA_VERSION3_47b                   0x03   /*47b*/
415 #define KADEMLIA_VERSION5_48a                   0x05   /* -0.48a */
416 #define KADEMLIA_VERSION6_49aBETA               0x06   /* -0.49aBETA1 */
417 #define KADEMLIA_VERSION7_49a                   0x07   /* -0.49a */