aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-edonkey.h
blob: 914720d4e01f5cdb8866cedb4255a5c4b3fa9043 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
/* packet-edonkey.h
 * Declarations for edonkey dissection
 * Copyright 2003, Xuan Zhang <xz@aemail4u.com>
 * Copyright 2007, Stefano Picerno <stefano.picerno@gmail.com>
 * Copyright 2008, Stefan Monhof <stefan.monhof@stud.uni-due.de>
 *
 * eDonkey dissector based on protocol descriptions from mldonkey:
 *  http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/edonkey-protocol.txt
 *  http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/overnet-protocol.txt
 *
 * Kademlia dissector based on source code inspection of aMule 2.1.3 and eMule 0.48a
 * Modified and added on the basis of information and names from the eMule 0.49a source code
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

void proto_register_edonkey(void);

#define EDONKEY_MAX_SNAP_SIZE   1500
#define EDONKEY_TCP_HEADER_LENGTH  5
#define EDONKEY_UDP_HEADER_LENGTH  2

/* Definitions for EDONKEY protocols */
#define EDONKEY_PROTO_EDONKEY        0xe3  /* eDonkey */
#define EDONKEY_PROTO_EMULE_EXT      0xc5  /* eMule extensions */
#define EDONKEY_PROTO_EMULE_COMP     0xd4  /* eMule compressed (data is zlib compressed) */

/* Definitions for EDONKEY messages */
/* EDONKEY TCP MESSAGES */
/* Client <-> Server */
#define EDONKEY_MSG_HELLO                0x01
#define EDONKEY_MSG_BAD_PROTO            0x05
#define EDONKEY_MSG_GET_SERVER_LIST      0x14
#define EDONKEY_MSG_OFFER_FILES          0x15
#define EDONKEY_MSG_SEARCH_FILES         0x16
#define EDONKEY_MSG_DISCONNECT           0x18
#define EDONKEY_MSG_GET_SOURCES          0x19
#define EDONKEY_MSG_SEARCH_USER          0x1a
/* define EDONKEY_MSG_UNKNOWN            0x1b */
#define EDONKEY_MSG_CLIENT_CB_REQ        0x1c
/* define EDONKEY_MSG_UNKNOWN            0x20 */
#define EDONKEY_MSG_MORE_RESULTS         0x21
#define EDONKEY_MSG_GET_SOURCES_OBFU     0x23
#define EDONKEY_MSG_SERVER_LIST          0x32
#define EDONKEY_MSG_SEARCH_FILE_RESULTS  0x33
#define EDONKEY_MSG_SERVER_STATUS        0x34
#define EDONKEY_MSG_SERVER_CB_REQ        0x35
#define EDONKEY_MSG_CALLBACK_FAIL        0x36
#define EDONKEY_MSG_SERVER_MESSAGE       0x38
#define EDONKEY_MSG_ID_CHANGE            0x40
#define EDONKEY_MSG_SERVER_INFO_DATA     0x41
#define EDONKEY_MSG_FOUND_SOURCES        0x42
#define EDONKEY_MSG_SEARCH_USER_RESULTS  0x43
#define EDONKEY_MSG_FOUND_SOURCES_OBFU   0x44

/* Client <-> Client */
#define EDONKEY_MSG_HELLO_CLIENT         0x10 /* 0x01 0x10 */
#define EDONKEY_MSG_SENDING_PART         0x46
#define EDONKEY_MSG_REQUEST_PARTS        0x47
#define EDONKEY_MSG_NO_SUCH_FILE         0x48
#define EDONKEY_MSG_END_OF_DOWNLOAD      0x49
#define EDONKEY_MSG_VIEW_FILES           0x4a
#define EDONKEY_MSG_VIEW_FILES_ANSWER    0x4b
#define EDONKEY_MSG_HELLO_ANSWER         0x4c
#define EDONKEY_MSG_NEW_CLIENT_ID        0x4d
#define EDONKEY_MSG_CLIENT_MESSAGE       0x4e
#define EDONKEY_MSG_FILE_STATUS_REQUEST  0x4f
#define EDONKEY_MSG_FILE_STATUS          0x50
#define EDONKEY_MSG_HASHSET_REQUEST      0x51
#define EDONKEY_MSG_HASHSET_ANSWER       0x52
/*#define EDONKEY_MSG_UNKNOWN              0x53 */
#define EDONKEY_MSG_SLOT_REQUEST         0x54
#define EDONKEY_MSG_SLOT_GIVEN           0x55
#define EDONKEY_MSG_SLOT_RELEASE         0x56
#define EDONKEY_MSG_SLOT_TAKEN           0x57
#define EDONKEY_MSG_FILE_REQUEST         0x58
#define EDONKEY_MSG_FILE_REQUEST_ANSWER  0x59
/*#define EDONKEY_MSG_UNKNOWN              0x5b*/
#define EDONKEY_MSG_GET_SHARED_DIRS      0x5d
#define EDONKEY_MSG_GET_SHARED_FILES     0x5e
#define EDONKEY_MSG_SHARED_DIRS          0x5f
#define EDONKEY_MSG_SHARED_FILES         0x60
#define EDONKEY_MSG_SHARED_DENIED        0x61

/* OVERNET EXTENSIONS */
/*#define OVERNET_MSG_UNKNOWN              0x62*/
/*#define OVERNET_MSG_UNKNOWN              0x63*/

/* EMULE EXTENSIONS */
#define EMULE_MSG_HELLO                  0x01
#define EMULE_MSG_HELLO_ANSWER           0x02
#define EMULE_MSG_DATA_COMPRESSED        0x40
#define EMULE_MSG_QUEUE_RANKING          0x60
#define EMULE_MSG_FILE_DESC              0x61
#define EMULE_MSG_SOURCES_REQUEST        0x81
#define EMULE_MSG_SOURCES_ANSWER         0x82
#define EMULE_MSG_PUBLIC_KEY             0x85
#define EMULE_MSG_SIGNATURE              0x86
#define EMULE_MSG_SEC_IDENT_STATE        0x87
#define EMULE_MSG_MULTIPACKET            0x92
#define EMULE_MSG_MULTIPACKET_ANSWER     0x93
#define EMULE_MSG_CALLBACK               0x99
#define EMULE_MSG_AICH_REQUEST           0x9b
#define EMULE_MSG_AICH_ANSWER            0x9c
#define EMULE_MSG_AICHFILEHASH_ANSWER    0x9d
#define EMULE_MSG_AICHFILEHASH_REQUEST   0x9e
#define EMULE_MSG_DATA_COMPRESSED_64     0xa1
#define EMULE_MSG_SENDING_PART_64        0xa2
#define EMULE_MSG_REQUEST_PARTS_64       0xa3
#define EMULE_MSG_MULTIPACKET_EXT        0xa4

/* EDONKEY UDP MESSAGES */
#define EDONKEY_MSG_UDP_SERVER_STATUS_REQUEST      0x96
#define EDONKEY_MSG_UDP_SERVER_STATUS              0x97
#define EDONKEY_MSG_UDP_SEARCH_FILE                0x98
#define EDONKEY_MSG_UDP_SEARCH_FILE_RESULTS        0x99
#define EDONKEY_MSG_UDP_GET_SOURCES                0x9a
#define EDONKEY_MSG_UDP_FOUND_SOURCES              0x9b
#define EDONKEY_MSG_UDP_CALLBACK_REQUEST           0x9c
#define EDONKEY_MSG_UDP_CALLBACK_FAIL              0x9e
/* #define EDONKEY_MSG_UDP_UNKNOWN                    0xa0 */
#define EDONKEY_MSG_UDP_SERVER_LIST                0xa1
#define EDONKEY_MSG_UDP_GET_SERVER_INFO            0xa2
#define EDONKEY_MSG_UDP_SERVER_INFO                0xa3
#define EDONKEY_MSG_UDP_GET_SERVER_LIST            0xa4

/* EMULE UDP EXTENSIONS */
#define EMULE_MSG_UDP_REASKFILEPING      0x90
#define EMULE_MSG_UDP_REASKACK           0x91
#define EMULE_MSG_UDP_FILE_NOT_FOUND     0x92
#define EMULE_MSG_UDP_QUEUE_FULL         0x93

/* OVERNET UDP EXTENSIONS */
#define OVERNET_MSG_UDP_CONNECT                     0x0a
#define OVERNET_MSG_UDP_CONNECT_REPLY               0x0b
#define OVERNET_MSG_UDP_PUBLICIZE                   0x0c
#define OVERNET_MSG_UDP_PUBLICIZE_ACK               0x0d
#define OVERNET_MSG_UDP_SEARCH                      0x0e
#define OVERNET_MSG_UDP_SEARCH_NEXT                 0x0f
#define OVERNET_MSG_UDP_SEARCH_INFO                 0x10
#define OVERNET_MSG_UDP_SEARCH_RESULT               0x11
#define OVERNET_MSG_UDP_SEARCH_END                  0x12
#define OVERNET_MSG_UDP_PUBLISH                     0x13
#define OVERNET_MSG_UDP_PUBLISH_ACK                 0x14
#define OVERNET_MSG_UDP_IDENTIFY_REPLY              0x15
#define OVERNET_MSG_UDP_IDENTIFY_ACK                0x16
#define OVERNET_MSG_UDP_FIREWALL_CONNECTION         0x18
#define OVERNET_MSG_UDP_FIREWALL_CONNECTION_ACK     0x19
#define OVERNET_MSG_UDP_FIREWALL_CONNECTION_NACK    0x1a
#define OVERNET_MSG_UDP_IP_QUERY                    0x1b
#define OVERNET_MSG_UDP_IP_QUERY_ANSWER             0x1c
#define OVERNET_MSG_UDP_IP_QUERY_END                0x1d
#define OVERNET_MSG_UDP_IDENTIFY                    0x1e
/*#define OVERNET_MSG_UDP_UNKNOWN                    0x21  */

/* EDONKEY META TAG TYPES */
#define EDONKEY_MTAG_UNKNOWN             0x00
#define EDONKEY_MTAG_HASH                0x01
#define EDONKEY_MTAG_STRING              0x02
#define EDONKEY_MTAG_DWORD               0x03
#define EDONKEY_MTAG_FLOAT               0x04
#define EDONKEY_MTAG_BOOL                0x05
#define EDONKEY_MTAG_BOOL_ARRAY          0x06
#define EDONKEY_MTAG_BLOB                0x07
#define EDONKEY_MTAG_WORD                0x08
#define EDONKEY_MTAG_BYTE                0x09
#define EDONKEY_MTAG_BSOB                0x0a
#define EDONKEY_MTAG_STR1                0x11
#define EDONKEY_MTAG_STR16               0x20
#define EDONKEY_MTAG_SHORTNAME           0x80

/* EDONKEY SPECIAL TAGS */
#define EDONKEY_STAG_UNKNOWN             0x00
#define EDONKEY_STAG_NAME                0x01
#define EDONKEY_STAG_SIZE                0x02
#define EDONKEY_STAG_TYPE                0x03
#define EDONKEY_STAG_FORMAT              0x04
#define EDONKEY_STAG_COLLECTION          0x05
#define EDONKEY_STAG_PART_PATH           0x06
#define EDONKEY_STAG_PART_HASH           0x07
#define EDONKEY_STAG_COPIED              0x08
#define EDONKEY_STAG_GAP_START           0x09
#define EDONKEY_STAG_GAP_END             0x0a
#define EDONKEY_STAG_DESCRIPTION         0x0b
#define EDONKEY_STAG_PING                0x0c
#define EDONKEY_STAG_FAIL                0x0d
#define EDONKEY_STAG_PREFERENCE          0x0e
#define EDONKEY_STAG_PORT                0x0f
#define EDONKEY_STAG_IP                  0x10
#define EDONKEY_STAG_VERSION             0x11
#define EDONKEY_STAG_TEMPFILE            0x12
#define EDONKEY_STAG_PRIORITY            0x13
#define EDONKEY_STAG_STATUS              0x14
#define EDONKEY_STAG_AVAILABILITY        0x15
#define EDONKEY_STAG_QTIME               0x16
#define EDONKEY_STAG_PARTS               0x17
#define EDONKEY_STAG_MOD_VERSION         0x55

/* EMULE SPECIAL TAGS */
#define EMULE_STAG_COMPRESSION         0x20
#define EMULE_STAG_UDP_CLIENT_PORT     0x21
#define EMULE_STAG_UDP_VERSION         0x22
#define EMULE_STAG_SOURCE_EXCHANGE     0x23
#define EMULE_STAG_COMMENTS            0x24
#define EMULE_STAG_EXTENDED_REQUEST    0x25
#define EMULE_STAG_COMPATIBLE_CLIENT   0x26
#define EMULE_STAG_COMPLETE_SOURCES    0x30
#define EMULE_STAG_SIZE_HI             0x3a
#define EMULE_STAG_SERVER_VERSION      0x91
#define EMULE_STAG_COMPAT_OPTIONS1     0xef
#define EMULE_STAG_UDPPORTS            0xf9
#define EMULE_STAG_MISCOPTIONS1        0xfa
#define EMULE_STAG_VERSION             0xfb
#define EMULE_STAG_BUDDYIP             0xfc
#define EMULE_STAG_BUDDYUDP            0xfd
#define EMULE_STAG_MISCOPTIONS2        0xfe

/* EDONKEY SEARCH TYPES */
#define EDONKEY_SEARCH_BOOL              0x00
#define EDONKEY_SEARCH_NAME              0x01
#define EDONKEY_SEARCH_META              0x02
#define EDONKEY_SEARCH_LIMIT             0x03

/* EDONKEY SEARCH OPERATORS */
#define EDONKEY_SEARCH_AND               0x00
#define EDONKEY_SEARCH_OR                0x01
#define EDONKEY_SEARCH_ANDNOT            0x02

/* EDONKEY SEARCH MIN/MAX   */
#define EDONKEY_SEARCH_MIN               0x01
#define EDONKEY_SEARCH_MAX               0x02

/* KADEMLIA TAGS */
#define KADEMLIA_TAGTYPE_HASH                   0x01
#define KADEMLIA_TAGTYPE_STRING                 0x02
#define KADEMLIA_TAGTYPE_UINT32                 0x03
#define KADEMLIA_TAGTYPE_FLOAT32                0x04
#define KADEMLIA_TAGTYPE_BOOL                   0x05
#define KADEMLIA_TAGTYPE_BOOLARRAY              0x06
#define KADEMLIA_TAGTYPE_BLOB                   0x07
#define KADEMLIA_TAGTYPE_UINT16                 0x08
#define KADEMLIA_TAGTYPE_UINT8                  0x09
#define KADEMLIA_TAGTYPE_BSOB                   0x0A
#define KADEMLIA_TAGTYPE_UINT64                 0x0B

#define KADEMLIA_TAGTYPE_STR1                   0x11
#define KADEMLIA_TAGTYPE_STR2                   0x12
#define KADEMLIA_TAGTYPE_STR3                   0x13
#define KADEMLIA_TAGTYPE_STR4                   0x14
#define KADEMLIA_TAGTYPE_STR5                   0x15
#define KADEMLIA_TAGTYPE_STR6                   0x16
#define KADEMLIA_TAGTYPE_STR7                   0x17
#define KADEMLIA_TAGTYPE_STR8                   0x18
#define KADEMLIA_TAGTYPE_STR9                   0x19
#define KADEMLIA_TAGTYPE_STR10                  0x1A
#define KADEMLIA_TAGTYPE_STR11                  0x1B
#define KADEMLIA_TAGTYPE_STR12                  0x1C
#define KADEMLIA_TAGTYPE_STR13                  0x1D
#define KADEMLIA_TAGTYPE_STR14                  0x1E
#define KADEMLIA_TAGTYPE_STR15                  0x1F
#define KADEMLIA_TAGTYPE_STR16                  0x20
#define KADEMLIA_TAGTYPE_STR17                  0x21
#define KADEMLIA_TAGTYPE_STR18                  0x22
#define KADEMLIA_TAGTYPE_STR19                  0x23
#define KADEMLIA_TAGTYPE_STR20                  0x24
#define KADEMLIA_TAGTYPE_STR21                  0x25
#define KADEMLIA_TAGTYPE_STR22                  0x26

#define KADEMLIA_TAG_MEDIA_ARTIST               0xD0    /* <string> */
#define KADEMLIA_TAG_MEDIA_ALBUM                0xD1    /* <string> */
#define KADEMLIA_TAG_MEDIA_TITLE                0xD2    /* <string> */
#define KADEMLIA_TAG_MEDIA_LENGTH               0xD3    /* <uint32> !!! */
#define KADEMLIA_TAG_MEDIA_BITRATE              0xD4    /* <uint32> */
#define KADEMLIA_TAG_MEDIA_CODEC                0xD5    /* <string> */
#define KADEMLIA_TAG_USER_COUNT                 0xF4    /* <uint32> */
#define KADEMLIA_TAG_FILE_COUNT                 0xF5    /* <uint32> */
#define KADEMLIA_TAG_FILECOMMENT                0xF6    /* <string> */
#define KADEMLIA_TAG_FILERATING                 0xF7    /* <uint8> */
#define KADEMLIA_TAG_BUDDYHASH                  0xF8    /* <string> */
#define KADEMLIA_TAG_CLIENTLOWID                0xF9    /* <uint32> */
#define KADEMLIA_TAG_SERVERPORT                 0xFA    /* <uint16> */
#define KADEMLIA_TAG_SERVERIP                   0xFB    /* <uint32> */
#define KADEMLIA_TAG_SOURCEUPORT                0xFC    /* <uint16> */
#define KADEMLIA_TAG_SOURCEPORT                 0xFD    /* <uint16> */
#define KADEMLIA_TAG_SOURCEIP                   0xFE    /* <uint32> */
#define KADEMLIA_TAG_SOURCETYPE                 0xFF    /* <uint8> */

#define EDONKEY_PROTO_ADU_KADEMLIA              0xA4
#define EDONKEY_PROTO_ADU_KADEMLIA_COMP         0xA5

#define EDONKEY_PROTO_KADEMLIA                  0xE4
#define EDONKEY_PROTO_KADEMLIA_COMP             0xE5

/* KADEMLIA (opcodes) (udp) */
#define KADEMLIA_BOOTSTRAP_REQ                  0x00    /* <PEER (sender) [25]> */
#define KADEMLIA2_BOOTSTRAP_REQ                 0x01   /*  */

#define KADEMLIA_BOOTSTRAP_RES                  0x08    /* <CNT [2]> <PEER [25]>*(CNT) */
#define KADEMLIA2_BOOTSTRAP_RES                 0x09   /*  */

#define KADEMLIA_HELLO_REQ                      0x10    /* <PEER (sender) [25]> */
#define KADEMLIA2_HELLO_REQ                     0x11   /*  */

#define KADEMLIA_HELLO_RES                      0x18    /* <PEER (receiver) [25]> */
#define KADEMLIA2_HELLO_RES                     0x19   /*  */

#define KADEMLIA_REQ                            0x20    /* <TYPE [1]> <HASH (target) [16]> <HASH (receiver) 16> */
#define KADEMLIA2_REQ                           0x21   /*  */

#define KADEMLIA_RES                            0x28    /* <HASH (target) [16]> <CNT> <PEER [25]>*(CNT) */
#define KADEMLIA2_RES                           0x29   /*  */

#define KADEMLIA_SEARCH_REQ                     0x30    /* <HASH (key) [16]> <ext 0/1 [1]> <SEARCH_TREE>[ext] */
/*#define UNUSED                                0x31    Old Opcode, don't use. */
#define KADEMLIA_SEARCH_NOTES_REQ               0x32    /* <HASH (key) [16]> */
#define KADEMLIA2_SEARCH_KEY_REQ                0x33   /*  */
#define KADEMLIA2_SEARCH_SOURCE_REQ             0x34   /*  */
#define KADEMLIA2_SEARCH_NOTES_REQ              0x35   /*  */

#define KADEMLIA_SEARCH_RES                     0x38    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
/*#define UNUSED                                0x39    Old Opcode, don't use. */
#define KADEMLIA_SEARCH_NOTES_RES               0x3A    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
#define KADEMLIA2_SEARCH_RES                    0x3B   /*  */

#define KADEMLIA_PUBLISH_REQ                    0x40    /* <HASH (key) [16]> <CNT1 [2]> (<HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
/*#define UNUSED                                0x41    Old Opcode, don't use. */
#define KADEMLIA_PUBLISH_NOTES_REQ              0x42    /* <HASH (key) [16]> <HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
#define KADEMLIA2_PUBLISH_KEY_REQ               0x43   /*  */
#define KADEMLIA2_PUBLISH_SOURCE_REQ            0x44   /*  */
#define KADEMLIA2_PUBLISH_NOTES_REQ             0x45   /*  */

#define KADEMLIA_PUBLISH_RES                    0x48    /* <HASH (key) [16]> */
/*#define UNUSED                                0x49    Old Opcode, don't use. */
#define KADEMLIA_PUBLISH_NOTES_RES              0x4A    /* <HASH (key) [16]> */
#define KADEMLIA2_PUBLISH_RES                   0x4B   /*  */

#define KADEMLIA_FIREWALLED_REQ                 0x50    /* <TCPPORT (sender) [2]> */
#define KADEMLIA_FINDBUDDY_REQ                  0x51    /* <TCPPORT (sender) [2]> */
#define KADEMLIA_CALLBACK_REQ                   0x52    /* <TCPPORT (sender) [2]> */

#define KADEMLIA_FIREWALLED_RES                 0x58    /* <IP (sender) [4]> */
#define KADEMLIA_FIREWALLED_ACK_RES             0x59    /* (null) */
#define KADEMLIA_FINDBUDDY_RES                  0x5A    /* <TCPPORT (sender) [2]> */

/* KADEMLIA (parameter) */
#define KADEMLIA_FIND_VALUE                     0x02
#define KADEMLIA_STORE                          0x04
#define KADEMLIA_FIND_NODE                      0x0B

/* Kad search + some unused tags to mirror the ed2k ones. */
#define KADEMLIA_TAG_FILENAME                   0x01    /* <string> */
#define KADEMLIA_TAG_FILESIZE                   0x02    /* <uint32> */
#define KADEMLIA_TAG_FILESIZE_HI                0x3A    /* <uint32> */
#define KADEMLIA_TAG_FILETYPE                   0x03    /* <string> */
#define KADEMLIA_TAG_FILEFORMAT                 0x04    /* <string> */
#define KADEMLIA_TAG_COLLECTION                 0x05
#define KADEMLIA_TAG_PART_PATH                  0x06    /* <string> */
#define KADEMLIA_TAG_PART_HASH                  0x07
#define KADEMLIA_TAG_COPIED                     0x08    /* <uint32> */
#define KADEMLIA_TAG_GAP_START                  0x09    /* <uint32> */
#define KADEMLIA_TAG_GAP_END                    0x0A    /* <uint32> */
#define KADEMLIA_TAG_DESCRIPTION                0x0B    /* <string> */
#define KADEMLIA_TAG_PING                       0x0C
#define KADEMLIA_TAG_FAIL                       0x0D
#define KADEMLIA_TAG_PREFERENCE                 0x0E
#define KADEMLIA_TAG_PORT                       0x0F
#define KADEMLIA_TAG_IP_ADDRESS                 0x10
#define KADEMLIA_TAG_VERSION                    0x11    /* <string> */
#define KADEMLIA_TAG_TEMPFILE                   0x12    /* <string> */
#define KADEMLIA_TAG_PRIORITY                   0x13    /* <uint32> */
#define KADEMLIA_TAG_STATUS                     0x14    /* <uint32> */
#define KADEMLIA_TAG_SOURCES                    0x15    /* <uint32> */
#define KADEMLIA_TAG_PERMISSIONS                0x16
#define KADEMLIA_TAG_QTIME                      0x16
#define KADEMLIA_TAG_PARTS                      0x17
#define KADEMLIA_TAG_MEDIA_ARTIST               0xD0    /* <string> */
#define KADEMLIA_TAG_MEDIA_ALBUM                0xD1    /* <string> */
#define KADEMLIA_TAG_MEDIA_TITLE                0xD2    /* <string> */
#define KADEMLIA_TAG_MEDIA_LENGTH               0xD3    /* <uint32> !!! */
#define KADEMLIA_TAG_MEDIA_BITRATE              0xD4    /* <uint32> */
#define KADEMLIA_TAG_MEDIA_CODEC                0xD5    /* <string> */
#define KADEMLIA_TAG_ENCRYPTION                 0xF3    /* <uint8> */
#define KADEMLIA_TAG_FILERATING                 0xF7    /* <uint8> */
#define KADEMLIA_TAG_BUDDYHASH                  0xF8    /* <string> */
#define KADEMLIA_TAG_CLIENTLOWID                0xF9    /* <uint32> */
#define KADEMLIA_TAG_SERVERPORT                 0xFA    /* <uint16> */
#define KADEMLIA_TAG_SERVERIP                   0xFB    /* <uint32> */
#define KADEMLIA_TAG_SOURCEUPORT                0xFC    /* <uint16> */
#define KADEMLIA_TAG_SOURCEPORT                 0xFD    /* <uint16> */
#define KADEMLIA_TAG_SOURCEIP                   0xFE    /* <uint32> */
#define KADEMLIA_TAG_SOURCETYPE                 0xFF    /* <uint8> */

/* KADEMLIA (version) */
#define KADEMLIA_VERSION1_46c			0x01   /*45b - 46c*/
#define KADEMLIA_VERSION2_47a			0x02   /*47a*/
#define KADEMLIA_VERSION3_47b			0x03   /*47b*/
#define KADEMLIA_VERSION5_48a			0x05   /* -0.48a */
#define KADEMLIA_VERSION6_49aBETA		0x06   /* -0.49aBETA1 */
#define KADEMLIA_VERSION7_49a			0x07   /* -0.49a */