import logging import struct from .abcs import BadStatusError, MissingBytesError, OutFn, Transport class Intermediate(Transport): __slots__ = ("_init",) """ Implementation of the [intermediate transport]: ```text +----+----...----+ | len| payload | +----+----...----+ ^^^^ 4 bytes ``` [intermediate transport]: https://core.telegram.org/mtproto/mtproto-transports#intermediate """ def __init__(self) -> None: self._init = False def pack(self, input: bytes, write: OutFn) -> None: assert len(input) % 4 == 0 if not self._init: write(b"\xee\xee\xee\xee") self._init = True write(struct.pack(" int: if len(input) < 4: raise MissingBytesError(expected=4, got=len(input)) length = struct.unpack_from("= 4 and (status := struct.unpack(" 0, got: {length}") output += memoryview(input)[4 : 4 + length] return length + 4 def reset(self): logging.info("resetting sending of header in intermediate transport") self._init = False