Posted 06 October 2011 - 06:58 PM
I have come here to ask for your aid in setting up the logistics and implementing a transitional system for the server list issue we will soon be experiencing due to EvenBalance's end of contract. Since EvenBalance hosts the master servers (and thus master server lists generated based on heartbeats), it is imperative for the sustenance of the ET community that we somehow set up a system for maintaining server lists.
Therefore, I propose that anyone having some sort of a connection with EvenBalance ask them to point their DNS A Records for etmaster.evenbalance.com, and the various masterx.evenbalance.com (e.g. master0.evenbalance.com, master1.evenbalance.com) to point at a server in the ET community which will be used for a master server. This will eliminate any and all traffic to their servers while maintaining the server lists and the community.
As to the community server to be used for this service, it must have a system for dealing with the heartbeats and server list requests. I do not have the time to code up a server program for this, but I have done some research into the Q3 engine source, and thus we have a preliminary design for the server program:
The program must build a server list based on the receipt of the following command string in a UDP Datagram on port 27960:
\xff\xff\xff\xffheartbeat EnemyTerritory-1\nand subsequently send UDP Datagram responses of the following commands:
\xff\xff\xff\xffgetchallenge [challenge value] \xff\xff\xff\xffgetinfo [challenge value]Where the challenge value can be of any entropy, but the method used by EvenBalance had a fairly large integer value for the challenge.
Servers must be removed from the list on receipt of the following command:
This server list will be partitioned into responses to the following command from ET clients:
\xff\xff\xff\xffgetservers [protocol number] full emptyNote that [protocol number] is 82 for ET 2.55, and 84 for 2.60b (you probably already know that).
The response is of the following format:
If the number of servers in the server list is more than 112, the server must send multiple responses of 112 servers each (and n % 112 servers in the last response). The [address list] component has addresses surrounded by the control character '\'. The address itself is a concatenation of four bytes of IPv4 address and two bytes of port. Each byte is a segment of the IPv4 address. The two bytes of port actually represent a short integer (C/++ nomenclature), and thus the port.
Thus representing a sample response as ASCII text, it will look like this:
Please do note that the '.' in that are due to those characters not being in the basic ASCII table, and thus not on my keyboard.
An example of decoding one of these addresses in the list:
>K.% = IPv4 address, m9 = port
Convert ASCII char to integer:
IPv4 address = 126.96.36.199
Convert 2 bytes to short integer (0-65535):
Port = 27961
Alright, so that should be an extensive explanation, and you probably didn't need half of it. I hope it helps though!
Oh, and it would definitely help to use a typed language to write the server program, as the byte conversions are very easy with typecasting.
- daredevil likes this
Posted 07 October 2011 - 01:01 PM
Thanks for the explanation, mate and welcome to the forums!
Issue is neither PB or Activision is going to help us in the end because they eventually want to move ET to Brink which no one plays much...
The ID Software people must be mediocre MBAs, as that strategy is going to shoot them in the foot. Take away something a person considers good, and you'll get their spite, not their patronage.
Anybody up for buying the subdomains off of ID Software? The loss of PB will take some time to deal with, but it's manageable. ID, on the other hand, will screw the game over.