Q3Master

Q3Master is a standalone master server for Quake3Arena servers (and derived games). It is intended for local networks without internet connection (or firewalls which block Q3A :(. It can also be used for larger private networks, where more than one Q3A server exists.
Currently it is not usable for a real high number of servers or clients, so do not use it as a worldwide master server. It should be possible to handle 1000 servers and 10000 clients at the same time - that should be enough for LAN-parties... (see 'doc/performance' in the distribution)
Q3Master can also be used to query servers in a local subnet, using broadcasts. The found servers can then be send to other (or a central) master server to collect data from multiple subnets. That way the servers nned not to be configured to register at the master server, and the clients can use it anyway.

Protocol documentation

For a documentation of the protocol used for communication betwenn games servers / game clients and the master server, see q3a_master_server_protocol.txt I have used information available on the internet, and a self-written UDP-proxy for reverse engineering of the protocol.

current files

complete
sources only
binary files only

Change History

version 1.0 ( bin / src )

  • enhanced documenation
    • all supported games and versions
    • installation and usage
    • performance
    • protocols
  • wrote a load test suite
  • performance enhancements
  • added UDP proxy used for testing

version 0.9 ( bin / src )

  • protocol handlers are now configurable in the config file. This way support for new game versions, which are compatbile with old versions, is now possible without a new q3master release
  • testing with (hopefully) all releases of q3a, q3a:ta, rtcw, rtcw:et
  • add ability to handle different heartbeat types (for RTCW / RTCW:ET)

version 0.8.1 ( bin / src )

  • added support for ad-hoc server queries. Just run 'run_query', it looks for servers in all configured networks and reports all it can found

version 0.8 ( bin / src )

  • added support for protocol version 67 (point release 1.31), same as version 66
  • restructured code - the protocol handler now have common base classes
  • tested basic support for RTCW: the retail version seems to work

version 0.7 ( bin / src )

  • now sending multiple answers (servers) in single packets. There is an additional wait time between the packets. This fixes the problem with clients not displaying all servers.
    For this, the structure of creating the response packets has been changed (ProtocolversionHandler now returns header, footer and response data)
  • - fixed deployment bug: bin/q3master.jar has contained itself. This seems to be a bug with the JBuilder archive builder :( The JAR is now always recreated.

version 0.6.1 ( bin / src )

  • bugfix: sending broadcasts to other than port than 27960 does not work

version 0.6 ( bin / src )

  • added support for querying servers w/ broadcasts, also in multiple subnets
    • added broadcast queries to local subnets (see readme and config file)
      • use this if you don't want to mess with the network configuration
    • added registration of found servers at another master server
      • if a server is found via broadcast (and only then) its address can be reported to other master servers
      • use this if you want to use broadcasts but have multiple subnets
  • added own Util class

version 0.5 ( bin / src )

  • added support for protocol version 66 (point release 1.29f beta)
  • error msg instead of null pointer exception if request unknown protocol is received
  • logging used protocol during server add

version 0.4 ( bin / src )

  • added support for protocol version 45
  • Protocol43Handler has returned wrong protocol version
  • tested with instagib - so mods not using other master servers should work

version 0.3 ( bin / src )

  • the config file introduced in the last version is now actually read and used :(
  • corrected support for protocol 43 - GameSpy should work now
  • added configuration for the filtering

version 0.2 ( bin / src )

  • now queries the server for status
  • now filters for protocol, empty and full servers
  • servers are removed if there is a timeout during the status query
  • if a timeout occurs during a server query, 2 additional packets are send
  • timeout if no heartbeat is received for 11 minutes
  • added support for older protocol versions via ProtocolVersionHandlerFactory
    • Q3Master now supports protocol version 43 and 45
  • created ant build file
  • created jar file and distribution sets (bin, src, all)
  • added logging via log4j - see cfg/q3master.lcf
  • added configuration file - see cfg/q3master.cfg
  • removed debugging code

version 0.1 ( bin / src )

  • initial release