36 lines
736 B
Python
36 lines
736 B
Python
import enum
|
|
import binascii
|
|
|
|
import protoparser
|
|
|
|
|
|
class HazelPacketType(enum.IntEnum):
|
|
UNRELIABLE = (0,)
|
|
RELIABLE = (1,)
|
|
|
|
HELLO = (8,)
|
|
PING = (12,)
|
|
ACK = (10,)
|
|
FIN = (9,)
|
|
|
|
FRAGMENT = (11,) # not observed yet, maybe unused in among us?
|
|
|
|
|
|
def int_big_endian(data: bytes) -> int:
|
|
return int.from_bytes(data, "big")
|
|
|
|
|
|
Parser = protoparser.Parser()
|
|
|
|
Parser.register("Ping", HazelPacketType.PING, ("nonce", 2, int_big_endian))
|
|
Parser.register("Ack", HazelPacketType.ACK, ("nonce", 2, int_big_endian), 0xFF)
|
|
Parser.register("Fin", HazelPacketType.FIN)
|
|
|
|
Parser.register(
|
|
"Hello",
|
|
HazelPacketType.HELLO,
|
|
(None, 7, None),
|
|
("name_len", 1, int_big_endian),
|
|
("name", "name_len", bytes.decode),
|
|
)
|