Exemplo n.º 1
0
    async def write(self,
                    msg: protobuf.MessageType,
                    field_cache: protobuf.FieldCache = None) -> None:
        if __debug__:
            log.debug(__name__, "%s:%x write: %s", self.iface.iface_num(),
                      self.sid, msg)

        if field_cache is None:
            field_cache = self._field_cache

        # write the message
        msg_size = protobuf.count_message(msg, field_cache)

        # prepare buffer
        if msg_size <= len(self.buffer_writer.buffer):
            # reuse preallocated
            buffer_writer = self.buffer_writer
        else:
            # message is too big, we need to allocate a new buffer
            buffer_writer = utils.BufferWriter(bytearray(msg_size))

        buffer_writer.seek(0)
        protobuf.dump_message(buffer_writer, msg, field_cache)
        await codec_v1.write_message(
            self.iface,
            msg.MESSAGE_WIRE_TYPE,
            memoryview(buffer_writer.buffer)[:msg_size],
        )

        # make sure we don't keep around fields of all protobuf types ever
        self._field_cache.clear()
Exemplo n.º 2
0
def set(auth_message: protobuf.MessageType) -> None:
    buffer = bytearray(protobuf.count_message(auth_message))
    writer = utils.BufferWriter(buffer)
    protobuf.dump_message(writer, auth_message)
    storage.cache.set(
        storage.cache.APP_COMMON_AUTHORIZATION_TYPE,
        auth_message.MESSAGE_WIRE_TYPE.to_bytes(2, "big"),
    )
    storage.cache.set(storage.cache.APP_COMMON_AUTHORIZATION_DATA, buffer)
Exemplo n.º 3
0
    async def write(self, msg: protobuf.MessageType) -> None:
        writer = self.make_writer()

        if __debug__:
            log.debug(__name__, "%s:%x write: %s", self.iface.iface_num(),
                      self.sid, msg)

        # get the message size
        fields = msg.get_fields()
        size = protobuf.count_message(msg, fields)

        # write the message
        writer.setheader(msg.MESSAGE_WIRE_TYPE, size)
        await protobuf.dump_message(writer, msg, fields)
        await writer.aclose()
Exemplo n.º 4
0
    async def write(self, msg):
        """
        Write a protobuf message to this wire context.
        """
        writer = self.getwriter()

        if __debug__:
            log.debug(__name__, "%s:%x write: %s", self.iface.iface_num(),
                      self.sid, msg)

        # get the message size
        fields = msg.get_fields()
        size = protobuf.count_message(msg, fields)

        # write the message
        writer.setheader(msg.MESSAGE_WIRE_TYPE, size)
        await protobuf.dump_message(writer, msg, fields)
        await writer.aclose()
    def test_validate_enum(self):
        # ok message:
        msg = Message(-42, 5)
        length = protobuf.count_message(msg)
        buffer_writer = BufferWriter(bytearray(length))
        protobuf.dump_message(buffer_writer, msg)

        buffer_reader = BufferReader(buffer_writer.buffer)
        nmsg = protobuf.load_message(buffer_reader, Message)

        self.assertEqual(msg.sint_field, nmsg.sint_field)
        self.assertEqual(msg.enum_field, nmsg.enum_field)

        # bad enum value:
        buffer_writer.seek(0)
        msg = Message(-42, 42)
        # XXX this assumes the message will have equal size
        protobuf.dump_message(buffer_writer, msg)
        buffer_reader.seek(0)
        with self.assertRaises(TypeError):
            protobuf.load_message(buffer_reader, Message)
Exemplo n.º 6
0
def dump_message(msg: protobuf.MessageType) -> bytearray:
    length = protobuf.count_message(msg)
    buffer = bytearray(length)
    protobuf.dump_message(BufferWriter(buffer), msg)
    return buffer