Retour à la leçon
Mission

Mission : les paquets réseau corrompus entre serveur Linux et client Windows

Diagnostiquer un problème d'endianness dans un protocole binaire custom et corriger un système de bitflags de permissions.

Contexte

Un serveur de jeu encode la position des joueurs pour l'envoyer aux clients :

lua
local function encodePacket(playerId, x, y, health)
  return string.pack("I4 f f B", playerId, x, y, health)   -- pas d'indicateur d'endianness !
end

Le serveur tourne sur une machine Linux, et un client sur une architecture différente décode des positions complètement fausses (des joueurs qui apparaissent à des milliers de kilomètres de leur vraie position), alors que le même code fonctionne parfaitement en test sur une seule machine. Par ailleurs, le système de permissions doit gérer trois droits (LIRE=1, ECRIRE=2, EXECUTER=4) combinés dans un seul entier.