19 lines
616 B
Python
19 lines
616 B
Python
import logging
|
|
import struct
|
|
|
|
from network.enums import types as TYPE
|
|
from objects import glob
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def handle(client: "Client", data: bytes) -> bytes:
|
|
challenge = (client.ip_uint ^ glob.challenge_short) & TYPE.MAX_USHORT
|
|
challenge_solution = challenge ^ 0x6969
|
|
|
|
challenge_answer = struct.unpack_from(b">H", data, 1)[0]
|
|
|
|
if challenge_answer != challenge_solution:
|
|
return struct.pack(b">BH", 0x1A, challenge)
|
|
client.state = 1 # CHALLENGE_PASSED
|
|
return b"\x19\x00" # 0x19: Valid_challenge; leading 0x00 byte due to some routers shitting itself if only 1 byte is sent/received
|