def test_endian(self): stream = streams.StreamOut("<") stream.u32(0x12345678) assert stream.get() == b"\x78\x56\x34\x12" stream = streams.StreamOut(">") stream.u32(0x12345678) assert stream.get() == b"\x12\x34\x56\x78"
def test_available(self): stream = streams.StreamOut() assert stream.available() == 0 stream.write(b"HelloWorld") assert stream.available() == 0 stream.seek(5) assert stream.available() == 5
def test_eof(self): stream = streams.StreamOut() assert stream.eof() stream.write(b"HelloWorld") assert stream.eof() stream.seek(5) assert not stream.eof()
def test_sint(self): stream = streams.StreamOut() stream.s8(0x7F) stream.s16(-0x8000) stream.s32(-1) stream.s64(0x123456789ABCDEF) assert stream.get() == b"\x7F\x00\x80\xFF\xFF\xFF\xFF\xEF\xCD\xAB\x89\x67\x45\x23\x01"
def test_pushpop(self): stream = streams.StreamOut() stream.write(b"Hello") stream.push() stream.write(b"World") stream.pop() stream.write(b"WORLD") assert stream.get() == b"HelloWORLD"
def test_uint(self): stream = streams.StreamOut() stream.u8(0x7F) stream.u16(0x8000) stream.u24(0xFFFFFF) stream.u32(0) stream.u64(0x123456789ABCDEF) assert stream.get() == b"\x7F\x00\x80\xFF\xFF\xFF\0\0\0\0\xEF\xCD\xAB\x89\x67\x45\x23\x01"
def test_align(self): stream = streams.StreamOut() stream.write(b"HelloWorld") stream.align(5) assert stream.tell() == 10 stream.align(6) assert stream.tell() == 12 assert stream.get() == b"HelloWorld\0\0"
def test_seek(self): stream = streams.StreamOut() stream.write(b"HelloWorld") stream.seek(5) stream.write(b"WORLD") assert stream.get() == b"HelloWORLD" stream.seek(12) assert stream.get() == b"HelloWORLD\0\0"
def encode_header(self, packet, option_size): stream = streams.StreamOut() stream.u8(1) # PRUDP version stream.u8(option_size) stream.u16(len(packet.payload)) stream.u8(packet.source_port | (self.local_stream_type << 4)) stream.u8(packet.dest_port | (self.remote_stream_type << 4)) stream.u16(packet.type | (packet.flags << 4)) stream.u8(packet.session_id) stream.u8(packet.substream_id) stream.u16(packet.packet_id) return stream.get()
def encode_header(self, packet, option_size): stream = streams.StreamOut() stream.u8(0x80) stream.u8(option_size) stream.u16(len(packet.payload)) stream.u8((self.local_stream_type << 4) | self.remote_stream_type) stream.u8(packet.source_port) stream.u8(packet.dest_port) stream.u8(packet.fragment_id) stream.u16(packet.type | (packet.flags << 4)) stream.u16(packet.packet_id) return stream.get()
def encode(self, packet): stream = streams.StreamOut() stream.u8(packet.source_port | (self.local_stream_type << 4)) stream.u8(packet.dest_port | (self.remote_stream_type << 4)) if self.flags_version == 0: stream.u8(packet.type | (packet.flags << 3)) else: stream.u16(packet.type | (packet.flags << 4)) stream.u8(packet.session_id) stream.write(packet.signature) stream.u16(packet.packet_id) self.encode_options(packet, stream) stream.write(packet.payload) data = stream.get() if self.checksum_version == 0: data += struct.pack("<I", self.calc_checksum(data)) else: data += struct.pack("<B", self.calc_checksum(data)) return data
def test_skip(self): stream = streams.StreamOut() stream.write(b"HelloWorld") stream.seek(8) stream.skip(4) assert stream.get() == b"HelloWorld\0\0"
def test_bool(self): stream = streams.StreamOut() stream.bool(True) stream.bool(False) assert stream.get() == b"\x01\x00"
def test_char(self): stream = streams.StreamOut() stream.char("H") stream.wchar("W") assert stream.get() == b"HW\0"
def test_ascii(self): stream = streams.StreamOut() stream.ascii("HelloWorld") assert stream.get() == b"HelloWorld"
def test_pad(self): stream = streams.StreamOut() stream.pad(4) stream.pad(4, b"\xFF") assert stream.get() == b"\0\0\0\0\xFF\xFF\xFF\xFF"
def test_chars(self): stream = streams.StreamOut() stream.chars("Hello") stream.wchars("World") assert stream.get() == b"HelloW\0o\0r\0l\0d\0"
def test_repeat(self): stream = streams.StreamOut() stream.repeat([1, 2, 3], stream.u16) assert stream.get() == b"\x01\x00\x02\x00\x03\x00"
def test_get(self): stream = streams.StreamOut() assert stream.get() == b""
def test_float(self): stream = streams.StreamOut() stream.float(0) stream.float(2) stream.double(-2) assert stream.get() == b"\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\xC0"
def test_size(self): stream = streams.StreamOut() assert stream.size() == 0 stream.write(b"HelloWorld") assert stream.size() == 10
def test_tell(self): stream = streams.StreamOut() assert stream.tell() == 0 stream.write(b"HelloWorld") assert stream.tell() == 10
def build(self): stream = streams.StreamOut(">") self.encode(stream) return stream.get()
def test_write(self): stream = streams.StreamOut() stream.write(b"Hello") stream.write(b"World") assert stream.get() == b"HelloWorld"