Fixing the WoW Patcher

This document attempts to explain how to fix the problems associated with the patcher used for World of Warcraft by Blizzard. It does so by explaining alternative ways to do the same thing, not how to recode the patcher.

About WoW Patches

WoW uses several different methods to update the game. Small patches are downloaded as data files. When the download is complete, a program in the game's directory patches that data into your installation. The download is done from inside the game, and it begins patching files as soon as the game has exited. These patch files are rather small, so they don't present much of a problem, even for dialup users.

The larger WoW patches which tend to include new content and major features are distributed in a different way. A small file is downloaded inside the game as with the minor patches. However, this file is a downloader. When the game exits, this downloader is run. The downloader then attempts to fetch the actual game update, which can be 50MB or more. The downloader can download data directly from patch servers at a fairly low speed or from other users downloading the patch. It uses BitTorrent for this peer-to-peer data transfer.

About BitTorrent

BitTorrent is a protocol, or language, for sharing data on the internet. The inventor of this protocol, Bram Cohen, also made a program that actually makes use of the BT protocol. The program is called BitTorrent as well. A person referring to BitTorrent could mean the protocol or the official client for using that protocol. I'll try to make any references as clear as possible here.

Unlike some other P2P applications, the BitTorrent protocol was designed with peer to peer data transfer in mind, not just as a serverless distribution network. The protocol actually works better with more people using it. It is designed to provide better downloads to people who share more data and discourage "leeches" by reducing their downloads.

Many P2P "networks" aren't much more than search engines for files shared by others. You load the P2P program, search for a file, then download it from a user that has it. It's not much different from searching Google and downloading something from a website, except that you're downloading from someone's PC rather than a webserver.

BitTorrent, however, is quite different. Each person downloading a file is also sharing that file. BT actually uses a special server, called a tracker, to keep track of all the peers sharing data. None of the data is actually sent to or from the tracker, but it coordinates communication between the peers who are sharing the data. When a BT client wants to download a file, it doesn't simply connect to some other person and download the file from them, as with the other P2P programs. With BT, the file is divided up into chunks. You download different chunks of the file from different people. You share the chunks you have with people who don't have those chunks, and ask others for the chunks you still need. As stated before, the protocol includes methods to encourage people to share as much as possible, which in turn means faster downloads for everyone. The system is also coded to look for rare chunks first. If there are a dozen people sharing chunks of a file with you, and only one person has a specific chunk, BT will try to get that chunk first. Not only because you're less likely to be able to find that chunk later, but also because you getting that chunk means that everyone else now has another source for that chunk also. I haven't done any real research on it, but the data transfer details of BT seem to work quite well.

In case you didn't already know, the downloader used for the larger WoW patches is actually a customized version of the BitTorrent client. If you're familiar with BitTorrent, you can probably recognize that.

The Problems with BitTorrent

Well, not problems exactly, but issues. Because of the way BitTorrent works, there are some things which must be considered for things to go as smoothly as possible. Unfortunately, it can be difficult or even impossible to automatically solve some of these issues for the end user.

Uploads

BitTorrent relies on each user uploading for the system to work well. Because of this, users will see improvements in downloads directly proportional to their uploads. With BT, it's best to upload as much as possible.

The problem is that downloads still need to report back to the server to let them know that the download is still going. It's possible for a program to upload so much data that it blocks the reports back for the downloads. This is not specific to BT. Any application that uploads data can run into this issue, such as an FTP client uploading a large file. However, uploading is a key component in BT, so it becomes much more evident.

Incoming Connections

BitTorrent, like many different file transfer methods, relies on peers connecting to each other. To make a connection, one end has to start the conversation and the other end has to accept the conversation. This seems fairly straightforward, but the increase in usage of broadband routers and different firewall products can complicate things. It's generally good that these devices are being used, but many users don't really understand what's happening or even that certain things need to be configured properly to work.

Software firewalls aren't generally an issue. Most will prompt the user when a connection is attempted. The user simply has to understand that the connection is wanted, and allow it. Some poorly coded programs will incorrectly label any sort of incoming connection as a threat or hack attempt, which can cause users to take the wrong action (in this case, blocking a wanted connection).

How the Patcher is Affected

Both of these problems greatly affect the WoW patch downloader. They can sometimes be avoided or worked around, but there's really no way to make the problems fixable without doing some reprogramming.

The patcher has no upload limiting. I personally witnessed the patcher saturating my upload bandwidth to the point of slowing the patch download to a crawl. I would have continued to download at sub-dialup speeds and/or wait for everyone else to finish (so that I wouldn't be uploading anymore). I used a separate program to limit the bandwidth that the patcher could use for sending. Upon doing this, my upload rate dropped a few KB/s, but the excluded bandwidth was enough to allow my download to work properly, achieving the maximum speed for my connection.

The patcher also has no way to configure incoming connections. The program is written to use certain ports, and there is no way for a user to change which ports are used. In many cases, even that isn't a problem. A user can simply configure their setup to use those ports. However, it's sometimes beyond a user's control what ports they can and can't use. Since the patcher uses default BitTorrent ports, some organizations (businesses, universities, etc.) may simply block all traffic on those ports. Many home users now have NAT routers to share their broadband internet connections as well. It's generally not too hard for a user to forward the proper ports to their PC for full BT functionality. However, port forwarding on a NAT router can only map a port to one PC, just because of how NAT and port forwarding work. It's most likely faster to download the patch to one PC and copy it to the other(s) locally anyway, but this still means that the hardware has to be setup to allow one PC to work with the patcher, and all other PCs won't work well, if at all, with the patcher. If the user could configure the ports used by the patcher, he could use a different range for each PC on his LAN, and they would all work properly, even if he still did download each patch only once then shared it locally.

How to Make the Patcher Work

Or more specifically, how to make the patcher system work for you, without the patcher itself. This method really does the same thing as the patcher, but via a program with more options. The options let us properly configure the system for BitTorrent, which will make downloading patches a much more enjoyable event.

BitTorrent

The first thing you should do is download and install a BitTorrent client. There are a plethora to choose from, some with more advanced features and some taking the simple approach. I use BitTornado, which is a very simple BT client which shows a separate "download" box for each file being transferred. This setup should be pretty familiar to most users. Once it's installed, .torrent files should trigger the program. You can find some .torrent files for testing here.

Once you've opened a .torrent in BitTornado, click on Prefs in the upper right to get into the configuration screen. In the upper right corner, you can choose which ports you want to use. By defaut, they start at 6881. You'll need one port for each connection you want to make. If you want to allow 20 connections, you'll need to use ports 6881-6900. If you only want 10 connections, 6881-6890 will do. If these ports are being blocked, you can choose other ports here as well. It doesn't really matter which ports you use, so long as you remember which ones you chose. If you're configuring BitTornado on several different PCs, you'll need to use a different port range on each PC. For example, PC1 could use 6881-6890 and PC2 could use 6891-6900. If you're manually selecting ports here, you'll want to uncheck the Randomize option also. You can set a default speed option here too. "dsl/cable slow" is a good conservative place to start if you have broadband.

Router

Now you'll want to go into your router's setup. Most of them do this through a web interface at the router's gateway IP address. That's usually http://192.168.0.1/ but it may be different depending on the specific router. There should be an area marked "Port Forwarding" or "Servers" or something similar. This will allow you to specify which ports get forwarded to which PCs. Enter in the same range of ports you configured in BitTornado, and specify the PC's IP address. Depending on your version of Windows, you can find your IP address by double-clicking on the" network" icon in the system tray to bring up its properties, by selecting that connection in Network Connections, or with the IPCONFIG or WINIPCFG commands. Repeat for any other PCs with the appropriate IP address and port range. The idea here is to tell the router that traffic on certain ports should be sent to certain PCs.

If your router supports it, and you're willing to accept the risks, you can enable UPnP in both BitTornado and your router. Universal Plug 'n' Play is a system that allows programs to talk to the router and request configuration changes. Rather than telling BitTornado to use specific ports and telling your router that those specific ports are handled by a certain PC, BitTornado would simply ask the router to change the settings when it needed a port forwarded. UPnP was designed exactly for this type of situation, so that end users don't have to understand how a router works in order to make it do what they want. However, there is no security at all involved with UPnP. If a fancy virus with UPnP code got on your system, it could reconfigure your router automatically. Anything that the good programs can do to make life easier, the bad programs could do to cause trouble. Since port forwarding is a fairly simple one-time deal, I recommend doing it manually and leaving UPnP disabled for more security, but you can choose to do whatever you prefer.

The quality of any BitTorrent download depends on how many others are downloading the same file, or in your swarm. If you connect to a swarm with only one other person, you're only going to be able to download as fast as he can upload (which usually isn't much). But for popular files, your new BitTornado installation should be able to download files very quickly. The status light in the BitTornado window can also warn you of potential problems - click on it for details.

WoW

Now that you have a working BT client, you can get to using it for your WoW patches. The first thing you have to do is get the BT download information out of the patch downloader. First, log into the game when a new patch is available. An in-game download should take place, and clicking on Restart will launch the patch downloader. Cancel this download. That will leave a "WoW-_______-downloader.exe" program in the directory where you installed WoW, most commonly C:\Program Files\World of Warcraft.

Download WoW Torrent Extract from CapnBry's site. Unzip the program into your WoW directory. Run WoWTorrentEx.exe, and it will automatically extract a .torrent file from the patch downloader. This is the exact same data that the patcher uses to download the patch. Now we're going to open the .torrent in BitTornado and download it with that instead. You may get an error message about extra data in the file. It's safe to ignore this in BitTornado, but this slightly-corrupted .torrent file may not work in other BT clients (the official BitTorrent specifically didn't work for me). I did what I should have done a while ago, and contacted CapnBry about this bug. Azureus seems to just ignore the bad data, so he never knew about it. A few minutes after I notified him, he was able to fix it. WowTorrentEx v2 puts out properly formatted .torrent files, so you shouldn't see any warnings or errors with it. If you do, let CapnBry and/or me know.

If you can't or don't want to extract the .torrent yourself, several websites provide the extracted files ready to go. I've been putting them up at http://gaming.invisibill.net/wow/torrents/ and http://www.wowtorrents.de.vu/ is a site just for hosting these extracted .torrents. It's definitely easier, but you're waiting on someone else to do the work. File Rush may have .torrents available too. Keep in mind that their downloads use their own tracker - you'll be swarming only with other File Rush users, not with the general patching population.

BitTornado should now be downloading the patch, most likely much faster than you've ever seen the Blizzard downloader go. You can tweak the upload rate in BitTornado too. As I said before, you will get faster downloads if you share more, so it's to your benefit to raise your upload as high as possible without choking your connection. Raise it a little at a time, loading web pages to make sure your downloads aren't being affected. When you reach a point where pages load slowly or not at all, turn the upload speed back down a bit.

Congratulations!

That's it. You've downloaded your patch from Blizzard's patching system, without having to deal with the inadequacies of the Blizzard downloader. Once the file is finished downloading, keep the BitTornado window open as long as you can. This will cause you to keep uploading data. Since most connections download much faster than they upload, it's considered courtesy to keep seeding .torrents after you've finished. This way you're helping to give back, since you've already gotten more than you've given.

Simply run the completed download, and it will patch your WoW installation up to the current version. Now you can start playing again, once they bring the servers back up...

So what can Blizzard do?

Now you know how to work around the issues present in the Blizzard downloader. But what can Blizzard do to actually fix the problem?

The first thing they could do is place some sort of limiter on the upload rate. They could have a slider to choose any rate, a few presets for different connection speeds, or simply have one hard-coded limit. The first would be the most efficient, but also the most confusing. The last would be easiest (since users would never see it) but setting it to the lowest common denominator to avoid problems would cut out a lot of bandwidth that users could afford to share. Connection-type presets would probably give the best mix of customizability with the least confusion for users. Just about any user should be able to pick which type of connection he has. At the same time, someone with an unusually fast or slow connection could pick a different setting to tweak the performance.

Unfortunately, there's not much Blizzard can do about incoming ports, other than educating users. If a user is behind a NAT router, it simply requires that ports be forwarded for best performance. UPnP is the only way Blizzard can affect anything on the router, and even that is often disabled. Enabling it would require educating the user, and for their own safety, it would be best if they were informed about the risks inherent to UPnP as well. Once the entire internet is converted to IPv6 this may not be a problem, but until then the user simply has to learn about one thing or another in order for things to work as smoothly as possible. Every single BitTorrent client faces this challenge in trying to bring BT into the mainstream. It would help if Blizzard allowed changes to which ports are used, though it would only help the techies until everyone else learned why incoming connections are important to BT and how to properly configure their equipment.

Other Links

Standard disclaimer stuff: All trademarks and rights belong to their owners. Any usage in this document is strictly for identification purposes. Neither this document nor this site are endorsed by Blizzard.

© 2005 invisibill@invisibill.net