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