• Welcome to Valhalla Legends Archive.
 

Request for Information: SID_WARCRAFTGENERAL (0x44)

Started by Arta, July 06, 2005, 09:25 AM

Previous topic - Next topic

Arta

SID_WARCRAFTGENERAL is a multi-use message. Some of its purposes have been documented, but undoubtedly, others remain unpublished.

In particular, the following subcommands are undocumented, or poorly understood.

Client to Server:


0x00 - Enter in ladder game search

(DWORD) Cookie
(VOID) Unknown


0x02 - Request ladder map listing

(DWORD) Cookie
(BYTE) Number of types requested
(DWORD[]) Request data


Other subcommands exist in the server-client version, but have not been documented.

MyndFyre

For the record, I was working on this message quite a bit prior to pausing my work on BNCS.  I'm planning to resume it soon, as the time is coming to put together the first plugin for my multi-client server system.  :)
QuoteEvery generation of humans believed it had all the answers it needed, except for a few mysteries they assumed would be solved at any moment. And they all believed their ancestors were simplistic and deluded. What are the odds that you are the first generation of humans who will understand reality?

After 3 years, it's on the horizon.  The new JinxBot, and BN#, the managed Battle.net Client library.

Quote from: chyea on January 16, 2009, 05:05 PM
You've just located global warming.

Flexx_rus

I want to research this message. See post: http://forum.valhallalegends.com/index.php?topic=16101.0 for more information. If you can help me post there please.
You can download FlexxBot from here: http://flexx.mlpa.ru/flexxbot016en.zip

Barabajagal

#3
Subcommand 0x02:
Send:

  (DWORD) Cookie
  (BYTE) Request Count
  For Each Request
  {
    (DWORD) ID
    (DWORD) Checksum *
  }

Recv:

  (DWORD) Cookie
  (BYTE) Responses in Packet (not necessarily the requested amount)
  For Reach Response
  {
   (DWORD) ID
   (DWORD) Checksum *
   (WORD) Decompressed Length
   (WORD) Compressed Length
   (VOID) Compressed Data
  }
  (BYTE) Packets to come **


*This value is 0 for the initial request, but is filled for the response. Subsequent requests send this value and the server sends nothing (meaning the data is correct). This leads me to believe it's a checksum of some sort, likely on the uncompressed data.

** For example, a request has a count of 5. The server only sends 3 responses in the first packet and sets this value to 2. It will then send one more packet with 1 response and this value set to 1. It then sends a final packet with the last data chunk, and this value is now 0.




Known Request IDs: URL, MAP, TYPE, DESC, LADR.

Once you decompress the data with zlib's uncompress function, you're left with more data to parse. The formats are as follows:

URL:

(STRING) Ladder URL
(STRING) Personal Profile URL
(STRING) Tournament URL
(STRING) Clan Profile URL


MAP:

(BYTE) Map count
(STRING) [] Map Name


TYPE:
Unknown. About 400 bytes, all under 0x40. Lots of 0x3Fs, but nothing else in the 0x3X range... No idea what it means.
03 00 05 00 00 05 3F 00  0D 06 04 05 03 07 08 0A
0B 00 10 11 12 1A 01 00  02 3F 00 0C 0B 0D 0E 00
0F 01 10 11 12 13 1A 1D  02 00 01 3F 00 0C 14 15
16 19 1A 1B 1C 1E 21 22  23 24 03 00 01 3F 00 0C
25 26 27 28 29 2A 2B 02  2C 2D 2E 2F 04 0E 02 3F
00 0C 0C 12 17 18 1C 21  27 2B 2C 2D 2E 30 01 03
00 00 05 3F 02 0C 0B 0D  0E 00 0F 01 10 11 12 13
1A 1D 02 00 06 3F 03 0D  14 15 16 19 1A 1B 1C 1E
1F 21 22 23 24 03 00 05  3F 04 0B 02 25 26 27 28
29 2A 2B 2C 2E 2F 02 1C  00 01 04 3F 00 04 00 07
11 12 01 01 04 3F 02 04  09 12 15 1A 02 01 04 3F
03 04 14 24 1F 2E 03 01  04 3F 03 04 14 24 1F 2E
04 01 04 3F 00 04 00 03  11 12 05 01 04 3F 02 04
09 12 15 1A 06 01 04 3F  02 04 09 12 15 1A 07 01
04 3F 03 04 14 24 1F 2E  08 01 04 3F 00 04 00 03
11 12 09 01 01 3F 02 01  1A 0A 01 01 3F 00 01 12
0B 01 01 3F 03 01 2E 0C  01 04 01 00 04 00 03 11
12 0D 01 01 3F 02 01 13  0E 01 04 20 00 04 00 03
11 12 0F 01 01 3F 00 01  00 10 01 04 20 02 04 09
12 15 1A 11 01 04 04 00  04 00 03 11 12 12 01 04
20 03 04 14 24 1F 2E 13  01 04 02 00 04 00 03 11
12 14 01 01 3F 02 01 12  15 01 04 08 00 04 00 03
11 12 16 01 01 3F 03 01  24 17 01 04 20 02 04 09
12 15 1A 18 01 01 3F 00  01 11 19 01 01 3F 02 01
09 1A 01 01 3F 00 01 07  1B 01 04 3F 00 04 00 03
11 12


DESC:

(BYTE) Map count
For Each Map
{
  (BYTE) Group ID (Not sure exactly what this is... something to do with the type of game, such as WCG, Bliz Tournament, or normal games)
  (BYTE) Game ID
  (STRING) Game Name
  (STRING) Game Description
}


Note that in my test, it sent two different responses for the same request (DESC). The first DESC contains Normal and WCG games, and the second contains Blizzard Tournament games, with the last game being named "Battle.net Invitational" and having a description of "<FIXME - Could not resolve id>".

LADR:

(BYTE) Count
For Each Item
{
  (DWORD) Type
  (STRING) Name
  (STRING) URL
}