Difference between revisions of "Directory Game Server Protocol"

From ASSS Wiki
Jump to: navigation, search
(content from cypher's page)
 
(major overhaul (someone want to add the bit about subgame using the ping packets every 4min or something? i forgot the specifics))
Line 1: Line 1:
ABSTRACT: This document will explain the details needed to send zone data to the directory server.
+
== Introduction ==
 +
[[Zone|Game Server's]] such as [[subgame2]] and [[ASSS]] register their prescence on [[Directory server|Directory Servers]]. This page describes the portion of the '''directory server protocol''' that game servers use.
  
Some background information, this system relies on the UDP protocol, port 4991. Max length of the packet is only limited to the directory server software itself (so it varies from each application). However, the specific lengths of fields are pretty much final, the zone description should be the only length that varies. The following is based off examination of the open-source Directory Server by Catid; and discussions with him about this topic.
+
This system relies on the UDP protocol, port 4991. Max length of the packet is only limited to the directory server software itself (so it varies from each application). However, the specific lengths of fields are pretty much final, the zone description should be the only length that varies.
  
    Offset Length Description
+
== Protocol ==
    ===================================
+
<pre>
    0×00 [ 0] 4 IP address. (Must be NULL: 00 00 00 00)
+
g2d
    0×04 [ 4] 2 Server Port
 
    0×06 [ 6] 2 Population
 
    0×08 [ 8] 2 Scoring? (0×00 - no; 0×01 - yes)
 
    0×0A [ 10] 4 Version (134)
 
    0×0E [ 14] 32 Zone Name (31 characters, null-terminated.) Must also be a valid name.
 
    0×2E [ 46] 16 Zone Password (15 characters, null-terminated.)
 
    0×3E [ 62] 32 Unknown NULL field. (*** see discussion)
 
    0×5E [ 94] VARIES Zone Description (varied length, null-terminated.)
 
  
* Offsets are given in HEX [ DEC].
+
register game server
 +
offset size comment
 +
0      4    ip (leave this set to 0?)
 +
4      2    port
 +
6      2    player count
 +
8      2    saving scores? (boolean)
 +
12    4    version (set this to 134)
 +
14    32  zone name (null terminated)
 +
46    16  password (null terminated)
 +
62    32  reserved (suggested to set this to 0)
 +
92    ?    description (must be null terminated)
 +
</pre>
  
- 32 byte NULL field Discussion -
+
== 32 byte reserved field (speculation) ==
I was surprised to see this in the validation function of Catid’s directory server. After some discussion with him, he assures me there is a 32 length NULL field. As of Catids Distributed Directory Server build 4, these 32 bytes MUST BE NULL. It is enforced. However, after some testing done by 2dragons - having non-null bytes in this section does not affect the directory server writen by PriitK. Later thoughts were that VIE may have planned on adding more fields into the directory server protocol; but never got around to it.
+
[[User:CypherJF|CypherJF]] has confirmed garbage in this field does not affect the directory server writen by [[PriitK]].
  
- Further Discussion -
+
However as of [[Catid|Catids]] Distributed Directory Server build 4, these 32 bytes must be zeroed. Catid has also stated that this field should be zeroed in a converstation with [[User:CypherJF|CypherJF]].
PriitK’s directory server records descriptions to the stats file with a max length of 490 bytes.
 
  
- Validation -
+
It is possible this field was intended for future protocol expansion by VIE.
The following are conditions that I took apart from Catid’s validating function as well.
 
  
The length of the packet must be greater than 0×5F
+
== Notes on PriitK's dirserv ==
The first 4 bytes must be null, or zero.
+
Descriptions are recorded to the stats file with a max length of 490 bytes.
The last byte of the packet must be NULL (0×00)
 
The byte[0×2D] must be 0×00
 
The byte[0×3D] must be 0×00
 
The byte[0×08] must be either 0×00, or 0×01
 
The byte[0×3E] to byte[0×5D]
 
  
*** Validating Name ***
+
== Notes on Catid's dirserv ==
There are also conditions on what determines a validName, etc. This part may or may not be correct. I just threw it in here quickly.
+
The following are restrictions were found in Catid's directory server by CypherJF.
  
Catids Directory Server says:
+
=== Validating the packet ===
validName would be:
+
* The length of the packet must be greater than 95/0×5F bytes. Basically this means the description can be blank but must be null terminated.
len(name) > 0
+
* The first 4 bytes (the IP field) must be zeroed.
no leading spaces
+
* The name, password and description must be null terminated.
no more than 1 space in a row
+
* The "save scores" field must be either 0 or 1.
Any character between ‘ ‘ and ‘~’
+
 
No trailing spaces
+
=== Validating the zone name ===
 +
* len(name) > 0.
 +
* No leading spaces.
 +
* No more than 1 space in a row.
 +
* Any character between ‘ ‘ and ‘~’.
 +
* No trailing spaces.
 +
 
 +
== See also ==
 +
* [http://cypherjf.sscentral.com/articles/game-server-to-directory-server/ CypherJF's original document]
 +
* [http://web.archive.org/web/*/http://www4.ncsu.edu/~rniyenga/subspace/old/dprotocol.html Hammuravi's page]
 +
* ASSS Project: src/directory.c
 +
* [[Directory Client Protocol]]
 +
 
 +
[[Category: Protocol]]

Revision as of 13:09, 28 September 2006

Introduction

Game Server's such as subgame2 and ASSS register their prescence on Directory Servers. This page describes the portion of the directory server protocol that game servers use.

This system relies on the UDP protocol, port 4991. Max length of the packet is only limited to the directory server software itself (so it varies from each application). However, the specific lengths of fields are pretty much final, the zone description should be the only length that varies.

Protocol

g2d

register game server
offset size comment
0      4    ip (leave this set to 0?)
4      2    port
6      2    player count
8      2    saving scores? (boolean)
12     4    version (set this to 134)
14     32   zone name (null terminated)
46     16   password (null terminated)
62     32   reserved (suggested to set this to 0)
92     ?    description (must be null terminated)

32 byte reserved field (speculation)

CypherJF has confirmed garbage in this field does not affect the directory server writen by PriitK.

However as of Catids Distributed Directory Server build 4, these 32 bytes must be zeroed. Catid has also stated that this field should be zeroed in a converstation with CypherJF.

It is possible this field was intended for future protocol expansion by VIE.

Notes on PriitK's dirserv

Descriptions are recorded to the stats file with a max length of 490 bytes.

Notes on Catid's dirserv

The following are restrictions were found in Catid's directory server by CypherJF.

Validating the packet

  • The length of the packet must be greater than 95/0×5F bytes. Basically this means the description can be blank but must be null terminated.
  • The first 4 bytes (the IP field) must be zeroed.
  • The name, password and description must be null terminated.
  • The "save scores" field must be either 0 or 1.

Validating the zone name

  • len(name) > 0.
  • No leading spaces.
  • No more than 1 space in a row.
  • Any character between ‘ ‘ and ‘~’.
  • No trailing spaces.

See also