Redirection and Compression
What is Redirection?
Redirection in terms of downloading files from a server is best described as a 'connection redirection'. Game servers are not designed to be file servers, therefore downloading required files from the game server is usually very slow and adds an extra load to your server's bandwidth.
Instead, with 'redirection' enabled, the user's connection to the file download is redirected to a (web / http) server (usually external to the gameserver). Not only does the user receive the file much quicker than on an unredirected download, but s/he is also downloading a compressed version of the file - meaning that anywhere between 40% - 80% of the original data is downloaded, again adding to the speed in which the user receives the file.
Redirection is definetly a must for any server, or at least a public one.
Why Should I Use Redirection?
You only need to use redirection if your server runs custom files i.e. maps, mods or mutators which do not come with the standard game. If you are running a 12 man CTF-face server with no extra mutators or mods then you will not need to setup redirection.
If however like 85% of the servers out there you have a custom map or mutator then it would be very wise to see if you can setup redirection. As when a player does not have the required file he will download it off your server which uses additional CPU and Bandwidth, redirection solves this problem.
How Do I Set My Server Up To Use Redirection?
The first thing you need to do is to setup a webserver where the files can be downloaded from (an ftp server will not function correctly). The webserver can either be local i.e. on the same server as your ut server or it can be located remotely. All files are placed in the same folder and there's no need to reproduce the directory structure of a standard installation of UT (Textures, System, etc). Also, note that on UT2004, OGG music files are not redirected.
Once this is done you will need to alter 2 sections of your UnrealTournament Ini: (note if you do not have these sections then you can add them to the end of your server ini file)
[IpDrv.HTTPDownload] RedirectToURL=http://mywebserver/path/to/folder/ ProxyServerHost= ProxyServerPort=3128 UseCompression=True [IpDrv.TcpNetDriver] AllowDownloads=True MaxDownloadSize=0 DownloadManagers=IpDrv.HTTPDownload DownloadManagers=Engine.ChannelDownload
Setting RedirectToURL= - a big GOTCHA on a LAN server - you need to specify the FQDN (Fully Qualified Domain Name) of the Redirect server for this to work.
- Example: (assuming your server is mywebserver on the network domain.local) (For Windows use 'ipconfig' at a command prompt and look at 'Connection Specific DNS Suffix) This will FAIL TO WORK - http://mywebserver/path/to/folder/ This will WORK - http://mywebserver.domain.local/path/to/folder/ Or this will WORK - http://10.0.0.20/path/to/folder
Setting AllowDownloads to True will allow people to download from your redirect server if you have set redirect up or allow them to download from your server if you haven’t. Setting it to False will only let people download from your redirect server. Therefore if you set this to false make sure every single custom file is on the redirect server. The section 'Related Documents' includes a link to a tool that will check the files for you.
MaxDownloadSize allows you to specify the maximum download size in bytes. If allowdownloads is set to True and the file to be downloaded is smaller than the maximum download size then the file will be sent from the server itself. This setting has no effect on redirected downloads.
Compression is done via good old DOS (don’t worry a DOS window is more than sufficient) and uses a file called ucc.exe (you might be familiar with this file if you have already set a server up)
Load up the ms-dos prompt and navigate to the UnrealTournament\System folder
This is done by typing:
cd \ cd UnrealTournament\System
If Unreal Tournament was installed in c:\UnrealTournament\
To actually compress the maps we type
ucc compress ..\maps\CTF-Terra-LE102.unr
so that is ucc compress ..\folder in UT folder\Name of file to be compressed
so for example
ucc compress ..\system\UTPURERC51.u ucc compress .. \textures\custommodel1.utx
Now that you know how to do this, you might look at the 'Related Documents' and see if a tool will make your life easier.
There is no trace that says if clients are downloading off the redirect server or not. So, in order to carry out a test, you need to connect up to the server as a client yourself while making sure that you don't have the relevant files installed.
When a download is started, watch the percentage complete number. If the percentage number goes up to 35-55% and then the download is completed, this means that the file came off the redirect site. This is because the UZ files are compressed but UT will indicate a percentage with respect to the full size of the file. This is true for v436, but the UTPG released v451 shows the true percentage of the file being downloaded whether it is compressed or not.
Note: If a file downloads once then starts downloading again the chances are that the file on the redirect is not the same version. What UT seems to do is download the file off the redirect, checks the package's id then starts downloading off the server if it isn't the correct one.
Web Server Notes
IIS6 on Windows 2003
If you are using IIS6 on Windows 2003 (and above, I presume), by default it is configured to not allow any file without a matching MIME type to be downloaded (in this case .uz2). This will, of course, prevent UT2004 redirect from pulling from the server.
To correct, follow this KB article
This applies to pretty much all webservers hosted on a UNIX-like OS (e.g. *BSD, Linux, ...). Unlike MS Windows the case of filenames is significant.
AFile.ext is different from
So when uploading files make sure their case is the same as the original file as used by the server. You could use webserver modules like mod_spelling for Apache to correct spelling mistakes. But this doesn't work well for all clients. The following clients can properly handle HTTP redirection headers (3xx codes):