From 4acb1adeb415a940d29f538976b2e36bc47bbacc Mon Sep 17 00:00:00 2001 From: Sunpy Date: Sun, 25 Apr 2021 17:39:47 +0200 Subject: [PATCH] Travel bool: - if (len(bitstream.buffer) * 8) - bitstream.offset < 0x10: + if (bitstream.length * 8) - bitstream.offset < 0x10: return False - message_number = bitstream.read(0x10) - reliability = bitstream.read(0x04) - isSplitPacket = bitstream.read(0x01) + _, message_number = bitstream.read(0x10) + _, reliability = bitstream.read(0x04) + _, is_split_packet = bitstream.read(0x01) - if isSplitPacket: + if is_split_packet[0]: logger.warning("Skipping split packet") return # Something I dont understand yet # TODO: ReadCompressed bitstream.offset += 1 - unknown = bitstream.read(0x01) - bit_length = bitstream.read(0x08) + _, unknown = bitstream.read(0x01) + _, bit_length = bitstream.read(0x08) ## logger.debug("bit_length: %d" % bit_length) logger.debug("bitstream: %s" % bitstream) # TODO: ReadAlignedBytes - data = bitstream.read(bit_length) + _, data = bitstream.read(bit_length) logger.debug("data: %s" % data) \ No newline at end of file diff --git a/sampy/raknet/bitstream.py b/sampy/raknet/bitstream.py index 4c6c948..f7e28f4 100644 --- a/sampy/raknet/bitstream.py +++ b/sampy/raknet/bitstream.py @@ -2,7 +2,7 @@ import ctypes as c from array import array -from typing import * +from typing import Tuple import logging logger = logging.getLogger(__name__) @@ -13,6 +13,14 @@ class Bitstream: self._offset = 0 self._buffer = bytearray(data) # array("B", data) + @property + def offset(self) -> int: + return self._offset + + @property + def length(self) -> int: + return len(self._buffer) + def _can_access_bits(self, bits_to_access: int) -> bool: return self._offset + bits_to_access <= len(self._buffer) << 3 diff --git a/sampy/server/compression.py b/sampy/server/compression.py index 06a81e1..bcca189 100644 --- a/sampy/server/compression.py +++ b/sampy/server/compression.py @@ -1,6 +1,8 @@ from ..shared import glob from ..struct.server import ServerConfig +from typing import Tuple + import logging logger = logging.getLogger(__name__) @@ -55,5 +57,5 @@ class StringCompressor: def __init__(self): pass - def decode_string(self, data: bytes) -> (str, int): + def decode_string(self, data: bytes) -> Tuple[str, int]: pass \ No newline at end of file