1 /*
2  * Copyright (C) 1998  Mark Baysinger (mbaysing@ucsd.edu)
3  * Copyright (C) 1998,1999,2000  Ross Combs (rocombs@cs.nmsu.edu)
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  */
19 #ifndef INCLUDED_BNET_PROTOCOL_TYPES
20 #define INCLUDED_BNET_PROTOCOL_TYPES
21 
22 #ifdef JUST_NEED_TYPES
23 # include "common/bn_type.h"
24 #else
25 # define JUST_NEED_TYPES
26 # include "common/bn_type.h"
27 # undef JUST_NEED_TYPES
28 #endif
29 
30 /*
31  * The "bnet" protocol (previously known as "normal") that is used for
32  * chatting, ladder info, game listings, etc.
33  * FIXME: put the #define's into the PROTO section
34  */
35 
36 
37 /******************************************************/
38 typedef struct
39 {
40     bn_short type;
41     bn_short size;
42 } PACKED_ATTR() t_bnet_header;
43 /******************************************************/
44 
45 /* [zap-zero] 20020529 - added support for war3 anongame routing packets */
46 /******************************************************/
47 typedef struct
48 {
49     bn_short type;
50     bn_short size;
51 } PACKED_ATTR() t_w3route_header;
52 /******************************************************/
53 
54 
55 /******************************************************/
56 typedef struct
57 {
58     t_bnet_header h;
59 } PACKED_ATTR() t_bnet_generic;
60 /******************************************************/
61 
62 /******************************************************/
63 typedef struct
64 {
65     t_w3route_header h;
66 } PACKED_ATTR() t_w3route_generic;
67 /******************************************************/
68 
69 /* for unhandled pmap packets */
70 #define CLIENT_NULL 0xfeff
71 
72 
73 /******************************************************/
74 /*
75 14: recv class=w3route[0x0c] type=unknown[0x00f7] length=53
76 0000:   F7 1E 35 00 02 02 00 00   68 BF 0B 08 00 E0 17 01    ..5.....h.......
77 0010:   00 00 00 42 6C 61 63 6B   72 61 74 00 08 81 3E 0C    ...Blackrat...>.
78 0020:   00 20 00 00 00 02 00 17   E1 C0 A8 00 01 00 00 00    . ..............
79 0030:   00 00 00 00 00                                       .....
80 */
81 #define CLIENT_W3ROUTE_REQ 0x1ef7
82 typedef struct
83 {
84 	t_w3route_header h;
85 	bn_int unknown1;
86 	bn_int id;			/* unique id sent by server */
87 	bn_byte unknown2;
88 	bn_short port;
89 	bn_int handle;		/* handle/descriptor for client <-> client communication */
90 	/* player name, ... */
91 } PACKED_ATTR() t_client_w3route_req;
92 /******************************************************/
93 
94 
95 
96 /******************************************************/
97 /*
98 f7 23 04 00
99 */
100 #define CLIENT_W3ROUTE_LOADINGDONE 0x23f7
101 typedef struct
102 {
103 	t_w3route_header h;
104 } PACKED_ATTR() t_client_w3route_loadingdone;
105 /******************************************************/
106 
107 
108 /******************************************************/
109 /*
110 f7 14 05 00 00
111 */
112 #define SERVER_W3ROUTE_READY 0x14f7
113 typedef struct
114 {
115 	t_w3route_header h;
116 	bn_byte unknown1;
117 } PACKED_ATTR() t_server_w3route_ready;
118 /******************************************************/
119 
120 
121 /******************************************************/
122 /*
123 f7 21 08 00 01 00 00 00
124 */
125 
126 #define CLIENT_W3ROUTE_ABORT 0x21f7
127 
128 typedef struct
129 {
130         t_w3route_header h;
131         bn_int unknown1;       /* count? */
132 } PACKED_ATTR() t_client_w3route_abort;
133 
134 /******************************************************/
135 /*
136 f7 08 05 00 02
137 */
138 #define SERVER_W3ROUTE_LOADINGACK 0x08f7
139 typedef struct
140 {
141 	t_w3route_header h;
142 	bn_byte playernum;
143 } PACKED_ATTR() t_server_w3route_loadingack;
144 /******************************************************/
145 
146 
147 /******************************************************/
148 /*
149 f7 3b 06 00 09 00
150 */
151 #define CLIENT_W3ROUTE_CONNECTED 0x3bf7
152 typedef struct
153 {
154 	t_w3route_header h;
155 	bn_short unknown1;
156 } PACKED_ATTR() t_client_w3route_connected;
157 /******************************************************/
158 
159 /******************************************************/
160 /*
161 f7 01 08 00 2e 85 2d 7b
162 */
163 #define SERVER_W3ROUTE_ECHOREQ 0x01f7
164 typedef struct
165 {
166 	t_w3route_header h;
167 	bn_int ticks;
168 } PACKED_ATTR() t_server_w3route_echoreq;
169 /******************************************************/
170 
171 
172 #define CLIENT_W3ROUTE_ECHOREPLY 0x46f7
173 
174 
175 /******************************************************/
176 /*
177 13: recv class=w3route[0x0c] type=unknown[0x2ef7] length=107
178 0000:   F7 2E 6B 00 01 01 03 00   00 00 20 00 00 00 5C 01    ..k....... ...\.
179 0010:   00 00 00 05 00 00 00 00   00 00 00 00 00 00 00 1A    ................
180 0020:   04 00 00 00 00 00 00 00   00 00 00 05 00 00 00 00    ................
181 0030:   00 00 00 01 00 00 00 00   00 00 00 05 00 00 00 00    ................
182 0040:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
183 0050:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
184 0060:   00 00 00 00 00 00 00 00   00 00 00                   ...........
185 */
186 #define CLIENT_W3ROUTE_GAMERESULT 0x2ef7
187 /*
188                            F7 3A-84 00 02 01 04 00 00 00
189 0x0040   20 00 00 00 83 09 00 00-00 00 00 00 02 03 00 00
190 0x0050   00 20 00 00 00 2C 01 00-00 00 00 00 00 5C 04 00
191 0x0060   00 00 03 00 00 00 00 00-00 00 01 00 00 00 CC 0B
192 0x0070   00 00 00 00 00 00 72 0B-00 00 0E 00 00 00 00 00
193 0x0080   00 00 04 00 00 00 01 00-00 00 15 00 00 00 00 00
194 0x0090   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
195 0x00A0   00 00 46 0A 00 00 2C 01-00 00 00 00 00 00 00 00
196 0x00B0   00 00 00 00 00 00 00 00-00 00
197 
198                            F7 3A-84 00 02 02 03 00 00 00
199 0x0040   20 00 00 00 2C 01 00 00-00 00 00 00 01 04 00 00
200 0x0050   00 20 00 00 00 83 09 00-00 00 00 00 00 5C 04 00
201 0x0060   00 00 01 00 00 00 01 00-00 00 00 00 00 00 39 03
202 0x0070   00 00 00 00 00 00 00 00-00 00 05 00 00 00 00 00
203 0x0080   00 00 01 00 00 00 00 00-00 00 05 00 00 00 00 00
204 0x0090   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
205 0x00A0   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
206 0x00B0   00 00 00 00 00 00 00 00-00 00
207 */
208 
209 #define CLIENT_W3ROUTE_GAMERESULT_W3XP 0x3af7
210 typedef struct
211 {
212 	t_w3route_header h;
213 	bn_byte number_of_results;
214 /*
215         t_client_w3route_gameresult_player players[];   1-n times
216 	t_client_w3route_gameresult_part2  part2;
217 	t_client_w3route_gameresult_hero   heroes[];    0-n times
218 	t_client_w3route_gameresult_part3  part3; */
219 } PACKED_ATTR() t_client_w3route_gameresult;
220 /******************************************************/
221 
222 /* [zap-zero] what value is DRAW? */
223 #define W3_GAMERESULT_LOSS	0x00000003
224 #define W3_GAMERESULT_WIN	0x00000004
225 
226 typedef struct
227 {
228 	bn_byte number;
229 	bn_int  result;
230 	bn_int  race;
231 	bn_int  unknown1;
232 	bn_int  unknown2;
233 } PACKED_ATTR() t_client_w3route_gameresult_player;
234 
235 typedef struct
236 {
237 	bn_byte unknown0; /* but could also contain info about result */
238 	bn_int  unknown1;
239 	bn_int  unknown2;
240 	bn_int  unknown3;
241 	bn_int  unknown4;
242 	bn_int  unit_score;
243 	bn_int  heroes_score;
244 	bn_int  resource_score;
245 	bn_int  units_produced;
246 	bn_int  units_killed;
247 	bn_int  buildings_produced;
248 	bn_int  buildings_razed;
249 	bn_int  largest_army;
250 	bn_int  heroes_used_count;
251 } PACKED_ATTR() t_client_w3route_gameresult_part2;
252 
253 typedef struct
254 {
255 	bn_short level;
256 	bn_int  race_and_name;
257 	bn_int  hero_xp;
258 } PACKED_ATTR() t_client_w3route_gameresult_hero;
259 
260 typedef struct
261 {
262 	bn_int  heroes_killed;
263 	bn_int  items_obtained;
264 	bn_int  mercenaries_hired;
265 	bn_int  total_hero_xp;
266 	bn_int  gold_mined;
267 	bn_int  lumber_harvested;
268 	bn_int  resources_traded_given;
269 	bn_int  resources_traded_taken;
270 	bn_int  tech_percentage;
271 	bn_int  gold_lost_to_upkeep;
272 } PACKED_ATTR() t_client_w3route_gameresult_part3;
273 
274 /******************************************************/
275 /*
276                         f7 04 1e 00 07 00 00 b2 72 76   ..............rv
277 0040  ec cc cc 02 02 00 04 0b d9 e9 5f ac 00 00 00 00   .........._.....
278 0050  00 00 00 00                                       ....
279 */
280 #define SERVER_W3ROUTE_ACK 0x04f7
281 typedef struct
282 {
283 	t_w3route_header h;
284 	bn_byte unknown1;	/* 07 */
285 	bn_short unknown2;	/* 00 00 */
286 	bn_int unknown3;	/* random stuff */
287 	bn_short unknown4;	/* cc cc */
288         bn_byte playernum;	/* 1-4 */
289 	bn_short unknown5;	/* 0x0002 */
290 	bn_short port;		/* client port */
291 	bn_int ip;		/* client ip */
292 	bn_int unknown7;	/* 00 00 00 00 */
293 	bn_int unknown8;	/* 00 00 00 00 */
294 } PACKED_ATTR() t_server_w3route_ack;
295 /******************************************************/
296 
297 #define SERVER_W3ROUTE_ACK_UNKNOWN3	0x484e2637
298 
299 /******************************************************/
300 /*
301                         f7 06 3b 00 01 00 00 00 01 **   ........;......P
302 0040  ** ** ** ** ** ** ** 00 08 2d 09 9d 04 08 00 00   layer00..-......
303 0050  00 02 00 17 e0 [censored]  00 00 00 00 00 00 00   .......g........
304 0060  00 02 00 17 e0 [censored]  00 00 00 00 00 00 00   .......g........
305 0070  00
306 
307 */
308 #define SERVER_W3ROUTE_PLAYERINFO 0x06f7
309 typedef struct
310 {
311 	t_w3route_header h;
312 	bn_int handle;
313 	bn_byte playernum;
314 	/* then:
315 	   opponent name
316 	   playerinfo2
317 	   playerinfo_addr (external addr)
318 	   playerinfo_addr (local lan addr)
319 	 */
320 } PACKED_ATTR() t_server_w3route_playerinfo;
321 
322 typedef struct
323 {
324 	bn_byte unknown1;		/* 8 (length?) */
325 	bn_int id;			/* id from FINDANONGAME_SEARCH packet */
326 	bn_int race;			/* see defines */
327 } PACKED_ATTR() t_server_w3route_playerinfo2;
328 
329 #define SERVER_W3ROUTE_LEVELINFO 0x47f7
330 typedef struct
331 {
332 	t_w3route_header h;
333 	bn_byte numplayers;
334 	/* then: levelinfo2 for each player */
335 } PACKED_ATTR() t_server_w3route_levelinfo;
336 
337 typedef struct
338 {
339 	bn_byte plnum;
340 	bn_byte unknown1;		/* 3 (length?) */
341 	bn_byte level;
342 	bn_short unknown2;
343 } PACKED_ATTR() t_server_w3route_levelinfo2;
344 
345 
346 typedef struct
347 {
348 	bn_short unknown1;		/* 2 */
349 	bn_short port;
350 	bn_int ip;
351 	bn_int unknown2;		/* 0 */
352 	bn_int unknown3;		/* 0 */
353 } PACKED_ATTR() t_server_w3route_playerinfo_addr;
354 
355 
356 typedef struct
357 {
358 	t_w3route_header h;	/* f7 0a 04 00 */
359 } PACKED_ATTR() t_server_w3route_startgame1;
360 #define SERVER_W3ROUTE_STARTGAME1 0x0af7
361 
362 typedef struct
363 {
364 	t_w3route_header h;	/* f7 0b 04 00 */
365 } PACKED_ATTR() t_server_w3route_startgame2;
366 #define SERVER_W3ROUTE_STARTGAME2 0x0bf7
367 
368 /*******************************************************/
369 /*
370     ALL ANONGAME PACKET INFO (0x44ff) MOVED TO anongame_protocol.h
371     [Omega]
372 */
373 /******************************************************/
374 /*
375 These two dumps are from the original unpatched Starcraft client:
376 
377                           FF 05 28 00 01 00 00 00            ..(.....
378 D1 43 88 AA DA 9D 1B 00   9A F7 69 AB 4A 41 32 30    .C........i.JA20
379 35 43 2D 30 34 00 6C 61   62 61 73 73 69 73 74 00    5C-04.labassist.
380 
381 FF 05 24 00 01 00 00 00   D1 43 88 AA DA 9D 1B 00    ..$......C......
382 9A F7 69 AB 42 4F 42 20   20 20 20 20 20 20 20 00    ..i.BOB        .
383 42 6F 62 00                                          Bob.
384 
385 ??? note it sends NO host and user strings
386 FF 05 14 00 01 00 00 00   D8 94 F6 07 B3 2C 6E 02    .............,n.
387 B4 E0 3B 6C                                          ..;l
388 ??? sent right after it... request for session key?
389             FF 28 08 00   F6 0F 08 00                    .(......
390 
391 Diablo II 1.03 ... note it sends NO host and user strings
392       FF 05 14 00 01 00   00 00 D1 43 88 AA DA 9D      ...... ...C....
393 1B 00 9A F7 69 AB                                    ....i.
394 */
395 #define CLIENT_COMPINFO1 0x05ff
396 typedef struct
397 {
398     t_bnet_header h;
399     bn_int        reg_version;  /* 01 00 00 00 */
400     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
401     bn_int        client_id;    /* DA 9D 1B 00 */
402     bn_int        client_token; /* 9A F7 69 AB */
403     /* host */ /* optional */
404     /* user */ /* optional */
405 } PACKED_ATTR() t_client_compinfo1;
406 #define CLIENT_COMPINFO1_REG_VERSION  0x00000001
407 #define CLIENT_COMPINFO1_REG_AUTH     0xaa8843d1
408 #define CLIENT_COMPINFO1_CLIENT_ID    0x001b9dda
409 #define CLIENT_COMPINFO1_CLIENT_TOKEN 0xab69f79a
410 /******************************************************/
411 
412 
413 /******************************************************/
414 /*
415 CLIENT_COMPINFO2 was first seen in Starcraft 1.05
416 
417                           FF 1E 24 00 01 00 00 00            ..$.....
418 01 00 00 00 D1 43 88 AA   1C B9 48 00 31 8A F2 89    .....C....H.1...
419 43 4C 4F 55 44 00 63 6C   6F 75 64 00                CLOUD.cloud.
420 
421 FF 1E 28 00 01 00 00 00   01 00 00 00 D1 43 88 AA    ..(..........C..
422 DA 9D 1B 00 9A F7 69 AB   42 4F 42 20 20 20 20 20    ......i.BOB
423 20 20 20 00 42 6F 62 00                                 .Bob.
424 
425 Diablo II 1.03 ... note it sends empty host and user strings
426       FF 1E 1A 00 01 00   00 00 01 00 00 00 D1 43      ............C
427 88 AA DA 9D 1B 00 9A F7   69 AB 00 00                .......i...
428 */
429 #define CLIENT_COMPINFO2 0x1eff
430 typedef struct
431 {
432     t_bnet_header h;
433     bn_int        unknown1;     /* 01 00 00 00 */ /* ??? Version */
434     bn_int        reg_version;  /* 01 00 00 00 */
435     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
436     bn_int        client_id;    /* 1C B9 48 00 */ /* DA 9D 1B 00 */
437     bn_int        client_token; /* 31 8A f2 89 */ /* 9A F7 69 AB */
438     /* host */
439     /* user */
440 } PACKED_ATTR() t_client_compinfo2;
441 #define CLIENT_COMPINFO2_UNKNOWN1     0x00000001
442 #define CLIENT_COMPINFO2_REG_VERSION  0x00000001
443 #define CLIENT_COMPINFO2_REG_AUTH     0xaa8843d1
444 #define CLIENT_COMPINFO2_CLIENT_ID    0x001b9dda
445 #define CLIENT_COMPINFO2_CLIENT_TOKEN 0xab69f79a
446 /******************************************************/
447 
448 
449 /******************************************************/
450 /*
451 Sent in response to CLIENT_COMPINFO[12] along with sessionkey
452 
453                           FF 05 14 00 01 00 00 00            ........
454 D1 43 88 AA 1C B9 48 00   31 8A F2 89                .C....H.1...
455 
456 FF 05 14 00 01 00 00 00   D8 94 F6 07 3F 62 6E 02    ............?bn.
457 CA A4 0D 99                                          ....
458 
459 FF 05 14 00 01 00 00 00   D8 94 F6 07 B3 2C 6E 02    .............,n.
460 B4 E0 3B 6C                                          ..;l
461 
462 To D2 Beta 1.02:
463 FF 05 14 00 01 00 00 00   D1 43 88 AA 42 8D 2E 02    .........C..B...
464 2B 81 8C 2B                                          +..+
465 */
466 #define SERVER_COMPREPLY 0x05ff
467 typedef struct
468 {
469     t_bnet_header h;
470     bn_int        reg_version;  /* 01 00 00 00 */
471     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
472     bn_int        client_id;    /* DA 9D 1B 00 */ /* 1C B9 48 00 */
473     bn_int        client_token; /* 9A F7 69 AB */ /* 31 8A F2 89 */
474 } PACKED_ATTR() t_server_compreply;
475 #define SERVER_COMPREPLY_REG_VERSION  0x00000001
476 #define SERVER_COMPREPLY_REG_AUTH     0xaa8843d1
477 #define SERVER_COMPREPLY_CLIENT_ID    0x001b9dda
478 #define SERVER_COMPREPLY_CLIENT_TOKEN 0xab69f79a
479 /******************************************************/
480 
481 
482 /******************************************************/
483 /*
484 Sent in repsonse to COMPINFO1 along with COMPINFOREPLY.
485 Used for password hashing by the client.
486 */
487 #define SERVER_SESSIONKEY1 0x28ff
488 typedef struct
489 {
490     t_bnet_header h;
491     bn_int        sessionkey;
492 } PACKED_ATTR() t_server_sessionkey1;
493 /******************************************************/
494 
495 
496 /******************************************************/
497 /*
498 Sent in response to COMPINFO2 along with COMPINFOREPLY.
499 Used for password hashing by the client.
500 
501                           FF 1D 0C 00 40 24 02 00            ....@$..
502 99 F3 FD 78                                          ...x
503 
504 FF 1D 0C 00 0C 67 08 00   7A 3C D8 75                .....g..z<.u
505 
506 FF 1D 0C 00 58 77 00 00   27 45 44 7A                ....Xw..'EDz
507 
508 FF 1D 0C 00 9D DF 01 00   7A 11 07 ED                ........z...
509 */
510 #define SERVER_SESSIONKEY2 0x1dff
511 typedef struct
512 {
513     t_bnet_header h;
514     bn_int        sessionnum;
515     bn_int        sessionkey;
516 } PACKED_ATTR() t_server_sessionkey2;
517 #define SERVER_SESSIONKEY2_UNKNOWN1 0x00004df3
518 /******************************************************/
519 
520 
521 /******************************************************/
522 /*
523 FF 12 3C 00 E0 28 02 E4   0A 37 BE 01 E0 50 A3 37    ..<..(...7...P.7
524 D0 36 BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    .6..............
525 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
526 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
527 
528 still original client, but at a later date
529 FF 12 3C 00 60 C5 4B 8B   19 DE BE 01 60 55 B1 40    ..<.`.K.....`U.@
530 E7 DD BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    ................
531 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
532 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
533 
534 FF 12 3C 00 60 EA 02 23   F5 DE BE 01 60 7A 68 D8    ..<.`..#....`zh.
535 C2 DE BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    ................
536 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
537 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
538 
539                                       FF 12 35 00                ..5.
540 20 BA B0 55 F2 7B BE 01   20 62 98 C5 3D 7C BE 01     ..U.{.. b..=|..
541 E4 FD FF FF 12 04 00 00   12 04 00 00 12 04 00 00    ................
542 6B 6F 72 00 38 32 00 4B   4F 52 00 4B 6F 72 65 61    kor.82.KOR.Korea
543 00                                                   .
544 
545 FF 12 37 00 E0 D4 72 97   2F 8C BF 01 E0 3C 37 F9    ..7...r./....<7.
546 37 8C BF 01 C4 FF FF FF   07 04 00 00 07 04 00 00    7...............
547 07 04 00 00 64 65 75 00   34 39 00 44 45 55 00 47    ....deu.49.DEU.G
548 65 72 6D 61 6E 79 00                                 ermany.
549 
550 FF 12 36 00 20 F3 31 08   40 A7 BF 01 20 C3 BA CB    ..6. .1.@... ...
551 50 A7 BF 01 C4 FF FF FF   1D 04 00 00 1D 04 00 00    P...............
552 1D 04 00 00 73 76 65 00   34 36 00 53 57 45 00 53    ....sve.46.SWE.S
553 77 65 64 65 6E 00                                    weden.
554 
555 Diablo II 1.03
556       FF 12 39 00 A0 DB   AA 45 51 3F C0 01 A0 EB      ..9....EQ?....
557 56 17 A5 3F C0 01 A8 FD   FF FF 09 0C 00 00 09 0C    V..?............
558 00 00 09 0C 00 00 65 6E   61 00 36 31 00 41 55 53    ......ena.61.AUS
559 00 41 75 73 74 72 61 6C   69 61 00                   .Australia.
560 */
561 #define CLIENT_COUNTRYINFO1 0x12ff
562 typedef struct
563 {
564     t_bnet_header h;
565     bn_long       systemtime; /* GMT */
566     bn_long       localtime;  /* time in local timezone */
567     bn_int        bias;       /* (gmt-local)/60  (using signed math) */
568     bn_int        langid1;    /* 09 04 00 00 */   /* 12 04 00 00 */
569     bn_int        langid2;    /* 09 04 00 00 */   /* 12 04 00 00 */
570     bn_int        langid3;    /* 09 04 00 00 */   /* 12 04 00 00 */
571     /* langstr */
572     /* countrycode (long distance phone) */
573     /* countryabbrev */
574     /* countryname */
575 } PACKED_ATTR() t_client_countryinfo1;
576 /******************************************************/
577 
578 
579 /******************************************************/
580 /*
581   First seen in Diablo II (and LoD) 1.09
582 FF 50 34 00 00 00 00 00   36 38 58 49 50 58 32 44    .P4.....68XIPX2D
583 09 00 00 00 00 00 00 00   00 00 00 00 C4 FF FF FF    ................
584 07 04 00 00 07 04 00 00   44 45 55 00 47 65 72 6D    ........DEU.Germ
585 61 6E 79 00                                          any.
586 
587 FF 50 47 00 00 00 00 00   36 38 58 49 56 44 32 44    .PG.....68XIVD2D
588 09 00 00 00 00 00 00 00   00 00 00 00 20 FE FF FF    ............ ...
589 04 08 00 00 04 08 00 00   43 48 4E 00 50 65 6F 70    ........CHN.Peop
590 6C 65 27 73 20 52 65 70   75 62 6C 69 63 20 6F 66    le's Republic of
591 20 43 68 69 6E 61 00                                  China.
592  */
593 #define CLIENT_COUNTRYINFO_109 0x50ff
594 typedef struct
595 {
596     t_bnet_header h;
597     bn_int        protocol;  /* 00 00 00 00 always zero */
598     bn_int        archtag;
599     bn_int        clienttag;
600     bn_int        versionid; /* 09 00 00 00 */ /* FIXME: what is this? */
601     bn_int        gamelang;  /* 00 00 00 00 always zero */
602     bn_int        localip;  /* 00 00 00 00 always zero */
603     bn_int        bias;      /* (gmt-local)/60  (using signed math) */
604     bn_int        lcid;      /* Win32 LCID */
605     bn_int        langid;    /* Win32 LangID */
606     /* langstr */
607     /* countryname */
608 } PACKED_ATTR() t_client_countryinfo_109;
609 /******************************************************/
610 
611 
612 /******************************************************/
613 /*
614 FF 2A 20 00 91 4F 93 DF   57 74 B5 C8 48 0F 4D 9B    .* ..O..Wt..H.M.
615 A2 28 A6 03 C1 D9 DA 11   42 69 6D 42 6F 3A 29 00    .(......BimBo:).
616 */
617 #define CLIENT_CREATEACCTREQ1 0x2aff
618 typedef struct
619 {
620     t_bnet_header h;
621     bn_int        password_hash1[5]; /* hash of lowercase password w/o null */
622     /* player name */
623 } PACKED_ATTR() t_client_createacctreq1;
624 /******************************************************/
625 
626 
627 /******************************************************/
628 /*
629                           FF 2A 18 00 01 00 00 00            .*......
630 13 00 00 00 78 52 82 02   00 00 00 00 00 00 00 00    ................
631 ---120 82 130 2---
632 
633 FF 2A 08 00 01 00 00 00                              .*......
634 */
635 #define SERVER_CREATEACCTREPLY1 0x2aff
636 typedef struct
637 {
638     t_bnet_header h;
639     bn_int        result;
640 } PACKED_ATTR() t_server_createacctreply1;
641 #define SERVER_CREATEACCTREPLY1_RESULT_OK 0x00000001
642 #define SERVER_CREATEACCTREPLY1_RESULT_NO 0x00000000
643 /******************************************************/
644 
645 
646 /******************************************************/
647 /*
648                           FF 2B 20 00 01 00 00 00            .+ .....
649 00 00 00 00 4D 00 00 00   0E 01 00 00 20 00 00 00    ....M....... ...
650 CE 01 00 00 DD 07 00 00                              ........
651 
652    FF 2B 20 00 01 00 00   00 00 00 00 00 06 00 00     .+ ............
653 00 72 01 00 00 40 00 00   00 A9 07 00 00 FF 07 00    .r...@..........
654 00                                                   .
655 
656 from Starcraft 1.05
657 FF 2B 20 00 01 00 00 00   00 00 00 00 06 00 00 00    .+ .............
658 7C 01 00 00 20 00 00 00   00 02 00 00 FF 07 00 00    |... ...........
659 */
660 #define CLIENT_UNKNOWN_2B 0x2bff /* FIXME: what is this? */
661 typedef struct
662 {
663     t_bnet_header h;
664     bn_int        unknown1; /* 01 00 00 00 */ /* 01 00 00 00 */
665     bn_int        unknown2; /* 00 00 00 00 */ /* 00 00 00 00 */
666     bn_int        unknown3; /* 4D 00 00 00 */ /* 06 00 00 00 */
667     bn_int        unknown4; /* 0E 01 00 00 */ /* 72 01 00 00 */
668     bn_int        unknown5; /* 20 00 00 00 */ /* 40 00 00 00 */
669     bn_int        unknown6; /* CE 01 00 00 */ /* A9 07 00 00 */
670     bn_int        unknown7; /* DD 07 00 00 */ /* FF 07 00 00 */
671 } PACKED_ATTR() t_client_unknown_2b;
672 #define CLIENT_UNKNOWN_2B_UNKNOWN1 0x00000001
673 #define CLIENT_UNKNOWN_2B_UNKNOWN2 0x00000000
674 #define CLIENT_UNKNOWN_2B_UNKNOWN3 0x0000004d
675 #define CLIENT_UNKNOWN_2B_UNKNOWN4 0x0000010e
676 #define CLIENT_UNKNOWN_2B_UNKNOWN5 0x00000020
677 #define CLIENT_UNKNOWN_2B_UNKNOWN6 0x000001ce
678 #define CLIENT_UNKNOWN_2B_UNKNOWN7 0x000007dd
679 /******************************************************/
680 
681 
682 /******************************************************/
683 /*
684 later replaced by progident2 and the authreq packets
685 
686                           FF 06 14 00 36 38 58 49            ....68XI
687 50 58 45 53 BB 00 00 00   00 00 00 00                PXES........
688 
689 sent by 1.05 Starcraft
690 FF 06 14 00 36 38 58 49   52 41 54 53 BD 00 00 00    ....68XIRATS....
691 00 00 00 00                                          ....
692 
693 Diablo II 1.03
694       FF 06 14 00 36 38   58 49 56 44 32 44 03 00      ....68XIVD2D..
695 00 00 00 00 00 00                                    ......
696 */
697 #define CLIENT_PROGIDENT 0x06ff
698 typedef struct
699 {
700     t_bnet_header h;
701     bn_int        archtag;
702     bn_int        clienttag; /* see tag.h */
703     bn_int        versionid; /* FIXME: how does the versionid work? */
704     bn_int        unknown1;  /* FIXME: always zero? spawn flag? */
705 } PACKED_ATTR() t_client_progident;
706 /******************************************************/
707 
708 
709 /******************************************************/
710 /*
711 These formulas are for authenticating the client version.
712 
713                           FF 06 5A 00 00 86 BA E3            ..Z.....
714 09 28 BC 01 49 58 38 36   76 65 72 32 2E 6D 70 71    .(..IX86ver2.mpq
715 00 41 3D 32 30 31 39 34   39 38 38 39 39 20 42 3D    .A=2019498899 B=
716 33 34 32 33 32 39 32 33   39 34 20 43 3D 31 37 31    3423292394 C=171
717 39 30 31 31 32 32 32 20   34 20 41 3D 41 5E 53 20    9011222 4 A=A^S
718 42 3D 42 2D 43 20 43 3D   43 5E 41 20 41 3D 41 5E    B=B-C C=C^A A=A^
719 42 00                                                B.
720 
721 FF 06 59 00 00 C1 12 EC   09 28 BC 01 49 58 38 36    ..Y......(..IX86
722 76 65 72 35 2E 6D 70 71   00 41 3D 31 38 37 35 35    ver5.mpq.A=18755
723 39 31 33 34 31 20 42 3D   32 34 39 31 30 39 39 38    91341 B=24910998
724 30 39 20 43 3D 36 33 34   38 35 36 36 30 34 20 34    09 C=634856604 4
725 20 41 3D 41 2D 53 20 42   3D 42 5E 43 20 43 3D 43     A=A-S B=B^C C=C
726 2B 41 20 41 3D 41 5E 42   00                         +A A=A^B.
727 
728 FF 06 5A 00 00 C1 12 EC   09 28 BC 01 49 58 38 36    ..Z......(..IX86
729 76 65 72 35 2E 6D 70 71   00 41 3D 31 37 31 32 39    ver5.mpq.A=17129
730 34 38 34 32 36 20 42 3D   33 36 30 30 30 33 30 36    48426 B=36000306
731 30 37 20 43 3D 33 33 39   30 34 31 37 39 35 39 20    07 C=3390417959
732 34 20 41 3D 41 2D 53 20   42 3D 42 5E 43 20 43 3D    4 A=A-S B=B^C C=
733 43 2D 41 20 41 3D 41 2D   42 00                      C-A A=A-B.
734 
735 FF 06 5A 00 00 3A 7F E8   09 28 BC 01 49 58 38 36    ..Z..:...(..IX86
736 76 65 72 34 2E 6D 70 71   00 41 3D 31 31 38 36 39    ver4.mpq.A=11869
737 35 38 31 34 31 20 42 3D   31 33 37 37 34 34 31 34    58141 B=13774414
738 35 37 20 43 3D 31 37 37   32 37 38 37 37 30 35 20    57 C=1772787705
739 34 20 41 3D 41 5E 53 20   42 3D 42 5E 43 20 43 3D    4 A=A^S B=B^C C=
740 43 2B 41 20 41 3D 41 5E   42 00                      C+A A=A^B.
741 
742 FF 06 5A 00 00 56 CD F6   09 28 BC 01 49 58 38 36    ..Z..V...(..IX86
743 76 65 72 37 2E 6D 70 71   00 41 3D 31 30 32 36 30    ver7.mpq.A=10260
744 34 34 33 35 34 20 42 3D   34 31 33 32 36 33 30 37    44354 B=41326307
745 31 31 20 43 3D 32 33 30   32 34 31 31 33 32 38 20    11 C=2302411328
746 34 20 41 3D 41 5E 53 20   42 3D 42 5E 43 20 43 3D    4 A=A^S B=B^C C=
747 43 5E 41 20 41 3D 41 2B   42 00                      C^A A=A+B.
748 */
749 #define SERVER_AUTHREQ1 0x06ff
750 typedef struct
751 {
752     t_bnet_header h;
753     bn_long       timestamp; /* FIXME: file modification time? */
754     /* versioncheck filename */
755     /* equation */
756 } PACKED_ATTR() t_server_authreq1;
757 /******************************************************/
758 
759 
760 /******************************************************/
761 /*
762   First seen in Diablo II (and LoD) 1.09
763 FF 50 65 00 00 00 00 00   36 1A 6C 45 76 BC 00 00    .Pe.....6.lEv...
764 00 48 A6 EF 09 28 BC 01   49 58 38 36 76 65 72 36    .H...(..IX86ver6
765 2E 6D 70 71 00 41 3D 33   38 34 35 35 38 31 36 33    .mpq.A=384558163
766 34 20 42 3D 38 38 30 38   32 33 35 38 30 20 43 3D    4 B=880823580 C=
767 31 33 36 33 39 33 37 31   30 33 20 34 20 41 3D 41    1363937103 4 A=A
768 2D 53 20 42 3D 42 2D 43   20 43 3D 43 2D 41 20 41    -S B=B-C C=C-A A
769 3D 41 2D 42 00                                       =A-B.
770 
771                           FF 50 65 00 00 00 00 00            .Pe.....
772 30 4B C1 33 10 EB 09 00   00 A5 C4 DD 09 28 BC 01    0K.3.........(..
773 49 58 38 36 76 65 72 30   2E 6D 70 71 00 41 3D 31    IX86ver0.mpq.A=1
774 34 33 32 36 36 32 34 37   38 20 42 3D 36 35 32 32    432662478 B=6522
775 37 38 36 32 35 20 43 3D   31 37 36 31 35 31 35 38    78625 C=17615158
776 36 39 20 34 20 41 3D 41   5E 53 20 42 3D 42 2B 43    69 4 A=A^S B=B+C
777 20 43 3D 43 2B 41 20 41   3D 41 5E 42 00              C=C+A A=A^B.
778 */
779 #define SERVER_AUTHREQ_109 0x50ff
780 typedef struct
781 {
782     t_bnet_header h;
783     bn_int        logontype;  /* 00 00 00 00 always zero */
784     bn_int        sessionkey;
785     bn_int        sessionnum;
786     bn_long       timestamp;
787     /* versioncheck filename */
788     /* equation */
789 } PACKED_ATTR() t_server_authreq_109;
790 #define SERVER_AUTHREQ_109_LOGONTYPE 		0x0000000
791 #define SERVER_AUTHREQ_109_LOGONTYPE_W3 	0x00000002
792 #define SERVER_AUTHREQ_109_LOGONTYPE_W3XP 	0x00000002
793 /******************************************************/
794 
795 /* ADDED BY UNDYING SOULZZ 4/3/02 */
796 #define VERSIONTAG_WARCRAFT3_113	"WAR3_113"
797 
798 /******************************************************/
799 /*
800 FF 07 40 00 36 38 58 49   52 41 54 53 BD 00 00 00    ..@.68XIRATS....
801 00 05 00 01 1E 88 D7 08   73 74 61 72 63 72 61 66    ........starcraf
802 74 2E 65 78 65 20 30 33   2F 30 38 2F 39 39 20 32    t.exe 03/08/99 2
803 32 3A 34 31 3A 35 30 20   31 30 34 32 34 33 32 00    2:41:50 1042432.
804 
805 sent by the 1.05 Starcraft
806 FF 07 40 00 36 38 58 49   52 41 54 53 BD 00 00 00    ..@.68XIRATS....
807 00 05 00 01 AE AC DE 87   73 74 61 72 63 72 61 66    ........starcraf
808 74 2E 65 78 65 20 30 33   2F 30 38 2F 39 39 20 32    t.exe 03/08/99 2
809 32 3A 34 31 3A 35 30 20   31 30 34 32 34 33 32 00    2:41:50 1042432.
810 
811 sent by the 1.08alpha Brood War (Starcraft game) in response to
812 A=2521522835 B=3428392135 C=218673704 4 A=A^S B=B-C C=C+A A=A-B
813 with IX86ver1.mpq
814 FF 07 40 00 36 38 58 49   52 41 54 53 C3 00 00 00    ..@.68XIRATS....
815 01 08 00 01 A1 52 CE FE   73 74 61 72 63 72 61 66    .....R..starcraf
816 74 2E 65 78 65 20 31 32   2F 32 38 2F 30 30 20 31    t.exe 12/28/00 1
817 31 3A 32 38 3A 35 32 20   31 30 38 32 33 36 38 00    1:28:52 1082368.
818 
819 sent by the 1.07 Diablo
820 FF 07 3C 00 36 38 58 49   4C 54 52 44 26 00 00 00    ..<.68XILTRD&...
821 01 06 05 62 8C 56 E6 21   64 69 61 62 6C 6F 2E 65    ...b.V.!diablo.e
822 78 65 20 30 39 2F 31 37   2F 39 38 20 31 38 3A 30    xe 09/17/98 18:0
823 30 3A 34 30 20 37 36 30   33 32 30 00                0:40 760320.
824 
825 FF 07 45 00 36 38 58 49   4E 42 32 57 4B 00 00 00    ..E.68XINB2WK...
826 99 00 00 02 3D 51 C4 AA   57 61 72 63 72 61 66 74    ....=Q..Warcraft
827 20 49 49 20 42 4E 45 2E   65 78 65 20 31 30 2F 31     II BNE.exe 10/1
828 35 2F 39 39 20 30 30 3A   33 37 3A 35 34 20 37 30    5/99 00:37:54 70
829 34 35 31 32 00                                       4512.
830 
831 sent by the 1.03 Diablo II
832                           FF 07 3A 00 36 38 58 49            ..:.68XI
833 56 44 32 44 03 00 00 00   00 03 00 01 47 3E 26 73    VD2D........G>&s
834 47 61 6D 65 2E 65 78 65   20 30 38 2F 30 35 2F 30    Game.exe 08/05/0
835 30 20 30 31 3A 34 32 3A   32 38 20 32 39 34 39 31    0 01:42:28 29491
836 32 00                                                2.
837 */
838 #define CLIENT_AUTHREQ1 0x07ff
839 typedef struct
840 {
841     t_bnet_header h;
842     bn_int        archtag;
843     bn_int        clienttag;
844     bn_int        versionid;
845     bn_int        gameversion;
846     bn_int        checksum;
847     /* executable info */
848 } PACKED_ATTR() t_client_authreq1;
849 
850 /******************************************************/
851 
852 
853 /******************************************************/
854 /*
855                           FF 07 0A 00 02 00 00 00            ........
856 00 00                                                ..
857 
858 FF 07 0A 00 02 00 00 00   00 00                      ..........
859 */
860 #define SERVER_AUTHREPLY1 0x07ff
861 typedef struct
862 {
863     t_bnet_header h;
864     bn_int        message;
865     /* filename */
866     /* unknown */
867 } PACKED_ATTR() t_server_authreply1;
868 #define SERVER_AUTHREPLY1_MESSAGE_BADVERSION  0x00000000
869 #define SERVER_AUTHREPLY1_MESSAGE_UPDATE      0x00000001 /* initiate auto-update */
870 #define SERVER_AUTHREPLY1_MESSAGE_OK          0x00000002
871 /******************************************************/
872 
873 
874 /******************************************************/
875 /*
876   First seen in Diablo II (and LoD) 1.09
877 FF 51 09 00 00 00 00 00   00                         .Q.......
878 */
879 #define SERVER_AUTHREPLY_109 0x51ff
880 typedef struct
881 {
882     t_bnet_header h;
883     bn_int        message;
884     /* message string? */
885 } PACKED_ATTR() t_server_authreply_109;
886 #define SERVER_AUTHREPLY_109_MESSAGE_OK         0x00000000
887 #define SERVER_AUTHREPLY_109_MESSAGE_UPDATE     0x00000100
888 #define SERVER_AUTHREPLY_109_MESSAGE_BADVERSION 0x00000101
889 /* we should check the first 10 values or so to see what they mean */
890 /******************************************************/
891 
892 
893 /******************************************************/
894 /*
895   First seen in Diablo II (and LoD) 1.09
896 FF 51 67 00 C9 88 DA 42   00 09 00 01 46 97 62 9A    .Qg....B....F.b.
897 01 00 00 00 00 00 00 00   10 00 00 00 06 00 00 00    ................
898 A5 E7 39 00 00 00 00 00   ED CD 4F F7 6A 7A 4F 96    ..9.......O.jzO.
899 85 7A 2D A2 7F 1F B1 D6   81 B3 8D 50 47 61 6D 65    .z-........PGame
900 2E 65 78 65 20 30 38 2F   31 36 2F 30 31 20 32 33    .exe 08/16/01 23
901 3A 30 34 3A 34 30 20 34   32 34 30 36 37 00 74 73    :04:40 424067.ts
902 69 6E 67 68 75 61 00                                 inghua.
903 */
904 #define CLIENT_AUTHREQ_109 0x51ff
905 typedef struct
906 {
907     t_bnet_header h;
908     bn_int        ticks;
909     bn_int        gameversion;
910     bn_int        checksum;
911     bn_int        cdkey_number; /* count of cdkeys, d2 = 1, lod = 2 */
912     bn_int        spawn; 	/* set if using spawn copy */
913     /* cdkey info(s) */
914     /* executable info */
915     /* cdkey owner */
916 } PACKED_ATTR() t_client_authreq_109;
917 /* values are the same as in CLIENT_AUTHREQ1 */
918 
919 typedef struct
920 {
921     bn_int len;
922     bn_int type;
923     bn_int checksum;
924     bn_int u1;
925     bn_int hash[5];
926 } PACKED_ATTR() t_cdkey_info;
927 /******************************************************/
928 
929 
930 /******************************************************/
931 /* Batle.net used to send requests for registry and email info.
932    Thanks to bnetanon, I have a dump of these old packets.
933 */
934 /*
935 FF 18 41 00 00 00 00 00   01 00 00 80 53 6F 66 74    ..A.........Soft
936 77 61 72 65 5C 4D 69 63   72 6F 73 6F 66 74 5C 4D    ware\Microsoft\M
937 53 20 53 65 74 75 70 20   28 41 43 4D 45 29 5C 55    S Setup (ACME)\U
938 73 65 72 20 49 6E 66 6F   00 44 65 66 4E 61 6D 65    ser Info.DefName
939 00                                                   .
940 
941 FF 18 48 00 00 00 00 00   01 00 00 80 53 6F 66 74    ..H.........Soft
942 77 61 72 65 5C 4D 69 63   72 6F 73 6F 66 74 5C 4D    ware\Microsoft\M
943 65 64 69 61 50 6C 61 79   65 72 5C 43 6F 6E 74 72    ediaPlayer\Contr
944 6F 6C 5C 50 6C 61 79 42   61 72 00 43 6C 72 42 61    ol\PlayBar.ClrBa
945 63 6B 43 6F 6C 6F 72 00                              ckColor.
946 */
947 #define SERVER_REGSNOOPREQ 0x18ff
948 typedef struct
949 {
950     t_bnet_header h;
951     bn_int        unknown1; /* 00 00 00 00 */ /* sequence match like in other packets? */
952     bn_int        hkey;
953     /* registry key */
954     /* value name */
955 } PACKED_ATTR() t_server_regsnoopreq;
956 #define SERVER_REGSNOOPREQ_UNKNOWN1 0x00000000
957 #define SERVER_REGSNOOPREQ_HKEY_CLASSES_ROOT        0x80000000
958 #define SERVER_REGSNOOPREQ_HKEY_CURRENT_USER        0x80000001
959 #define SERVER_REGSNOOPREQ_HKEY_LOCAL_MACHINE       0x80000002
960 #define SERVER_REGSNOOPREQ_HKEY_USERS               0x80000003
961 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_DATA    0x80000004
962 #define SERVER_REGSNOOPREQ_HKEY_CURRENT_CONFIG      0x80000005
963 #define SERVER_REGSNOOPREQ_HKEY_DYN_DATA            0x80000006
964 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_TEXT    0x80000050
965 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_NLSTEXT 0x80000060
966 #define SERVER_REGSNOOPREQ_REGKEY "Software\\Microsoft\\MS Setup (ACME)\\User Info"
967 #define SERVER_REGSNOOPREQ_REGVALNAME "DefName"
968 /******************************************************/
969 
970 
971 /******************************************************/
972 /* If the key exists, the client send this back */
973 /*
974 FF 18 0C 00 00 00 00 00   42 6F 62 00                ........Bob.
975 
976 FF 18 0C 00 00 00 00 00   A0 9C A0 00                ............
977 */
978 #define CLIENT_REGSNOOPREPLY 0x18ff
979 typedef struct
980 {
981     t_bnet_header h;
982     bn_int        unknown1; /* 00 00 00 00 */ /* same as request? */
983     /* registry value (string, dword, or binary */
984 } PACKED_ATTR() t_client_regsnoopreply;
985 /******************************************************/
986 
987 
988 /******************************************************/
989 /*
990 FF 07 0A 00 02 00 00 00   00 00                      ..........
991 */
992 #define CLIENT_ICONREQ 0x2dff
993 typedef struct
994 {
995     t_bnet_header h;
996 } PACKED_ATTR() t_client_iconreq;
997 /******************************************************/
998 
999 
1000 /******************************************************/
1001 /*
1002                           FF 2D 16 00 76 34 1F 8F            .-..v4..
1003 C0 D6 BD 01 69 63 6F 6E   73 2E 62 6E 69 00          ....icons.bni.
1004 
1005 FF 2D 16 00 00 77 D0 01   C7 B1 BE 01 69 63 6F 6E    .-...w......icon
1006 73 2E 62 6E 69 00                                    s.bni.
1007 */
1008 #define SERVER_ICONREPLY 0x2dff
1009 typedef struct
1010 {
1011     t_bnet_header h;
1012     bn_long       timestamp; /* file modification time? */
1013     /* filename */
1014 } PACKED_ATTR() t_server_iconreply;
1015 /******************************************************/
1016 
1017 
1018 /******************************************************/
1019 #define CLIENT_LADDERSEARCHREQ 0x2fff
1020 typedef struct
1021 {
1022     t_bnet_header h;
1023     bn_int        clienttag;
1024     bn_int        id;   /* (AKA ladder type) 1==standard, 3==ironman */
1025     bn_int        type; /* (AKA ladder sort) */
1026     /* player name */
1027 } PACKED_ATTR() t_client_laddersearchreq;
1028 #define CLIENT_LADDERSEARCHREQ_ID_STANDARD       0x00000001
1029 #define CLIENT_LADDERSEARCHREQ_ID_IRONMAN        0x00000003
1030 #define CLIENT_LADDERSEARCHREQ_TYPE_HIGHESTRATED 0x00000000
1031 #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTWINS     0x00000002
1032 #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTGAMES    0x00000003
1033 /******************************************************/
1034 
1035 
1036 /******************************************************/
1037 #define SERVER_LADDERSEARCHREPLY 0x2fff
1038 typedef struct /* FIXME: how does client know how many names?
1039 		  do we send separate replies for each name in the request? */
1040 {
1041     t_bnet_header h;
1042     bn_int        rank; /* 0 means 1st, etc */
1043 } PACKED_ATTR() t_server_laddersearchreply;
1044 #define SERVER_LADDERSEARCHREPLY_RANK_NONE 0xffffffff
1045 /******************************************************/
1046 
1047 
1048 /******************************************************/
1049 /*
1050                           FF 30 1C 00 00 00 00 00            .0......
1051 32 37 34 34 37 37 32 39   31 34 38 32 38 00 63 6C    2744772914828.cl
1052 6F 75 64 00                                          oud.
1053 */
1054 #define CLIENT_CDKEY 0x30ff
1055 typedef struct
1056 {
1057     t_bnet_header h;
1058     bn_int        spawn; /* FIXME: not sure if this is correct, but cdkey2 does it this way */
1059     /* cd key */
1060     /* owner name */ /* Was this always here? */
1061 } PACKED_ATTR() t_client_cdkey;
1062 #define CLIENT_CDKEY_UNKNOWN1 0x00000000
1063 /******************************************************/
1064 
1065 
1066 /******************************************************/
1067 /*
1068                           FF 30 0E 00 01 00 00 00            .0......
1069 63 6C 6F 75 64 00                                    cloud.
1070 */
1071 #define SERVER_CDKEYREPLY 0x30ff
1072 typedef struct
1073 {
1074     t_bnet_header h;
1075     bn_int        message;
1076     /* owner name */
1077 } PACKED_ATTR() t_server_cdkeyreply;
1078 #define SERVER_CDKEYREPLY_MESSAGE_OK       0x00000001
1079 #define SERVER_CDKEYREPLY_MESSAGE_BAD      0x00000002
1080 #define SERVER_CDKEYREPLY_MESSAGE_WRONGAPP 0x00000003
1081 #define SERVER_CDKEYREPLY_MESSAGE_ERROR    0x00000004 /* disabled */
1082 #define SERVER_CDKEYREPLY_MESSAGE_INUSE    0x00000005
1083 /* (any other value seems to correspond to ok) */
1084 /******************************************************/
1085 
1086 
1087 /******************************************************/
1088 /*
1089 FF 36 34 00 00 00 00 00   0D 00 00 00 01 00 00 00    .64.............
1090 B5 AE 23 00 50 E5 D5 C0   DB 55 1E 38 0A F5 58 B9    ..#.P....U.8..X.
1091 47 64 C6 C2 9F BB FF B8   81 E7 EB EC 1B 13 C6 38    Gd.............8
1092 52 6F 62 00                                          Rob.
1093 
1094 FF 36 34 00 00 00 00 00   0D 00 00 00 01 00 00 00    .64.............
1095 7F D7 00 00 90 64 77 2F   D7 5B 42 38 1F A1 A2 6F    .....dw/.[B8...o
1096 E8 FA BE F8 B6 0B BA 0F   CA 64 3A 17 14 56 83 AB    .........d:..V..
1097 42 6F 62 00                                          Bob.
1098 
1099 FF 36 35 00 00 00 00 00   10 00 00 00 04 00 00 00    .65.............
1100 0D 43 03 00 7A 11 07 ED   7C 9E 1E 38 E5 87 8B 3B    .C..z...|..8...;
1101 9C 19 91 D9 0D 10 FC C1   C0 86 8C 8D DA A4 45 0B    ..............E.
1102 XX XX XX XX 00                                       XXXX.
1103 
1104 FF 36 34 00 00 00 00 00   10 00 00 00 04 00 00 00    .64.............
1105 70 F9 02 00 58 F9 B6 E6   38 49 5C 38 38 9C 31 E4    p...X...8I\88.1.
1106 1D 3D 40 05 66 AD 4C C8   1D 12 8E 49 9E 60 1A CB    .=@.f.L....I.`..
1107 42 6F 62 00                                          Bob.
1108 */
1109 #define CLIENT_CDKEY2 0x36ff
1110 typedef struct
1111 {
1112     t_bnet_header h;
1113     bn_int        spawn;
1114     bn_int        keylen; /* without terminating NUL */
1115     bn_int        productid;
1116     bn_int        keyvalue1;
1117     bn_int        sessionkey;
1118     bn_int        ticks;
1119     bn_int        key_hash[5];
1120     /* owner name */
1121 } PACKED_ATTR() t_client_cdkey2;
1122 #define CLIENT_CDKEY2_SPAWN_TRUE  0x00000001
1123 #define CLIENT_CDKEY2_SPAWN_FALSE 0x00000000
1124 /******************************************************/
1125 
1126 
1127 /******************************************************/
1128 /*
1129 From Diablo II 1.08?
1130                           FF 42 43 00 AB 4C A4 3B            .BC..L.;
1131 01 00 00 00 00 00 00 00   10 00 00 00 06 00 00 00    ................
1132 XX 60 12 00 00 00 00 00   5D 82 82 C4 F4 8F D0 91    X`......].......
1133 E1 5B AB 95 D9 EE EF 18   44 3E F1 C9 XX XX XX XX    .[......D>..XXXX
1134 XX XX XX XX XX XX XX XX   XX XX 00                   XXXXXXXXXX.
1135 
1136 FF 42 44 00 17 78 42 77   01 00 00 00 00 00 00 00    .BD..xBw........
1137 10 00 00 00 06 00 00 00   XX F3 10 00 00 00 00 00    ........X.......
1138 A8 29 8B C4 41 BD 33 AB   74 4C 1F 1E 5C XX CA 83    .)..A.3.tL..\X..
1139 7F E5 36 14 XX XX XX XX   XX XX XX XX XX XX XX XX    ..6.XXXXXXXXXXXX
1140 XX XX XX 00                                          XXX.
1141 
1142 FF 42 44 00 C6 25 A1 3B   01 00 00 00 00 00 00 00    .BD..%.;........
1143 10 00 00 00 06 00 00 00   XX F3 10 00 00 00 00 00    ........X.......
1144 C4 3F FB 05 94 0C AC D4   3B 63 B1 90 E4 XX 53 B9    .?......;c...XS.
1145 70 C3 6F 2E XX XX XX XX   XX XX XX XX XX XX XX XX    p.o.XXXXXXXXXXXX
1146 XX XX XX 00                                          XXX.
1147 */
1148 #define CLIENT_CDKEY3 0x42ff
1149 typedef struct
1150 {
1151     t_bnet_header h;
1152     bn_int        unknown1; /* FIXME: some kind of salt? */
1153     bn_int        unknown2; /* 01 00 00 00 */
1154     bn_int        unknown3; /* 00 00 00 00 */
1155     bn_int        unknown4; /* 10 00 00 00 */
1156     bn_int        unknown5; /* 06 00 00 00 */
1157     bn_int        unknown6; /* FIXME: value1? */
1158     bn_int        unknown7; /* 00 00 00 00 */
1159     bn_int        key_hash[5];
1160     /* owner name */
1161 } PACKED_ATTR() t_client_cdkey3;
1162 #define CLIENT_CDKEY3_UNKNOWN1  0xffffffff
1163 #define CLIENT_CDKEY3_UNKNOWN2  0x00000001
1164 #define CLIENT_CDKEY3_UNKNOWN3  0x00000000
1165 #define CLIENT_CDKEY3_UNKNOWN4  0x00000010
1166 #define CLIENT_CDKEY3_UNKNOWN5  0x00000006
1167 #define CLIENT_CDKEY3_UNKNOWN6  0x00123456
1168 #define CLIENT_CDKEY3_UNKNOWN7  0x00000000
1169 /******************************************************/
1170 
1171 
1172 /******************************************************/
1173 /*
1174                           FF 42 09 00 00 00 00 00            .B......
1175 00
1176 
1177 FF 42 09 00 00 00 00 00   00                         .B.......
1178 */
1179 #define SERVER_CDKEYREPLY3 0x42ff
1180 typedef struct
1181 {
1182     t_bnet_header h;
1183     bn_int        message;
1184     /* owner name */ /* FIXME: or error message, or ... */
1185 } PACKED_ATTR() t_server_cdkeyreply3;
1186 #define SERVER_CDKEYREPLY3_MESSAGE_OK       0x00000000
1187 /******************************************************/
1188 
1189 
1190 /******************************************************/
1191 /*
1192 FF 34 0D 00 00 00 00 00   00 00 00 00 00             .4...........
1193 */
1194 #define CLIENT_REALMLISTREQ 0x34ff
1195 typedef struct
1196 {
1197     t_bnet_header h;
1198     bn_int        unknown1;
1199     bn_int        unknown2;
1200 } PACKED_ATTR() t_client_realmlistreq;
1201 /******************************************************/
1202 
1203 
1204 /******************************************************/
1205 /*
1206 0000:   FF 40 04 00                                          .@..
1207 
1208 */
1209 #define CLIENT_REALMLISTREQ_110 0x40ff
1210 typedef struct
1211 {
1212     t_bnet_header h;
1213 } PACKED_ATTR() t_client_realmlistreq_110;
1214 /******************************************************/
1215 
1216 
1217 /******************************************************/
1218 /*
1219 FF 34 5E 00 00 00 00 00   01 00 00 00 00 00 00 C0    .4^.............
1220 00 00 00 00 00 00 00 00   00 00 00 00 10 82 01 00    ................
1221 FF FF FF FF 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
1222 00 50 6C 65 61 73 65 20   73 65 6C 65 63 74 20 74    .Please select t
1223 68 69 73 20 61 73 20 79   6F 75 72 20 72 65 61 6C    his as your real
1224 6D 20 64 75 72 69 6E 67   20 62 65 74 61 00          m during beta.
1225 
1226 ff 34 5e 00 00 00 00 00   01 00 00 00 00 00 00 c0    .4^.............
1227 00 00 00 00 00 00 00 00   00 00 00 00 bc 95 01 00    ................
1228 ff ff ff ff 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
1229 00 50 6c 65 61 73 65 20   73 65 6c 65 63 74 20 74    .Please select t
1230 68 69 73 20 61 73 20 79   6f 75 72 20 72 65 61 6c    his as your real
1231 6d 20 64 75 72 69 6e 67   20 62 65 74 61 00          m during beta.
1232 
1233 ff 34 5e 00 00 00 00 00   01 00 00 00 00 00 00 c0    .4^.............
1234 00 00 00 00 00 00 00 00   00 00 00 00 c8 99 01 00    ................
1235 ff ff ff ff 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
1236 00 50 6c 65 61 73 65 20   73 65 6c 65 63 74 20 74    .Please select t
1237 68 69 73 20 61 73 20 79   6f 75 72 20 72 65 61 6c    his as your real
1238 6d 20 64 75 72 69 6e 67   20 62 65 74 61 00          m during beta.
1239 
1240 from bnetd-0.3.23pre18 to Diablo II 1.03
1241       FF 34 4B 00 00 00   00 00 01 00 00 00 00 00      .4K...........
1242 00 C0 00 00 00 00 00 00   00 00 00 00 00 00 10 82    ................
1243 01 00 FF FF FF FF 00 00   00 00 51 61 72 61 74 68    ..........Qarath
1244 52 65 61 6C 6D 00 54 48   45 20 43 68 6F 69 63 65    Realm.THE Choice
1245 20 46 6F 72 20 4E 6F 77   28 74 6D 29 00              For Now(tm).
1246 */
1247 #define SERVER_REALMLISTREPLY 0x34ff /* realm list reply? */
1248 typedef struct
1249 {
1250     t_bnet_header h;
1251     bn_int        unknown1;
1252     bn_int        count;
1253     /* realm entries */
1254 } PACKED_ATTR() t_server_realmlistreply;
1255 #define SERVER_REALMLISTREPLY_UNKNOWN1 0x00000000
1256 
1257 typedef struct
1258 {
1259     bn_int unknown3;
1260     bn_int unknown4;
1261     bn_int unknown5;
1262     bn_int unknown6;
1263     bn_int unknown7; /* this one is always different... 00 01 XX XX.. what is it? */
1264     bn_int unknown8;
1265     bn_int unknown9;
1266     /* realm name */
1267     /* realm description */
1268 } PACKED_ATTR() t_server_realmlistreply_data;
1269 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN3 0xc0000000
1270 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN4 0x00000000
1271 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN5 0x00000000
1272 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN6 0x00000000
1273 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN7 0x00018210 /* 98832 or 1;33296 */
1274 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN8 0xffffffff
1275 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN9 0x00000000
1276 /******************************************************/
1277 
1278 
1279 
1280 /******************************************************/
1281 /*
1282 # 44 packet from server: type=0x40ff(unknown) length=40 class=bnet
1283 0000:   FF 40 28 00 00 00 00 00   01 00 00 00 01 00 00 00    .@(.............
1284 0010:   45 75 72 6F 70 65 00 52   65 61 6C 6D 20 66 6F 72    Europe.Realm for
1285 0020:   20 45 75 72 6F 70 65 00                               Europe.
1286 */
1287 #define SERVER_REALMLISTREPLY_110 0x40ff
1288 
1289 typedef struct
1290 {
1291     t_bnet_header h;
1292     bn_int        unknown1;
1293     bn_int        count;
1294     /* realm entries */
1295 } PACKED_ATTR() t_server_realmlistreply_110;
1296 #define SERVER_REALMLISTREPLY_110_UNKNOWN1 0x00000000
1297 
1298 typedef struct
1299 {
1300     bn_int unknown1;
1301     /* realm name */
1302     /* realm description */
1303 } PACKED_ATTR() t_server_realmlistreply_110_data;
1304 #define SERVER_REALMLISTREPLY_110_DATA_UNKNOWN1 0x00000001
1305 
1306 
1307 #define CLIENT_PROFILEREQ 0x35ff
1308 typedef struct /* join realm request */
1309 {
1310     t_bnet_header h;
1311     bn_int	  count;
1312     /* player name */
1313 } PACKED_ATTR() t_client_profilereq;
1314 
1315 
1316 #define SERVER_PROFILEREPLY 0x35ff
1317 typedef struct /* realm join reply? */
1318 {
1319     t_bnet_header h;
1320     bn_int	  count;	/* same as in req */
1321     bn_byte	  fail;		/* != 0 if a problem occured */
1322     /* profile-description */
1323     /* profile-location */
1324     /* bn_int clanTAG */
1325 } PACKED_ATTR() t_server_profilereply;
1326 
1327 #define CLIENT_UNKNOWN_37 0x37ff
1328 typedef struct /* character list request, character list upload? */
1329 {
1330     t_bnet_header h;
1331     bn_int        opencount;  /* Number of OPEN characters on user's machine!    */
1332 			      /* Always zero for "closed" connections.           */
1333     /* unknown2 */            /* subsequent blocks of t_d2char_info or something */
1334                               /* similar, so server could read this list and     */
1335                               /* include in the 0x37ff reply as a choice (this   */
1336                               /* makes sense cuz the server does NOT store open  */
1337                               /* character details - this also explains why      */
1338                               /* unknown1 is always 0 in the beta, and the 0x00  */
1339                               /* of unknown2 acts as a EOF when client read the  */
1340                               /* t_d2char_info structures                        */
1341 } PACKED_ATTR() t_client_unknown_37;
1342 /******************************************************/
1343 
1344 
1345 /******************************************************/
1346 /*
1347 FF 37 01 01 00 00 00 00   08 00 00 00 04 00 00 00    .7..............
1348 42 65 74 61 57 65 73 74   2C 4D 6F 4E 6B 00 87 80    BetaWest,MoNk...
1349 06 01 01 01 01 50 FF FF   02 02 FF FF FF FF FF FF    .....P..........
1350 02 49 50 50 50 50 FF FF   FF 50 50 FF FF FF FF FF    .IPPPP...PP.....
1351 FF 14 88 82 80 80 FF FF   FF 00 42 65 74 61 57 65    ..........BetaWe
1352 73 74 2C 4D 6F 4E 6B 2D   65 00 83 80 05 02 02 01    st,MoNk-e.......
1353 01 2B FF 1B 02 02 FF FF   FF FF FF FF 03 FF FF FF    .+..............
1354 FF FF FF FF A8 FF FF FF   FF FF FF FF FF 10 80 82    ................
1355 80 80 FF FF FF 00 42 65   74 61 57 65 73 74 2C 4D    ......BetaWest,M
1356 6F 4E 6B 2D 65 65 00 83   80 06 01 01 01 01 FF 4C    oNk-ee.........L
1357 FF 02 02 FF FF FF FF FF   FF 01 FF 48 48 48 48 FF    ...........HHHH.
1358 A6 FF 48 48 FF FF FF FF   FF FF 0F 80 80 80 80 FF    ..HH............
1359 FF FF 00 42 65 74 61 57   65 73 74 2C 4D 6F 4E 6B    ...BetaWest,MoNk
1360 2D 74 77 6F 00 87 80 01   01 01 01 01 FF FF FF 01    -two............
1361 01 FF FF FF FF FF FF 02   FF FF FF FF FF FF FF FF    ................
1362 FF FF FF FF FF FF FF FF   01 84 80 FF FF FF 80 80    ................
1363 00                                                   .
1364 
1365 ^-- 1: (BetaWest) MoNk
1366     2: (BetaWest) MoNk-e
1367     3: (BetaWest) MoNk-ee
1368     4: (BetaWest) MoNk-two
1369 
1370 ff 37 4e 00 00 00 00 00   08 00 00 00 01 00 00 00    .7N.............
1371 42 65 74 61 57 65 73 74   2c 4c 69 66 65 6c 69 6b    BetaWest,Lifelik
1372 65 00 87 80 01 01 01 01   01 ff ff ff 01 01 ff ff    e...............
1373 ff ff ff ff 03 ff ff ff   ff ff ff ff ff ff ff ff    ................
1374 ff ff ff ff ff 01 80 80   ff ff ff 80 80 00          ..............
1375 
1376 ff 37 4e 00 00 00 00 00   08 00 00 00 01 00 00 00    .7N.............
1377 42 65 74 61 57 65 73 74   2c 51 6c 65 78 54 45 53    BetaWest,QlexTES
1378 54 00 83 80 ff ff ff ff   ff 30 ff 1b ff ff ff ff    T........0......
1379 ff ff ff ff 04 ff ff ff   ff ff ff ff ff ff ff ff    ................
1380 ff ff ff ff ff 01 80 80   80 80 ff ff ff 00          ..............
1381 
1382 from bnetd-0.3.23pre18 to Diablo II 1.03
1383 "Char1 {BNE}" [lvl 20, amaz]
1384 "Char2 {BNE}" [lvl 21, sorc]
1385 "Char3 {BNE}" [lvl 22, necro]
1386       FF 37 D9 00 00 00   00 00 08 00 00 00 03 00    Gv.7............
1387 00 00 51 61 72 61 74 68   52 65 61 6C 6D 2C 43 68    ..QarathRealm,Ch
1388 61 72 31 00 87 80 01 01   01 01 01 01 01 01 01 01    ar1.............
1389 01 01 01 01 01 01 01 01   01 01 01 01 01 01 01 01    ................
1390 01 01 01 01 01 01 01 14   85 86 01 FF FF FF FF 42    ...............B
1391 4E 45 54 44 00 51 61 72   61 74 68 52 65 61 6C 6d    NETD.QarathRealm
1392 2C 43 68 61 72 32 00 87   80 01 01 01 01 01 01 01    ,Char2..........
1393 01 01 01 01 01 01 01 01   01 02 01 01 01 01 01 01    ................
1394 01 01 01 01 01 01 01 01   01 01 15 85 86 01 FF FF    ................
1395 FF FF 42 4E 45 54 44 00   51 61 72 61 74 68 52 65    ..BNETD.QarathRe
1396 61 6C 6D 2C 43 68 61 72   33 00 87 80 01 01 01 01    alm,Char3.......
1397 01 01 01 01 01 01 01 01   01 01 01 01 03 01 01 01    ................
1398 01 01 01 01 01 01 01 01   01 01 01 01 01 16 85 86    ................
1399 01 FF FF FF FF 42 4E 45   54 44 00                   .....BNETD.
1400 */
1401 #define SERVER_UNKNOWN_37 0x37ff
1402 typedef struct /* character list reply? */
1403 {
1404     t_bnet_header h;
1405     bn_int        unknown1;
1406     bn_int        unknown2; /* _bucky_: max chars allowed? */
1407     bn_int        count;    /* # of chars, same number of  */
1408                             /* t_char_info to follow in    */
1409                             /* packet                      */
1410     /* d2char_info blocks */
1411 } PACKED_ATTR() t_server_unknown_37;
1412 #define SERVER_UNKNOWN_37_UNKNOWN1 0x00000000
1413 #define SERVER_UNKNOWN_37_UNKNOWN2 0x00000008
1414 
1415 /* The ONLY 0x00 that should appear should be the terminating NUL for  */
1416 /* the character name string and the guild tag string, they're used as */
1417 /* delimiters to separate character name and the character structure   */
1418 /* If you got any other NUL's in here the next character's info will   */
1419 /* be royally fucked up - using 0x01 or 0xff for unknowns seem to work */
1420 /* well                                                                */
1421 typedef struct
1422 {
1423     /* "RealmName,CharacterName" - for closed characters */
1424     /* - OR -                                            */
1425     /* "CharacterName" - for open characters             */
1426     /* - strlen(CharacterName) must be <= 15 -           */
1427     bn_byte unknownb1;     /* 0x83, 0x87? */
1428     bn_byte unknownb2;     /* 0x80...? */
1429     bn_byte helmgfx;
1430     bn_byte bodygfx;
1431     bn_byte leggfx;
1432     bn_byte lhandweapon;
1433     bn_byte lhandgfx;
1434     bn_byte rhandweapon;
1435 
1436 /* Partial weapon code list:
1437           0x2f: 1H Axe
1438           0x30: 1H Sword
1439           0x50: 2H Staff
1440           0x51: Another 2H Staff
1441           0x52: Another 2H Staff
1442           0x53: Another 2H Staff
1443           0x54: 2H Axe
1444           0x55: Scythe
1445           0x56: empty?
1446           0x57: Another 2H Axe
1447           0x58: Halberd?
1448           0x59: empty?
1449           0x5a: Another 2H Axe
1450           0x5b: Another Halberd
1451           0x5c: empty?
1452           0x5d: 1H club?
1453           0x5e: empty?
1454           0x5f: empty?
1455 */
1456 
1457     bn_byte rhandgfx;
1458     bn_byte unknownb3;
1459     bn_byte unknownb4;
1460     bn_byte unknownb5;
1461     bn_byte unknownb6;
1462     bn_byte unknownb7;
1463     bn_byte unknownb8;
1464     bn_byte unknownb9;
1465     bn_byte unknownb10;
1466     bn_byte unknownb11;
1467     bn_byte class;     /* 0x01=Amazon, 0x02=Sor, 0x03=Nec, 0x04=Pal, 0x05=Bar */
1468 
1469     bn_int  unknown1;
1470     bn_int  unknown2;
1471     bn_int  unknown3;
1472     bn_int  unknown4;
1473 
1474     bn_byte level;     /* yes, byte, not short/int/long  */
1475     bn_byte status;    /* 0x01-03 = Norm & alive         */
1476                        /* 0x04-07 = HC & alive           */
1477                        /* 0x08-0b = Norm & "dead"?       */
1478                        /* 0x0c+   = HC & dead, chat only */
1479                        /* Add 0x80 to get same effect    */
1480     bn_byte title;     /* 0x01=none
1481                           0x02=Sir/Dame?
1482                           0x03=Sir/Dame?
1483                           0x04=Lord?
1484                           0x05=Lord?
1485                           0x06=Baron?
1486                           0x07=Baron? */
1487                        /* Same codes for HC chars                            */
1488                        /* Add 0x80 to get same effect    */
1489     bn_byte unknownb13;
1490     bn_byte emblembgc; /* Guild emblem background colour */
1491     bn_byte emblemfgc; /* Guild emblem foreground colour */
1492     bn_byte emblemnum; /* Guild emblem type number       */
1493 
1494 /* emblem number corresponds to D2DATA.MPQ/data/global/ui/Emblems/iconXXa.dc6 */
1495 /* where XX = emblem number - 1 (ie, 0x0A corresponds to icon09a.dc6) use     */
1496 /* for dummy values seem safe... 0x01 won't work, you'll get an emblem...     */
1497 
1498     bn_byte unknownb14;
1499     /* Guild Tag */ /* must not be longer than 3 chars */
1500 } PACKED_ATTR() t_d2char_info;
1501 #define D2CHAR_INFO_UNKNOWNB1 0x83
1502 #define D2CHAR_INFO_UNKNOWNB2 0x80
1503 #define D2CHAR_INFO_FILLER 0xff /* non-zero padding */
1504 #define D2CHAR_INFO_CLASS_AMAZON      0x01
1505 #define D2CHAR_INFO_CLASS_SORCERESS   0x02
1506 #define D2CHAR_INFO_CLASS_NECROMANCER 0x03
1507 #define D2CHAR_INFO_CLASS_PALADIN     0x04
1508 #define D2CHAR_INFO_CLASS_BARBARIAN   0x05
1509 #define D2CHAR_INFO_CLASS_DRUID       0x06
1510 #define D2CHAR_INFO_CLASS_ASSASSIN    0x07
1511 /******************************************************/
1512 
1513 
1514 /******************************************************/
1515 /* D2 packet... not sent very often and the client doesn't
1516  * seem to expect an answer */
1517 /* FIXME: what the hell does this one do? */
1518 /*
1519 FF 39 13 00 42 65 74 61   57 65 73 74 2C 62 75 73    .9..BetaWest,bus
1520 74 61 00                                             ta.
1521 
1522 this one was sent after a closed character was deleted on the auth
1523 server... maybe a notifier for the gateway server?
1524 FF 39 17 00 42 6F 62 73   57 6F 72 6C 64 2C 63 68    .9..BobsWorld,ch
1525 61 72 6E 61 6D 65 00                                 arname.
1526 */
1527 #define CLIENT_UNKNOWN_39 0x39ff
1528 typedef struct
1529 {
1530     t_bnet_header h;
1531     /* character name */ /* what about open chars? */
1532 } PACKED_ATTR() t_client_unknown_39;
1533 /******************************************************/
1534 
1535 
1536 /******************************************************/
1537 /*
1538 FF 3A 2E 00 58 4C F2 00   19 C2 08 00 D7 33 37 D3    .:..XL.......37.
1539 42 8C 92 37 C2 26 08 A9   3E 92 05 28 A1 5A 18 B9    B..7.&..>..(.Z..
1540 6D 61 73 74 6F 64 6F 6E   74 66 69 6C 6D 00          mastodontfilm.
1541 
1542 FF 3A 28 00 2B 73 1C 01   88 91 F2 0D AF 22 43 25    .:(.+s......."C%
1543 BF E4 2D 45 42 37 04 DB   AF 95 66 71 16 85 67 60    ..-EB7....fq..g`
1544 51 6C 65 78 53 5A 47 00                              QlexSZG.
1545 */
1546 #define CLIENT_LOGINREQ2 0x3aff
1547 typedef struct
1548 {
1549     t_bnet_header h;
1550     bn_int        ticks; /* is it really? */
1551     bn_int        sessionkey;
1552     bn_int        password_hash2[5];
1553     /* player name */
1554 } PACKED_ATTR() t_client_loginreq2;
1555 /******************************************************/
1556 
1557 
1558 /******************************************************/
1559 /*
1560 # 21 packet from client: type=0x46ff(unknown) length=8 class=bnet
1561 0000:   FF 46 08 00 00 00 00 00                              .F......
1562 */
1563 #define CLIENT_MOTD_W3 0x46ff
1564 typedef struct
1565 {
1566     t_bnet_header h;
1567     bn_int        last_news_time; /* date of the last news item the client has */
1568 } PACKED_ATTR() t_client_motd_w3;
1569 /******************************************************/
1570 
1571 
1572 /******************************************************/
1573 /*
1574 # 22 packet from server: type=0x46ff(unknown) length=225 class=bnet
1575 0000:   FF 46 E1 00 01 16 3A 6C   3C FF FF FF FF 00 00 00    .F....:l<.......
1576 0010:   00 00 00 00 00 57 65 6C   63 6F 6D 65 20 74 6F 20    .....Welcome to
1577 0020:   42 61 74 74 6C 65 2E 6E   65 74 21 0A 54 68 69 73    Battle.net!.This
1578 0030:   20 73 65 72 76 65 72 20   69 73 20 68 6F 73 74 65     server is hoste
1579 0040:   64 20 62 79 20 41 54 26   54 2E 0A 54 68 65 72 65    d by AT&T..There
1580 0050:   20 61 72 65 20 63 75 72   72 65 6E 74 6C 79 20 36     are currently 6
1581 0060:   32 38 20 75 73 65 72 73   20 70 6C 61 79 69 6E 67    28 users playing
1582 0070:   20 31 35 39 20 67 61 6D   65 73 20 6F 66 20 57 61     159 games of Wa
1583 0080:   72 63 72 61 66 74 20 49   49 49 2C 20 61 6E 64 20    rcraft III, and
1584 0090:   31 37 37 33 34 36 20 75   73 65 72 73 20 70 6C 61    177346 users pla
1585 00A0:   79 69 6E 67 20 37 37 38   33 37 20 67 61 6D 65 73    ying 77837 games
1586 00B0:   20 6F 6E 20 42 61 74 74   6C 65 2E 6E 65 74 2E 0A     on Battle.net..
1587 00C0:   4C 61 73 74 20 6C 6F 67   6F 6E 3A 20 54 68 75 20    Last logon: Thu
1588 00D0:   46 65 62 20 31 34 20 20   35 3A 32 38 20 50 4D 0A    Feb 14  5:28 PM.
1589 00E0:   00                                                   .
1590 
1591 # Match 4, 2002
1592 # 92 packet from server: type=0x46ff(unknown) length=859 class=bnet
1593 0000:   FF 46 5B 03 01 B4 B2 82   3C 20 B6 83 3C 20 B6 83    .F[.....< ..< ..
1594 0010:   3C 20 B6 83 3C 57 65 20   68 61 76 65 20 62 65 65    < ..<We have bee
1595 # 93 packet from server: type=0x46ff(unknown) length=223 class=bnet
1596 0000:   FF 46 DF 00 01 B4 B2 82   3C 20 B6 83 3C 20 B6 83    .F......< ..< ..
1597 0010:   3C 00 00 00 00 57 65 6C   63 6F 6D 65 20 74 6F 20    <....Welcome to
1598 
1599 */
1600 #define SERVER_MOTD_W3 0x46ff
1601 typedef struct
1602 {
1603     t_bnet_header h;
1604 	bn_byte        msgtype; /* we only saw "1" type so far */
1605 	bn_int         curr_time; /* as seen by the server */
1606 	bn_int         first_news_time; /* the oldest news item's timestamp */
1607 	bn_int         timestamp; /* the timestamp of this news item */
1608 			    /* it is equal with the latest news item timestamp for
1609 			    the welcome message */
1610 	bn_int         timestamp2; /* always equal with the timestamp except the
1611 				    last packet which shows in the right panel */
1612 	/* text */
1613 } PACKED_ATTR() t_server_motd_w3;
1614 #define SERVER_MOTD_W3_MSGTYPE  0x01
1615 #define SERVER_MOTD_W3_WELCOME  0x00000000
1616 /******************************************************/
1617 
1618 /******************************************************/
1619 /*
1620 # Jon/bbbbb
1621 # 28 packet from client: type=0x53ff(unknown) length=40 class=bnet
1622 0000:   FF 53 28 00 6F FD 5F 61   C3 D1 C4 78 E6 2E 24 8B    .S(.o._a...x..$.
1623 0010:   32 EB 36 9C 39 57 D8 BA   57 84 67 5E E7 78 5B 01    2.6.9W..W.g^.x[.
1624 0020:   6D 99 87 15 4A 6F 6E 00                              m...Jon.
1625 */
1626 #define CLIENT_LOGINREQ_W3 0x53ff
1627 typedef struct
1628 {
1629     t_bnet_header h;
1630     bn_byte        unknown[32];
1631     /* player name */
1632 } PACKED_ATTR() t_client_loginreq_w3;
1633 /******************************************************/
1634 
1635 /******************************************************/
1636 /*
1637 12:33:56.255569 63.241.83.11.6112 > ws-2-11.1038: P 190:262(72) ack 272 win 65264
1638     ** ** ** ** ** ** ** **   ** ** ** ** ** ** ** **
1639     ** ** ** ** ** ** ** **   ** ** ** ** ** ** ** **
1640     ** ** ** ** ** ** ** **   FF 53 48 00 00 00 00 00            .SH.....
1641     4B A8 FF 5D 1E 5D 2D 50   D1 2B B2 95 74 AD 5F 4E    K..].]-P.+..t._N
1642     88 A4 88 48 18 27 89 50   F1 AA 1B D5 D7 B6 47 BC    ...H.'.P......G.
1643     30 8B 2A 54 AA 99 23 96   75 8A 5E 67 35 8E 5B 22    0.*T..#.u.^g5.["
1644     2C 0E 68 2E C2 95 E9 D7   A1 82 F1 2C 1E 2B 28 36    ,.h........,.+(6
1645 */
1646 #define SERVER_LOGINREPLY_W3 0x53ff
1647 typedef struct
1648 {
1649     t_bnet_header h;
1650     bn_int       message;
1651     /* seems to be response to client-challenge */
1652     bn_int       unknown[16];
1653 } PACKED_ATTR() t_server_loginreply_w3;
1654 #define SERVER_LOGINREPLY_W3_MESSAGE_SUCCESS 0x00000000
1655 #define SERVER_LOGINREPLY_W3_MESSAGE_ALREADY 0x00000001 /* Account already logged on */
1656 #define SERVER_LOGINREPLY_W3_MESSAGE_BADACCT 0x00000001 /* Accoutn does not exist */
1657 /******************************************************/
1658 
1659 /******************************************************/
1660 /* single player crack based:
1661 # 34 packet from server: type=0x54ff(unknown) length=40 class=bnet
1662 0000:   FF 54 28 00 00 00 00 00   00 00 00 00 00 00 00 00    .T(.............
1663 0010:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
1664 0020:   00 00 00 00 00 00 00 00                              ........
1665 
1666 * Password Checksum ? *
1667 -- client --
1668 0x54ff - 2 bytes
1669 size - 2 bytes (0x0018)
1670 unknown1 - 20 bytes
1671 -- server --
1672 0x54ff - 2 bytes
1673 size - 2 bytes
1674 msgid - 4 bytes
1675 {
1676 0x00000000	accept
1677 0x00000002	password incorrect
1678 }
1679 unknown1 - 20 bytes
1680 
1681 Packet #13
1682 0x0000   FF 54 1C 00 00 00 00 00-3A D5 B9 B1 2B D9 B5 D9   �T......:չ?ٵ?
1683 0x0010   87 3B 2B 3D 28 57 C0 2E-02 93 5F 8B               ?+=(W?.�_?
1684 */
1685 #define CLIENT_LOGONPROOFREQ 0x54ff
1686 typedef struct
1687 {
1688     t_bnet_header h;
1689     bn_int        password_hash1[5];
1690 } PACKED_ATTR() t_client_logonproofreq;
1691 
1692 #define SERVER_LOGONPROOFREPLY 0x54ff
1693 typedef struct
1694 {
1695    t_bnet_header h;
1696    bn_int response;
1697    bn_int unknown1;
1698    bn_short port0;
1699    bn_int unknown2;
1700    bn_short port1;
1701    bn_int unknown3;
1702    bn_int unknown4;
1703 } PACKED_ATTR() t_server_logonproofreply;
1704 #define SERVER_LOGONPROOFREPLY_RESPONSE_OK 0x00000000
1705 /*#define SERVER_LOGONPROOFREPLY_RESPONSE_BADPASS 0x00000001 */
1706 #define SERVER_LOGONPROOFREPLY_RESPONSE_BADPASS 0x00000002 /* from the battle net dump... */
1707 #define SERVER_LOGONPROOFREPLY_RESPONSE_EMAIL  0x0000000E
1708 #define SERVER_LOGONPROOFREPLY_UNKNOWN1  0x02825278
1709 #define SERVER_LOGONPROOFREPLY_UNKNOWN2  0x00000000
1710 #define SERVER_LOGONPROOFREPLY_UNKNOWN3  0x02825278
1711 #define SERVER_LOGONPROOFREPLY_UNKNOWN4  0x00000000
1712 /******************************************************/
1713 
1714 /******************************************************/
1715 /*
1716 # 13 packet from client: type=0x52ff(unknown) length=83 class=bnet
1717 0000:   FF 52 53 00 2B 63 B9 05   CA F3 E1 BA 58 5C ED 65    .RS.+c......X\.e
1718 0010:   BE 8F 0E 89 A9 B8 C7 FE   75 2C 44 10 AE 19 B5 14    ........u,D.....
1719 0020:   E8 CA E9 C7 37 50 7D 0F   9A 89 00 FF 2F 10 BB EE    ....7P}...../...
1720 0030:   A8 0C 81 64 AD AF DC C7   3F 58 F1 20 A1 05 E2 38    ...d....?X. ...8
1721 0040:   18 87 85 5B 74 68 65 61   63 63 6F 75 6E 74 6E 61    ...[theaccountna
1722 0050:   6D 65 00                                             me.
1723 */
1724 #define CLIENT_CREATEACCOUNT_W3 0x52ff
1725 typedef struct
1726 {
1727 	t_bnet_header h;
1728 	bn_byte       unknown[64];
1729 	/* player name */
1730 } PACKED_ATTR() t_client_createaccount_w3;
1731 /******************************************************/
1732 
1733 
1734 /******************************************************/
1735 
1736 /******************************************************/
1737 
1738 /*
1739 # 20 packet from client: type=0x45ff(unknown) length=6 class=bnet
1740 0000:   FF 45 06 00 E0 17                                    .E....
1741 */
1742 #define CLIENT_CHANGEGAMEPORT 0x45ff
1743 typedef struct
1744 {
1745         t_bnet_header	h;
1746 	bn_short	port;
1747 } PACKED_ATTR() t_client_changegameport;
1748 
1749 
1750 
1751 
1752 /******************************************************/
1753 /*
1754 RECV-> 0000   FF 52 08 00 00 00 00 00                            .R......
1755 */
1756 #define SERVER_CREATEACCOUNT_W3 0x52ff
1757 typedef struct
1758 {
1759     t_bnet_header h;
1760 	bn_int       result;
1761 } PACKED_ATTR() t_server_createaccount_w3;
1762 #define SERVER_CREATEACCOUNT_W3_RESULT_OK    0x00000000
1763 #define SERVER_CREATEACCOUNT_W3_RESULT_EXIST 0x00000004
1764 #define SERVER_CREATEACCOUNT_W3_RESULT_EMPTY 0x00000007
1765 #define SERVER_CREATEACCOUNT_W3_RESULT_INVALID 0x00000008
1766 #define SERVER_CREATEACCOUNT_W3_RESULT_BANNED 0x00000009
1767 #define SERVER_CREATEACCOUNT_W3_RESULT_SHORT 0x0000000A
1768 #define SERVER_CREATEACCOUNT_W3_RESULT_PUNCTUATION 0x0000000B
1769 #define SERVER_CREATEACCOUNT_W3_RESULT_PUNCTUATION2 0x0000000C
1770 /******************************************************/
1771 
1772 /******************************************************/
1773 /*
1774 FF 3A 08 00 00 00 00 00                              .:......
1775 */
1776 #define SERVER_LOGINREPLY2 0x3aff
1777 typedef struct
1778 {
1779     t_bnet_header h;
1780     bn_int        message;
1781 } PACKED_ATTR() t_server_loginreply2;
1782 #define SERVER_LOGINREPLY2_MESSAGE_SUCCESS  0x00000000
1783 #define SERVER_LOGINREPLY2_MESSAGE_NONEXIST 0x00000001 /* Account does not exists */
1784 #define SERVER_LOGINREPLY2_MESSAGE_BADPASS  0x00000002 /* Bad password */
1785 #define SERVER_LOGINREPLY2_MESSAGE_LOCKED   0x00000006 /* Account is locked */
1786 /******************************************************/
1787 
1788 
1789 /******************************************************/
1790 /* Diablo II 1.03 */
1791 /* sent when registering new player with open Battle.net */
1792 /* and when logging in with closed Battle.net */
1793 /*
1794 (closed) b.net login:
1795  enter name/password -> 3dff packet
1796 (open) b.net login:
1797  enter name/password -> "login" packet (bad account) <-- CORRECT
1798  "Create new account" -> TOS grab -> Enter password -> 3dff packet
1799 */
1800 /*
1801 FF 3D 20 00 B8 C0 A1 2F   56 B1 47 65 CF 55 09 62    .= ..../V.Ge.U.b
1802 8E 21 3C 59 57 BC E8 EA   45 6C 66 6C 6F 72 64 00    .!<YW...Elflord.
1803 */
1804 #define CLIENT_CREATEACCTREQ2 0x3dff
1805 typedef struct
1806 {
1807     t_bnet_header h;
1808     bn_int        password_hash1[5];
1809     /* username (charactername?) */
1810 } PACKED_ATTR() t_client_createacctreq2;
1811 /******************************************************/
1812 
1813 
1814 /******************************************************/
1815 /* Diablo II 1.03 */
1816 #define SERVER_CREATEACCTREPLY2 0x3dff
1817 typedef struct
1818 {
1819     t_bnet_header h;
1820     bn_int        result;
1821 } PACKED_ATTR() t_server_createacctreply2;
1822 #define SERVER_CREATEACCTREPLY2_RESULT_OK    0x00000000
1823 #define SERVER_CREATEACCTREPLY2_RESULT_SHORT 0x00000001 /* Username must be a minimum of 2 characters */
1824 #define SERVER_CREATEACCTREPLY2_RESULT_INVALID 0x00000002
1825 #define SERVER_CREATEACCTREPLY2_RESULT_BANNED 0x00000003
1826 #define SERVER_CREATEACCTREPLY2_RESULT_EXIST 0x00000004
1827 #define SERVER_CREATEACCTREPLY2_RESULT_LAST_CREATE_IN_PROGRESS 0x00000005
1828 #define SERVER_CREATEACCTREPLY2_RESULT_ALPHANUM 0x00000006
1829 #define SERVER_CREATEACCTREPLY2_RESULT_PUNCTUATION 0x00000007
1830 #define SERVER_CREATEACCTREPLY2_RESULT_PUNCTUATION2 0x00000008
1831 /******************************************************/
1832 
1833 
1834 /******************************************************/
1835 /*
1836 FF 36 0C 00 01 00 00 00   52 6F 62 00                .6......Rob.
1837 
1838 FF 36 0C 00 01 00 00 00   42 6F 62 00                .6......Bob.
1839 */
1840 #define SERVER_CDKEYREPLY2 0x36ff
1841 typedef struct
1842 {
1843     t_bnet_header h;
1844     bn_int        message;
1845     /* owner name */
1846 } PACKED_ATTR() t_server_cdkeyreply2;
1847 #define SERVER_CDKEYREPLY2_MESSAGE_OK       0x00000001
1848 #define SERVER_CDKEYREPLY2_MESSAGE_BAD      0x00000002
1849 #define SERVER_CDKEYREPLY2_MESSAGE_WRONGAPP 0x00000003
1850 #define SERVER_CDKEYREPLY2_MESSAGE_ERROR    0x00000004
1851 #define SERVER_CDKEYREPLY2_MESSAGE_INUSE    0x00000005
1852 /* (any other value seems to correspond to ok) */
1853 /******************************************************/
1854 
1855 
1856 /******************************************************/
1857 /*
1858 FF 14 08 00 74 65 6E 62                              ....tenb
1859 */
1860 #define CLIENT_UDPOK 0x14ff
1861 typedef struct
1862 {
1863     t_bnet_header h;
1864     bn_int        echo; /* echo of what the server sent, normally "tenb" */
1865 } PACKED_ATTR() t_client_udpok;
1866 /******************************************************/
1867 
1868 
1869 /******************************************************/
1870 /*
1871 FF 33 18 00 1A 00 00 00   00 00 00 00 74 6F 73 5F    .3..........tos_
1872 55 53 41 2E 74 78 74 00                              USA.txt.
1873 
1874 Diablo II 1.03
1875       FF 33 19 00 04 00   00 80 00 00 00 00 62 6E      .3..........bn
1876 73 65 72 76 65 72 2E 69   6E 69 00                   server.ini.
1877 */
1878 #define CLIENT_FILEINFOREQ 0x33ff
1879 typedef struct
1880 {
1881     t_bnet_header h;
1882     bn_int        type;     /* type of file (TOS,icons,etc.) */
1883     bn_int        unknown2; /* 00 00 00 00 */ /* always zero? */
1884     /* filename */          /* default/suggested filename? */
1885 } PACKED_ATTR() t_client_fileinforeq;
1886 #define CLIENT_FILEINFOREQ_TYPE_TOS          0x0000001a /* tos_USA.txt */
1887 #define CLIENT_FILEINFOREQ_TYPE_GATEWAYS     0x0000001b /* STAR bnserver.ini */
1888 #define CLIENT_FILEINFOREQ_TYPE_GATEWAYS_D2  0x80000004 /* D2XP bnserver-D2DV.ini */
1889 /* FIXME: what about icons.bni? */
1890 #define CLIENT_FILEINFOREQ_TYPE_ICONS        0x0000001d /* STAR icons_STAR.bni */
1891 #define CLIENT_FILEINFOREQ_UNKNOWN2          0x00000000
1892 #define CLIENT_FILEINFOREQ_FILE_TOSUSA        "tos_USA.txt"
1893 #define CLIENT_FILEINFOREQ_FILE_TOSUNICODEUSA "tos-unicode_USA.txt"
1894 #define CLIENT_FILEINFOREQ_FILE_BNSERVER      "bnserver.ini"
1895 /******************************************************/
1896 
1897 
1898 /******************************************************/
1899 /*
1900 FF 33 1C 00 1A 00 00 00   00 00 00 00 30 C3 89 86    .3..........0...
1901 09 4F BD 01 74 6F 73 2E   74 78 74 00                .O..tos.txt.
1902 
1903 FF 33 20 00 1A 00 00 00   00 00 00 00 00 38 51 E2    .3 ..........8Q.
1904 30 A1 BD 01 74 6F 73 5F   55 53 41 2E 74 78 74 00    0...tos_USA.txt.
1905 */
1906 #define SERVER_FILEINFOREPLY 0x33ff
1907 typedef struct
1908 {
1909     t_bnet_header h;
1910     bn_int        type;      /* type of file (TOS,icons,etc.) */
1911     bn_int        unknown2;  /* 00 00 00 00 */ /* same as in TOSREQ */
1912     bn_long       timestamp; /* file modification time */
1913     /* filename */
1914 } PACKED_ATTR() t_server_fileinforeply;
1915 #define SERVER_FILEINFOREPLY_TYPE_TOSFILE      0x0000001a /* tos_USA.txt */
1916 #define SERVER_FILEINFOREPLY_TYPE_GATEWAYS     0x0000001b /* STAR bnserver.ini */
1917 #define SERVER_FILEINFOREPLY_TYPE_GATEWAYS_D2  0x80000004 /* D2XP bnserver-D2DV.ini */
1918 #define SERVER_FILEINFOREPLY_TYPE_ICONS        0x0000001d /* STAR icons_STAR.bni */
1919 #define SERVER_FILEINFOREPLY_UNKNOWN2          0x00000000 /* always zero */
1920 /******************************************************/
1921 
1922 
1923 /******************************************************/
1924 /*
1925             FF 26 9E 01   01 00 00 00 13 00 00 00        .&..........
1926 78 52 82 02 42 6F 62 00   70 72 6F 66 69 6C 65 5C    xR..Bob.profile\
1927 73 65 78 00 70 72 6F 66   69 6C 65 5C 61 67 65 00    sex.profile\age.
1928 70 72 6F 66 69 6C 65 5C   6C 6F 63 61 74 69 6F 6E    profile\location
1929 00 70 72 6F 66 69 6C 65   5C 64 65 73 63 72 69 70    .profile\descrip
1930 74 69 6F 6E 00 52 65 63   6F 72 64 5C 53 45 58 50    tion.Record\SEXP
1931 5C 30 5C 77 69 6E 73 00   52 65 63 6F 72 64 5C 53    \0\wins.Record\S
1932 45 58 50 5C 30 5C 6C 6F   73 73 65 73 00 52 65 63    EXP\0\losses.Rec
1933 6F 72 64 5C 53 45 58 50   5C 30 5C 64 69 73 63 6F    ord\SEXP\0\disco
1934 6E 6E 65 63 74 73 00 52   65 63 6F 72 64 5C 53 45    nnects.Record\SE
1935 58 50 5C 30 5C 6C 61 73   74 20 67 61 6D 65 00 52    XP\0\last game.R
1936 65 63 6F 72 64 5C 53 45   58 50 5C 30 5C 6C 61 73    ecord\SEXP\0\las
1937 74 20 67 61 6D 65 20 72   65 73 75 6C 74 00 52 65    t game result.Re
1938 63 6F 72 64 5C 53 45 58   50 5C 31 5C 77 69 6E 73    cord\SEXP\1\wins
1939 00 52 65 63 6F 72 64 5C   53 45 58 50 5C 31 5C 6C    .Record\SEXP\1\l
1940 6F 73 73 65 73 00 52 65   63 6F 72 64 5C 53 45 58    osses.Record\SEX
1941 50 5C 31 5C 64 69 73 63   6F 6E 6E 65 63 74 73 00    P\1\disconnects.
1942 52 65 63 6F 72 64 5C 53   45 58 50 5C 31 5C 72 61    Record\SEXP\1\ra
1943 74 69 6E 67 00 52 65 63   6F 72 64 5C 53 45 58 50    ting.Record\SEXP
1944 5C 31 5C 68 69 67 68 20   72 61 74 69 6E 67 00 52    \1\high rating.R
1945 65 63 6F 72 64 5C 53 45   58 50 5C 31 5C 72 61 6E    ecord\SEXP\1\ran
1946 6B 00 52 65 63 6F 72 64   5C 53 45 58 50 5C 31 5C    k.Record\SEXP\1\
1947 68 69 67 68 20 72 61 6E   6B 00 52 65 63 6F 72 64    high rank.Record
1948 5C 53 45 58 50 5C 31 5C   6C 61 73 74 20 67 61 6D    \SEXP\1\last gam
1949 65 00 52 65 63 6F 72 64   5C 53 45 58 50 5C 31 5C    e.Record\SEXP\1\
1950 6C 61 73 74 20 67 61 6D   65 20 72 65 73 75 6C 74    last game result
1951 00 00                                                ..
1952 
1953             FF 26 C2 01   05 00 00 00 13 00 00 00        .&..........
1954 EE E4 84 03 6E 73 6C 40   63 6C 6F 75 64 00 63 6C    ....nsl@cloud.cl
1955 6F 75 64 00 67 75 65 73   74 00 48 65 72 6E 40 73    oud.guest.Hern@s
1956 65 65 6D 65 00 6F 72 69   6F 6E 40 00 70 72 6F 66    eeme.orion@.prof
1957 69 6C 65 5C 73 65 78 00   70 72 6F 66 69 6C 65 5C    ile\sex.profile\
1958 61 67 65 00 70 72 6F 66   69 6C 65 5C 6C 6F 63 61    age.profile\loca
1959 74 69 6F 6E 00 70 72 6F   66 69 6C 65 5C 64 65 73    tion.profile\des
1960 63 72 69 70 74 69 6F 6E   00 52 65 63 6F 72 64 5C    cription.Record\
1961 53 74 61 72 5C 30 5C 77   69 6E 73 00 52 65 63 6F    Star\0\wins.Reco
1962 72 64 5C 53 74 61 72 5C   30 5C 6C 6F 73 73 65 73    rd\Star\0\losses
1963 00 52 65 63 6F 72 64 5C   53 74 61 72 5C 30 5C 64    .Record\Star\0\d
1964 69 73 63 6F 6E 6E 65 63   74 73 00 52 65 63 6F 72    isconnects.Recor
1965 64 5C 53 74 61 72 5C 30   5C 6C 61 73 74 20 67 61    d\Star\0\last ga
1966 6D 65 00 52 65 63 6F 72   64 5C 53 74 61 72 5C 30    me.Record\Star\0
1967 5C 6C 61 73 74 20 67 61   6D 65 20 72 65 73 75 6C    \last game resul
1968 74 00 52 65 63 6F 72 64   5C 53 74 61 72 5C 31 5C    t.Record\Star\1\
1969 77 69 6E 73 00 52 65 63   6F 72 64 5C 53 74 61 72    wins.Record\Star
1970 5C 31 5C 6C 6F 73 73 65   73 00 52 65 63 6F 72 64    \1\losses.Record
1971 5C 53 74 61 72 5C 31 5C   64 69 73 63 6F 6E 6E 65    \Star\1\disconne
1972 63 74 73 00 52 65 63 6F   72 64 5C 53 74 61 72 5C    cts.Record\Star\
1973 31 5C 72 61 74 69 6E 67   00 52 65 63 6F 72 64 5C    1\rating.Record\
1974 53 74 61 72 5C 31 5C 68   69 67 68 20 72 61 74 69    Star\1\high rati
1975 6E 67 00 52 65 63 6F 72   64 5C 53 74 61 72 5C 31    ng.Record\Star\1
1976 5C 72 61 6E 6B 00 52 65   63 6F 72 64 5C 53 74 61    \rank.Record\Sta
1977 72 5C 31 5C 68 69 67 68   20 72 61 6E 6B 00 52 65    r\1\high rank.Re
1978 63 6F 72 64 5C 53 74 61   72 5C 31 5C 6C 61 73 74    cord\Star\1\last
1979 20 67 61 6D 65 00 52 65   63 6F 72 64 5C 53 74 61     game.Record\Sta
1980 72 5C 31 5C 6C 61 73 74   20 67 61 6D 65 20 72 65    r\1\last game re
1981 73 75 6C 74 00 00                                    sult..
1982 */
1983 #define CLIENT_STATSREQ 0x26ff
1984 typedef struct
1985 {
1986     t_bnet_header h;
1987     bn_int        name_count;
1988     bn_int        key_count;
1989     bn_int        requestid; /* 78 52 82 02 */
1990     /* player name */
1991     /* field key ... */
1992 } PACKED_ATTR() t_client_statsreq;
1993 #define CLIENT_STATSREQ_UNKNOWN1 0x02825278
1994 /******************************************************/
1995 
1996 
1997 /******************************************************/
1998 /*
1999                           FF 26 23 00 01 00 00 00            .&#.....
2000 13 00 00 00 78 52 82 02   00 00 00 00 00 00 00 00    ....xR..........
2001 00 00 00 00 00 00 00 00   00 00 00 00 00 00          ..............
2002 
2003             FF 26 13 02   05 00 00 00 13 00 00 00        .&..........
2004 EE E4 84 03 20 20 A1 F0   00 20 20 A1 F0 00 68 74    ....  ...  ...ht
2005 74 70 3A 2F 2F 6E 73 6C   2E 6B 6B 69 72 69 2E 6F    tp://nsl.kkiri.o
2006 72 67 00 20 20 20 20 20   20 20 20 20 20 20 A2 CB    rg.           ..
2007 20 50 72 6F 74 6F 73 73   20 69 73 20 54 68 65 20     Protoss is The
2008 42 65 73 74 20 A2 CB 20   0D 0A 0D 0A 20 20 20 49    Best .. ....   I
2009 66 20 59 6F 75 20 57 61   6E 74 20 54 6F 20 4B 6E    f You Want To Kn
2010 6F 77 20 41 62 6F 75 74   20 55 73 2C 20 47 6F 0D    ow About Us, Go.
2011 0A 0D 0A 20 20 20 20 20   20 20 20 20 20 20 20 20    ...
2012 20 68 74 74 70 3A 2F 2F   6E 73 6C 2E 6B 6B 69 72     http://nsl.kkir
2013 69 2E 6F 72 67 00 38 38   00 37 30 00 33 00 32 39    i.org.88.70.3.29
2014 32 36 30 33 31 30 20 33   39 36 31 36 37 38 32 34    260310 396167824
2015 30 00 4C 4F 53 53 00 30   00 30 00 30 00 30 00 00    0.LOSS.0.0.0.0..
2016 00 00 00 00 00 6D 00 31   35 00 53 69 6E 67 61 70    .....m.15.Singap
2017 6F 72 65 20 00 00 32 37   00 31 00 36 00 32 39 32    ore ..27.1.6.292
2018 35 34 32 33 37 20 32 34   35 37 32 33 30 39 38 00    54237 245723098.
2019 44 52 41 57 00 30 00 30   00 30 00 30 00 00 00 00    DRAW.0.0.0.0....
2020 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
2021 00 00 00 00 00 00 00 00   00 00 31 00 00 00 32 39    ..........1...29
2022 32 35 39 38 31 32 20 31   31 35 33 38 33 37 39 34    259812 115383794
2023 36 00 57 49 4E 00 30 00   30 00 30 00 30 00 00 00    6.WIN.0.0.0.0...
2024 00 00 00 00 B0 C5 BD C3   B1 E2 00 3F 3F 00 B1 D9    ...........??...
2025 B0 C5 C1 F6 20 BE F8 C0   BD 2E 00 BA B0 C0 DA B8    .... ...........
2026 AE 20 6F 72 69 6F 6E 20   2C 2C 20 C3 CA C4 DA C6    . orion ,, .....
2027 C4 C0 CC B0 A1 20 BE C6   B3 E0 BF EB 2E 2E 0D 0A    ..... ..........
2028 C4 ED C4 ED 2E 2E 0D 0A   0D 0A C1 B9 B6 F3 20 C0    .............. .
2029 DF C7 CF B4 C2 20 B3 D1   20 3A 20 6E 73 6C B3 D1    ..... .. : nsl..
2030 B5 E9 0D 0A C0 DF C7 CF   B4 C2 20 C7 C1 C5 E4 20    .......... ....
2031 3A 20 6E 73 6C 40 74 6F   74 6F 72 6F 00 35 31 00    : nsl@totoro.51.
2032 34 38 00 36 00 32 39 32   35 39 32 36 33 20 39 35    48.6.29259263 95
2033 36 35 30 35 39 30 32 00   4C 4F 53 53 00 36 00 36    6505902.LOSS.6.6
2034 00 32 00 39 39 30 00 31   30 32 37 00 00 00 32 39    .2.990.1027...29
2035 32 35 39 32 35 38 20 33   31 32 32 37 39 38 38 32    259258 312279882
2036 00 4C 4F 53 53 00 00                                 .LOSS..
2037 */
2038 #define SERVER_STATSREPLY 0x26ff
2039 typedef struct
2040 {
2041     t_bnet_header h;
2042     bn_int        name_count;
2043     bn_int        key_count;
2044     bn_int        requestid; /* 78 52 82 02 */ /* EE E4 84 03 */ /* same as request */
2045     /* field values ... */
2046 } PACKED_ATTR() t_server_statsreply;
2047 /******************************************************/
2048 
2049 
2050 /******************************************************/
2051 /*
2052 FF 29 25 00 CF 17 28 00   A3 D3 2C 5C F4 18 02 40    .)%...(...,\...@
2053 F9 B8 EA F4 A5 B1 3F 39   85 89 2D DB 18 2D B9 D4    ......?9..-..-..
2054 52 6F 73 73 00                                       Ross.
2055 */
2056 #define CLIENT_LOGINREQ1 0x29ff
2057 typedef struct
2058 {
2059     t_bnet_header h;
2060     bn_int        ticks;
2061     bn_int        sessionkey;
2062     bn_int        password_hash2[5]; /* hash of ticks, key, and hash1 */
2063     /* player name */
2064 } PACKED_ATTR() t_client_loginreq1;
2065 /******************************************************/
2066 
2067 
2068 /******************************************************/
2069 #define SERVER_LOGINREPLY1 0x29ff
2070 typedef struct
2071 {
2072     t_bnet_header h;
2073     bn_int        message;
2074 } PACKED_ATTR() t_server_loginreply1;
2075 #define SERVER_LOGINREPLY1_MESSAGE_FAIL    0x00000000
2076 #define SERVER_LOGINREPLY1_MESSAGE_SUCCESS 0x00000001
2077 /******************************************************/
2078 
2079 
2080 /******************************************************/
2081 /*
2082 FF 31 3B 00 22 1A 9A 00   64 B7 C5 21 2C 82 57 F4    .1;."...d..!,.W.
2083 0A 36 73 25 1E A5 42 5F   FA 36 54 97 BC 65 3F E1    .6s%..B_.6T..e?.
2084 7D 5A 54 17 4C 33 B9 1A   09 25 49 45 99 52 69 45    }ZT.L3...%IE.RiE
2085 B1 E6 5C 9C 77 72 73 70   6F 69 00                   ..\.wrspoi.
2086 
2087 FF 31 3B 00 3A 5B 9B 00   64 B7 C5 21 99 32 14 B7    .1;.:[..d..!.2..
2088 89 02 3C 28 4A 75 84 05   70 EF B5 A7 99 CA 7E 12    ..<(Ju..p.....~.
2089 7D 5A 54 17 4C 33 B9 1A   09 25 49 45 99 52 69 45    }ZT.L3...%IE.RiE
2090 B1 E6 5C 9C 77 72 73 70   6F 69 00                   ..\.wrspoi.
2091 
2092 from D2 LoD 1.08
2093 FF 31 38 00 79 8E 09 00   F5 1C EB 4E 2E 7A 9C 6A    .18.y......N.z.j
2094 13 43 4A 49 2C CE 49 24   2E 65 FB 95 44 FC C3 B2    .CJI,.I$.e..D...
2095 E1 75 1A DA 19 36 EE 9B   AA EE 23 99 F0 82 4F F8    .u...6....#...O.
2096 B9 6B 09 55 62 6F 62 00                              .k.Ubob.
2097 */
2098 #define CLIENT_CHANGEPASSREQ 0x31ff
2099 typedef struct
2100 {
2101     t_bnet_header h;
2102     bn_int        ticks; /* FIXME: upper two bytes seem constant for each client? */
2103     bn_int        sessionkey;
2104     bn_int        oldpassword_hash2[5]; /* hash of ticks, key, hash1 */
2105     bn_int        newpassword_hash1[5]; /* hash of lowercase password w/o null */
2106     /* player name */
2107 } PACKED_ATTR() t_client_changepassreq;
2108 /******************************************************/
2109 
2110 
2111 /******************************************************/
2112 /*
2113 FF 31 08 00 01 00 00 00                              .1......
2114 
2115 FF 31 08 00 00 00 00 00                              .1......
2116 */
2117 #define SERVER_CHANGEPASSACK 0x31ff
2118 typedef struct
2119 {
2120     t_bnet_header h;
2121     bn_int        message;
2122 } PACKED_ATTR() t_server_changepassack;
2123 #define SERVER_CHANGEPASSACK_MESSAGE_FAIL    0x00000000
2124 #define SERVER_CHANGEPASSACK_MESSAGE_SUCCESS 0x00000001
2125 /******************************************************/
2126 
2127 
2128 /******************************************************/
2129 /*
2130                          FF 0A 0F 00 0F                   .....
2131                          4D 79 41 63 63 6F 75 6E          MyAccoun
2132 74 00 00                                             t..
2133 
2134 ff 0a 1f 00 4c 69 66 65   6c 69 6b 65 00 42 65 74    ....Lifelike.Bet
2135 61 57 65 73 74 2c 4c 69   66 65 6c 69 6b 65 00       aWest,Lifelike.
2136 
2137 Diablo II 1.03 - amazon just after creation
2138       ff 0a 20 00 47 6f   64 64 65 73 73 00 51 61      .. .Goddess.Qa
2139 72 61 74 68 52 65 61 6c   6d 2c 47 6f 64 64 65 73    rathRealm,Goddes
2140 73 00                                                s.
2141 */
2142 #define CLIENT_PLAYERINFOREQ 0x0aff
2143 typedef struct
2144 {
2145     t_bnet_header h;
2146     /* player name */
2147     /* player info */ /* used by Diablo and D2 (character,Realm) */
2148 } PACKED_ATTR() t_client_playerinforeq;
2149 /******************************************************/
2150 
2151 
2152 /******************************************************/
2153 /*
2154                           FF 0A 29 00 4D 79 41 63            ..).MyAc
2155 63 6F 75 6E 74 00 50 58   45 53 20 30 20 30 20 30    count.PXES 0 0 0
2156 20 30 20 30 20 30 00 4D   79 41 63 63 6F 75 6E 74     0 0 0.MyAccount
2157 00                                                   .
2158 
2159 FF 0A 2F 00 6C 61 77 75   65 66 00 4C 54 52 44 20    ../.lawuef.LTRD
2160 31 20 30 20 30 20 33 30   20 31 30 20 32 30 20 32    1 0 0 30 10 20 2
2161 35 20 31 30 30 20 30 00   6C 61 77 75 65 66 00       5 100 0.lawuef.
2162 
2163    ff 0a 53 00 4d 6f 4e   6b 32 6b 00 56 44 32 44     ..S.MoNk2k.VD2D
2164 42 65 74 61 57 65 73 74   2c 4d 6f 4e 6b 2d 65 65    BetaWest,MoNk-ee
2165 2c 87 80 06 01 01 01 01   ff 4c ff 02 02 ff ff ff    ,........L......
2166 ff ff ff 01 ff 48 48 48   48 ff a6 ff 48 48 ff ff    .....HHHH...HH..
2167 ff ff ff ff 0f 88 80 80   80 ff ff ff 00 4d 6f 4e    .............MoN
2168 6b 32 6b 00                                          k2k.
2169 
2170 ff 0a 5c 00 47 61 6d 65   6f 66 4c 69 66 65 00 56    ..\.GameofLife.V
2171 44 32 44 42 65 74 61 57   65 73 74 2c 4c 69 66 65    D2DBetaWest,Life
2172 6c 69 6b 65 2c 87 80 01   01 01 01 01 ff ff ff 01    like,...........
2173 01 ff ff ff ff ff ff 03   ff ff ff ff ff ff ff ff    ................
2174 ff ff ff ff ff ff ff ff   01 80 80 ff ff ff 80 80    ................
2175 00 47 61 6d 65 6f 66 4c   69 66 65 00 ff 0f 3c 00    .GameofLife...<.
2176 07 00 00 00 21 00 00 00   7d 00 00 00 00 00 00 00    ....!...}.......
2177 d8 94 f6 08 55 9e 77 02   47 61 6d 65 6f 66 4c 69    ....U.w.GameofLi
2178 66 65 00 44 69 61 62 6c   6f 20 49 49 20 42 65 74    fe.Diablo II Bet
2179 61 57 65 73 74 2d 31 00   ff 0f 68 00 01 00 00 00    aWest-1...h.....
2180 00 00 00 00 10 00 00 00   00 00 00 00 d8 94 f6 08    ................
2181 b1 65 77 02 65 76 69 6c   67 72 75 73 73 6c 65 72    .ew.evilgrussler
2182 00 56 44 32 44 42 65 74   61 57 65 73 74 2c 74 61    .VD2DBetaWest,ta
2183 72 61 6e 2c 83 80 ff ff   ff ff ff 2f ff ff ff ff    ran,......./....
2184 ff ff ff ff ff ff 03 ff   ff ff ff ff ff ff ff ff    ................
2185 ff ff ff ff ff ff ff 07   80 80 80 80 ff ff ff 00    ................
2186 
2187 ff 0a 59 00 47 61 6d 65   6f 66 4c 69 66 65 00 56    ..Y.GameofLife.V
2188 44 32 44 42 65 74 61 57   65 73 74 2c 42 4e 45 54    D2DBetaWest,BNET
2189 44 2c 87 80 01 01 01 01   01 ff ff ff 01 01 ff ff    D,..............
2190 ff ff ff ff 02 ff ff ff   ff ff ff ff ff ff ff ff    ................
2191 ff ff ff ff ff 01 80 80   ff ff ff 80 80 00 47 61    ..............Ga
2192 6d 65 6f 66 4c 69 66 65   00                         meofLife.
2193 */
2194 #define SERVER_PLAYERINFOREPLY 0x0aff
2195 typedef struct
2196 {
2197     t_bnet_header h;
2198     /* player name */
2199     /* status */
2200     /* player name?! (maybe character name?) */
2201 } PACKED_ATTR() t_server_playerinforeply;
2202 /*
2203  * status string:
2204  *
2205  * for STAR, SEXP, SSHR < 1.10:
2206  * "%s %u %u %u %u %u"
2207  *  client tag (RATS, PXES, RHSS)
2208  *  rating
2209  *  number (ladder rank)
2210  *  stars  (normal wins)
2211  *  unknown3 (always zero?)
2212  *  unknown4 (always zero?) FIXME: I don't see this last one in any dumps...
2213                                    is this only a SEXP thing?
2214 
2215  * for STAR, SEXP, SSHR >= 1.10:
2216  * "%s %u %u %u %u %u %u %u %u %u %s"
2217  *  client tag (RATS, PXES, RHSS)
2218  *  rating
2219  *  number (ladder rank)
2220  *  stars  (normal wins)
2221  *  spawned (1 of spawned, 0 otherwise)
2222  *  unknown4 (always zero?)
2223  *  highest ladder rating
2224  *  unknown6 (always zero?)
2225  *  unknown7 (always zero?)
2226  *  icon tag (usually client tag)
2227 
2228 
2229  *
2230  * for DRTL:
2231  * "%s %u %u %u %u %u %u %u %u %u"
2232  *  client tag (LTRD)
2233  *  level
2234  *  class (0==warrior, 1==rogue, 2==sorcerer)
2235  *  dots (times killed diablo)
2236  *  strength
2237  *  magic
2238  *  dexterity
2239  *  vitality
2240  *  gold
2241  *  unknown2 (always zero?)
2242 
2243  *
2244  * for D2DV:
2245  * "%s%s,%s,"
2246  * client tag (VD2D)
2247  * realm
2248  * character name
2249  * 43 unknown bytes
2250  */
2251 #define PLAYERINFO_DRTL_CLASS_WARRIOR  0
2252 #define PLAYERINFO_DRTL_CLASS_ROGUE    1
2253 #define PLAYERINFO_DRTL_CLASS_SORCERER 2
2254 /******************************************************/
2255 
2256 
2257 /******************************************************/
2258 #define CLIENT_PROGIDENT2 0x0bff
2259 typedef struct
2260 {
2261     t_bnet_header h;
2262     bn_int        clienttag;
2263 } PACKED_ATTR() t_client_progident2;
2264 /******************************************************/
2265 
2266 
2267 /******************************************************/
2268 #define CLIENT_JOINCHANNEL 0x0cff
2269 typedef struct
2270 {
2271     t_bnet_header h;
2272     bn_int        channelflag;
2273 } PACKED_ATTR() t_client_joinchannel;
2274 #define CLIENT_JOINCHANNEL_NORMAL  0x00000000
2275 #define CLIENT_JOINCHANNEL_GENERIC 0x00000001
2276 #define CLIENT_JOINCHANNEL_CREATE  0x00000002
2277 /******************************************************/
2278 
2279 
2280 /******************************************************/
2281 #define SERVER_CHANNELLIST 0x0bff
2282 typedef struct
2283 {
2284     t_bnet_header h;
2285     /* channel names */
2286 } PACKED_ATTR() t_server_channellist;
2287 /******************************************************/
2288 
2289 
2290 /******************************************************/
2291 /*
2292 We don't use this for now. It makes the client put
2293 the list of IPs/hostnames into the registry.
2294 
2295 FF 04 8F 00 00 00 00 00   32 30 39 2E 36 37 2E 31    ........209.67.1
2296 33 36 2E 31 37 34 3B 32   30 37 2E 36 39 2E 31 39    36.174;207.69.19
2297 34 2E 32 31 30 3B 32 30   37 2E 36 39 2E 31 39 34    4.210;207.69.194
2298 2E 31 38 39 3B 32 31 36   2E 33 32 2E 37 33 2E 31    .189;216.32.73.1
2299 37 34 3B 32 30 39 2E 36   37 2E 31 33 36 2E 31 37    74;209.67.136.17
2300 31 3B 32 30 36 2E 37 39   2E 32 35 34 2E 31 39 32    1;206.79.254.192
2301 3B 32 30 37 2E 31 33 38   2E 33 34 2E 33 3B 32 30    ;207.138.34.3;20
2302 39 2E 36 37 2E 31 33 36   2E 31 37 32 3B 65 78 6F    9.67.136.172;exo
2303 64 75 73 2E 62 61 74 74   6C 65 2E 6E 65 74 00       dus.battle.net.
2304 */
2305 #define SERVER_SERVERLIST 0x04ff
2306 typedef struct
2307 {
2308     t_bnet_header h;
2309     bn_int        unknown1; /* 00 00 00 00 */
2310     /* list */
2311 } PACKED_ATTR() t_server_serverlist;
2312 #define SERVER_SERVERLIST_UNKNOWN1 0x00000000
2313 /******************************************************/
2314 
2315 
2316 /******************************************************/
2317 /*
2318 FF 0F 30 00 01 00 00 00   00 00 00 00 00 00 00 00    ..0.............
2319 00 00 00 00 00 00 00 00   00 00 00 00 52 6F 73 73    ............Ross
2320 00 52 41 54 53 20 30 20   30 20 30 20 30 20 30 00    .RATS 0 0 0 0 0.
2321 
2322 FF 0F 38 00 07 00 00 00   21 00 00 00 64 00 00 00    ..8.....!...d...
2323 00 00 00 00 D8 94 F6 07   B3 2C 6E 02 4D 6F 4E 6B    .........,n.MoNk
2324 32 6B 00 44 69 61 62 6C   6F 20 49 49 20 42 65 74    2k.Diablo II Bet
2325 61 57 65 73 74 2D 31 00                              aWest-1.
2326 
2327 MT_ADD:
2328 0x0000: ff 0a 53 00 4d 6f 4e 6b   32 6b 00 56 44 32 44 42    ..S.MoNk2k.VD2DB
2329 0x0010: 65 74 61 57 65 73 74 2c   4d 6f 4e 6b 2d 65 65 2c    etaWest,MoNk-ee,
2330 0x0020: 83 80 06 01 01 01 01 ff   4c ff 02 02 ff ff ff ff    ........L.......
2331 0x0030: ff ff 01 ff 48 48 48 48   ff a6 ff 48 48 ff ff ff    ....HHHH...HH...
2332 0x0040: ff ff ff 10 80 80 80 80   ff ff ff 00 4d 6f 4e 6b    ............MoNk
2333 0x0050: 32 6b 00 ff 0f 38 00 07   00 00 00 21 00 00 00 6d    2k...8.....!...m
2334 0x0060: 00 00 00 00 00 00 00 d8   94 f6 08 a4 46 6e 02 4d    ............Fn.M
2335 0x0070: 6f 4e 6b 32 6b 00 44 69   61 62 6c 6f 20 49 49 20    oNk2k.Diablo II
2336 0x0080: 42 65 74 61 57 65 73 74   2d 31 00 ff 0f 62 00 01    BetaWest-1...b..
2337 0x0090: 00 00 00 00 00 00 00 28   00 00 00 00 00 00 00 d8    .......(........
2338 0x00a0: 94 f6 07 69 fb 6d 02 4e   6f 72 62 62 6f 00 56 44    ...i.m.Norbbo.VD
2339 0x00b0: 32 44 42 65 74 61 57 65   73 74 2c 44 6f 6f 73 68    2DBetaWest,Doosh
2340 0x00c0: 2c 87 80 05 02 01 01 01   2b ff 1b 02 02 ff ff ff    ,.......+.......
2341 0x00d0: ff ff ff 03 ff ff ff ff   ff ff ff ff ff ff ff ff    ................
2342 0x00e0: ff ff ff ff 0a 80 80 80   80 ff ff ff 00 ff 0f 65    ...............e
2343 0x00f0: 00 01 00 00 00 00 00 00   00 32 00 00 00 00 00 00    .........2......
2344 0x0100: 00 d8 94 f6 07 23 00 6e   02 6e 6a 67 6f 61 6c 69    .....#.n.njgoali
2345 0x0110: 65 00 56 44 32 44 42 65   74 61 57 65 73 74 2c 73    e.VD2DBetaWest,s
2346 0x0120: 68 65 69 6b 61 2c 83 80   05 02 01 02 02 ff 4c ff    heika,........L.
2347 0x0130: 02 02 ff ff ff ff ff ff   02 ff ff ff ff ff ff ff    ................
2348 0x0140: ff ff ff ff ff ff ff ff   ff 09 80 80 80 80 ff ff    ................
2349 0x0150: ff 00 ff 0f 67 00 01 00   00 00 00 00 00 00 1f 00    ....g...........
2350 0x0160: 00 00 00 00 00 00 d8 94   f6 09 eb 24 6e 02 72 6f    ...........$n.ro
2351 0x0170: 62 6d 6d 73 64 00 56 44   32 44 42 65 74 61 57 65    bmmsd.VD2DBetaWe
2352 0x0180: 73 74 2c 56 61 6e 63 6f   75 76 65 72 2c 83 80 05    st,Vancouver,...
2353 0x0190: 02 02 01 01 30 ff 1b 02   02 ff ff ff ff ff ff 04    ....0...........
2354 0x01a0: 4f ff ff ff ff ff ff a9   ff ff ff ff ff ff ff ff    O...............
2355 0x01b0: 09 80 80 80 80 ff ff ff   00 ff 0f 62 00 01 00 00    ...........b....
2356 0x01c0: 00 00 00 00 00 6e 00 00   00 00 00 00 00 ce 4f fe    .....n........O.
2357 0x01d0: c0 f9 02 15 01 4c 79 63   74 68 69 73 00 56 44 32    .....Lycthis.VD2
2358 0x01e0: 44 42 65 74 61 57 65 73   74 2c 45 6c 6c 65 2c 83    DBetaWest,Elle,.
2359 0x01f0: 80 04 02 01 01 01 ff 4d   ff 02 02 ff ff ff ff ff    .......M........
2360 0x0200: ff 01 ff ff ff ff ff ff   ff ff ff ff ff ff ff ff    ................
2361 0x0210: ff ff 06 80 80 80 80 ff   ff ff 00 ff 0f 6b 00 01    .............k..
2362 0x0220: 00 00 00 00 00 00 00 19   01 00 00 00 00 00 00 ce    ................
2363 0x0230: 4f fe c1 e2 1b 9c 00 52   6f 62 4d 69 74 63 68 65    O......RobMitche
2364 0x0240: 6c 6c 00 56 44 32 44 42   65 74 61 57 65 73 74 2c    ll.VD2DBetaWest,
2365 0x0250: 53 6f 6f 6e 65 72 64 65   64 2c 83 80 06 02 02 01    Soonerded,......
2366 0x0260: 01 46 46 ff 02 02 ff ff   ff ff ff ff 05 ff ff ff    .FF.............
2367 0x0270: ff ff ff 29 ff ff ff ff   ff ff ff ff ff 11 80 82    ...)............
2368 0x0280: 80 80 ff ff ff 00 ff 0f   66 00 01 00 00 00 00 00    ........f.......
2369 0x0290: 00 00 bc 00 00 00 00 00   00 00 d8 94 f6 09 8f 3f    ...............?
2370 0x02a0: 6e 02 4d 61 72 6c 6f 63   6b 31 00 56 44 32 44 42    n.Marlock1.VD2DB
2371 0x02b0: 65 74 61 57 65 73 74 2c   6d 61 72 6c 6f 63 6b 2c    etaWest,marlock,
2372 0x02c0: 83 80 ff ff ff ff ff ff   ff ff ff ff ff ff ff ff    ................
2373 0x02d0: ff ff 05 ff ff ff ff ff   ff ff ff ff ff ff ff ff    ................
2374 0x02e0: ff ff ff 01 80 80 80 80   ff ff ff 00 ff 0f 63 00    ..............c.
2375 0x02f0: 01 00 00 00 00 00 00 00   c8 00 00 00 00 00 00 00    ................
2376 0x0300: d1 43 88 aa bd ce 3c 00   42 2d 57 61 74 74 7a 00    .C....<.B-Wattz.
2377 
2378 From bnetd-0.4.23pre18 to Diablo II 1.03
2379       FF 0F 69 00 09 00  00 00 00 00 00 00 12 00   I@..i... ........
2380 00 00 00 00 00 00 00 00  00 00 00 00 00 00 45 6C   ........ ......El
2381 66 6C 6F 72 64 00 56 44  32 44 51 61 72 61 74 68   flord.VD 2DQarath
2382 52 65 61 6C 6D 2C 46 61  6B 65 43 68 61 72 2C 83   Realm,Fa keChar,.
2383 80 FF FF FF FF FF 2F FF  FF FF FF FF FF FF FF FF   ....../. ........
2384 FF 03 FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   ........ ........
2385 FF FF 07 80 80 80 80 FF  FF FF 00                  ........ ...
2386 */
2387 #define SERVER_MESSAGE 0x0fff
2388 typedef struct
2389 {
2390     t_bnet_header h;
2391     bn_int        type;
2392     bn_int        flags;     /* player flags (or channel flags for MT_CHANNEL) */
2393     bn_int        latency;
2394     bn_int        player_ip;  /* always zero? */
2395     bn_int        account_num; /* player's IP (big endian), no longer used, always 0D F0 AD BA */
2396     bn_int        reg_auth;  /* server ip and/or reg auth? CD key and/or account number? */
2397     /* player name */
2398     /* text */
2399 } PACKED_ATTR() t_server_message;
2400 #define SERVER_MESSAGE_PLAYER_IP_DUMMY 0x00000000
2401 /* nok */
2402 #define SERVER_MESSAGE_REG_AUTH 0xBAADF00D /* 0D F0 AD BA */
2403 /* #define SERVER_MESSAGE_REG_AUTH 0x07f694d8 */
2404 #define SERVER_MESSAGE_ACCOUNT_NUM 0x0df0adba
2405 /* For MT_ADD, MT_JOIN, the text portion looks like:
2406  *
2407  * for STAR, SEXP, SSHR:
2408  * "%4c %u %u %u %u %u"
2409  *  client tag (RATS, PXES, RHSS)
2410  *  rating
2411  *  number (ladder rank)
2412  *  stars  (normal wins)
2413  *  unknown3 (always zero?)
2414  *  unknown4 (always zero?)
2415  *
2416  * for DRTL:
2417  * "%4c %u %u %u %u %u %u %u %u %u"
2418  *  client tag (LTRD) FIXME: RHSD?
2419  *  level
2420  *  class (0==warrior, 1==rogue, 2==sorcerer)
2421  *  dots (times killed diablo)
2422  *  strength
2423  *  magic
2424  *  dexterity
2425  *  vitality
2426  *  gold
2427  *  unknown2 (always zero?)
2428  *
2429  * for CHAT:
2430  * FIXME: ???  "%4c"
2431  * client tag (TAHC)
2432  *
2433  * FIXME: Warcraft II?
2434  *
2435  * for D2DV:
2436  * open:
2437  * "%4c"
2438  * client tag (VD2D)
2439  * closed:
2440  * "%4c%s,%s,%s"
2441  * client tag (VD2D)
2442  * realm name
2443  * character name
2444  * character info
2445  */
2446 #define SERVER_MESSAGE_TYPE_ADDUSER             0x00000001 /* ADD,USER,SHOWUSER */
2447 #define SERVER_MESSAGE_TYPE_JOIN                0x00000002
2448 #define SERVER_MESSAGE_TYPE_PART                0x00000003 /* LEAVE */
2449 #define SERVER_MESSAGE_TYPE_WHISPER             0x00000004
2450 #define SERVER_MESSAGE_TYPE_TALK                0x00000005 /* MESSAGE */
2451 #define SERVER_MESSAGE_TYPE_BROADCAST           0x00000006
2452 #define SERVER_MESSAGE_TYPE_CHANNEL             0x00000007 /* JOINING */
2453 /* unused?                                      0x00000008 */
2454 #define SERVER_MESSAGE_TYPE_USERFLAGS           0x00000009
2455 #define SERVER_MESSAGE_TYPE_WHISPERACK          0x0000000a /* WHISPERSENT */
2456 /* unused?                                      0x0000000b */
2457 /* unused?                                      0x0000000c */
2458 #define SERVER_MESSAGE_TYPE_CHANNELFULL         0x0000000d
2459 #define SERVER_MESSAGE_TYPE_CHANNELDOESNOTEXIST 0x0000000e
2460 #define SERVER_MESSAGE_TYPE_CHANNELRESTRICTED   0x0000000f
2461 /* unused?                                      0x00000010 */
2462 /* unused?                                      0x00000011 */
2463 #define SERVER_MESSAGE_TYPE_INFO                0x00000012
2464 #define SERVER_MESSAGE_TYPE_ERROR               0x00000013
2465 /* unused?                                      0x00000014 */
2466 /* unused?                                      0x00000015 */
2467 /* unused?                                      0x00000016 */
2468 #define SERVER_MESSAGE_TYPE_EMOTE               0x00000017
2469 
2470 /****** Player Flags ******/
2471 /* flag bits for above struct */
2472 
2473 /* ADDED BY UNDYING SOULZZ 4/7/02 */
2474 #define W3_ICON_SET					0x00000000
2475 #define MAX_STR_RACELEN				20
2476 #define MAX_STR_ACCTPASSLEN         10
2477 #define W3_RACE_RANDOM				32
2478 #define W3_RACE_HUMANS				1
2479 #define W3_RACE_ORCS				2
2480 #define W3_RACE_UNDEAD				8
2481 #define W3_RACE_NIGHTELVES			4
2482 #define W3_RACE_DEMONS				16
2483 
2484 #define W3_ICON_RANDOM				0 /* - Although when client presses random in PG and it sends "32" its "0" for icon */
2485 #define W3_ICON_HUMANS				1
2486 #define W3_ICON_ORCS				2
2487 #define W3_ICON_UNDEAD				3 /* - Although when client presses undead in PG and it sends "8" its "3" for icon */
2488 #define W3_ICON_NIGHTELVES			4
2489 #define W3_ICON_DEMONS				5
2490 
2491 /* Icon setup  3RAW then <accounts level> <Race> <race wins> */
2492 /* Races: 1 = human, 2 = orc, 8 = undead, 4 = nightelf  32 = random */
2493 /* Misc icons are 6-9 * - There might be some icons not defined*/
2494 /* If you find them let us know pse,  forums.cheatlist.com in War3 Hacking/Development */
2495 
2496 /*Human Icons*/
2497 #define W3_ICON_HUMAN_FOOTMAN					"3RAW 1 1 11"
2498 #define W3_ICON_HUMAN_KNIGHT					"3RAW 1 1 100"
2499 #define W3_ICON_HUMAN_ARCHMAGE					"3RAW 1 1 250"
2500 #define W3_ICON_HUMAN_HERO						"3RAW 1 1 1000"
2501 
2502 /*Orc Icons*/
2503 #define W3_ICON_ORC_PEON						"3RAW 1 2 00" /* default icon , unless u change it in code*/
2504 #define W3_ICON_ORC_GRUNT						"3RAW 1 2 10"
2505 #define W3_ICON_ORC_TAUREN						"3RAW 1 2 100"
2506 #define W3_ICON_ORC_FARSEER						"3RAW 1 2 250"
2507 #define W3_ICON_ORC_HERO						"3RAW 1 2 1000"
2508 
2509 /*Undead Icons*/
2510 #define W3_ICON_UNDEAD_GHOUL					"3RAW 1 3 10"
2511 #define W3_ICON_UNDEAD_ABOM						"3RAW 1 3 100"
2512 #define W3_ICON_UNDEAD_LICH						"3RAW 1 3 250"
2513 #define W3_ICON_UNDEAD_HERO						"3RAW 1 3 1000"
2514 
2515 /*Night Elf Icons*/
2516 #define W3_ICON_ELF_ARCHER						"3RAW 1 4 10"
2517 #define W3_ICON_ELF_DRUIDCLAW					"3RAW 1 4 100"
2518 #define W3_ICON_ELF_PRIESMOON					"3RAW 1 4 250"
2519 #define W3_ICON_ELF_HERO						"3RAW 1 4 1000"
2520 
2521 /*Random Icons , like NPC's, Creeps*/
2522 #define W3_ICON_RANDOM_GREENDRAGON				"3RAW 1 9 10"
2523 #define W3_ICON_RANDOM_BLACKDRAGON				"3RAW 1 9 100"
2524 #define W3_ICON_RANDOM_REDDRAGON				"3RAW 1 9 250"
2525 #define W3_ICON_RANDOM_BLUEDRAGON				"3RAW 1 9 1000"
2526 
2527 /* End of Undying Edits */
2528 
2529 /*      Blizzard Entertainment employee */
2530 #define MF_BLIZZARD 0x00000001 /* blue Blizzard logo */
2531 /*      Channel operator */
2532 #define MF_GAVEL    0x00000002 /* gavel */
2533 /*      Speaker in moderated channel */
2534 #define MF_VOICE    0x00000004 /* megaphone */
2535 /*      System operator */
2536 #define MF_BNET     0x00000008 /* (old: blue Blizzard, new: green b.net) or red BNETD logo */
2537 /*      Chat bot or other user without UDP support */
2538 #define MF_PLUG     0x00000010 /* tiny plug to right of icon, no UDP */
2539 /*      Squelched/Ignored user */
2540 #define MF_X        0x00000020 /* big red X */
2541 /*      Special guest of Blizzard Entertainment */
2542 #define MF_SHADES   0x00000040 /* sunglasses */
2543 /* unused           0x00000080 */
2544 /*      Use BEL character in error codes. Some bots use it as a flag. Battle.net */
2545 /*      stopped supporting it recently. */
2546 #define MF_BEEP     0x00000100 /* no change in icon */
2547 /*      Registered Professional Gamers League player */
2548 #define MF_PGLPLAY  0x00000200 /* PGL player logo */
2549 /*      Registered Professional Gamers League official */
2550 #define MF_PGLOFFL  0x00000400 /* PGL official logo */
2551 /*      Registered KBK player */
2552 #define MF_KBKPLAY  0x00000800 /* KBK player logo */
2553 /*      Official KBK Referee */
2554 #define MF_KBKREF   0x00001000 /* KBK referee logo */ /* FIXME: this number may be wrong */
2555 /* unused... FIXME: how many bits work? 16 or 32? */
2556 
2557 /****** Channel Flags ******/
2558 /* flag bits for MT_CHANNEL message */
2559 #define CF_PUBLIC     0x00000001 /* public channel */
2560 #define CF_MODERATED  0x00000002 /* moderated channel */
2561 #define CF_RESTRICTED 0x00000004 /* ? restricted channel ? */
2562 #define CF_THEVOID    0x00000008 /* "The Void" */
2563 #define CF_SYSTEM     0x00000020 /* system channel */
2564 #define CF_OFFICIAL   0x00001000 /* official channel */
2565 /*
2566  * Examples:
2567  * 0x00001003 Blizzard Tech Support
2568  * 0x00001001 Open Tech Support
2569  * 0x00000021 Diablo II USA-1  or  War2BNE USA-1
2570  * 0x0000000D warez
2571  * 0x00000009 The Void
2572  * 0x00000001 War2 Ladder Challenges  or  Diablo II PvP
2573  * 0x00000000 clan randomchannel
2574  * 0x00000000 randomchannel
2575  */
2576 /******************************************************/
2577 
2578 
2579 /******************************************************/
2580 #define CLIENT_MESSAGE 0x0eff
2581 typedef struct
2582 {
2583     t_bnet_header h;
2584     /* text */
2585 } PACKED_ATTR() t_client_message;
2586 /******************************************************/
2587 
2588 
2589 /******************************************************/
2590 /*
2591 FF 09 17 00 03 00 00 00   FF FF 00 00 00 00 00 00    ................
2592 19 00 00 00 00 00 00                                 .......
2593 
2594 FF 09 24 00 00 00 00 00   00 00 00 00 00 00 00 00    ..$.............
2595 01 00 00 00 4C 61 64 64   65 72 20 31 20 6F 6E 20    ....Ladder 1 on
2596 31 00 00 00                                          1...
2597 */
2598 #define CLIENT_GAMELISTREQ 0x09ff
2599 typedef struct
2600 {
2601     t_bnet_header h;
2602     bn_short      gametype;
2603     bn_short      unknown1;
2604     bn_int        unknown2;
2605     bn_int        unknown3;
2606     bn_int        maxgames;
2607     /* game name */
2608 } PACKED_ATTR() t_client_gamelistreq;
2609 #define CLIENT_GAMELISTREQ_ALL       0x0000
2610 #define CLIENT_GAMELISTREQ_MELEE     0x0002
2611 #define CLIENT_GAMELISTREQ_FFA       0x0003
2612 #define CLIENT_GAMELISTREQ_ONEONONE  0x0004
2613 #define CLIENT_GAMELISTREQ_CTF       0x0005
2614 #define CLIENT_GAMELISTREQ_GREED     0x0006
2615 #define CLIENT_GAMELISTREQ_SLAUGHTER 0x0007
2616 #define CLIENT_GAMELISTREQ_SDEATH    0x0008
2617 #define CLIENT_GAMELISTREQ_LADDER    0x0009
2618 #define CLIENT_GAMELISTREQ_IRONMAN   0x0010
2619 #define CLIENT_GAMELISTREQ_MAPSET    0x000a
2620 #define CLIENT_GAMELISTREQ_TEAMMELEE 0x000b
2621 #define CLIENT_GAMELISTREQ_TEAMFFA   0x000c
2622 #define CLIENT_GAMELISTREQ_TEAMCTF   0x000d
2623 #define CLIENT_GAMELISTREQ_PGL       0x000e
2624 #define CLIENT_GAMELISTREQ_TOPVBOT   0x000f
2625 #define CLIENT_GAMELISTREQ_DIABLO    0x0409 /* FIXME: this should be the langid */
2626 #define CLIENT_GAMELISTREQ_LOADED    0x0a00
2627 /* FIXME: Diablo reports differently than it is listed in GAMELIST */
2628 #define CLIENT_GAMETYPE_DIABLO_0     0x00000000 /* Level 1 Char */
2629 #define CLIENT_GAMETYPE_DIABLO_1     0x00000001 /* Level 2 Char */
2630 #define CLIENT_GAMETYPE_DIABLO_2     0x00000002 /* Level ? Char */
2631 #define CLIENT_GAMETYPE_DIABLO_3     0x00000003 /* Level 4 Char */
2632 #define CLIENT_GAMETYPE_DIABLO_4     0x00000004 /* Level ? Char */
2633 #define CLIENT_GAMETYPE_DIABLO_5     0x00000005 /* Level ? Char */
2634 #define CLIENT_GAMETYPE_DIABLO_6     0x00000006 /* Level ? Char */
2635 #define CLIENT_GAMETYPE_DIABLO_7     0x00000007 /* Level ? Char */
2636 #define CLIENT_GAMETYPE_DIABLO_8     0x00000008 /* Level 20-24 Char */
2637 #define CLIENT_GAMETYPE_DIABLO_9     0x00000009 /* Level 25-? Char */
2638 #define CLIENT_GAMETYPE_DIABLO_a     0x0000000a /* Level ? Char */
2639 #define CLIENT_GAMETYPE_DIABLO_b     0x0000000b /* Level ? Char */
2640 #define CLIENT_GAMETYPE_DIABLO_c     0x0000000c /* Level ? Char */
2641 #define CLIENT_GAMETYPE_DIABLO_d     0x0000000d /* Level ? Char */
2642 /* list might continue - what is maximum diablo level ? */
2643 /* FIXME: Not sure how Diablo II does things yet */
2644 #define CLIENT_GAMETYPE_DIABLO2_CLOSE 		0x00000000 /* close game */
2645 #define CLIENT_GAMETYPE_DIABLO2_OPEN_NORMAL	0X00000008 /* open, normal difficulty */
2646 #define CLIENT_GAMETYPE_DIABLO2_OPEN_NIGHTMARE	0X00000009 /* open, nightmare difficulty */
2647 #define CLIENT_GAMETYPE_DIABLO2_OPEN_HELL	0X0000000a /* open, hell difficulty */
2648 
2649 /******************************************************/
2650 
2651 
2652 /******************************************************/
2653 /*
2654 FF 09 35 00 01 00 00 00   00 00 00 00 03 00 01 00    ..5.............
2655 00 00 00 00 02 00 17 E0   80 7B 4F 0D 00 00 00 00    .........{O.....
2656 00 00 00 00 04 00 00 00   64 00 00 00 4D 79 47 61    ........d...MyGa
2657 6D 65 00 00 00                                       me...
2658 
2659 FF 09 5B 00 01 00 00 00   00 00 00 00 03 00 01 00    ..[.............
2660 02 00 17 E0 80 7B 4F 0D   00 00 00 00 00 00 00 00    .....{O.........
2661 04 00 00 00 2B 00 00 00   47 61 6D 65 00 50 61 73    ....+...Game.Pas
2662 73 00 2C 33 34 2C 31 32   2C 35 2C 31 2C 33 2C 31    s.,34,12,5,1,3,1
2663 2C 63 63 63 33 36 34 30   36 2C 2C 42 6F 62 0D 43    ,ccc36406,,Bob.C
2664 68 61 6C 6C 65 6E 67 65   72 0D 00                   hallenger..
2665 
2666 FF 09 D4 03 0A 00 00 00   0C 00 00 00 09 04 00 00    ................
2667 02 00 17 E0 CD E8 B5 E1   00 00 00 00 00 00 00 00    ................
2668 00 00 00 00 3C 00 00 00   4A 65 73 73 65 27 73 20    ....<...Jesse's
2669 57 6F 72 6C 64 00 00 32   0D 4C 69 7A 7A 69 65 2E    World..2.Lizzie.
2670 42 6F 72 64 65 6E 0D 4C   54 52 44 20 34 30 20 31    Borden.LTRD 40 1
2671 20 33 20 31 32 31 20 31   32 36 20 33 30 36 20 31     3 121 126 306 1
2672 33 36 20 35 34 37 30 32   20 30 00                   ...
2673 
2674 FF 09 70 00 01 00 00 00   0F 00 04 00 09 04 00 00    ..p.............
2675 02 00 17 E0 C6 0B 13 3C   00 00 00 00 00 00 00 00    .......<........
2676 04 00 00 00 C5 00 00 00   4C 61 64 64 65 72 20 31    ........Ladder 1
2677 20 6F 6E 20 31 00 00 2C   2C 2C 36 2C 32 2C 66 2C     on 1..,,,6,2,f,
2678 34 2C 66 63 63 35 38 65   34 61 2C 37 32 30 30 2C    4,fcc58e4a,7200,
2679 49 63 65 36 39 62 75 72   67 0D 46 6F 72 65 73 74    Ice69burg.Forest
2680 20 54 72 61 69 6C 20 42   4E 45 2E 70 75 64 0D 00     Trail BNE.pud..
2681 
2682 # war3
2683 # 66 packet from server: type=0x09ff(SERVER_GAMELISTREPLY) length=131 class=bnet
2684 0000:   FF 09 83 00 01 00 00 00   01 00 00 00 09 04 00 00    ................
2685 0010:   02 00 17 E0 18 CF BF 9B   00 00 00 00 00 00 00 00    ................
2686 0020:   10 00 00 00 0F 00 00 00   33 20 6F 6E 20 33 20 64    ........3 on 3 d
2687 0030:   61 72 6B 20 66 6F 72 65   73 74 00 00 35 31 30 30    ark forest..5100
2688 0040:   30 30 30 30 30 01 03 01   01 81 01 81 01 73 27 25    00000........s'%
2689 0050:   15 29 4D 61 71 53 73 5D   63 65 75 61 5D A9 29 37    .)MaqSs]ceua].)7
2690 0060:   29 45 61 73 6B 69 21 47   6F 73 65 73 75 DD 2F 77    )Easki!Gosesu./w
2691 0070:   33 6D 01 4B 61 D7 69 73   69 69 6F 5B 53 07 4B 5D    3m.Ka.isiio[S.K]
2692 0080:   01 01 00                                             ...
2693 
2694 [23:32] <@nok-> 0000:   FF 09 E9 01 04 00 00 00   01 00 00 00 09 04 00 00    ................
2695 [23:32] <@nok-> 0010:   02 00 17 E0 40 69 1B 07   00 00 00 00 00 00 00 00    ....@i..........
2696 
2697 0000:   FF 09 7A 01 03 00 00 00   01 00 00 00 09 04 00 00    ..z.............
2698 0010:   02 00 17 E0 18 2C 7E 7B   00 00 00 00 00 00 00 00    .....,~{........
2699 0020:   10 00 00 00 09 00 00 00   34 20 6F 6E 20 34 20 4D    ........4 on 4 M
2700 0030:   69 73 74 00 00 37 31 30   30 30 30 30 30 30 01 03    ist..710000000..
2701 0040:   01 01 89 01 89 01 75 4D   7B 27 A1 4D 61 71 53 73    ......uM{'.MaqSs
2702 0050:   5D 63 65 75 61 5D B9 29   39 29 47 6F 6D 65 17 6D    ]ceua].)9)Gome.m
2703 0060:   73 21 69 6F 21 75 75 69   65 21 4D 69 73 75 1D 2F    s!io!uuie!Misu./
2704 0070:   77 33 6D 01 51 73 BB 69   6F 63 65 2D 4D 75 17 63    w3m.Qs.ioce-Mu.c
2705 0080:   69 67 65 73 01 01 00 01   00 00 00 09 04 00 00 02    iges............
2706 
2707 */
2708 #define SERVER_GAMELISTREPLY 0x09ff
2709 typedef struct
2710 {
2711     t_bnet_header h;
2712     bn_int        gamecount;
2713     bn_int	  sstatus; /* when reply with error to specific game */
2714     /* games */
2715 } PACKED_ATTR() t_server_gamelistreply;
2716 
2717 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_NOTFOUND	0x0 /* but also any other value diff from the ones bellow */
2718 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_PASS		0x2 /* password incorrect */
2719 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_FULL		0x3 /* game full */
2720 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_STARTED	0x4 /* game started */
2721 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_NOSPAWNCDKEY	0x5 /* trying to use a spawn install join invalid cdkey creator game */
2722 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_LOADED        0x0a00 /* Loaded game */
2723 
2724 typedef struct
2725 {
2726 /*	if yak doesn't like this... then the client doesn't also =) (bbf)
2727     bn_int   unknown7; */
2728     bn_short gametype;
2729     bn_short unknown1; /* langid under Diablo... */
2730     bn_short unknown3;
2731 /*  bn_int   deleted; */ /* they changed the structure at one point */
2732     bn_short port;     /* big endian byte order... at least they are consistent! */
2733     bn_int   game_ip;  /* big endian byte order */
2734     bn_int   unknown4;
2735     bn_int   unknown5; /* FIXME: got to figure out where latency is */
2736     bn_int   status;
2737     bn_int   unknown6;
2738     /* game name */
2739     /* clear password */
2740     /* info */
2741 } PACKED_ATTR() t_server_gamelistreply_game;
2742 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN7       0x00000000 //0x00000409 // 0x0000000c
2743 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN1           0x0001 //0x0000 //0x0001 // 0x0000
2744 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN3           0x0002
2745 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN4       0x00000000
2746 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN5       0x00000000
2747 #define SERVER_GAMELISTREPLY_GAME_STATUS_OPEN    0x00000004
2748 #define SERVER_GAMELISTREPLY_GAME_STATUS_FULL    0x00000006
2749 #define SERVER_GAMELISTREPLY_GAME_STATUS_STARTED 0x0000000e
2750 #define SERVER_GAMELISTREPLY_GAME_STATUS_DONE    0x0000000c
2751 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN6       0x0000002b /* latency? */
2752 
2753 #define SERVER_GAMELISTREPLY_TYPE_DIABLO2_OPEN 		0x0704 /* open game */
2754 /******************************************************/
2755 
2756 
2757 /******************************************************/
2758 #define CLIENT_STARTGAME1 0x08ff /* original starcraft or shareware (1.01) */
2759 typedef struct
2760 {
2761     t_bnet_header h;
2762     bn_int        status;
2763     bn_int        unknown3;
2764     bn_short      gametype;
2765     bn_short      unknown1;
2766     bn_int        unknown4;
2767     bn_int        unknown5;
2768     /* game name */
2769     /* game password */
2770     /* game info */
2771 } PACKED_ATTR() t_client_startgame1;
2772 /* I have also seen 1,5,7,f */
2773 #define CLIENT_STARTGAME1_STATUSMASK     0x0000000f
2774 #define CLIENT_STARTGAME1_STATUS_OPEN    0x00000004
2775 #define CLIENT_STARTGAME1_STATUS_FULL    0x00000006
2776 #define CLIENT_STARTGAME1_STATUS_STARTED 0x0000000e
2777 #define CLIENT_STARTGAME1_STATUS_DONE    0x0000000c
2778 /******************************************************/
2779 
2780 
2781 /******************************************************/
2782 /*
2783 FF 1B 14 00 02 00 17 E0   80 7B 3F 54 00 00 00 00    .........{?T....
2784 00 00 00 00                                          ....
2785 */
2786 #define CLIENT_UNKNOWN_1B 0x1bff
2787 typedef struct
2788 {
2789     t_bnet_header h;
2790     bn_short      unknown1; /* FIXME: This "2" is the same as in the game
2791 			       listings. What do they mean? */
2792     bn_short      port;     /* big endian byte order */
2793     bn_int        ip;       /* big endian byte order */
2794     bn_int        unknown2;
2795     bn_int        unknown3;
2796 } PACKED_ATTR() t_client_unknown_1b;
2797 #define CLIENT_UNKNOWN_1B_UNKNOWN1 0x0002
2798 #define CLIENT_UNKNOWN_1B_UNKNOWN2 0x00000000
2799 #define CLIENT_UNKNOWN_1B_UNKNOWN3 0x00000000
2800 /******************************************************/
2801 
2802 
2803 /******************************************************/
2804 /*
2805 FF 1A 4C 00 01 00 00 00   00 00 00 00 00 00 00 00    ..L.............
2806 0F 00 00 00 00 00 00 00   E0 17 00 00 61 6E 73 00    ............ans.
2807 65 6C 6D 6F 00 30 0D 77   61 72 72 69 6F 72 0D 4C    elmo.0.warrior.L
2808 54 52 44 20 31 20 30 20   30 20 33 30 20 31 30 20    TRD 1 0 0 30 10
2809 32 30 20 32 35 20 31 30   30 20 30 00                20 25 100 0.
2810 */
2811 #define CLIENT_STARTGAME3 0x1aff /* Starcraft 1.03, Diablo 1.07 */
2812 typedef struct
2813 {
2814     t_bnet_header h;
2815     bn_int        status;
2816     bn_int        unknown3;
2817     bn_short      gametype;
2818     bn_short      unknown1;
2819     bn_int        unknown6;
2820     bn_int        unknown4; /* port # under Diablo */
2821     bn_int        unknown5;
2822     /* game name */
2823     /* game password */
2824     /* game info */
2825 } PACKED_ATTR() t_client_startgame3;
2826 #define CLIENT_STARTGAME3_STATUSMASK      0x0000000f
2827 #define CLIENT_STARTGAME3_STATUS_OPEN1    0x00000001 /* used by Diablo */
2828 #define CLIENT_STARTGAME3_STATUS_OPEN     0x00000004
2829 #define CLIENT_STARTGAME3_STATUS_FULL     0x00000006
2830 #define CLIENT_STARTGAME3_STATUS_STARTED  0x0000000e
2831 #define CLIENT_STARTGAME3_STATUS_DONE     0x0000000c
2832 /******************************************************/
2833 
2834 
2835 /******************************************************/
2836 /*
2837 FF 1C 49 00 00 00 00 00   00 00 00 00 03 00 01 00    ..I.............
2838 00 00 00 00 00 00 00 00   74 65 61 6D 6D 65 6C 65    ........teammele
2839 65 00 00 2C 2C 2C 2C 31   2C 33 2C 31 2C 33 65 33    e..,,,,1,3,1,3e3
2840 37 61 38 34 63 2C 37 2C   61 6E 73 65 6C 6D 6F 0D    7a84c,7,anselmo.
2841 4F 63 74 6F 70 75 73 0D   00                         Octopus..
2842 
2843 Brood War 1.04 ladder, disconnect==loss
2844 FF 1C 45 00 10 00 00 00   00 00 00 00 09 00 02 00    ..E.............
2845 00 00 00 00 01 00 00 00   54 45 53 54 00 00 2C 34    ........TEST..,4
2846 34 2C 31 34 2C 2C 32 2C   39 2C 32 2C 33 65 33 37    4,14,,2,9,2,3e37
2847 61 38 34 63 2C 33 2C 52   6F 73 73 0D 41 73 68 72    a84c,3,Ross.Ashr
2848 69 67 6F 0D 00                                       igo..
2849 
2850 Brood War 1.04 ladder, disconnect==disconnect
2851 FF 1C 45 00 00 00 00 00   00 00 00 00 09 00 01 00    ..E.............
2852 00 00 00 00 01 00 00 00   54 45 53 54 00 00 2C 34    ........TEST..,4
2853 34 2C 31 34 2C 2C 32 2C   39 2C 31 2C 33 65 33 37    4,14,,2,9,1,3e37
2854 61 38 34 63 2C 33 2C 52   6F 73 73 0D 41 73 68 72    a84c,3,Ross.Ashr
2855 69 67 6F 0D 00                                       igo..
2856 
2857 Brood War 1.04 greed, minerals==10000
2858 FF 1C 4C 00 00 00 00 00   00 00 00 00 06 00 04 00    ..L.............
2859 00 00 00 00 00 00 00 00   74 65 73 74 31 30 30 30    ........test1000
2860 30 00 00 2C 33 34 2C 31   32 2C 2C 31 2C 36 2C 34    0..,34,12,,1,6,4
2861 2C 33 65 33 37 61 38 34   63 2C 2C 52 6F 73 73 0D    ,3e37a84c,,Ross.
2862 43 68 61 6C 6C 65 6E 67   65 72 0D 00                Challenger..
2863 
2864 FF 1C 4F 00                                          ..O.
2865 00 00 00 00 00 00 00 00   02 00 01 00 1F 00 00 00    ................
2866 00 00 00 00 74 65 73 74   00 00 2C 34 34 2C 31 34    ....test..,44,14
2867 2C 35 2C 32 2C 32 2C 31   2C 32 31 30 34 62 62 33    ,5,2,2,1,2104bb3
2868 36 2C 34 2C 48 6F 6D 65   72 0D 54 68 65 20 4C 6F    6,4,Homer.The.Lo
2869 73 74 20 54 65 6D 70 6C   65 0D 00                   st.Temple..
2870 
2871 Diablo II 1.03 (level diff 0)
2872       FF 1C 20 00 00 00   00 00 00 00 00 00 00 00      .. ... ........
2873 00 00 00 00 00 00 00 00   00 00 54 65 73 74 00 00    ........ ..Test..
2874 31 00                                                1.
2875 */
2876 #define CLIENT_STARTGAME4 0x1cff /* Brood War or newer Starcraft (1.04, 1.05) */
2877 typedef struct
2878 {
2879     t_bnet_header h;
2880     bn_short      status; /* 0x0001 - private war3 game */
2881     bn_short      flag;
2882     bn_int        unknown2; /* 00 00 00 00 */
2883     bn_short      gametype;
2884     bn_short      option;   /* 01 00 */
2885     bn_int        unknown4; /* 00 00 00 00 */
2886     bn_int        unknown5; /* 00 00 00 00 */
2887     /* game name */
2888     /* game password */
2889     /* game info */
2890 } PACKED_ATTR() t_client_startgame4;
2891 #define CLIENT_STARTGAME4_UNKNOWN2		    0x00000000
2892 #define CLIENT_STARTGAME4_STATUSMASK_16             0x000000ff
2893 #define CLIENT_STARTGAME4_STATUSMASK_INIT_VALID     0x00000093
2894 #define CLIENT_STARTGAME4_STATUSMASK_OPEN_VALID     0x0000009f
2895 #define CLIENT_STARTGAME4_STATUS_INIT               0x00000000
2896 #define CLIENT_STARTGAME4_STATUS_PRIVATE            0x00000001
2897 #define CLIENT_STARTGAME4_STATUS_FULL               0x00000002
2898 #define CLIENT_STARTGAME4_STATUS_OPEN               0x00000004
2899 #define CLIENT_STARTGAME4_STATUS_START              0x00000008
2900 #define CLIENT_STARTGAME4_STATUS_DISC_IS_LOSS       0x00000010
2901 #define CLIENT_STARTGAME4_STATUS_REPLAY             0x00000080
2902 #define CLIENT_STARTGAME4_OPTION_MELEE_NORMAL       0x0001
2903 #define CLIENT_STARTGAME4_OPTION_FFA_NORMAL         0x0001
2904 #define CLIENT_STARTGAME4_OPTION_ONEONONE_NORMAL    0x0001
2905 #define CLIENT_STARTGAME4_OPTION_CTF_NORMAL         0x0001
2906 #define CLIENT_STARTGAME4_OPTION_GREED_10000        0x0004
2907 #define CLIENT_STARTGAME4_OPTION_GREED_7500         0x0003
2908 #define CLIENT_STARTGAME4_OPTION_GREED_5000         0x0002
2909 #define CLIENT_STARTGAME4_OPTION_GREED_2500         0x0001
2910 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_60       0x0004
2911 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_45       0x0003
2912 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_30       0x0002
2913 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_15       0x0001
2914 #define CLIENT_STARTGAME4_OPTION_SDEATH_NORMAL      0x0001
2915 #define CLIENT_STARTGAME4_OPTION_LADDER_COUNTASLOSS 0x0002
2916 #define CLIENT_STARTGAME4_OPTION_LADDER_NOPENALTY   0x0001
2917 #define CLIENT_STARTGAME4_OPTION_IRONMAN_           0x000 /* FIXME */
2918 #define CLIENT_STARTGAME4_OPTION_MAPSET_NORMAL      0x0001
2919 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_4        0x0003
2920 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_3        0x0002
2921 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_2        0x0001
2922 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_4          0x0003
2923 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_3          0x0002
2924 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_2          0x0001
2925 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_4          0x0003
2926 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_3          0x0002
2927 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_2          0x0001
2928 #define CLIENT_STARTGAME4_OPTION_PGL_               0x000 /* FIXME */
2929 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_1          0x0001 /* 1 vs all [ 1x1, 1x2, 1x3 ...]         */
2930 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_2          0x0002 /* f.e. for (8) The Hunters.scm 1 vs all */
2931 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_3          0x0003 /*      means 1x7                        */
2932 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_4          0x0004 /* 4 vs all                              */
2933 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_5          0x0005
2934 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_6          0x0006
2935 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_7          0x0007
2936 #define CLIENT_STARTGAME4_UNKNOWN4		    0x00000000
2937 #define CLIENT_STARTGAME4_UNKNOWN5		    0x00000000
2938 #define CLIENT_STARTGAME4_OPTION_NONE               0x000 /* FIXME */
2939 
2940 #define CLIENT_STARTGAME4_FLAG_PRIVATE              0x0001
2941 #define CLIENT_STARTGAME4_FLAG_PRIVATE_PASSWORD     "password"
2942 
2943 #define CLIENT_MAPTYPE_SELFMADE     0
2944 #define CLIENT_MAPTYPE_BLIZZARD     1
2945 #define CLIENT_MAPTYPE_LADDER       2
2946 #define CLIENT_MAPTYPE_PGL          3
2947 #define CLIENT_MAPTYPE_KBK          4
2948 #define CLIENT_MAPTYPE_CompUSA      5
2949 
2950 /* CLIENT_GAMESPEED_FAST is NULL for "fast" games, I convert it into 4 */
2951 #define CLIENT_GAMESPEED_SLOWEST  0
2952 #define CLIENT_GAMESPEED_SLOWER   1
2953 #define CLIENT_GAMESPEED_SLOW     2
2954 #define CLIENT_GAMESPEED_NORMAL   3
2955 #define CLIENT_GAMESPEED_FAST     4
2956 #define CLIENT_GAMESPEED_FASTER   5
2957 #define CLIENT_GAMESPEED_FASTEST  6
2958 
2959 /* The tileset is NULL for BADLANDS, I'm using zero here */
2960 #define CLIENT_TILESET_BADLANDS       0
2961 #define CLIENT_TILESET_SPACE          1
2962 #define CLIENT_TILESET_INSTALLATION   2
2963 #define CLIENT_TILESET_ASHWORLD       3
2964 #define CLIENT_TILESET_JUNGLE         4
2965 #define CLIENT_TILESET_DESERT         5
2966 #define CLIENT_TILESET_ICE            6
2967 #define CLIENT_TILESET_TWILIGHT       7
2968 
2969 /* Diablo II Difficulty */
2970 #define CLIENT_DIFFICULTY_NORMAL             1
2971 #define CLIENT_DIFFICULTY_NIGHTMARE          2
2972 #define CLIENT_DIFFICULTY_HELL               3 /* assumed */
2973 #define CLIENT_DIFFICULTY_HARDCORE_NORMAL    4
2974 #define CLIENT_DIFFICULTY_HARDCORE_NIGHTMARE 5 /* assumed */
2975 #define CLIENT_DIFFICULTY_HARDCORE_HELL      6 /* assumed */
2976 /******************************************************/
2977 
2978 
2979 /******************************************************/
2980 #define SERVER_STARTGAME1_ACK 0x08ff
2981 typedef struct
2982 {
2983     t_bnet_header h;
2984     bn_int        reply;
2985 } PACKED_ATTR() t_server_startgame1_ack;
2986 #define SERVER_STARTGAME1_ACK_NO 0x00000000
2987 #define SERVER_STARTGAME1_ACK_OK 0x00000001
2988 /******************************************************/
2989 
2990 
2991 /******************************************************/
2992 #define SERVER_STARTGAME3_ACK 0x1aff
2993 typedef struct
2994 {
2995     t_bnet_header h;
2996     bn_int        reply;
2997 } PACKED_ATTR() t_server_startgame3_ack;
2998 #define SERVER_STARTGAME3_ACK_NO 0x00000000
2999 #define SERVER_STARTGAME3_ACK_OK 0x00000001
3000 /******************************************************/
3001 
3002 
3003 /******************************************************/
3004 #define SERVER_STARTGAME4_ACK 0x1cff
3005 typedef struct
3006 {
3007     t_bnet_header h;
3008     bn_int        reply;
3009 } PACKED_ATTR() t_server_startgame4_ack;
3010 #define SERVER_STARTGAME4_ACK_NO 0x00000001
3011 #define SERVER_STARTGAME4_ACK_OK 0x00000000
3012 /******************************************************/
3013 
3014 
3015 /******************************************************/
3016 #define CLIENT_CLOSEGAME 0x02ff
3017 #define CLIENT_CLOSEGAME2 0x1fff
3018 typedef struct
3019 {
3020     t_bnet_header h;
3021 } PACKED_ATTR() t_client_closegame;
3022 /******************************************************/
3023 
3024 
3025 /******************************************************/
3026 #define CLIENT_LEAVECHANNEL 0x10ff
3027 typedef struct
3028 {
3029     t_bnet_header h;
3030 } PACKED_ATTR() t_client_leavechannel;
3031 
3032 /******************************************************/
3033 /*
3034     packets 0x60ff - 0x64ff moved to anongame_protocal.h
3035     [Omega]
3036  */
3037 /******************************************************/
3038 
3039 /*
3040 FF 32 2A 00 1A 29 25 72   77 C3 3C 25 6B 4D 7A A4    .2*..)%rw.<%kMz.
3041 3B 92 38 D5 01 F4 A5 6B   28 32 29 43 68 61 6C 6C    ;.8....k(2)Chall
3042 65 6E 67 65 72 2E 73 63   6D 00                      enger.scm.
3043 
3044 FF 32 2C 00 21 F8 16 2D   99 D9 BC A4 A6 5C BA 60    .2,.!..-.....\.`
3045 71 DE 6D 64 6F BC A5 03   28 34 29 44 69 72 65 20    q.mdo...(4)Dire
3046 53 74 72 61 69 74 73 2E   73 63 6D 00                Straits.scm.
3047 */
3048 #define CLIENT_MAPAUTHREQ1 0x32ff
3049 typedef struct
3050 {
3051     t_bnet_header h;
3052     bn_int        file_checksum[5];
3053     /* mapfile */
3054 } PACKED_ATTR() t_client_mapauthreq1;
3055 /******************************************************/
3056 
3057 
3058 /******************************************************/
3059 /*
3060 FF 32 08 00 01 00 00 00                              .2......
3061 */
3062 #define SERVER_MAPAUTHREPLY1 0x32ff
3063 typedef struct
3064 {
3065     t_bnet_header h;
3066     bn_int        response;
3067 } PACKED_ATTR() t_server_mapauthreply1;
3068 #define SERVER_MAPAUTHREPLY1_NO        0x00000000
3069 #define SERVER_MAPAUTHREPLY1_OK        0x00000001
3070 #define SERVER_MAPAUTHREPLY1_LADDER_OK 0x00000002
3071 /******************************************************/
3072 
3073 
3074 /******************************************************/
3075 /*
3076 From BW1.08alpha:
3077 FF 3C 31 00 7A 20 01 00   3B B7 C6 27 0D 61 C3 79    .<1.z ..;..'.a.y
3078 79 BE 24 5E 9C 07 05 7D   0B 6A A0 78 28 35 29 4A    y.$^...}.j.x(5)J
3079 65 77 65 6C 65 64 20 52   69 76 65 72 2E 73 63 6D    eweled River.scm
3080 00                                                   .
3081 */
3082 #define CLIENT_MAPAUTHREQ2 0x3cff
3083 typedef struct
3084 {
3085     t_bnet_header h;
3086     bn_int        unknown;
3087     bn_int        file_hash[5];
3088     /* mapfile */
3089 } PACKED_ATTR() t_client_mapauthreq2;
3090 /******************************************************/
3091 
3092 
3093 /******************************************************/
3094 /*
3095 assuming it looks like the REPLY1 packet....
3096 */
3097 #define SERVER_MAPAUTHREPLY2 0x3cff
3098 typedef struct
3099 {
3100     t_bnet_header h;
3101     bn_int        response;
3102 } PACKED_ATTR() t_server_mapauthreply2;
3103 #define SERVER_MAPAUTHREPLY2_NO        0x00000000 /* FIXME: these values are guesses */
3104 #define SERVER_MAPAUTHREPLY2_OK        0x00000001
3105 #define SERVER_MAPAUTHREPLY2_LADDER_OK 0x00000002
3106 /******************************************************/
3107 
3108 
3109 /******************************************************/
3110 /*
3111 FF 15 14 00 36 38 58 49 52 41 54 53 00 00 00 00  ....68XIRATS....
3112 AF 14 55 36                                      ..U6
3113 */
3114 #define CLIENT_ADREQ 0x15ff
3115 typedef struct
3116 {
3117     t_bnet_header h;
3118     bn_int        archtag;
3119     bn_int        clienttag;
3120     bn_int        prev_adid; /* zero if first request */
3121     bn_int        ticks;     /* Unix-style time in seconds */
3122 } PACKED_ATTR() t_client_adreq;
3123 /******************************************************/
3124 
3125 
3126 /******************************************************/
3127 /*
3128 Sent in response to a CLIENT_ADREQ to tell the client which
3129 banner to display next
3130 
3131 FF 15 3A 00 72 00 00 00   2E 70 63 78 50 15 7A 1C    ..:.r....pcxP.z.
3132 CE 0F BD 01 61 64 30 30   30 30 37 32 2E 70 63 78    ....ad000072.pcx
3133 00 68 74 74 70 3A 2F 2F   77 77 77 2E 62 6C 69 7A    .http://www.bliz
3134 7A 61 72 64 2E 63 6F 6D   2F 00                      zard.com/.
3135 
3136 FF 15 3C 00 C3 00 00 00   2E 73 6D 6B 00 9B 36 A6    ..<......smk..6.
3137 8F 5B BE 01 61 64 30 30   30 30 63 33 2E 73 6D 6B    .[..ad0000c3.smk
3138 00 68 74 74 70 3A 2F 2F   77 77 77 2E 66 61 74 68    .http://www.fath
3139 65 72 68 6F 6F 64 2E 6F   72 67 2F 00                erhood.org/.
3140 
3141                           FF 15 36 00 2B 51 02 00            ..6.+Q..
3142 2E 70 63 78 00 00 00 00   58 01 B2 00 61 64 30 32    .pcx....X...ad02
3143 35 31 32 62 2E 70 63 78   00 68 74 74 70 3A 2F 2F    512b.pcx.http://
3144 77 77 77 2E 66 73 67 73   2E 63 6F 6D 2F 00          www.fsgs.com/.
3145 */
3146 #define SERVER_ADREPLY 0x15ff
3147 typedef struct
3148 {
3149     t_bnet_header h;
3150     bn_int        adid;
3151     bn_int        extensiontag; /* unlike other tags, this one is "forward" */
3152     bn_long       timestamp;    /* file modification time? */
3153     /* filename */
3154     /* link URL */
3155 } PACKED_ATTR() t_server_adreply;
3156 /******************************************************/
3157 
3158 
3159 /******************************************************/
3160 #define CLIENT_ADACK 0x21ff
3161 /*
3162 Sent after client has displayed the banner
3163 
3164 0000:   FF 21 36 00 36 38 58 49   52 41 54 53 72 00 00 00    .!6.68XIRATSr...
3165 0010:   61 64 30 30 30 30 37 32   2E 70 63 78 00 68 74 74    ad000072.pcx.htt
3166 0020:   70 3A 2F 2F 77 77 77 2E   62 6C 69 7A 7A 61 72 64    p://www.blizzard
3167 0030:   2E 63 6F 6D 2F 00                                    .com/.
3168 
3169 0000:   FF 21 38 00 36 38 58 49   4C 54 52 44 C3 00 00 00    .!8.68XILTRD....
3170 0010:   61 64 30 30 30 30 63 33   2E 73 6D 6B 00 68 74 74    ad0000c3.smk.htt
3171 0020:   70 3A 2F 2F 77 77 77 2E   66 61 74 68 65 72 68 6F    p://www.fatherho
3172 0030:   6F 64 2E 6F 72 67 2F 00                              od.org/.
3173 */
3174 typedef struct
3175 {
3176     t_bnet_header h;
3177     bn_int        archtag;
3178     bn_int        clienttag;
3179     bn_int        adid;
3180     /* adfile */
3181     /* adlink */
3182 } PACKED_ATTR() t_client_adack;
3183 /******************************************************/
3184 
3185 
3186 /******************************************************/
3187 /*
3188 Sent if the user clicks on the adbanner
3189 */
3190 #define CLIENT_ADCLICK 0x16ff
3191 typedef struct
3192 {
3193     t_bnet_header h;
3194     bn_int        adid;
3195     bn_int        unknown1;
3196 } PACKED_ATTR() t_client_adclick;
3197 /******************************************************/
3198 
3199 
3200 /******************************************************/
3201 /* first seen in Diablo II? */
3202 /*
3203 FF 41 08 00 01 00 00 00                              .A......
3204 */
3205 #define CLIENT_ADCLICK2 0x41ff
3206 typedef struct
3207 {
3208     t_bnet_header h;
3209     bn_int        adid;
3210 } PACKED_ATTR() t_client_adclick2;
3211 /******************************************************/
3212 
3213 
3214 /******************************************************/
3215 /* first seen in Diablo II? */
3216 /*
3217                   FF 41 2C   00 0B 20 00 00 68 74   .qT....A,.. ..ht
3218 74 70 3A 2F 2F 77 77 77 2E   62 6C 69 7A 7A 61 72   tp://www.blizzar
3219 64 2E 63 6F 6D 2F 64 69 61   62 6C 6F 32 65 78 70   d.com/diablo2exp
3220 2F 00                                               /.
3221 */
3222 #define SERVER_ADCLICKREPLY2 0x41ff
3223 typedef struct
3224 {
3225     t_bnet_header h;
3226     bn_int        adid;
3227     /* link URL */
3228 } PACKED_ATTR() t_server_adclickreply2;
3229 /******************************************************/
3230 
3231 
3232 /******************************************************/
3233 /* seen in SC107a */
3234 #define CLIENT_UNKNOWN_17 0x17ff
3235 typedef struct
3236 {
3237     t_bnet_header h;
3238     /* FIXME: what is in here... is there a cooresponding
3239        server packet? */
3240 } PACKED_ATTR() t_client_unknown_17;
3241 /******************************************************/
3242 
3243 
3244 /******************************************************/
3245 /* seen in SC107a */
3246 #define CLIENT_UNKNOWN_24 0x24ff
3247 typedef struct
3248 {
3249     t_bnet_header h;
3250     /* FIXME: what is in here... is there a cooresponding
3251        server packet? */
3252 } PACKED_ATTR() t_client_unknown_24;
3253 /******************************************************/
3254 
3255 
3256 /******************************************************/
3257 /*
3258 FF 2E 18 00 4E 42 32 57   01 00 00 00 00 00 00 00    ....NB2W........
3259 00 00 00 00 0A 00 00 00                              ........
3260 */
3261 #define CLIENT_LADDERREQ 0x2eff
3262 typedef struct
3263 {
3264     t_bnet_header h;
3265     bn_int        clienttag;
3266     bn_int        id; /* (AKA ladder type) 1==standard, 3==ironman */
3267     bn_int        type; /* (AKA ladder sort) */
3268     bn_int        startplace; /* start listing on this entries */
3269     bn_int        count; /* how many entries to list */
3270 } PACKED_ATTR() t_client_ladderreq;
3271 #define CLIENT_LADDERREQ_ID_STANDARD       0x00000001
3272 #define CLIENT_LADDERREQ_ID_IRONMAN        0x00000003
3273 #define CLIENT_LADDERREQ_TYPE_HIGHESTRATED 0x00000000
3274 #define CLIENT_LADDERREQ_TYPE_MOSTWINS     0x00000002
3275 #define CLIENT_LADDERREQ_TYPE_MOSTGAMES    0x00000003
3276 /******************************************************/
3277 
3278 
3279 /******************************************************/
3280 /*
3281 Sent in repsonse to CLIENT_LADDERREQ
3282 
3283 FF 2E AB 03 52 41 54 53   01 00 00 00 00 00 00 00    ....RATS........
3284 00 00 00 00 0A 00 00 00   27 00 00 00 01 00 00 00    ........'.......
3285 01 00 00 00 74 06 00 00   00 00 00 00 27 00 00 00    ....t.......'...
3286 01 00 00 00 01 00 00 00   74 06 00 00 00 00 00 00    ........t.......
3287 00 00 00 00 00 00 00 00   FF FF FF FF 74 06 00 00    ............t...
3288 00 00 00 00 00 00 00 00   12 27 4E FF 2D DD BE 01    .........'N.-...
3289 12 27 4E FF 2D DD BE 01   6E 65 6D 62 69 3A 29 6B    .'N.-...nembi:)k
3290 69 6C 6C 65 72 00 1D 00   00 00 03 00 00 00 00 00    iller...........
3291 00 00 67 06 00 00 00 00   00 00 1D 00 00 00 03 00    ..g.............
3292 00 00 00 00 00 00 67 06   00 00 00 00 00 00 01 00    ......g.........
3293 00 00 00 00 00 00 FF FF   FF FF 67 06 00 00 01 00    ..........g.....
3294 00 00 00 00 00 00 D8 5B   9E D0 32 DD BE 01 D8 5B    .......[..2....[
3295 9E D0 32 DD BE 01 53 4B   45 4C 54 4F 4E 00 1F 00    ..2...SKELTON...
3296 00 00 03 00 00 00 00 00   00 00 EF 05 00 00 00 00    ................
3297 00 00 1F 00 00 00 03 00   00 00 00 00 00 00 EF 05    ................
3298 00 00 00 00 00 00 02 00   00 00 00 00 00 00 FF FF    ................
3299 FF FF EF 05 00 00 02 00   00 00 00 00 00 00 62 26    ..............b&
3300 55 0C 51 DC BE 01 62 26   55 0C 51 DC BE 01 7A 69    U.Q...b&U.Q...zi
3301 7A 69 62 65 5E 2E 7E 00   19 00 00 00 02 00 00 00    zibe^.~.........
3302 00 00 00 00 FC 05 00 00   00 00 00 00 18 00 00 00    ................
3303 02 00 00 00 00 00 00 00   EE 05 00 00 00 00 00 00    ................
3304 03 00 00 00 00 00 00 00   FF FF FF FF FC 05 00 00    ................
3305 03 00 00 00 00 00 00 00   A0 25 4F 31 90 DE BE 01    .........%O1....
3306 8C F1 7F 9F 66 DD BE 01   59 4F 4F 4A 49 4E 27 53    ....f...YOOJIN'S
3307 00 1D 00 00 00 02 00 00   00 00 00 00 00 EC 05 00    ................
3308 00 00 00 00 00 1D 00 00   00 02 00 00 00 00 00 00    ................
3309 00 EC 05 00 00 00 00 00   00 04 00 00 00 00 00 00    ................
3310 00 FF FF FF FF EC 05 00   00 03 00 00 00 00 00 00    ................
3311 00 F4 58 78 82 2F D7 BE   01 F4 58 78 82 2F D7 BE    ..Xx./....Xx./..
3312 01 3D 7B 5F 7C 5F 7D 3D   00 1A 00 00 00 00 00 00    .={_|_}=........
3313 00 00 00 00 00 E2 05 00   00 00 00 00 00 1A 00 00    ................
3314 00 00 00 00 00 00 00 00   00 E2 05 00 00 00 00 00    ................
3315 00 05 00 00 00 00 00 00   00 FF FF FF FF E2 05 00    ................
3316 00 05 00 00 00 00 00 00   00 F2 DC 0D 1F 6C DD BE    .............l..
3317 01 F2 DC 0D 1F 6C DD BE   01 5B 53 50 41 43 45 5D    .....l...[SPACE]
3318 2D 31 2D 54 2E 53 2E 4A   00 15 00 00 00 02 00 00    -1-T.S.J........
3319 00 01 00 00 00 E0 05 00   00 00 00 00 00 15 00 00    ................
3320 00 02 00 00 00 01 00 00   00 E0 05 00 00 00 00 00    ................
3321 00 06 00 00 00 00 00 00   00 FF FF FF FF E0 05 00    ................
3322 00 06 00 00 00 00 00 00   00 7A C9 F6 6E 0B DE BE    .........z..n...
3323 01 7A C9 F6 6E 0B DE BE   01 5B 46 65 77 5D 2D 44    .z..n....[Few]-D
3324 2E 73 00 23 00 00 00 00   00 00 00 00 00 00 00 DF    .s.#............
3325 05 00 00 00 00 00 00 23   00 00 00 00 00 00 00 00    .......#........
3326 00 00 00 DF 05 00 00 00   00 00 00 07 00 00 00 00    ................
3327 00 00 00 FF FF FF FF E2   05 00 00 04 00 00 00 00    ................
3328 00 00 00 6E D9 DC 3A E2   DA BE 01 6E D9 DC 3A E2    ...n..:....n..:.
3329 DA BE 01 5B 4C 2E 73 5D   2D 43 6F 6F 6C 00 1F 00    ...[L.s]-Cool...
3330 00 00 07 00 00 00 02 00   00 00 DD 05 00 00 00 00    ................
3331 00 00 1F 00 00 00 07 00   00 00 02 00 00 00 DD 05    ................
3332 00 00 00 00 00 00 08 00   00 00 00 00 00 00 FF FF    ................
3333 FF FF 07 06 00 00 02 00   00 00 00 00 00 00 B6 CE    ................
3334 B1 D8 7A D8 BE 01 B6 CE   B1 D8 7A D8 BE 01 52 6F    ..z.......z...Ro
3335 60 4C 65 58 7E 50 72 4F   27 5A 65 4E 00 18 00 00    `LeX~PrO'ZeN....
3336 00 04 00 00 00 00 00 00   00 DD 05 00 00 00 00 00    ................
3337 00 18 00 00 00 04 00 00   00 00 00 00 00 DD 05 00    ................
3338 00 00 00 00 00 09 00 00   00 00 00 00 00 FF FF FF    ................
3339 FF DD 05 00 00 04 00 00   00 00 00 00 00 50 76 4C    .............PvL
3340 F7 AD D7 BE 01 50 76 4C   F7 AD D7 BE 01 48 61 6E    .....PvL.....Han
3341 5F 65 53 54 68 65 72 2E   27 27 00                   _eSTher.''.
3342 */
3343 #define SERVER_LADDERREPLY 0x2eff
3344 typedef struct
3345 {
3346     t_bnet_header h;
3347     bn_int        clienttag;
3348     bn_int        id; /* (AKA ladder type) 1==standard, 3==ironman */
3349     bn_int        type; /* (AKA ladder sort) */
3350     bn_int        startplace; /* start listing on this entries */
3351     bn_int        count; /* how many entries to list */
3352     /* ladder entry */
3353     /* player name */
3354 } PACKED_ATTR() t_server_ladderreply;
3355 #define CLIENT_LADDERREPLY_ID_STANDARD 0x00000001
3356 #define CLIENT_LADDERREPLY_ID_IRONMAN  0x00000003
3357 
3358 typedef struct
3359 {
3360     bn_int wins;
3361     bn_int loss;
3362     bn_int disconnect;
3363     bn_int rating;
3364     bn_int rank;
3365 } PACKED_ATTR() t_ladder_data;
3366 
3367 typedef struct
3368 {
3369     t_ladder_data current;
3370     t_ladder_data active;
3371     bn_int        ttest[6]; /* 00 00 00 00  00 00 00 00  FF FF FF FF  74 06 00 00  00 00 00 00 00  00 00 00 */
3372     bn_long       lastgame_current; /* timestamp */
3373     bn_long       lastgame_active;  /* timestamp */
3374 } PACKED_ATTR() t_ladder_entry;
3375 /******************************************************/
3376 
3377 
3378 /******************************************************/
3379 /*
3380                                     FF 25 08 00 EA 7F DB 02   .%......
3381 */
3382 #define CLIENT_ECHOREPLY 0x25ff
3383 typedef struct
3384 {
3385     t_bnet_header h;
3386     bn_int        ticks;
3387 } PACKED_ATTR() t_client_echoreply;
3388 /******************************************************/
3389 
3390 
3391 /******************************************************/
3392 #define SERVER_ECHOREQ 0x25ff
3393 typedef struct
3394 {
3395     t_bnet_header h;
3396     bn_int        ticks;
3397 } PACKED_ATTR() t_server_echoreq;
3398 /******************************************************/
3399 
3400 
3401 
3402 /******************************************************/
3403 /*
3404 What I'm calling the ping happens every 90 seconds during gameplay.  I'm
3405 not exactly sure what it is, but it didn't hurt that we didn't respond up
3406 to now...  I went ahead and coded a response in.  This packet is sent
3407 at other times as well, even before login.
3408 
3409 This is probably a keepalive packet and the UDP is sent to make
3410 sure the UDP entry on the NAT gateway remains valid.
3411 
3412 Prolix calls these null packets and says they are sent every 60
3413 seconds.
3414 
3415 This seems to be associated with a UDP packet 7 from the client:
3416  7: cli class=bnet[0x01] type=CLIENT_PINGREQ[0x00ff] length=4
3417  0000:   FF 00 04 00                                          ....
3418  5: clt prot=udp[0x07] from=128.123.62.23:6112 to=128.123.62.23:6112 length=8
3419  0000:   07 00 00 00 2E 95 9D 00                              ........
3420  7: srv class=bnet[0x01] type=SERVER_PINGREPLY[0x00ff] length=4
3421  0000:   FF 00 04 00                                          ....
3422 
3423 FF 00 04 00                                          ....
3424  */
3425 #define CLIENT_PINGREQ 0x00ff
3426 typedef struct
3427 {
3428     t_bnet_header h;
3429 } PACKED_ATTR() t_client_pingreq;
3430 /******************************************************/
3431 
3432 
3433 /******************************************************/
3434 /*
3435 FF 00 04 00                                          ....
3436 */
3437 #define SERVER_PINGREPLY 0x00ff
3438 typedef struct
3439 {
3440     t_bnet_header h;
3441 } PACKED_ATTR() t_server_pingreply;
3442 /******************************************************/
3443 
3444 
3445 /******************************************************/
3446 /*
3447 FF 2C 3D 02 00 00 00 00   08 00 00 00 03 00 00 00    .,=.............
3448 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
3449 00 00 00 00 00 00 00 00   00 00 00 00 52 6F 73 73    ............Ross
3450 5F 43 4D 00 00 00 00 00   00 00 00 4F 6E 20 6D 61    _CM........On ma
3451 70 20 22 43 68 61 6C 6C   65 6E 67 65 72 22 3A 0A    p "Challenger":.
3452 00 52 6F 73 73 5F 43 4D   20 77 61 73 20 50 72 6F    .Ross_CM was Pro
3453 74 6F 73 73 20 61 6E 64   20 70 6C 61 79 65 64 20    toss and played
3454 66 6F 72 20 33 31 20 6D   69 6E 75 74 65 73 0A 0A    for 31 minutes..
3455 20 20 4F 76 65 72 61 6C   6C 20 53 63 6F 72 65 20      Overall Score
3456 32 38 31 30 35 0A 20 20   20 20 20 20 20 20 20 31    28105.         1
3457 31 37 30 30 20 66 6F 72   20 55 6E 69 74 73 0A 20    1700 for Units.
3458 20 20 20 20 20 20 20 20   20 31 34 37 35 20 66 6F             1475 fo
3459 72 20 53 74 72 75 63 74   75 72 65 73 0A 20 20 20    r Structures.
3460 20 20 20 20 20 20 31 34   39 33 30 20 66 6F 72 20          14930 for
3461 52 65 73 6F 75 72 63 65   73 0A 0A 20 20 55 6E 69    Resources..  Uni
3462 74 73 20 53 63 6F 72 65   20 31 31 37 30 30 0A 20    ts Score 11700.
3463 20 20 20 20 20 20 20 20   20 20 20 37 30 20 55 6E               70 Pn
3464 */
3465 #define CLIENT_GAME_REPORT 0x2cff
3466 typedef struct
3467 {
3468     t_bnet_header h;
3469     bn_int        unknown1; /* 0x00000000 */
3470     bn_int        count;    /* (number of player slots (will be 8 for now) */
3471     /* results... */
3472     /* names... */
3473     /* report header */
3474     /* report body */
3475 } PACKED_ATTR() t_client_game_report;
3476 
3477 typedef struct
3478 {
3479     bn_int result;
3480 } PACKED_ATTR() t_client_game_report_result;
3481 #define CLIENT_GAME_REPORT_RESULT_PLAYING    0x00000000
3482 #define CLIENT_GAME_REPORT_RESULT_WIN        0x00000001
3483 #define CLIENT_GAME_REPORT_RESULT_LOSS       0x00000002
3484 #define CLIENT_GAME_REPORT_RESULT_DRAW       0x00000003
3485 #define CLIENT_GAME_REPORT_RESULT_DISCONNECT 0x00000004
3486 #define CLIENT_GAME_REPORT_RESULT_OBSERVER   0x00000005
3487 /******************************************************/
3488 
3489 
3490 /******************************************************/
3491 /*
3492 War Craft II BNE (original):
3493 FF 22 1B 00 4E 42 32 57   4B 00 00 00 4C 61 64 64    ."..NB2WK...Ladd
3494 65 72 20 31 20 6F 6E 20   31 00 00                   er 1 on 1..
3495 */
3496 #define CLIENT_JOIN_GAME 0x22ff
3497 typedef struct
3498 {
3499     t_bnet_header h;
3500     bn_int        clienttag;
3501     bn_int        versiontag;
3502     /* game name */
3503     /* game password */
3504 } PACKED_ATTR() t_client_join_game;
3505 /******************************************************/
3506 
3507 
3508 /******************************************************/
3509 /*
3510 FF 27 84 00 01 00 00 00  04 00 00 00 52 6F 73 73    .'..........Ross
3511 5F 43 4D 00 70 72 6F 66  69 6C 65 5C 73 65 78 00    _CM.profile\sex.
3512 70 72 6F 66 69 6C 65 5C  61 67 65 00 70 72 6F 66    profile\age.prof
3513 69 6C 65 5C 6C 6F 63 61  74 69 6F 6E 00 70 72 6F    ile\location.pro
3514 66 69 6C 65 5C 64 65 73  63 72 69 70 74 69 6F 6E    file\description
3515 00 61 73 64 66 00 61 73  66 00 61 73 64 66 00 61    .asdf.asf.asdf.a
3516 73 64 66 61 73 64 66 61  73 64 66 61 73 64 66 0D    sdfasdfasdfasdf.
3517 0A 61 73 64 0D 0A 66 61  73 64 0D 0A 66 61 73 64    .asd..fasd..fasd
3518 66 0D 0A 00                                         f...
3519 */
3520 #define CLIENT_STATSUPDATE 0x27ff
3521 typedef struct
3522 {
3523     t_bnet_header h;
3524     bn_int        name_count;
3525     bn_int        key_count;
3526     /* names... */
3527     /* values... */
3528 } PACKED_ATTR() t_client_statsupdate;
3529 /******************************************************/
3530 
3531 /******************************************************/
3532 #define CLIENT_REALMJOINREQ_109 0x3eff
3533 typedef struct
3534 {
3535     t_bnet_header h;
3536     bn_int        seqno;
3537     bn_int        seqnohash[5];
3538     /* Realm Name */
3539 } PACKED_ATTR() t_client_realmjoinreq_109;
3540 /******************************************************/
3541 
3542 /******************************************************/
3543 #define SERVER_REALMJOINREPLY_109 0x3eff
3544 typedef struct
3545 {
3546     t_bnet_header h;
3547     bn_int        seqno;
3548     bn_int        u1;
3549     bn_int        bncs_addr1;
3550     bn_int        sessionnum;
3551     bn_int        addr;
3552     bn_short      port;
3553     bn_short      u3;
3554     bn_int        sessionkey;     /* zero */
3555     bn_int        u5;
3556     bn_int        u6;
3557     bn_int        clienttag;
3558     bn_int        versionid;
3559     bn_int        bncs_addr2;
3560     bn_int        u7;             /* zero */
3561     bn_int        secret_hash[5];
3562     /* account name */
3563 } PACKED_ATTR() t_server_realmjoinreply_109;
3564 /******************************************************/
3565 
3566 #define CLIENT_SEARCH_LAN_GAMES 0x2ff7
3567 typedef struct
3568 {
3569   t_bnet_header h;
3570   bn_byte game_tag[4]; /* 3WAR */
3571   bn_int unknown1;
3572   bn_int unknown2;
3573 } PACKED_ATTR() t_client_search_lan_games;
3574 
3575 #define CLIENT_CHANGECLIENT	0x5cff
3576 typedef struct
3577 {
3578     t_bnet_header h;
3579     bn_int clienttag;
3580 } t_client_changeclient;
3581 
3582 #define CLIENT_SETEMAILREPLY		0x59ff
3583 typedef struct
3584 {
3585 	t_bnet_header	h;
3586 	/* email address */
3587 } PACKED_ATTR() t_client_setemailreply;
3588 
3589 #define SERVER_SETEMAILREQ		0x59ff
3590 /* send this packet to client before login ok packet will cause
3591 client to enter input email screen */
3592 typedef struct
3593 {
3594 	t_bnet_header	h;
3595 } PACKED_ATTR() t_server_setemailreq;
3596 
3597 #define CLIENT_GETPASSWORDREQ		0x5aff
3598 typedef struct
3599 {
3600 	t_bnet_header	h;
3601 	/* account name */
3602 	/* email address */
3603 } PACKED_ATTR() t_client_getpasswordreq;
3604 
3605 #define CLIENT_CHANGEEMAILREQ		0x5bff
3606 typedef struct
3607 {
3608 	t_bnet_header	h;
3609 	/* account name */
3610 	/* old email address */
3611 	/* new email address */
3612 } PACKED_ATTR() t_client_changeemailreq;
3613 
3614 #define CLIENT_MOTDREQ			0x46ff
3615 typedef struct
3616 {
3617 	t_bnet_header h;
3618 	bn_int        last_news_time;	/* date of the last news item the client has */
3619 } PACKED_ATTR() t_client_motdreq;
3620 /*
3621 this packet is sent right after cdkey and version auth reply success and crashdump exist
3622 0x0000: ff 5d 14 00 01 01 00 27   00 0a 01 05 00 00 c0 00    .].....'........
3623 0x0010: 00 00 00 00                                          ....
3624 */
3625 
3626 #define CLIENT_CRASHDUMP		0x5dff
3627 typedef struct
3628 {
3629 	t_bnet_header	h;
3630 	/* crashdump file data */
3631 	/* contains data like client version, exception code, code address */
3632 } PACKED_ATTR() t_client_crashdump;
3633 
3634 #define CLIENT_CLANINFOREQ		0x82ff
3635 typedef struct
3636 {
3637 	t_bnet_header	h;
3638 	bn_int		count;
3639 	bn_int		clantag;
3640 	/* player name */
3641 } PACKED_ATTR() t_client_claninforeq;
3642 
3643 #define SERVER_CLANINFOREPLY		0x82ff
3644 typedef struct
3645 {
3646 	t_bnet_header	h;
3647 	bn_int		count;
3648 	bn_byte		fail;
3649 	/* string  - clan name */
3650 	/* bn_byte - clan rank */
3651 	/* bn_int  - join time */
3652 } PACKED_ATTR() t_server_claninforeply;
3653 
3654 #define CLIENT_ARRANGEDTEAM_ACCEPT_INVITE 0xfdff
3655 typedef struct
3656 {
3657 	t_bnet_header h;
3658 } PACKED_ATTR() t_client_arrangedteam_accept_invite;
3659 
3660 /* clan handling */
3661 
3662 #define SERVER_W3XP_CLAN_MEMBER_CHIEFTAIN 0x04
3663 #define SERVER_W3XP_CLAN_MEMBER_SHAMAN 0x03
3664 #define SERVER_W3XP_CLAN_MEMBER_GRUNT 0x02
3665 #define SERVER_W3XP_CLAN_MEMBER_PEON 0x01
3666 #define SERVER_W3XP_CLAN_MEMBER_NEW 0x00
3667 #define SERVER_W3XP_CLAN_MEMBER_OFFLINE 0x00
3668 #define SERVER_W3XP_CLAN_MEMBER_ONLINE 0x01
3669 #define SERVER_W3XP_CLAN_MEMBER_CHANNEL 0x02
3670 #define SERVER_W3XP_CLAN_MEMBER_GAME 0x03
3671 #define SERVER_W3XP_CLAN_MEMBER_PRIVATE_GAME 0x04
3672 
3673 /*Paquet #267
3674 0x0000   FF 75 0A 00 00 00 42 54-54 04                     �u....BTT.
3675 */
3676 /*
3677 300: recv class=bnet[0x02] type=unknown[0x70ff] length=12
3678 0000:   FF 70 0C 00 01 00 00 00   00 64 73 66                .p.......dsf
3679 300: send class=bnet[0x02] type=unknown[0x70ff] length=56
3680 0000:   FF 70 38 00 01 00 00 00   00 09 44 4A 50 32 00 44    .p8.......DJP2.D
3681 0010:   4A 50 33 00 44 4A 50 34   00 44 4A 50 35 00 44 4A    JP3.DJP4.DJP5.DJ
3682 0020:   50 36 00 44 4A 50 37 00   44 4A 50 38 00 44 4A 50    P6.DJP7.DJP8.DJP
3683 0030:   39 00 44 4A 50 31 30 00                              9.DJP10.
3684 300: recv class=bnet[0x02] type=CLIENT_FRIENDINFOREQ[0x66ff] length=5
3685 0000:   FF 66 05 00 01                                       .f...
3686 300: send class=bnet[0x02] type=unknown[0x66ff] length=12
3687 0000:   FF 66 0C 00 01 00 00 00   00 00 00 00                .f..........
3688 300: recv class=bnet[0x02] type=unknown[0x71ff] length=64
3689 0000:   FF 71 40 00 01 00 00 00   74 65 73 74 00 00 64 73    .q@.....test..ds
3690 0010:   66 09 44 4A 50 32 00 44   4A 50 33 00 44 4A 50 34    f.DJP2.DJP3.DJP4
3691 0020:   00 44 4A 50 35 00 44 4A   50 36 00 44 4A 50 37 00    .DJP5.DJP6.DJP7.
3692 0030:   44 4A 50 38 00 44 4A 50   39 00 44 4A 50 31 30 00    DJP8.DJP9.DJP10.
3693 300: send class=bnet[0x02] type=unknown[0x71ff] length=10
3694 0000:   FF 71 0A 00 01 00 00 00   00 00                      .q........
3695 300: send class=bnet[0x02] type=unknown[0x75ff] length=12
3696 0000:   FF 75 0C 00 00 00 00 00   64 73 66 00                .u......dsf.
3697 300: recv class=bnet[0x02] type=CLIENT_FRIENDINFOREQ[0x66ff] length=5
3698 0000:   FF 66 05 00 02                                       .f...
3699 300: send class=bnet[0x02] type=unknown[0x66ff] length=12
3700 0000:   FF 66 0C 00 02 00 00 00   00 00 00 00                .f..........
3701 */
3702 
3703 #define CLIENT_W3XP_CLAN_CREATEREQ 0x70ff
3704 typedef struct{
3705   t_bnet_header        h;
3706   bn_int               count;
3707   bn_int               clantag;
3708 } PACKED_ATTR() t_client_w3xp_clan_createreq;
3709 
3710 
3711 #define SERVER_W3XP_CLAN_CREATEREPLY 0x70ff
3712 typedef struct{
3713   t_bnet_header        h;
3714   bn_int               count;
3715   bn_byte			   check_result;
3716   bn_byte			   friend_count;
3717   /* player name in chan or mutual
3718   char player_name[sizeof (friend_name)]; */
3719 } PACKED_ATTR() t_server_w3xp_clan_createreply;
3720 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_OK 0x00
3721 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_ALLREADY_IN_USE 0x01
3722 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_TIME_LIMIT 0x02
3723 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_EXCEPTION 0x04
3724 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_INVALID_CLAN_TAG 0x0a
3725 
3726 /*
3727 3852: recv class=bnet[0x02] type=unknown[0x71ff] length=70
3728 0000:   FF 71 46 00 01 00 00 00   53 75 62 57 61 72 5A 6F    .qF.....SubWarZo
3729 0010:   6E 65 00 00 5A 57 53 09   44 4A 50 32 00 44 4A 50    ne..ZWS.DJP2.DJP
3730 0020:   33 00 44 4A 50 34 00 44   4A 50 35 00 44 4A 50 36    3.DJP4.DJP5.DJP6
3731 0030:   00 44 4A 50 37 00 44 4A   50 38 00 44 4A 50 31 30    .DJP7.DJP8.DJP10
3732 0040:   00 44 4A 50 39 00                                    .DJP9.
3733 */
3734 #define CLIENT_W3XP_CLAN_CREATEINVITEREQ 0x71ff
3735 typedef struct{
3736   t_bnet_header        h;
3737   bn_int               count;
3738   /* Clan Name (\0 terminated string)
3739      bn_int			    clantag;
3740      bn_byte			friend_count; //Number of friend selected
3741      Name of friend (\0 terminated string)
3742    */
3743 } PACKED_ATTR() t_client_w3xp_clan_createinvitereq;
3744 
3745 /*3756: send class=bnet[0x02] type=unknown[0x71ff] length=14
3746 0000:   FF 71 0E 00 02 00 00 00   05 44 4A 50 32 00          .q.......DJP2.
3747 <- Unable to receive invitation ( PG search, already in a clan, etc... )*/
3748 /*3756:
3749 Paquet #266
3750 0x0000   FF 71 0A 00 05 00 00 00-00 00                     �q........
3751 <- Clan invitation = Sucessfully done */
3752 #define SERVER_W3XP_CLAN_CREATEINVITEREPLY 0x71ff
3753 typedef struct{
3754   t_bnet_header        h;
3755   bn_int               count;
3756   bn_byte			   status; /* 0x05 = Cannot contact(not in channel screen) or already in clan | 0x04 = Decline | 0x00 = OK :)
3757   Name of failed member(\0 terminated string) */
3758 } PACKED_ATTR() t_server_w3xp_clan_createinvitereply;
3759 
3760 #define SERVER_W3XP_CLAN_CREATEINVITEREQ 0x72ff
3761 typedef struct{
3762   t_bnet_header        h;
3763   bn_int               count;
3764   bn_int			   clantag;
3765   /* Clan Name (\0 terminated string)
3766      Clan Creator (\0 terminated string)
3767      bn_byte			friend_count; //Number of friend selected
3768      Name of friend (\0 terminated string) */
3769 } PACKED_ATTR() t_server_w3xp_clan_createinvitereq;
3770 
3771 #define CLIENT_W3XP_CLAN_CREATEINVITEREPLY 0x72ff
3772 typedef struct{
3773   t_bnet_header        h;
3774   bn_int               count;
3775   bn_int			   clantag;
3776   /* Clan Creator (\0 terminated string)
3777      bn_byte			reply */ /* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan 0x06--accept*/
3778 } PACKED_ATTR() t_client_w3xp_clan_createinvitereply;
3779 
3780 /*
3781 3876: recv class=bnet[0x02] type=unknown[0x73ff] length=8
3782 0000:   FF 73 08 00 01 00 00 00                              .s......      */
3783 #define CLIENT_W3XP_CLAN_DISBANDREQ 0x73ff
3784 typedef struct{
3785   t_bnet_header        h;
3786   bn_int               count;
3787 } PACKED_ATTR() t_client_w3xp_clan_disbandreq;
3788 
3789 #define SERVER_W3XP_CLAN_DISBANDREPLY 0x73ff
3790 typedef struct{
3791   t_bnet_header        h;
3792   bn_int               count;
3793   bn_byte              result;   /* 0-- Success  1-- Exception raised  2-- Clan exists less than 1 week, cannot remove */
3794 } PACKED_ATTR() t_server_w3xp_clan_disbandreply;
3795 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_OK 0x0
3796 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_EXCEPTION 0x1
3797 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_NOT_AUTHORIZED 0x07
3798 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_FAILED 0x2
3799 
3800 #define CLIENT_W3XP_CLAN_MEMBERNEWCHIEFREQ 0x74ff
3801 typedef struct{
3802   t_bnet_header        h;
3803   bn_int               count;
3804   /*Player_Name deleted(\0 terminated) */
3805 } PACKED_ATTR() t_client_w3xp_clan_membernewchiefreq;
3806 
3807 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY 0x74ff
3808 typedef struct{
3809   t_bnet_header        h;
3810   bn_int               count;
3811   bn_byte              result; /* 0-successful 1-failed */
3812 } PACKED_ATTR() t_server_w3xp_clan_membernewchiefreply;
3813 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY_SUCCESS 0x00
3814 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY_FAILED 0x01
3815 
3816 #define SERVER_W3XP_CLAN_CLANACK 0x75ff
3817 typedef struct{
3818   t_bnet_header		h;
3819   bn_byte		unknow1; /* 0x00 */
3820   bn_int		clantag;
3821   bn_byte		status;  /* member status */
3822 } PACKED_ATTR() t_server_w3xp_clan_clanack;
3823 
3824 #define SERVER_W3XP_CLANQUITNOTIFY 0x76ff
3825 typedef struct{
3826   t_bnet_header        h;
3827   bn_byte              status;
3828 } PACKED_ATTR() t_server_w3xp_clanquitnotify;
3829 #define SERVER_W3XP_CLANQUITNOTIFY_STATUS_REMOVED_FROM_CLAN 0x01
3830 
3831 /*
3832 3876: recv class=bnet[0x02] type=unknown[0x77ff] length=13
3833 0000:   FF 77 0D 00 01 00 00 00   44 4A 50 31 00             .w......DJP1.  */
3834 #define CLIENT_W3XP_CLAN_INVITEREQ 0x77ff
3835 typedef struct{
3836   t_bnet_header        h;
3837   bn_int               count;
3838   /*Player_Name invited */
3839 } PACKED_ATTR() t_client_w3xp_clan_invitereq;
3840 
3841 #define SERVER_W3XP_CLAN_INVITEREPLY 0x77ff
3842 typedef struct{
3843   t_bnet_header        h;
3844   bn_int               count;
3845   bn_byte              result;  /* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan */
3846 } PACKED_ATTR() t_server_w3xp_clan_invitereply;
3847 
3848 #define CLIENT_W3XP_CLANMEMBER_REMOVE_REQ 0x78ff
3849 typedef struct{
3850   t_bnet_header        h;
3851   bn_int               count;
3852   /*Player_Name deleted(\0 terminated) */
3853 } PACKED_ATTR() t_client_w3xp_clanmember_remove_req;
3854 
3855 #define SERVER_W3XP_CLANMEMBER_REMOVE_REPLY 0x78ff
3856 typedef struct{
3857   t_bnet_header        h;
3858   bn_int               count;
3859   bn_byte              result; /* 0-successful 1-failed */
3860 } PACKED_ATTR() t_server_w3xp_clanmember_remove_reply;
3861 #define SERVER_W3XP_CLANMEMBER_REMOVE_SUCCESS 0x00
3862 #define SERVER_W3XP_CLANMEMBER_REMOVE_FAILED 0x01
3863 
3864 #define SERVER_W3XP_CLAN_INVITEREQ 0x79ff
3865 typedef struct{
3866   t_bnet_header        h;
3867   bn_int               count;
3868   bn_int               clantag;
3869   /*Clan_Name (\0 terminated)
3870   Player_Name invited (\0 terminated) */
3871 } PACKED_ATTR() t_server_w3xp_clan_invitereq;
3872 
3873 #define CLIENT_W3XP_CLAN_INVITEREPLY 0x79ff
3874 typedef struct{
3875   t_bnet_header        h;
3876   bn_int               count;
3877   bn_int               clantag;
3878   /*Player_Name invited (\0 terminated)
3879   bn_byte            reply *//* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan 0x06--accept 0x07--no privilege to invite 0x08--cannot invite(??any difference from cannot contact?) 0x09--clan full*/
3880 } PACKED_ATTR() t_client_w3xp_clan_invitereply;
3881 #define W3XP_CLAN_INVITEREPLY_SUCCESS 0x00
3882 #define W3XP_CLAN_INVITEREPLY_DECLINE 0x04
3883 #define W3XP_CLAN_INVITEREPLY_FAILED 0x05
3884 #define W3XP_CLAN_INVITEREPLY_ACCEPT 0x06
3885 #define W3XP_CLAN_INVITEREPLY_NOPRIVILEGE 0x07
3886 #define W3XP_CLAN_INVITEREPLY_CANNOT 0x08
3887 #define W3XP_CLAN_INVITEREPLY_CLANFULL 0x09
3888 
3889 #define CLIENT_W3XP_CLANMEMBER_RANKUPDATE_REQ 0x7aff
3890 typedef struct{
3891   t_bnet_header        h;
3892   bn_int               count;
3893   /*Player_Name invited(\0 terminated)
3894     Player_Status(bn_byte: 1~4) */
3895 } PACKED_ATTR() t_client_w3xp_clanmember_rankupdate_req;
3896 
3897 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_REPLY 0x7aff
3898 typedef struct{
3899   t_bnet_header        h;
3900   bn_int               count;
3901   bn_byte              result; /* 0-successful 1-failed */
3902 } PACKED_ATTR() t_server_w3xp_clanmember_rankupdate_reply;
3903 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_SUCCESS 0x00
3904 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_FAILED 0x01
3905 
3906 #define CLIENT_W3XP_CLAN_MOTDCHG 0x7bff
3907 typedef struct{
3908   t_bnet_header        h;
3909   bn_int               unknow1;
3910   /* Motd en string ^^ */
3911 } PACKED_ATTR() t_client_w3xp_clan_motdchg;
3912 #define SERVER_W3XP_CLAN_MOTDREPLY_UNKNOW1 0x00000000
3913 
3914 #define SERVER_W3XP_CLAN_MOTDREPLY 0x7cff
3915 typedef struct{
3916   t_bnet_header        h;
3917   bn_int               count;
3918   bn_int			   unknow1; /* 0x00000000 */
3919   /* MOTD */
3920 } PACKED_ATTR() t_server_w3xp_clan_motdreply;
3921 
3922 #define CLIENT_W3XP_CLAN_MOTDREQ 0x7cff
3923 typedef struct{
3924   t_bnet_header        h;
3925   bn_int               count;
3926 } PACKED_ATTR() t_client_w3xp_clan_motdreq;
3927 
3928 /*
3929 Paquet #52
3930 0x0000   FF 7D 10 01 01 00 00 00-13 4D 79 73 74 69 2E 53   �}.......Mysti.S
3931 0x0010   77 5A 00 04 01 00 73 61-75 72 6F 6E 2E 73 77 7A   wZ....sauron.swz
3932 0x0020   00 03 00 00 73 69 6D 6F-6E 2E 53 77 5A 00 03 00   ....simon.SwZ...
3933 0x0030   00 4E 65 6F 2D 56 61 67-72 61 6E 74 2E 73 77 7A   .Neo-Vagrant.swz
3934 0x0040   00 02 00 00 77 4D 7A 00-02 00 00 6B 61 74 6E 6F   ....wMz....katno
3935 0x0050   6D 61 64 2E 53 77 5A 00-02 00 00 47 7A 62 65 75   mad.SwZ....Gzbeu
3936 0x0060   68 2E 53 77 5A 00 02 00-00 53 69 6C 76 65 72 2E   h.SwZ....Silver.
3937 0x0070   53 77 5A 00 02 00 00 4D-61 67 67 65 75 73 00 02   SwZ....Maggeus..
3938 0x0080   00 00 4F 6E 69 2D 4D 75-73 68 61 2E 53 77 5A 00   ..Oni-Musha.SwZ.
3939 0x0090   02 00 00 4D 61 67 67 65-75 53 2E 53 77 5A 00 02   ...MaggeuS.SwZ..
3940 0x00A0   00 00 53 69 72 65 5F 4C-6F 75 70 00 02 00 00 6B   ..Sire_Loup....k
3941 0x00B0   69 6C 6C 69 62 6F 79 00-03 00 00 52 65 64 2E 44   illiboy....Red.D
3942 0x00C0   72 61 4B 65 00 02 00 00-53 69 72 65 2E 53 77 5A   raKe....Sire.SwZ
3943 0x00D0   00 03 00 00 73 74 72 61-69 67 68 74 5F 63 6F 75   ....straight_cou
3944 0x00E0   67 61 72 00 02 00 00 52-65 64 44 72 61 6B 65 2E   gar....RedDrake.
3945 0x00F0   53 77 5A 00 02 00 00 54-72 6F 6C 6C 6F 00 02 00   SwZ....Trollo...
3946 0x0100   00 53 69 6C 76 65 72 62-65 61 72 64 00 00 00 00   .Silverbeard....
3947 */
3948 #define SERVER_W3XP_CLANMEMBERLIST_REPLY 0x7dff
3949 typedef struct{
3950   t_bnet_header        h;
3951   bn_int               count;
3952   bn_byte			   member_count;
3953   /* player repeat start
3954    * Name of player(\0 terminated string)
3955    * bn_byte		   CHIEFTAIN = 0x04
3956    *				   SHAMANS = 0x03
3957    *				   GRUNT = 0x02
3958    *				   PEON = 0x01
3959    *				   NEW_MEMBER = 0x00 <- can't be promoted/devoted
3960    * bn_byte		   online status
3961    * unknown(always \0)
3962    * repeat end
3963    */
3964 } PACKED_ATTR() t_server_w3xp_clanmemberlist_reply;
3965 
3966 /*
3967 Paquet #51
3968 0x0000   FF 7D 08 00 01 00 00 00-                          �}......
3969 */
3970 
3971 #define CLIENT_W3XP_CLANMEMBERLIST_REQ 0x7dff
3972 typedef struct{
3973   t_bnet_header        h;
3974   bn_int               count;
3975 } PACKED_ATTR() t_client_w3xp_clanmemberlist_req;
3976 
3977 #define SERVER_W3XP_CLANMEMBER_REMOVED_NOTIFY 0x7eff
3978 typedef struct{
3979   t_bnet_header        h;
3980   /* Player_Name deleted(\0 terminated) */
3981 } PACKED_ATTR() t_server_w3xp_clanmember_removed_notify;
3982 
3983 #define SERVER_W3XP_CLANMEMBERUPDATE 0x7fff
3984 typedef struct{
3985   t_bnet_header        h;
3986   /* Player_Name invited(\0 terminated)
3987    * Player_Status(bn_byte: 1~4)
3988    * Player_Online(bn_short: 0x0/0x1)
3989    */
3990 } PACKED_ATTR() t_server_w3xp_clanmemberupdate;
3991 
3992 #endif
3993 
3994