コード例 #1
0
def method_arguments_opaque_decode(buf: bytes) -> List[MethodArgument]:
    args = list()
    method_args_reader = StreamReader(buf)

    while not method_args_reader.done_reading():
        arg = StreamReader(method_args_reader.read_bytes())
        name = arg.read_bytes()  # not using the arg name
        arg_type = arg.read_uint16()

        if arg_type == 0:
            val = arg.read_uint32()
            args.append(Uint32Arg(val))
        elif arg_type == 1:
            val = arg.read_uint64()
            args.append(Uint64Arg(val))
        elif arg_type == 2:
            val = arg.read_string()
            args.append(StringArg(val))
        elif arg_type == 3:
            val = arg.read_bytes()
            args.append(BytesArg(val))
        else:
            raise ValueError(
                f'received MethodArgument {name} has an unknown type: {arg_type}'
            )

    return args
コード例 #2
0
 def test_read_string(self):
     stream = bytes([
         0x05, 0x00, 0x00, 0x00,
         ord('h'),
         ord('e'),
         ord('l'),
         ord('l'),
         ord('o'), 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
         ord('w'),
         ord('o'),
         ord('r'),
         ord('l'),
         ord('d'),
         ord('!')
     ])
     reader = StreamReader(stream)
     expected1 = 'hello'
     self.assertEqual(expected1, reader.read_string())
     expected2 = 'world!'
     self.assertEqual(expected2, reader.read_string())
     reader.close()