1. The client sends POST request to us-beta.patch.battle.net:1120 with the following XML data:
Code: [Select]
2. If the server detects we have the lastest version it sends 204 (No Content) as said in the first post.
If we need an update the server sends
Code: [Select]
HTTP/1.1 200 OK
Server: Protocol HTTP
Content-Length: 1118
Connection: close
Content-Type: application/xml
http://dist.blizzard.com.edgesuite.net/sc2patch/update/B14093B/sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-game-component-dl;sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-game-component-dl;FE4E80465692A2F9C47C2723D184E933;14093
http://dist.blizzard.com.edgesuite.net/sc2patch/update/B14093B/sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-locale-component-dl;sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-locale-component-dl;49750B9F1473283D7DA44622E021833B;14093
http://dist.blizzard.com.edgesuite.net/sc2patch/update/B14093B/sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-bnet-base-component-dl;sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-bnet-base-component-dl;68CC1B35027ECE4B1D1704666344A29E;14093
http://dist.blizzard.com.edgesuite.net/sc2patch/update/B14093B/sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-bnet-bin-component-dl;sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-bnet-bin-component-dl;423205FE7C3D74D01990A1BB37273ADE;14093
You can see the
[... URL for the dl file ...];[... Name of the dl file ...];[... MD5 hash of the dl file ...];[... version number ...]
3. The client then gets the URLs from here and downloads and install them.
4. Then it checks again and if the server returns no update XML data it means that the client is lastest version.
If the update server could not be found the launcher continues loading the game.
The DL file itself is an MPQ archive. It has (a minimum of) two files:
prepatch.lst - contains list of operations the updater should do. For example
Code: [Select]
extract sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-game.torrent
download sc2-0.2.0.13891-0.3.0.14093-x86-Win-enUS-game.torrent
The torrent file is also in the archive. The first line tells the updater to extract the torrent file (to the Starcraft 2 folder) and the second one is to start downloading it. It uses the blizzard downloader to do that.
The actual update file we get by downloading the torrent is also an MPQ archive. (They just love mpqs don't they )
It contains the updated files in subdirectories. If an updated file is inside some of the base mpqs they aren't including the full mpq but only the updated file inside it. For example
Code: [Select]
\base\Mods\Liberty.SC2Mod\Base.SC2Data\GameData\[...file...].xml
Then in the patch.lst file every line is a file to copy. From there these files are put into the mpqs or just copied to the directory.
Code: [Select]
BlizzardComponent.xml;base/Mods/Core.SC2Mod/Base.SC2Data\BlizzardComponent.xml;base/Mods/Core.SC2Mod/Base.SC2Data
BuildId.txt;base/Mods/Core.SC2Mod/Base.SC2Data\BuildId.txt;base/Mods/Core.SC2Mod/Base.SC2Data
Assets\Effects\Protoss\BlinkIn\BlinkIn.m3;base/Mods/Liberty.SC2Mod/Base.SC2Assets\Assets\Effects\Protoss\BlinkIn\BlinkIn.m3;base/Mods/Liberty.SC2Mod/Base.SC2Assets
Code: [Select]
[...File path inside the mpq...];[...Path to the file from the root of the downloaded update mpq...];[...Path to the MPQ archive inside the Starcraft2 folder...]\n
patch.cmd contains the build numbers before and after and the Language version.
hdfiles.lst and wowtest.lst seem to contain the files that should be in the SC2 folder.
delete.lst - files to delete after the patching process.