Il est possible d'interroger un serveur de jeu en ligne, en utilisant des paquets UDP/IP. Ce document décrit les différents formats de paquets ainsi que les types de requêtes possibles.
Types de données
Chaque requête ou réponse utilise cinq types de base agencés ensemble pour former un flux de données. Tous ces types sont little-endian, il n'y a donc aucune conversion à effectuer sur un processeur x86.
Type |
Description
|
byte |
Caractère non signé (8 bits).
|
short |
Entier court signé (16 bits).
|
long |
Entier long signé (32 bits).
|
float |
Nombre à virgule flottante (32 bits).
|
string |
Suite d'octets de longueur variable terminée par le caractère NUL.
|
Protocole
La taille des paquets utilisés par Steam est de 1400 octets en plus d'un en-tête UDP/IP. Chaque réponse contient un en-tête propre au protocole, mais si une réponse nécessite plus d'un paquet elle sera découpée et chaque paquet comprendra un en-tête additionnel.
Réponse simple
Donnée |
Type |
Commentaire
|
En-tête |
long |
Toujours égal à -1 (0xFFFFFFFF).
|
Données
|
Réponse multi-paquets
Donnée |
Type |
Commentaire
|
En-tête |
long |
Toujours égal à -2 (0xFFFFFFFE).
|
ID |
long |
Numéro unique attribué par le serveur à chaque paquet appartenant à la même réponse.
|
Nombre et numéro de paquet |
byte |
Les 4 bits de poids fort représentent le numéro du paquet courant (en commençant à 0) et les 4 bits de poids faible représentent le nombre total de paquets (de 2 à 15).
|
Données
|
Donnée |
Type |
Commentaire
|
En-tête |
long |
Toujours égal à -2 (0xFFFFFFFE).
|
ID |
long |
Même signification que pour un serveur Goldsource, cependant si le bit de poids fort est à 1 alors la réponse a été compressé avec l'algorithme Bzip2 avant d'être découpée. Après avoir récupéré et assemblé tous les paquets il faut décompresser la réponse (avec BZ2_bzBuffToBuffDecompress() en C ou bzdecompress() en PHP par exemple) avant de pouvoir la traiter.
|
Nombre de paquets |
byte |
Nombre total de paquets de la réponse.
|
Numéro de paquet |
byte |
La numérotation commence à 0.
|
Taille des paquets |
short |
Uniquement présent dans la nouvelle version du moteur Source, il s'agit de la taille maximale que peut prendre un paquet avant qu'un découpage ne se produise (auparavant il était impossible de changer cette taille). Cela concerne uniquement le protocole de jeu, dans celui d'interrogation des serveurs il n'est toujours pas possible de demander des paquets de plus petite taille que celle par défaut. La valeur par défaut est de 1248 octets (0x04E0), mais un administrateur de serveur Team Fortress 2 peut la diminuer.
|
Uniquement présent dans le premier paquet (numéro 0) si la réponse a été compressé :
Donnée |
Type |
Commentaire
|
Taille de la réponse |
long |
Nombre d'octet qu'occupe la réponse une fois décompressée.
|
Somme CRC32 |
long |
Somme de contrôle CRC32 de la réponse décompressée.
|
|
Données
|
Comme les paquets UDP peuvent arriver dans le désordre et en différé, chaque paquet devrait être contrôlé avec son ID et son numéro pour s'assurer qu'il s'agit toujours de la même réponse !
Requêtes
Le format des requêtes est le même que celui des réponses (il est rare d'en faire une multi-paquets toutefois). Les requêtes doivent être envoyées en UDP sur le port d'écoute du serveur (généralement 27015).
A2A_PING
Format de la requête
Donnée |
Type |
Valeur
|
En-tête |
byte |
105
|
Format des données
Donnée |
Type |
Commentaire |
Valeur de l'exemple
|
En-tête |
byte |
Toujours égal à 'j'. |
106
|
Contenu |
string |
Toujours une chaîne vide. |
|
FF FF FF FF 6A 30 30 30 30 30 30 30 30 30 30 30 ÿÿÿÿj00000000000
30 30 30 00 000.
|
Donnée |
Type |
Commentaire |
Valeur de l'exemple
|
En-tête |
byte |
Toujours égal à 'j'. |
106
|
Contenu |
string |
Toujours une chaîne composée de quatorze 0. |
00000000000000
|
A2S_INFO
A2S_SERVERQUERY_GETCHALLENGE
A2S_PLAYER
A2S_RULES
Voir aussi
Articles connexes
Liens externes
Template:Otherlang:fr
Template:Otherlang:fr:en