List servers

The list servers are what allow people to know what JJ2 games are being played online, and allow them to create and join such games within JJ2.

Terminology

First of all, there are a lot of different types of lists and servers mentioned here. To keep them from being ambiguous, these are the unique terms that will be used.

  • Game server: When a user hosts a game in JJ2, they are running the game server.
  • List server: The computer/program that manages the list of game servers is the list server.
  • Listed game: When a game server is contained in the list of game servers on the list server, then the game is said to be listed. This is a listed game.
  • Server list: The list of game servers on the list server can be called the server list.

Purpose

The purpose of the list server is to store, manage, and provide the list of currently hosted JJ2 game servers. When a user runs JJ2 and selects to join an internet game, the JJ2 program asks a list server for the current games in progress, and the list server then responds with the list of current JJ2 game servers. The JJ2 program then shows that list to the user so that they may select one of those game servers to join. Without the list server, nobody would know what games were running unless they were contact other people by different means.

How it works

Hosting a game server

When a users uses JJ2 to start an internet game, the JJ2 program (now the game server) first randomly selects one of the list server addresses listed in the user’s registry and tries to connect to it using port 10054. If it cannot connect to the first address it tries, it continues to randomly select list server address from the registry until it either manages to connect to one of the list servers, or it runs out of possible server list servers. Once the game manages to connect to a list server, the game server notifies the list server that it is running a game, and tells it such things as the host computer’s IP address, whether it’s a public or private server, the version of JJ2 (either 1.21 or 1.24), the mode of gameplay (e.g. battle, CTF, etc), the maximum number of players, and the name of the game server. The game server maintains this connection for as long as the game is running, and sends updates to the list server when the number of players currently in the game changes. Once the game is stopped, and the game server disconnects from the list server, the list server removes that game from the server list.

Retrieving the list of game servers

When a user goes to join an internet game in JJ2, JJ2 contacts the first list server it can from the addresses listed in the user’s registry on the remote port 10053. The list server then sends back the server list in binary mode and terminates the connection.

The list server network

The JJ2 list servers were designed to be run from various server machines from all over the world, all backing each other up so that if one list server went down, then the server list would still be maintained on the other list servers. Each computer that runs the list server program has a list of the other list servers. They maintain communications with each other (using port 10056) to make sure they all have the same game servers listed. When a game server connects with one of the list servers, that list server simply notifies the other list servers to add the new game to their lists, and updates them regularly. When the original list server unlists a game, likewise it tells the other list servers to do so as well.

The list server program

Epic's list server program

The original list server program was (assumed to be) made at Epic in conjunction with JJ2. According to its readme, Epic’s list server was “written in C, uses WinSock32 and occupies hardly any memory, processor time or bandwith.”

Nebula's list server program

After Epic’s list server program had been found to have various bugs, and was now no longer supported by Epic, Nebula developed a new list server program. Nebula’s list server program is written in Java, and made to be complient with Epic’s list server as well as all versions of JJ2.

DJazz's list server

Later, DJazz wrote a list server in NodeJS. Though it served the community for a few years, it was somewhat unstable and required regular restarts.

j2lsnek

j2lsnek is an open source list server, written by Stijn in Python. As of 2020, all active list servers run this list server software.

Server ports information

10052 – Game Server Port

Used by game servers to accept incomming connections from other game clients. The list servers do not use this port for anything.

10053 – Binary List

The JJ2 program connects to port 10053 on any list server to retrieve the list of game servers.

Syntax: 07 “LIST” 01 01 [servers]
[server]: subpacketLength ip4 port2 name repeated till lol

10054 – Server Addition

A game server connects to port 10054 on a list server to get the game listed. The game server uses this port to send information about the game being hosted, such as the game version, title, gameplay mode, and number of players to the list server. The game server stays connected to the list server so long as the game is hosted, updating the number of players when appropriate.

Syntax: port2 servername33 numberofplayers maxplayers gamemode version4
port0 = port – port1
port1 = port / 256

When someone joins/parts the game, the game server sends a two byte long packet to the List server in which the first byte is 0×00 and the second byte contains the number of connected players.

10055 – List Server Status

Port 10055 is used on the list servers to return the status and some stats of the list server. This information in returned in a human-readable text format immidiately upon connection, so anybody with a Telnet client can connect to a list server on port 10055 and see this information.

10056 – ServerNET

The list servers use port 10056 to communicate with each other to keep the list of game servers synchronized among all of the list servers in the list server network.

10057 – ASCII List

The list servers listen on 10057 and deliver a plain text version of the listed game servers immidiately upon connection. This port is commonly used by various Games in Progress scripts as the information returned is simple to parse, and contains more information than what is returned on port 10053. For this reason, JJ2+ no longer uses port 10053, and instead queries the list server on port 10057 to retrieve the server list.

Syntax

[IP address]:[port] [location] [access] [game type] [version] [special version] [uptime] [player]/[max players] [server name]

  • IP address: The IP address of the game server
  • Port: The port to use for the game server. This is always 10052.
  • Location: This is referring to which list server the game server is connected to, relative to the list server that is returning this information. This is either local or mirror. Local means the game server is connected to this list server, where as mirror means the game server is connected to another list server.
  • Access: This is either public or private, depending on whether or not the game requires a password to join. Private means a password is needed.
  • Game type: This is simply the type of gameplay that is being used on the game server. It can be either battle, ctf, treasure, or unknown. Nebula’s list server uses capture instead of ctf.
  • Version: The version of JJ2 that is being used to host the game. This can be either 1.21 or 1.24. Game versions such as 1.22 and 1.23 are listed as 1.21.
  • Special version: A single character used to identify special game verions. s refers to shareware game versions. x refers to holiday. Otherwise for normal versions a space is used.
  • Uptime: The length of time the game server has been listed, given in seconds.
  • Player: The current number of players in the game.
  • Max Players: The maximum number of players that can be in the game.
  • Server Name: The name of the server.

10058 – MOTD

The list servers use port 10058 for the “Message of the Day” feature used in GIP Scripts on websites. This is commonly used for passing on news and other important information to active online players. The Message of the Day is also displayed in-game when playing with JJ2+.

10059 – Remote Administration

The list servers use port 10059 for the remote administration service. To use this service users are required to provide a username and password which is on the approved list. Once authenticated they may control many of the list servers features. Features include changing the hostname, blocking users from hosting games, delisting games and changing the “Message of the Day”.

A list of list servers

Active

  • list.jj2.plus
  • list.pukenukem.com
  • list.digiex.net
    • Hosted by Nimrod
    • list.jazzjackrabbit.com, which is the default list server in vanilla JJ2, forwards to this list.

All of these run j2lsnek.

Dead

  • list.camelservers.com
    • Hosted by Kyro
  • jazz.madskills.org
    • Hosted by Monolith
    • Uses Epic’s list server
  • jazz.logicware.com
  • jazz.contrabandent.com
    • Hosted by Becky
    • Used Epic’s list server
    • Used to be jazz.logicware.com
  • spaz.nimrod-online.com
    • Hosted by Nimrod
    • Used Nebula’s list server
  • the-wolf.mofo.co.uk
    • Hosted by ????
    • Used Epic’s list server.
  • mail.godgames.com
    • This had been on the list of list servers, but was never active.

External links