1//
2//  This file is part of the aMule Project.
3//
4//  Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5//
6//  Any parts of this program derived from the xMule, lMule or eMule project,
7//  or contributed by third-party developers are copyrighted by their
8//  respective authors.
9//
10//  This program is free software; you can redistribute it and/or modify
11//  it under the terms of the GNU General Public License as published by
12//  the Free Software Foundation; either version 2 of the License, or
13//  (at your option) any later version.
14//
15//  This program is distributed in the hope that it will be useful,
16//  but WITHOUT ANY WARRANTY; without even the implied warranty of
17//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18//  GNU General Public License for more details.
19//
20//  You should have received a copy of the GNU General Public License
21//  along with this program; if not, write to the Free Software
22//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
23
24// Purpose:
25// EC codes and type definition.
26
27#ifndef __ECCODES_H__
28#define __ECCODES_H__
29
30typedef uint8_t ec_opcode_t;
31typedef uint16_t ec_tagname_t;
32typedef uint8_t ec_tagtype_t;
33typedef uint32_t ec_taglen_t;
34
35enum ProtocolVersion {
36	EC_CURRENT_PROTOCOL_VERSION = 0x0204
37};
38
39enum ECFlags {
40	EC_FLAG_ZLIB	 = 0x00000001,
41	EC_FLAG_UTF8_NUMBERS = 0x00000002,
42	EC_FLAG_UNKNOWN_MASK = 0xff7f7f08
43};
44
45enum ECOpCodes {
46	EC_OP_NOOP                          = 0x01,
47	EC_OP_AUTH_REQ                      = 0x02,
48	EC_OP_AUTH_FAIL                     = 0x03,
49	EC_OP_AUTH_OK                       = 0x04,
50	EC_OP_FAILED                        = 0x05,
51	EC_OP_STRINGS                       = 0x06,
52	EC_OP_MISC_DATA                     = 0x07,
53	EC_OP_SHUTDOWN                      = 0x08,
54	EC_OP_ADD_LINK                      = 0x09,
55	EC_OP_STAT_REQ                      = 0x0A,
56	EC_OP_GET_CONNSTATE                 = 0x0B,
57	EC_OP_STATS                         = 0x0C,
58	EC_OP_GET_DLOAD_QUEUE               = 0x0D,
59	EC_OP_GET_ULOAD_QUEUE               = 0x0E,
60	EC_OP_GET_SHARED_FILES              = 0x10,
61	EC_OP_SHARED_SET_PRIO               = 0x11,
62	EC_OP_PARTFILE_REMOVE_NO_NEEDED     = 0x12,
63	EC_OP_PARTFILE_REMOVE_FULL_QUEUE    = 0x13,
64	EC_OP_PARTFILE_REMOVE_HIGH_QUEUE    = 0x14,
65	EC_OP_PARTFILE_UNUSED               = 0x15,
66	EC_OP_PARTFILE_SWAP_A4AF_THIS       = 0x16,
67	EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO  = 0x17,
68	EC_OP_PARTFILE_SWAP_A4AF_OTHERS     = 0x18,
69	EC_OP_PARTFILE_PAUSE                = 0x19,
70	EC_OP_PARTFILE_RESUME               = 0x1A,
71	EC_OP_PARTFILE_STOP                 = 0x1B,
72	EC_OP_PARTFILE_PRIO_SET             = 0x1C,
73	EC_OP_PARTFILE_DELETE               = 0x1D,
74	EC_OP_PARTFILE_SET_CAT              = 0x1E,
75	EC_OP_DLOAD_QUEUE                   = 0x1F,
76	EC_OP_ULOAD_QUEUE                   = 0x20,
77	EC_OP_SHARED_FILES                  = 0x22,
78	EC_OP_SHAREDFILES_RELOAD            = 0x23,
79	EC_OP_RENAME_FILE                   = 0x25,
80	EC_OP_SEARCH_START                  = 0x26,
81	EC_OP_SEARCH_STOP                   = 0x27,
82	EC_OP_SEARCH_RESULTS                = 0x28,
83	EC_OP_SEARCH_PROGRESS               = 0x29,
84	EC_OP_DOWNLOAD_SEARCH_RESULT        = 0x2A,
85	EC_OP_IPFILTER_RELOAD               = 0x2B,
86	EC_OP_GET_SERVER_LIST               = 0x2C,
87	EC_OP_SERVER_LIST                   = 0x2D,
88	EC_OP_SERVER_DISCONNECT             = 0x2E,
89	EC_OP_SERVER_CONNECT                = 0x2F,
90	EC_OP_SERVER_REMOVE                 = 0x30,
91	EC_OP_SERVER_ADD                    = 0x31,
92	EC_OP_SERVER_UPDATE_FROM_URL        = 0x32,
93	EC_OP_ADDLOGLINE                    = 0x33,
94	EC_OP_ADDDEBUGLOGLINE               = 0x34,
95	EC_OP_GET_LOG                       = 0x35,
96	EC_OP_GET_DEBUGLOG                  = 0x36,
97	EC_OP_GET_SERVERINFO                = 0x37,
98	EC_OP_LOG                           = 0x38,
99	EC_OP_DEBUGLOG                      = 0x39,
100	EC_OP_SERVERINFO                    = 0x3A,
101	EC_OP_RESET_LOG                     = 0x3B,
102	EC_OP_RESET_DEBUGLOG                = 0x3C,
103	EC_OP_CLEAR_SERVERINFO              = 0x3D,
104	EC_OP_GET_LAST_LOG_ENTRY            = 0x3E,
105	EC_OP_GET_PREFERENCES               = 0x3F,
106	EC_OP_SET_PREFERENCES               = 0x40,
107	EC_OP_CREATE_CATEGORY               = 0x41,
108	EC_OP_UPDATE_CATEGORY               = 0x42,
109	EC_OP_DELETE_CATEGORY               = 0x43,
110	EC_OP_GET_STATSGRAPHS               = 0x44,
111	EC_OP_STATSGRAPHS                   = 0x45,
112	EC_OP_GET_STATSTREE                 = 0x46,
113	EC_OP_STATSTREE                     = 0x47,
114	EC_OP_KAD_START                     = 0x48,
115	EC_OP_KAD_STOP                      = 0x49,
116	EC_OP_CONNECT                       = 0x4A,
117	EC_OP_DISCONNECT                    = 0x4B,
118	EC_OP_KAD_UPDATE_FROM_URL           = 0x4D,
119	EC_OP_KAD_BOOTSTRAP_FROM_IP         = 0x4E,
120	EC_OP_AUTH_SALT                     = 0x4F,
121	EC_OP_AUTH_PASSWD                   = 0x50,
122	EC_OP_IPFILTER_UPDATE               = 0x51,
123	EC_OP_GET_UPDATE                    = 0x52,
124	EC_OP_CLEAR_COMPLETED               = 0x53,
125	EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE   = 0x54,
126	EC_OP_SHARED_FILE_SET_COMMENT       = 0x55,
127	EC_OP_SERVER_SET_STATIC_PRIO        = 0x56,
128	EC_OP_FRIEND                        = 0x57
129};
130
131enum ECTagNames {
132	EC_TAG_STRING                             = 0x0000,
133	EC_TAG_PASSWD_HASH                        = 0x0001,
134	EC_TAG_PROTOCOL_VERSION                   = 0x0002,
135	EC_TAG_VERSION_ID                         = 0x0003,
136	EC_TAG_DETAIL_LEVEL                       = 0x0004,
137	EC_TAG_CONNSTATE                          = 0x0005,
138	EC_TAG_ED2K_ID                            = 0x0006,
139	EC_TAG_LOG_TO_STATUS                      = 0x0007,
140	EC_TAG_BOOTSTRAP_IP                       = 0x0008,
141	EC_TAG_BOOTSTRAP_PORT                     = 0x0009,
142	EC_TAG_CLIENT_ID                          = 0x000A,
143	EC_TAG_PASSWD_SALT                        = 0x000B,
144	EC_TAG_CAN_ZLIB                           = 0x000C,
145	EC_TAG_CAN_UTF8_NUMBERS                   = 0x000D,
146	EC_TAG_CAN_NOTIFY                         = 0x000E,
147	EC_TAG_ECID                               = 0x000F,
148	EC_TAG_CLIENT_NAME                        = 0x0100,
149		EC_TAG_CLIENT_VERSION                     = 0x0101,
150		EC_TAG_CLIENT_MOD                         = 0x0102,
151	EC_TAG_STATS_UL_SPEED                     = 0x0200,
152		EC_TAG_STATS_DL_SPEED                     = 0x0201,
153		EC_TAG_STATS_UL_SPEED_LIMIT               = 0x0202,
154		EC_TAG_STATS_DL_SPEED_LIMIT               = 0x0203,
155		EC_TAG_STATS_UP_OVERHEAD                  = 0x0204,
156		EC_TAG_STATS_DOWN_OVERHEAD                = 0x0205,
157		EC_TAG_STATS_TOTAL_SRC_COUNT              = 0x0206,
158		EC_TAG_STATS_BANNED_COUNT                 = 0x0207,
159		EC_TAG_STATS_UL_QUEUE_LEN                 = 0x0208,
160		EC_TAG_STATS_ED2K_USERS                   = 0x0209,
161		EC_TAG_STATS_KAD_USERS                    = 0x020A,
162		EC_TAG_STATS_ED2K_FILES                   = 0x020B,
163		EC_TAG_STATS_KAD_FILES                    = 0x020C,
164		EC_TAG_STATS_LOGGER_MESSAGE               = 0x020D,
165		EC_TAG_STATS_KAD_FIREWALLED_UDP           = 0x020E,
166		EC_TAG_STATS_KAD_INDEXED_SOURCES          = 0x020F,
167		EC_TAG_STATS_KAD_INDEXED_KEYWORDS         = 0x0210,
168		EC_TAG_STATS_KAD_INDEXED_NOTES            = 0x0211,
169		EC_TAG_STATS_KAD_INDEXED_LOAD             = 0x0212,
170		EC_TAG_STATS_KAD_IP_ADRESS                = 0x0213,
171		EC_TAG_STATS_BUDDY_STATUS                 = 0x0214,
172		EC_TAG_STATS_BUDDY_IP                     = 0x0215,
173		EC_TAG_STATS_BUDDY_PORT                   = 0x0216,
174		EC_TAG_STATS_KAD_IN_LAN_MODE              = 0x0217,
175		EC_TAG_STATS_TOTAL_SENT_BYTES             = 0x0218,
176		EC_TAG_STATS_TOTAL_RECEIVED_BYTES         = 0x0219,
177		EC_TAG_STATS_SHARED_FILE_COUNT            = 0x021A,
178	EC_TAG_PARTFILE                           = 0x0300,
179		EC_TAG_PARTFILE_NAME                      = 0x0301,
180		EC_TAG_PARTFILE_PARTMETID                 = 0x0302,
181		EC_TAG_PARTFILE_SIZE_FULL                 = 0x0303,
182		EC_TAG_PARTFILE_SIZE_XFER                 = 0x0304,
183		EC_TAG_PARTFILE_SIZE_XFER_UP              = 0x0305,
184		EC_TAG_PARTFILE_SIZE_DONE                 = 0x0306,
185		EC_TAG_PARTFILE_SPEED                     = 0x0307,
186		EC_TAG_PARTFILE_STATUS                    = 0x0308,
187		EC_TAG_PARTFILE_PRIO                      = 0x0309,
188		EC_TAG_PARTFILE_SOURCE_COUNT              = 0x030A,
189		EC_TAG_PARTFILE_SOURCE_COUNT_A4AF         = 0x030B,
190		EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT  = 0x030C,
191		EC_TAG_PARTFILE_SOURCE_COUNT_XFER         = 0x030D,
192		EC_TAG_PARTFILE_ED2K_LINK                 = 0x030E,
193		EC_TAG_PARTFILE_CAT                       = 0x030F,
194		EC_TAG_PARTFILE_LAST_RECV                 = 0x0310,
195		EC_TAG_PARTFILE_LAST_SEEN_COMP            = 0x0311,
196		EC_TAG_PARTFILE_PART_STATUS               = 0x0312,
197		EC_TAG_PARTFILE_GAP_STATUS                = 0x0313,
198		EC_TAG_PARTFILE_REQ_STATUS                = 0x0314,
199		EC_TAG_PARTFILE_SOURCE_NAMES              = 0x0315,
200		EC_TAG_PARTFILE_COMMENTS                  = 0x0316,
201		EC_TAG_PARTFILE_STOPPED                   = 0x0317,
202		EC_TAG_PARTFILE_DOWNLOAD_ACTIVE           = 0x0318,
203		EC_TAG_PARTFILE_LOST_CORRUPTION           = 0x0319,
204		EC_TAG_PARTFILE_GAINED_COMPRESSION        = 0x031A,
205		EC_TAG_PARTFILE_SAVED_ICH                 = 0x031B,
206		EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS       = 0x031C,
207		EC_TAG_PARTFILE_AVAILABLE_PARTS           = 0x031D,
208		EC_TAG_PARTFILE_HASH                      = 0x031E,
209		EC_TAG_PARTFILE_SHARED                    = 0x031F,
210		EC_TAG_PARTFILE_HASHED_PART_COUNT         = 0x0320,
211		EC_TAG_PARTFILE_A4AFAUTO                  = 0x0321,
212		EC_TAG_PARTFILE_A4AF_SOURCES              = 0x0322,
213	EC_TAG_KNOWNFILE                          = 0x0400,
214		EC_TAG_KNOWNFILE_XFERRED                  = 0x0401,
215		EC_TAG_KNOWNFILE_XFERRED_ALL              = 0x0402,
216		EC_TAG_KNOWNFILE_REQ_COUNT                = 0x0403,
217		EC_TAG_KNOWNFILE_REQ_COUNT_ALL            = 0x0404,
218		EC_TAG_KNOWNFILE_ACCEPT_COUNT             = 0x0405,
219		EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL         = 0x0406,
220		EC_TAG_KNOWNFILE_AICH_MASTERHASH          = 0x0407,
221		EC_TAG_KNOWNFILE_FILENAME                 = 0x0408,
222		EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW     = 0x0409,
223		EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH    = 0x040A,
224		EC_TAG_KNOWNFILE_PRIO                     = 0x040B,
225		EC_TAG_KNOWNFILE_ON_QUEUE                 = 0x040C,
226		EC_TAG_KNOWNFILE_COMPLETE_SOURCES         = 0x040D,
227		EC_TAG_KNOWNFILE_COMMENT                  = 0x040E,
228		EC_TAG_KNOWNFILE_RATING                   = 0x040F,
229	EC_TAG_SERVER                             = 0x0500,
230		EC_TAG_SERVER_NAME                        = 0x0501,
231		EC_TAG_SERVER_DESC                        = 0x0502,
232		EC_TAG_SERVER_ADDRESS                     = 0x0503,
233		EC_TAG_SERVER_PING                        = 0x0504,
234		EC_TAG_SERVER_USERS                       = 0x0505,
235		EC_TAG_SERVER_USERS_MAX                   = 0x0506,
236		EC_TAG_SERVER_FILES                       = 0x0507,
237		EC_TAG_SERVER_PRIO                        = 0x0508,
238		EC_TAG_SERVER_FAILED                      = 0x0509,
239		EC_TAG_SERVER_STATIC                      = 0x050A,
240		EC_TAG_SERVER_VERSION                     = 0x050B,
241		EC_TAG_SERVER_IP                          = 0x050C,
242		EC_TAG_SERVER_PORT                        = 0x050D,
243	EC_TAG_CLIENT                             = 0x0600,
244		EC_TAG_CLIENT_SOFTWARE                    = 0x0601,
245		EC_TAG_CLIENT_SCORE                       = 0x0602,
246		EC_TAG_CLIENT_HASH                        = 0x0603,
247		EC_TAG_CLIENT_FRIEND_SLOT                 = 0x0604,
248		EC_TAG_CLIENT_WAIT_TIME                   = 0x0605,
249		EC_TAG_CLIENT_XFER_TIME                   = 0x0606,
250		EC_TAG_CLIENT_QUEUE_TIME                  = 0x0607,
251		EC_TAG_CLIENT_LAST_TIME                   = 0x0608,
252		EC_TAG_CLIENT_UPLOAD_SESSION              = 0x0609,
253		EC_TAG_CLIENT_UPLOAD_TOTAL                = 0x060A,
254		EC_TAG_CLIENT_DOWNLOAD_TOTAL              = 0x060B,
255		EC_TAG_CLIENT_DOWNLOAD_STATE              = 0x060C,
256		EC_TAG_CLIENT_UP_SPEED                    = 0x060D,
257		EC_TAG_CLIENT_DOWN_SPEED                  = 0x060E,
258		EC_TAG_CLIENT_FROM                        = 0x060F,
259		EC_TAG_CLIENT_USER_IP                     = 0x0610,
260		EC_TAG_CLIENT_USER_PORT                   = 0x0611,
261		EC_TAG_CLIENT_SERVER_IP                   = 0x0612,
262		EC_TAG_CLIENT_SERVER_PORT                 = 0x0613,
263		EC_TAG_CLIENT_SERVER_NAME                 = 0x0614,
264		EC_TAG_CLIENT_SOFT_VER_STR                = 0x0615,
265		EC_TAG_CLIENT_WAITING_POSITION            = 0x0616,
266		EC_TAG_CLIENT_IDENT_STATE                 = 0x0617,
267		EC_TAG_CLIENT_OBFUSCATION_STATUS          = 0x0618,
268		EC_TAG_CLIENT_CURRENTLYUNUSED1            = 0x0619,
269		EC_TAG_CLIENT_REMOTE_QUEUE_RANK           = 0x061A,
270		EC_TAG_CLIENT_DISABLE_VIEW_SHARED         = 0x061B,
271		EC_TAG_CLIENT_UPLOAD_STATE                = 0x061C,
272		EC_TAG_CLIENT_EXT_PROTOCOL                = 0x061D,
273		EC_TAG_CLIENT_USER_ID                     = 0x061E,
274		EC_TAG_CLIENT_UPLOAD_FILE                 = 0x061F,
275		EC_TAG_CLIENT_REQUEST_FILE                = 0x0620,
276		EC_TAG_CLIENT_A4AF_FILES                  = 0x0621,
277		EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK       = 0x0622,
278		EC_TAG_CLIENT_KAD_PORT                    = 0x0623,
279		EC_TAG_CLIENT_PART_STATUS                 = 0x0624,
280		EC_TAG_CLIENT_NEXT_REQUESTED_PART         = 0x0625,
281		EC_TAG_CLIENT_LAST_DOWNLOADING_PART       = 0x0626,
282		EC_TAG_CLIENT_REMOTE_FILENAME             = 0x0627,
283		EC_TAG_CLIENT_MOD_VERSION                 = 0x0628,
284		EC_TAG_CLIENT_OS_INFO                     = 0x0629,
285		EC_TAG_CLIENT_AVAILABLE_PARTS             = 0x062A,
286		EC_TAG_CLIENT_UPLOAD_PART_STATUS          = 0x062B,
287	EC_TAG_SEARCHFILE                         = 0x0700,
288		EC_TAG_SEARCH_TYPE                        = 0x0701,
289		EC_TAG_SEARCH_NAME                        = 0x0702,
290		EC_TAG_SEARCH_MIN_SIZE                    = 0x0703,
291		EC_TAG_SEARCH_MAX_SIZE                    = 0x0704,
292		EC_TAG_SEARCH_FILE_TYPE                   = 0x0705,
293		EC_TAG_SEARCH_EXTENSION                   = 0x0706,
294		EC_TAG_SEARCH_AVAILABILITY                = 0x0707,
295		EC_TAG_SEARCH_STATUS                      = 0x0708,
296		EC_TAG_SEARCH_PARENT                      = 0x0709,
297	EC_TAG_FRIEND                             = 0x0800,
298		EC_TAG_FRIEND_NAME                        = 0x0801,
299		EC_TAG_FRIEND_HASH                        = 0x0802,
300		EC_TAG_FRIEND_IP                          = 0x0803,
301		EC_TAG_FRIEND_PORT                        = 0x0804,
302		EC_TAG_FRIEND_CLIENT                      = 0x0805,
303		EC_TAG_FRIEND_ADD                         = 0x0806,
304		EC_TAG_FRIEND_REMOVE                      = 0x0807,
305		EC_TAG_FRIEND_FRIENDSLOT                  = 0x0808,
306		EC_TAG_FRIEND_SHARED                      = 0x0809,
307	EC_TAG_SELECT_PREFS                       = 0x1000,
308		EC_TAG_PREFS_CATEGORIES                   = 0x1100,
309			EC_TAG_CATEGORY                           = 0x1101,
310			EC_TAG_CATEGORY_TITLE                     = 0x1102,
311			EC_TAG_CATEGORY_PATH                      = 0x1103,
312			EC_TAG_CATEGORY_COMMENT                   = 0x1104,
313			EC_TAG_CATEGORY_COLOR                     = 0x1105,
314			EC_TAG_CATEGORY_PRIO                      = 0x1106,
315		EC_TAG_PREFS_GENERAL                      = 0x1200,
316			EC_TAG_USER_NICK                          = 0x1201,
317			EC_TAG_USER_HASH                          = 0x1202,
318			EC_TAG_USER_HOST                          = 0x1203,
319			EC_TAG_GENERAL_CHECK_NEW_VERSION          = 0x1204,
320		EC_TAG_PREFS_CONNECTIONS                  = 0x1300,
321			EC_TAG_CONN_DL_CAP                        = 0x1301,
322			EC_TAG_CONN_UL_CAP                        = 0x1302,
323			EC_TAG_CONN_MAX_DL                        = 0x1303,
324			EC_TAG_CONN_MAX_UL                        = 0x1304,
325			EC_TAG_CONN_SLOT_ALLOCATION               = 0x1305,
326			EC_TAG_CONN_TCP_PORT                      = 0x1306,
327			EC_TAG_CONN_UDP_PORT	                  = 0x1307,
328			EC_TAG_CONN_UDP_DISABLE                   = 0x1308,
329			EC_TAG_CONN_MAX_FILE_SOURCES              = 0x1309,
330			EC_TAG_CONN_MAX_CONN                      = 0x130A,
331			EC_TAG_CONN_AUTOCONNECT                   = 0x130B,
332			EC_TAG_CONN_RECONNECT                     = 0x130C,
333			EC_TAG_NETWORK_ED2K                       = 0x130D,
334			EC_TAG_NETWORK_KADEMLIA                   = 0x130E,
335		EC_TAG_PREFS_MESSAGEFILTER                = 0x1400,
336			EC_TAG_MSGFILTER_ENABLED                  = 0x1401,
337			EC_TAG_MSGFILTER_ALL                      = 0x1402,
338			EC_TAG_MSGFILTER_FRIENDS                  = 0x1403,
339			EC_TAG_MSGFILTER_SECURE                   = 0x1404,
340			EC_TAG_MSGFILTER_BY_KEYWORD               = 0x1405,
341			EC_TAG_MSGFILTER_KEYWORDS                 = 0x1406,
342		EC_TAG_PREFS_REMOTECTRL                   = 0x1500,
343			EC_TAG_WEBSERVER_AUTORUN                  = 0x1501,
344			EC_TAG_WEBSERVER_PORT                     = 0x1502,
345			EC_TAG_WEBSERVER_GUEST                    = 0x1503,
346			EC_TAG_WEBSERVER_USEGZIP                  = 0x1504,
347			EC_TAG_WEBSERVER_REFRESH                  = 0x1505,
348			EC_TAG_WEBSERVER_TEMPLATE                 = 0x1506,
349		EC_TAG_PREFS_ONLINESIG                    = 0x1600,
350			EC_TAG_ONLINESIG_ENABLED                  = 0x1601,
351		EC_TAG_PREFS_SERVERS                      = 0x1700,
352			EC_TAG_SERVERS_REMOVE_DEAD                = 0x1701,
353			EC_TAG_SERVERS_DEAD_SERVER_RETRIES        = 0x1702,
354			EC_TAG_SERVERS_AUTO_UPDATE                = 0x1703,
355			EC_TAG_SERVERS_URL_LIST                   = 0x1704,
356			EC_TAG_SERVERS_ADD_FROM_SERVER            = 0x1705,
357			EC_TAG_SERVERS_ADD_FROM_CLIENT            = 0x1706,
358			EC_TAG_SERVERS_USE_SCORE_SYSTEM           = 0x1707,
359			EC_TAG_SERVERS_SMART_ID_CHECK             = 0x1708,
360			EC_TAG_SERVERS_SAFE_SERVER_CONNECT        = 0x1709,
361			EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY       = 0x170A,
362			EC_TAG_SERVERS_MANUAL_HIGH_PRIO           = 0x170B,
363			EC_TAG_SERVERS_UPDATE_URL                 = 0x170C,
364		EC_TAG_PREFS_FILES                        = 0x1800,
365			EC_TAG_FILES_ICH_ENABLED                  = 0x1801,
366			EC_TAG_FILES_AICH_TRUST                   = 0x1802,
367			EC_TAG_FILES_NEW_PAUSED                   = 0x1803,
368			EC_TAG_FILES_NEW_AUTO_DL_PRIO             = 0x1804,
369			EC_TAG_FILES_PREVIEW_PRIO                 = 0x1805,
370			EC_TAG_FILES_NEW_AUTO_UL_PRIO             = 0x1806,
371			EC_TAG_FILES_UL_FULL_CHUNKS               = 0x1807,
372			EC_TAG_FILES_START_NEXT_PAUSED            = 0x1808,
373			EC_TAG_FILES_RESUME_SAME_CAT              = 0x1809,
374			EC_TAG_FILES_SAVE_SOURCES                 = 0x180A,
375			EC_TAG_FILES_EXTRACT_METADATA             = 0x180B,
376			EC_TAG_FILES_ALLOC_FULL_SIZE              = 0x180C,
377			EC_TAG_FILES_CHECK_FREE_SPACE             = 0x180D,
378			EC_TAG_FILES_MIN_FREE_SPACE               = 0x180E,
379		EC_TAG_PREFS_SRCDROP                      = 0x1900,
380			EC_TAG_SRCDROP_NONEEDED                   = 0x1901,
381			EC_TAG_SRCDROP_DROP_FQS                   = 0x1902,
382			EC_TAG_SRCDROP_DROP_HQRS                  = 0x1903,
383			EC_TAG_SRCDROP_HQRS_VALUE                 = 0x1904,
384			EC_TAG_SRCDROP_AUTODROP_TIMER             = 0x1905,
385		EC_TAG_PREFS_DIRECTORIES                  = 0x1A00,
386			EC_TAG_DIRECTORIES_INCOMING               = 0x1A01,
387			EC_TAG_DIRECTORIES_TEMP                   = 0x1A02,
388			EC_TAG_DIRECTORIES_SHARED                 = 0x1A03,
389			EC_TAG_DIRECTORIES_SHARE_HIDDEN           = 0x1A04,
390		EC_TAG_PREFS_STATISTICS                   = 0x1B00,
391			EC_TAG_STATSGRAPH_WIDTH                   = 0x1B01,
392			EC_TAG_STATSGRAPH_SCALE                   = 0x1B02,
393			EC_TAG_STATSGRAPH_LAST                    = 0x1B03,
394			EC_TAG_STATSGRAPH_DATA                    = 0x1B04,
395			EC_TAG_STATTREE_CAPPING                   = 0x1B05,
396			EC_TAG_STATTREE_NODE                      = 0x1B06,
397			EC_TAG_STAT_NODE_VALUE                    = 0x1B07,
398			EC_TAG_STAT_VALUE_TYPE                    = 0x1B08,
399			EC_TAG_STATTREE_NODEID                    = 0x1B09,
400		EC_TAG_PREFS_SECURITY                     = 0x1C00,
401			EC_TAG_SECURITY_CAN_SEE_SHARES            = 0x1C01,
402			EC_TAG_IPFILTER_CLIENTS                   = 0x1C02,
403			EC_TAG_IPFILTER_SERVERS                   = 0x1C03,
404			EC_TAG_IPFILTER_AUTO_UPDATE               = 0x1C04,
405			EC_TAG_IPFILTER_UPDATE_URL                = 0x1C05,
406			EC_TAG_IPFILTER_LEVEL                     = 0x1C06,
407			EC_TAG_IPFILTER_FILTER_LAN                = 0x1C07,
408			EC_TAG_SECURITY_USE_SECIDENT              = 0x1C08,
409			EC_TAG_SECURITY_OBFUSCATION_SUPPORTED     = 0x1C09,
410			EC_TAG_SECURITY_OBFUSCATION_REQUESTED     = 0x1C0A,
411			EC_TAG_SECURITY_OBFUSCATION_REQUIRED      = 0x1C0B,
412		EC_TAG_PREFS_CORETWEAKS                   = 0x1D00,
413			EC_TAG_CORETW_MAX_CONN_PER_FIVE           = 0x1D01,
414			EC_TAG_CORETW_VERBOSE                     = 0x1D02,
415			EC_TAG_CORETW_FILEBUFFER                  = 0x1D03,
416			EC_TAG_CORETW_UL_QUEUE                    = 0x1D04,
417			EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT       = 0x1D05,
418		EC_TAG_PREFS_KADEMLIA                     = 0x1E00,
419			EC_TAG_KADEMLIA_UPDATE_URL                = 0x1E01
420};
421
422enum EC_DETAIL_LEVEL {
423	EC_DETAIL_CMD           = 0x00,
424	EC_DETAIL_WEB           = 0x01,
425	EC_DETAIL_FULL          = 0x02,
426	EC_DETAIL_UPDATE        = 0x03,
427	EC_DETAIL_INC_UPDATE    = 0x04
428};
429
430enum EC_SEARCH_TYPE {
431	EC_SEARCH_LOCAL         = 0x00,
432	EC_SEARCH_GLOBAL        = 0x01,
433	EC_SEARCH_KAD           = 0x02,
434	EC_SEARCH_WEB           = 0x03
435};
436
437enum EC_STATTREE_NODE_VALUE_TYPE {
438	EC_VALUE_INTEGER        = 0x00,
439	EC_VALUE_ISTRING        = 0x01,
440	EC_VALUE_BYTES          = 0x02,
441	EC_VALUE_ISHORT         = 0x03,
442	EC_VALUE_TIME           = 0x04,
443	EC_VALUE_SPEED          = 0x05,
444	EC_VALUE_STRING         = 0x06,
445	EC_VALUE_DOUBLE         = 0x07
446};
447
448enum EcPrefs {
449	EC_PREFS_CATEGORIES     = 0x00000001,
450	EC_PREFS_GENERAL        = 0x00000002,
451	EC_PREFS_CONNECTIONS    = 0x00000004,
452	EC_PREFS_MESSAGEFILTER  = 0x00000008,
453	EC_PREFS_REMOTECONTROLS = 0x00000010,
454	EC_PREFS_ONLINESIG      = 0x00000020,
455	EC_PREFS_SERVERS        = 0x00000040,
456	EC_PREFS_FILES          = 0x00000080,
457	EC_PREFS_SRCDROP        = 0x00000100,
458	EC_PREFS_DIRECTORIES    = 0x00000200,
459	EC_PREFS_STATISTICS     = 0x00000400,
460	EC_PREFS_SECURITY       = 0x00000800,
461	EC_PREFS_CORETWEAKS     = 0x00001000,
462	EC_PREFS_KADEMLIA       = 0x00002000
463};
464
465#ifdef DEBUG_EC_IMPLEMENTATION
466
467wxString GetDebugNameProtocolVersion(uint16 arg)
468{
469	switch (arg) {
470		case 0x0204: return wxT("EC_CURRENT_PROTOCOL_VERSION");
471		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
472	}
473}
474
475wxString GetDebugNameECFlags(uint32 arg)
476{
477	switch (arg) {
478		case 0x00000001: return wxT("EC_FLAG_ZLIB");
479		case 0x00000002: return wxT("EC_FLAG_UTF8_NUMBERS");
480		case 0xff7f7f08: return wxT("EC_FLAG_UNKNOWN_MASK");
481		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
482	}
483}
484
485wxString GetDebugNameECOpCodes(uint8 arg)
486{
487	switch (arg) {
488		case 0x01: return wxT("EC_OP_NOOP");
489		case 0x02: return wxT("EC_OP_AUTH_REQ");
490		case 0x03: return wxT("EC_OP_AUTH_FAIL");
491		case 0x04: return wxT("EC_OP_AUTH_OK");
492		case 0x05: return wxT("EC_OP_FAILED");
493		case 0x06: return wxT("EC_OP_STRINGS");
494		case 0x07: return wxT("EC_OP_MISC_DATA");
495		case 0x08: return wxT("EC_OP_SHUTDOWN");
496		case 0x09: return wxT("EC_OP_ADD_LINK");
497		case 0x0A: return wxT("EC_OP_STAT_REQ");
498		case 0x0B: return wxT("EC_OP_GET_CONNSTATE");
499		case 0x0C: return wxT("EC_OP_STATS");
500		case 0x0D: return wxT("EC_OP_GET_DLOAD_QUEUE");
501		case 0x0E: return wxT("EC_OP_GET_ULOAD_QUEUE");
502		case 0x10: return wxT("EC_OP_GET_SHARED_FILES");
503		case 0x11: return wxT("EC_OP_SHARED_SET_PRIO");
504		case 0x12: return wxT("EC_OP_PARTFILE_REMOVE_NO_NEEDED");
505		case 0x13: return wxT("EC_OP_PARTFILE_REMOVE_FULL_QUEUE");
506		case 0x14: return wxT("EC_OP_PARTFILE_REMOVE_HIGH_QUEUE");
507		case 0x15: return wxT("EC_OP_PARTFILE_UNUSED");
508		case 0x16: return wxT("EC_OP_PARTFILE_SWAP_A4AF_THIS");
509		case 0x17: return wxT("EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO");
510		case 0x18: return wxT("EC_OP_PARTFILE_SWAP_A4AF_OTHERS");
511		case 0x19: return wxT("EC_OP_PARTFILE_PAUSE");
512		case 0x1A: return wxT("EC_OP_PARTFILE_RESUME");
513		case 0x1B: return wxT("EC_OP_PARTFILE_STOP");
514		case 0x1C: return wxT("EC_OP_PARTFILE_PRIO_SET");
515		case 0x1D: return wxT("EC_OP_PARTFILE_DELETE");
516		case 0x1E: return wxT("EC_OP_PARTFILE_SET_CAT");
517		case 0x1F: return wxT("EC_OP_DLOAD_QUEUE");
518		case 0x20: return wxT("EC_OP_ULOAD_QUEUE");
519		case 0x22: return wxT("EC_OP_SHARED_FILES");
520		case 0x23: return wxT("EC_OP_SHAREDFILES_RELOAD");
521		case 0x25: return wxT("EC_OP_RENAME_FILE");
522		case 0x26: return wxT("EC_OP_SEARCH_START");
523		case 0x27: return wxT("EC_OP_SEARCH_STOP");
524		case 0x28: return wxT("EC_OP_SEARCH_RESULTS");
525		case 0x29: return wxT("EC_OP_SEARCH_PROGRESS");
526		case 0x2A: return wxT("EC_OP_DOWNLOAD_SEARCH_RESULT");
527		case 0x2B: return wxT("EC_OP_IPFILTER_RELOAD");
528		case 0x2C: return wxT("EC_OP_GET_SERVER_LIST");
529		case 0x2D: return wxT("EC_OP_SERVER_LIST");
530		case 0x2E: return wxT("EC_OP_SERVER_DISCONNECT");
531		case 0x2F: return wxT("EC_OP_SERVER_CONNECT");
532		case 0x30: return wxT("EC_OP_SERVER_REMOVE");
533		case 0x31: return wxT("EC_OP_SERVER_ADD");
534		case 0x32: return wxT("EC_OP_SERVER_UPDATE_FROM_URL");
535		case 0x33: return wxT("EC_OP_ADDLOGLINE");
536		case 0x34: return wxT("EC_OP_ADDDEBUGLOGLINE");
537		case 0x35: return wxT("EC_OP_GET_LOG");
538		case 0x36: return wxT("EC_OP_GET_DEBUGLOG");
539		case 0x37: return wxT("EC_OP_GET_SERVERINFO");
540		case 0x38: return wxT("EC_OP_LOG");
541		case 0x39: return wxT("EC_OP_DEBUGLOG");
542		case 0x3A: return wxT("EC_OP_SERVERINFO");
543		case 0x3B: return wxT("EC_OP_RESET_LOG");
544		case 0x3C: return wxT("EC_OP_RESET_DEBUGLOG");
545		case 0x3D: return wxT("EC_OP_CLEAR_SERVERINFO");
546		case 0x3E: return wxT("EC_OP_GET_LAST_LOG_ENTRY");
547		case 0x3F: return wxT("EC_OP_GET_PREFERENCES");
548		case 0x40: return wxT("EC_OP_SET_PREFERENCES");
549		case 0x41: return wxT("EC_OP_CREATE_CATEGORY");
550		case 0x42: return wxT("EC_OP_UPDATE_CATEGORY");
551		case 0x43: return wxT("EC_OP_DELETE_CATEGORY");
552		case 0x44: return wxT("EC_OP_GET_STATSGRAPHS");
553		case 0x45: return wxT("EC_OP_STATSGRAPHS");
554		case 0x46: return wxT("EC_OP_GET_STATSTREE");
555		case 0x47: return wxT("EC_OP_STATSTREE");
556		case 0x48: return wxT("EC_OP_KAD_START");
557		case 0x49: return wxT("EC_OP_KAD_STOP");
558		case 0x4A: return wxT("EC_OP_CONNECT");
559		case 0x4B: return wxT("EC_OP_DISCONNECT");
560		case 0x4D: return wxT("EC_OP_KAD_UPDATE_FROM_URL");
561		case 0x4E: return wxT("EC_OP_KAD_BOOTSTRAP_FROM_IP");
562		case 0x4F: return wxT("EC_OP_AUTH_SALT");
563		case 0x50: return wxT("EC_OP_AUTH_PASSWD");
564		case 0x51: return wxT("EC_OP_IPFILTER_UPDATE");
565		case 0x52: return wxT("EC_OP_GET_UPDATE");
566		case 0x53: return wxT("EC_OP_CLEAR_COMPLETED");
567		case 0x54: return wxT("EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE");
568		case 0x55: return wxT("EC_OP_SHARED_FILE_SET_COMMENT");
569		case 0x56: return wxT("EC_OP_SERVER_SET_STATIC_PRIO");
570		case 0x57: return wxT("EC_OP_FRIEND");
571		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
572	}
573}
574
575wxString GetDebugNameECTagNames(uint16 arg)
576{
577	switch (arg) {
578		case 0x0000: return wxT("EC_TAG_STRING");
579		case 0x0001: return wxT("EC_TAG_PASSWD_HASH");
580		case 0x0002: return wxT("EC_TAG_PROTOCOL_VERSION");
581		case 0x0003: return wxT("EC_TAG_VERSION_ID");
582		case 0x0004: return wxT("EC_TAG_DETAIL_LEVEL");
583		case 0x0005: return wxT("EC_TAG_CONNSTATE");
584		case 0x0006: return wxT("EC_TAG_ED2K_ID");
585		case 0x0007: return wxT("EC_TAG_LOG_TO_STATUS");
586		case 0x0008: return wxT("EC_TAG_BOOTSTRAP_IP");
587		case 0x0009: return wxT("EC_TAG_BOOTSTRAP_PORT");
588		case 0x000A: return wxT("EC_TAG_CLIENT_ID");
589		case 0x000B: return wxT("EC_TAG_PASSWD_SALT");
590		case 0x000C: return wxT("EC_TAG_CAN_ZLIB");
591		case 0x000D: return wxT("EC_TAG_CAN_UTF8_NUMBERS");
592		case 0x000E: return wxT("EC_TAG_CAN_NOTIFY");
593		case 0x000F: return wxT("EC_TAG_ECID");
594		case 0x0100: return wxT("EC_TAG_CLIENT_NAME");
595		case 0x0101: return wxT("EC_TAG_CLIENT_VERSION");
596		case 0x0102: return wxT("EC_TAG_CLIENT_MOD");
597		case 0x0200: return wxT("EC_TAG_STATS_UL_SPEED");
598		case 0x0201: return wxT("EC_TAG_STATS_DL_SPEED");
599		case 0x0202: return wxT("EC_TAG_STATS_UL_SPEED_LIMIT");
600		case 0x0203: return wxT("EC_TAG_STATS_DL_SPEED_LIMIT");
601		case 0x0204: return wxT("EC_TAG_STATS_UP_OVERHEAD");
602		case 0x0205: return wxT("EC_TAG_STATS_DOWN_OVERHEAD");
603		case 0x0206: return wxT("EC_TAG_STATS_TOTAL_SRC_COUNT");
604		case 0x0207: return wxT("EC_TAG_STATS_BANNED_COUNT");
605		case 0x0208: return wxT("EC_TAG_STATS_UL_QUEUE_LEN");
606		case 0x0209: return wxT("EC_TAG_STATS_ED2K_USERS");
607		case 0x020A: return wxT("EC_TAG_STATS_KAD_USERS");
608		case 0x020B: return wxT("EC_TAG_STATS_ED2K_FILES");
609		case 0x020C: return wxT("EC_TAG_STATS_KAD_FILES");
610		case 0x020D: return wxT("EC_TAG_STATS_LOGGER_MESSAGE");
611		case 0x020E: return wxT("EC_TAG_STATS_KAD_FIREWALLED_UDP");
612		case 0x020F: return wxT("EC_TAG_STATS_KAD_INDEXED_SOURCES");
613		case 0x0210: return wxT("EC_TAG_STATS_KAD_INDEXED_KEYWORDS");
614		case 0x0211: return wxT("EC_TAG_STATS_KAD_INDEXED_NOTES");
615		case 0x0212: return wxT("EC_TAG_STATS_KAD_INDEXED_LOAD");
616		case 0x0213: return wxT("EC_TAG_STATS_KAD_IP_ADRESS");
617		case 0x0214: return wxT("EC_TAG_STATS_BUDDY_STATUS");
618		case 0x0215: return wxT("EC_TAG_STATS_BUDDY_IP");
619		case 0x0216: return wxT("EC_TAG_STATS_BUDDY_PORT");
620		case 0x0217: return wxT("EC_TAG_STATS_KAD_IN_LAN_MODE");
621		case 0x0218: return wxT("EC_TAG_STATS_TOTAL_SENT_BYTES");
622		case 0x0219: return wxT("EC_TAG_STATS_TOTAL_RECEIVED_BYTES");
623		case 0x021A: return wxT("EC_TAG_STATS_SHARED_FILE_COUNT");
624		case 0x0300: return wxT("EC_TAG_PARTFILE");
625		case 0x0301: return wxT("EC_TAG_PARTFILE_NAME");
626		case 0x0302: return wxT("EC_TAG_PARTFILE_PARTMETID");
627		case 0x0303: return wxT("EC_TAG_PARTFILE_SIZE_FULL");
628		case 0x0304: return wxT("EC_TAG_PARTFILE_SIZE_XFER");
629		case 0x0305: return wxT("EC_TAG_PARTFILE_SIZE_XFER_UP");
630		case 0x0306: return wxT("EC_TAG_PARTFILE_SIZE_DONE");
631		case 0x0307: return wxT("EC_TAG_PARTFILE_SPEED");
632		case 0x0308: return wxT("EC_TAG_PARTFILE_STATUS");
633		case 0x0309: return wxT("EC_TAG_PARTFILE_PRIO");
634		case 0x030A: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT");
635		case 0x030B: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_A4AF");
636		case 0x030C: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT");
637		case 0x030D: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_XFER");
638		case 0x030E: return wxT("EC_TAG_PARTFILE_ED2K_LINK");
639		case 0x030F: return wxT("EC_TAG_PARTFILE_CAT");
640		case 0x0310: return wxT("EC_TAG_PARTFILE_LAST_RECV");
641		case 0x0311: return wxT("EC_TAG_PARTFILE_LAST_SEEN_COMP");
642		case 0x0312: return wxT("EC_TAG_PARTFILE_PART_STATUS");
643		case 0x0313: return wxT("EC_TAG_PARTFILE_GAP_STATUS");
644		case 0x0314: return wxT("EC_TAG_PARTFILE_REQ_STATUS");
645		case 0x0315: return wxT("EC_TAG_PARTFILE_SOURCE_NAMES");
646		case 0x0316: return wxT("EC_TAG_PARTFILE_COMMENTS");
647		case 0x0317: return wxT("EC_TAG_PARTFILE_STOPPED");
648		case 0x0318: return wxT("EC_TAG_PARTFILE_DOWNLOAD_ACTIVE");
649		case 0x0319: return wxT("EC_TAG_PARTFILE_LOST_CORRUPTION");
650		case 0x031A: return wxT("EC_TAG_PARTFILE_GAINED_COMPRESSION");
651		case 0x031B: return wxT("EC_TAG_PARTFILE_SAVED_ICH");
652		case 0x031C: return wxT("EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS");
653		case 0x031D: return wxT("EC_TAG_PARTFILE_AVAILABLE_PARTS");
654		case 0x031E: return wxT("EC_TAG_PARTFILE_HASH");
655		case 0x031F: return wxT("EC_TAG_PARTFILE_SHARED");
656		case 0x0320: return wxT("EC_TAG_PARTFILE_HASHED_PART_COUNT");
657		case 0x0321: return wxT("EC_TAG_PARTFILE_A4AFAUTO");
658		case 0x0322: return wxT("EC_TAG_PARTFILE_A4AF_SOURCES");
659		case 0x0400: return wxT("EC_TAG_KNOWNFILE");
660		case 0x0401: return wxT("EC_TAG_KNOWNFILE_XFERRED");
661		case 0x0402: return wxT("EC_TAG_KNOWNFILE_XFERRED_ALL");
662		case 0x0403: return wxT("EC_TAG_KNOWNFILE_REQ_COUNT");
663		case 0x0404: return wxT("EC_TAG_KNOWNFILE_REQ_COUNT_ALL");
664		case 0x0405: return wxT("EC_TAG_KNOWNFILE_ACCEPT_COUNT");
665		case 0x0406: return wxT("EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL");
666		case 0x0407: return wxT("EC_TAG_KNOWNFILE_AICH_MASTERHASH");
667		case 0x0408: return wxT("EC_TAG_KNOWNFILE_FILENAME");
668		case 0x0409: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW");
669		case 0x040A: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH");
670		case 0x040B: return wxT("EC_TAG_KNOWNFILE_PRIO");
671		case 0x040C: return wxT("EC_TAG_KNOWNFILE_ON_QUEUE");
672		case 0x040D: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES");
673		case 0x040E: return wxT("EC_TAG_KNOWNFILE_COMMENT");
674		case 0x040F: return wxT("EC_TAG_KNOWNFILE_RATING");
675		case 0x0500: return wxT("EC_TAG_SERVER");
676		case 0x0501: return wxT("EC_TAG_SERVER_NAME");
677		case 0x0502: return wxT("EC_TAG_SERVER_DESC");
678		case 0x0503: return wxT("EC_TAG_SERVER_ADDRESS");
679		case 0x0504: return wxT("EC_TAG_SERVER_PING");
680		case 0x0505: return wxT("EC_TAG_SERVER_USERS");
681		case 0x0506: return wxT("EC_TAG_SERVER_USERS_MAX");
682		case 0x0507: return wxT("EC_TAG_SERVER_FILES");
683		case 0x0508: return wxT("EC_TAG_SERVER_PRIO");
684		case 0x0509: return wxT("EC_TAG_SERVER_FAILED");
685		case 0x050A: return wxT("EC_TAG_SERVER_STATIC");
686		case 0x050B: return wxT("EC_TAG_SERVER_VERSION");
687		case 0x050C: return wxT("EC_TAG_SERVER_IP");
688		case 0x050D: return wxT("EC_TAG_SERVER_PORT");
689		case 0x0600: return wxT("EC_TAG_CLIENT");
690		case 0x0601: return wxT("EC_TAG_CLIENT_SOFTWARE");
691		case 0x0602: return wxT("EC_TAG_CLIENT_SCORE");
692		case 0x0603: return wxT("EC_TAG_CLIENT_HASH");
693		case 0x0604: return wxT("EC_TAG_CLIENT_FRIEND_SLOT");
694		case 0x0605: return wxT("EC_TAG_CLIENT_WAIT_TIME");
695		case 0x0606: return wxT("EC_TAG_CLIENT_XFER_TIME");
696		case 0x0607: return wxT("EC_TAG_CLIENT_QUEUE_TIME");
697		case 0x0608: return wxT("EC_TAG_CLIENT_LAST_TIME");
698		case 0x0609: return wxT("EC_TAG_CLIENT_UPLOAD_SESSION");
699		case 0x060A: return wxT("EC_TAG_CLIENT_UPLOAD_TOTAL");
700		case 0x060B: return wxT("EC_TAG_CLIENT_DOWNLOAD_TOTAL");
701		case 0x060C: return wxT("EC_TAG_CLIENT_DOWNLOAD_STATE");
702		case 0x060D: return wxT("EC_TAG_CLIENT_UP_SPEED");
703		case 0x060E: return wxT("EC_TAG_CLIENT_DOWN_SPEED");
704		case 0x060F: return wxT("EC_TAG_CLIENT_FROM");
705		case 0x0610: return wxT("EC_TAG_CLIENT_USER_IP");
706		case 0x0611: return wxT("EC_TAG_CLIENT_USER_PORT");
707		case 0x0612: return wxT("EC_TAG_CLIENT_SERVER_IP");
708		case 0x0613: return wxT("EC_TAG_CLIENT_SERVER_PORT");
709		case 0x0614: return wxT("EC_TAG_CLIENT_SERVER_NAME");
710		case 0x0615: return wxT("EC_TAG_CLIENT_SOFT_VER_STR");
711		case 0x0616: return wxT("EC_TAG_CLIENT_WAITING_POSITION");
712		case 0x0617: return wxT("EC_TAG_CLIENT_IDENT_STATE");
713		case 0x0618: return wxT("EC_TAG_CLIENT_OBFUSCATION_STATUS");
714		case 0x0619: return wxT("EC_TAG_CLIENT_CURRENTLYUNUSED1");
715		case 0x061A: return wxT("EC_TAG_CLIENT_REMOTE_QUEUE_RANK");
716		case 0x061B: return wxT("EC_TAG_CLIENT_DISABLE_VIEW_SHARED");
717		case 0x061C: return wxT("EC_TAG_CLIENT_UPLOAD_STATE");
718		case 0x061D: return wxT("EC_TAG_CLIENT_EXT_PROTOCOL");
719		case 0x061E: return wxT("EC_TAG_CLIENT_USER_ID");
720		case 0x061F: return wxT("EC_TAG_CLIENT_UPLOAD_FILE");
721		case 0x0620: return wxT("EC_TAG_CLIENT_REQUEST_FILE");
722		case 0x0621: return wxT("EC_TAG_CLIENT_A4AF_FILES");
723		case 0x0622: return wxT("EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK");
724		case 0x0623: return wxT("EC_TAG_CLIENT_KAD_PORT");
725		case 0x0624: return wxT("EC_TAG_CLIENT_PART_STATUS");
726		case 0x0625: return wxT("EC_TAG_CLIENT_NEXT_REQUESTED_PART");
727		case 0x0626: return wxT("EC_TAG_CLIENT_LAST_DOWNLOADING_PART");
728		case 0x0627: return wxT("EC_TAG_CLIENT_REMOTE_FILENAME");
729		case 0x0628: return wxT("EC_TAG_CLIENT_MOD_VERSION");
730		case 0x0629: return wxT("EC_TAG_CLIENT_OS_INFO");
731		case 0x062A: return wxT("EC_TAG_CLIENT_AVAILABLE_PARTS");
732		case 0x062B: return wxT("EC_TAG_CLIENT_UPLOAD_PART_STATUS");
733		case 0x0700: return wxT("EC_TAG_SEARCHFILE");
734		case 0x0701: return wxT("EC_TAG_SEARCH_TYPE");
735		case 0x0702: return wxT("EC_TAG_SEARCH_NAME");
736		case 0x0703: return wxT("EC_TAG_SEARCH_MIN_SIZE");
737		case 0x0704: return wxT("EC_TAG_SEARCH_MAX_SIZE");
738		case 0x0705: return wxT("EC_TAG_SEARCH_FILE_TYPE");
739		case 0x0706: return wxT("EC_TAG_SEARCH_EXTENSION");
740		case 0x0707: return wxT("EC_TAG_SEARCH_AVAILABILITY");
741		case 0x0708: return wxT("EC_TAG_SEARCH_STATUS");
742		case 0x0709: return wxT("EC_TAG_SEARCH_PARENT");
743		case 0x0800: return wxT("EC_TAG_FRIEND");
744		case 0x0801: return wxT("EC_TAG_FRIEND_NAME");
745		case 0x0802: return wxT("EC_TAG_FRIEND_HASH");
746		case 0x0803: return wxT("EC_TAG_FRIEND_IP");
747		case 0x0804: return wxT("EC_TAG_FRIEND_PORT");
748		case 0x0805: return wxT("EC_TAG_FRIEND_CLIENT");
749		case 0x0806: return wxT("EC_TAG_FRIEND_ADD");
750		case 0x0807: return wxT("EC_TAG_FRIEND_REMOVE");
751		case 0x0808: return wxT("EC_TAG_FRIEND_FRIENDSLOT");
752		case 0x0809: return wxT("EC_TAG_FRIEND_SHARED");
753		case 0x1000: return wxT("EC_TAG_SELECT_PREFS");
754		case 0x1100: return wxT("EC_TAG_PREFS_CATEGORIES");
755		case 0x1101: return wxT("EC_TAG_CATEGORY");
756		case 0x1102: return wxT("EC_TAG_CATEGORY_TITLE");
757		case 0x1103: return wxT("EC_TAG_CATEGORY_PATH");
758		case 0x1104: return wxT("EC_TAG_CATEGORY_COMMENT");
759		case 0x1105: return wxT("EC_TAG_CATEGORY_COLOR");
760		case 0x1106: return wxT("EC_TAG_CATEGORY_PRIO");
761		case 0x1200: return wxT("EC_TAG_PREFS_GENERAL");
762		case 0x1201: return wxT("EC_TAG_USER_NICK");
763		case 0x1202: return wxT("EC_TAG_USER_HASH");
764		case 0x1203: return wxT("EC_TAG_USER_HOST");
765		case 0x1204: return wxT("EC_TAG_GENERAL_CHECK_NEW_VERSION");
766		case 0x1300: return wxT("EC_TAG_PREFS_CONNECTIONS");
767		case 0x1301: return wxT("EC_TAG_CONN_DL_CAP");
768		case 0x1302: return wxT("EC_TAG_CONN_UL_CAP");
769		case 0x1303: return wxT("EC_TAG_CONN_MAX_DL");
770		case 0x1304: return wxT("EC_TAG_CONN_MAX_UL");
771		case 0x1305: return wxT("EC_TAG_CONN_SLOT_ALLOCATION");
772		case 0x1306: return wxT("EC_TAG_CONN_TCP_PORT");
773		case 0x1307: return wxT("EC_TAG_CONN_UDP_PORT");
774		case 0x1308: return wxT("EC_TAG_CONN_UDP_DISABLE");
775		case 0x1309: return wxT("EC_TAG_CONN_MAX_FILE_SOURCES");
776		case 0x130A: return wxT("EC_TAG_CONN_MAX_CONN");
777		case 0x130B: return wxT("EC_TAG_CONN_AUTOCONNECT");
778		case 0x130C: return wxT("EC_TAG_CONN_RECONNECT");
779		case 0x130D: return wxT("EC_TAG_NETWORK_ED2K");
780		case 0x130E: return wxT("EC_TAG_NETWORK_KADEMLIA");
781		case 0x1400: return wxT("EC_TAG_PREFS_MESSAGEFILTER");
782		case 0x1401: return wxT("EC_TAG_MSGFILTER_ENABLED");
783		case 0x1402: return wxT("EC_TAG_MSGFILTER_ALL");
784		case 0x1403: return wxT("EC_TAG_MSGFILTER_FRIENDS");
785		case 0x1404: return wxT("EC_TAG_MSGFILTER_SECURE");
786		case 0x1405: return wxT("EC_TAG_MSGFILTER_BY_KEYWORD");
787		case 0x1406: return wxT("EC_TAG_MSGFILTER_KEYWORDS");
788		case 0x1500: return wxT("EC_TAG_PREFS_REMOTECTRL");
789		case 0x1501: return wxT("EC_TAG_WEBSERVER_AUTORUN");
790		case 0x1502: return wxT("EC_TAG_WEBSERVER_PORT");
791		case 0x1503: return wxT("EC_TAG_WEBSERVER_GUEST");
792		case 0x1504: return wxT("EC_TAG_WEBSERVER_USEGZIP");
793		case 0x1505: return wxT("EC_TAG_WEBSERVER_REFRESH");
794		case 0x1506: return wxT("EC_TAG_WEBSERVER_TEMPLATE");
795		case 0x1600: return wxT("EC_TAG_PREFS_ONLINESIG");
796		case 0x1601: return wxT("EC_TAG_ONLINESIG_ENABLED");
797		case 0x1700: return wxT("EC_TAG_PREFS_SERVERS");
798		case 0x1701: return wxT("EC_TAG_SERVERS_REMOVE_DEAD");
799		case 0x1702: return wxT("EC_TAG_SERVERS_DEAD_SERVER_RETRIES");
800		case 0x1703: return wxT("EC_TAG_SERVERS_AUTO_UPDATE");
801		case 0x1704: return wxT("EC_TAG_SERVERS_URL_LIST");
802		case 0x1705: return wxT("EC_TAG_SERVERS_ADD_FROM_SERVER");
803		case 0x1706: return wxT("EC_TAG_SERVERS_ADD_FROM_CLIENT");
804		case 0x1707: return wxT("EC_TAG_SERVERS_USE_SCORE_SYSTEM");
805		case 0x1708: return wxT("EC_TAG_SERVERS_SMART_ID_CHECK");
806		case 0x1709: return wxT("EC_TAG_SERVERS_SAFE_SERVER_CONNECT");
807		case 0x170A: return wxT("EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY");
808		case 0x170B: return wxT("EC_TAG_SERVERS_MANUAL_HIGH_PRIO");
809		case 0x170C: return wxT("EC_TAG_SERVERS_UPDATE_URL");
810		case 0x1800: return wxT("EC_TAG_PREFS_FILES");
811		case 0x1801: return wxT("EC_TAG_FILES_ICH_ENABLED");
812		case 0x1802: return wxT("EC_TAG_FILES_AICH_TRUST");
813		case 0x1803: return wxT("EC_TAG_FILES_NEW_PAUSED");
814		case 0x1804: return wxT("EC_TAG_FILES_NEW_AUTO_DL_PRIO");
815		case 0x1805: return wxT("EC_TAG_FILES_PREVIEW_PRIO");
816		case 0x1806: return wxT("EC_TAG_FILES_NEW_AUTO_UL_PRIO");
817		case 0x1807: return wxT("EC_TAG_FILES_UL_FULL_CHUNKS");
818		case 0x1808: return wxT("EC_TAG_FILES_START_NEXT_PAUSED");
819		case 0x1809: return wxT("EC_TAG_FILES_RESUME_SAME_CAT");
820		case 0x180A: return wxT("EC_TAG_FILES_SAVE_SOURCES");
821		case 0x180B: return wxT("EC_TAG_FILES_EXTRACT_METADATA");
822		case 0x180C: return wxT("EC_TAG_FILES_ALLOC_FULL_SIZE");
823		case 0x180D: return wxT("EC_TAG_FILES_CHECK_FREE_SPACE");
824		case 0x180E: return wxT("EC_TAG_FILES_MIN_FREE_SPACE");
825		case 0x1900: return wxT("EC_TAG_PREFS_SRCDROP");
826		case 0x1901: return wxT("EC_TAG_SRCDROP_NONEEDED");
827		case 0x1902: return wxT("EC_TAG_SRCDROP_DROP_FQS");
828		case 0x1903: return wxT("EC_TAG_SRCDROP_DROP_HQRS");
829		case 0x1904: return wxT("EC_TAG_SRCDROP_HQRS_VALUE");
830		case 0x1905: return wxT("EC_TAG_SRCDROP_AUTODROP_TIMER");
831		case 0x1A00: return wxT("EC_TAG_PREFS_DIRECTORIES");
832		case 0x1A01: return wxT("EC_TAG_DIRECTORIES_INCOMING");
833		case 0x1A02: return wxT("EC_TAG_DIRECTORIES_TEMP");
834		case 0x1A03: return wxT("EC_TAG_DIRECTORIES_SHARED");
835		case 0x1A04: return wxT("EC_TAG_DIRECTORIES_SHARE_HIDDEN");
836		case 0x1B00: return wxT("EC_TAG_PREFS_STATISTICS");
837		case 0x1B01: return wxT("EC_TAG_STATSGRAPH_WIDTH");
838		case 0x1B02: return wxT("EC_TAG_STATSGRAPH_SCALE");
839		case 0x1B03: return wxT("EC_TAG_STATSGRAPH_LAST");
840		case 0x1B04: return wxT("EC_TAG_STATSGRAPH_DATA");
841		case 0x1B05: return wxT("EC_TAG_STATTREE_CAPPING");
842		case 0x1B06: return wxT("EC_TAG_STATTREE_NODE");
843		case 0x1B07: return wxT("EC_TAG_STAT_NODE_VALUE");
844		case 0x1B08: return wxT("EC_TAG_STAT_VALUE_TYPE");
845		case 0x1B09: return wxT("EC_TAG_STATTREE_NODEID");
846		case 0x1C00: return wxT("EC_TAG_PREFS_SECURITY");
847		case 0x1C01: return wxT("EC_TAG_SECURITY_CAN_SEE_SHARES");
848		case 0x1C02: return wxT("EC_TAG_IPFILTER_CLIENTS");
849		case 0x1C03: return wxT("EC_TAG_IPFILTER_SERVERS");
850		case 0x1C04: return wxT("EC_TAG_IPFILTER_AUTO_UPDATE");
851		case 0x1C05: return wxT("EC_TAG_IPFILTER_UPDATE_URL");
852		case 0x1C06: return wxT("EC_TAG_IPFILTER_LEVEL");
853		case 0x1C07: return wxT("EC_TAG_IPFILTER_FILTER_LAN");
854		case 0x1C08: return wxT("EC_TAG_SECURITY_USE_SECIDENT");
855		case 0x1C09: return wxT("EC_TAG_SECURITY_OBFUSCATION_SUPPORTED");
856		case 0x1C0A: return wxT("EC_TAG_SECURITY_OBFUSCATION_REQUESTED");
857		case 0x1C0B: return wxT("EC_TAG_SECURITY_OBFUSCATION_REQUIRED");
858		case 0x1D00: return wxT("EC_TAG_PREFS_CORETWEAKS");
859		case 0x1D01: return wxT("EC_TAG_CORETW_MAX_CONN_PER_FIVE");
860		case 0x1D02: return wxT("EC_TAG_CORETW_VERBOSE");
861		case 0x1D03: return wxT("EC_TAG_CORETW_FILEBUFFER");
862		case 0x1D04: return wxT("EC_TAG_CORETW_UL_QUEUE");
863		case 0x1D05: return wxT("EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT");
864		case 0x1E00: return wxT("EC_TAG_PREFS_KADEMLIA");
865		case 0x1E01: return wxT("EC_TAG_KADEMLIA_UPDATE_URL");
866		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
867	}
868}
869
870wxString GetDebugNameEC_DETAIL_LEVEL(uint8 arg)
871{
872	switch (arg) {
873		case 0x00: return wxT("EC_DETAIL_CMD");
874		case 0x01: return wxT("EC_DETAIL_WEB");
875		case 0x02: return wxT("EC_DETAIL_FULL");
876		case 0x03: return wxT("EC_DETAIL_UPDATE");
877		case 0x04: return wxT("EC_DETAIL_INC_UPDATE");
878		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
879	}
880}
881
882wxString GetDebugNameEC_SEARCH_TYPE(uint8 arg)
883{
884	switch (arg) {
885		case 0x00: return wxT("EC_SEARCH_LOCAL");
886		case 0x01: return wxT("EC_SEARCH_GLOBAL");
887		case 0x02: return wxT("EC_SEARCH_KAD");
888		case 0x03: return wxT("EC_SEARCH_WEB");
889		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
890	}
891}
892
893wxString GetDebugNameEC_STATTREE_NODE_VALUE_TYPE(uint8 arg)
894{
895	switch (arg) {
896		case 0x00: return wxT("EC_VALUE_INTEGER");
897		case 0x01: return wxT("EC_VALUE_ISTRING");
898		case 0x02: return wxT("EC_VALUE_BYTES");
899		case 0x03: return wxT("EC_VALUE_ISHORT");
900		case 0x04: return wxT("EC_VALUE_TIME");
901		case 0x05: return wxT("EC_VALUE_SPEED");
902		case 0x06: return wxT("EC_VALUE_STRING");
903		case 0x07: return wxT("EC_VALUE_DOUBLE");
904		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
905	}
906}
907
908wxString GetDebugNameEcPrefs(uint32 arg)
909{
910	switch (arg) {
911		case 0x00000001: return wxT("EC_PREFS_CATEGORIES");
912		case 0x00000002: return wxT("EC_PREFS_GENERAL");
913		case 0x00000004: return wxT("EC_PREFS_CONNECTIONS");
914		case 0x00000008: return wxT("EC_PREFS_MESSAGEFILTER");
915		case 0x00000010: return wxT("EC_PREFS_REMOTECONTROLS");
916		case 0x00000020: return wxT("EC_PREFS_ONLINESIG");
917		case 0x00000040: return wxT("EC_PREFS_SERVERS");
918		case 0x00000080: return wxT("EC_PREFS_FILES");
919		case 0x00000100: return wxT("EC_PREFS_SRCDROP");
920		case 0x00000200: return wxT("EC_PREFS_DIRECTORIES");
921		case 0x00000400: return wxT("EC_PREFS_STATISTICS");
922		case 0x00000800: return wxT("EC_PREFS_SECURITY");
923		case 0x00001000: return wxT("EC_PREFS_CORETWEAKS");
924		case 0x00002000: return wxT("EC_PREFS_KADEMLIA");
925		default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg;
926	}
927}
928
929#endif	// DEBUG_EC_IMPLEMENTATION
930
931#endif // __ECCODES_H__
932