Beispiel #1
0
    def from_stream(cls, reader: ReaderAdapter, fixed_header: MQTTFixedHeader,
                    variable_header: ConnectVariableHeader):
        payload = cls()
        #  Client identifier
        try:
            payload.client_id = yield from decode_string(reader)
        except NoDataException:
            payload.client_id = None

        # Read will topic, username and password
        if variable_header.will_flag:
            try:
                payload.will_topic = yield from decode_string(reader)
                payload.will_message = yield from decode_data_with_length(
                    reader)
            except NoDataException:
                payload.will_topic = None
                payload.will_message = None

        if variable_header.username_flag:
            try:
                payload.username = yield from decode_string(reader)
            except NoDataException:
                payload.username = None

        if variable_header.password_flag:
            try:
                payload.password = yield from decode_string(reader)
            except NoDataException:
                payload.password = None

        return payload
Beispiel #2
0
 def from_stream(cls, reader: asyncio.StreamReader, fixed_header: MQTTFixedHeader):
     topic_name = yield from decode_string(reader)
     has_qos = (fixed_header.flags >> 1) & 0x03
     if has_qos:
         packet_id = yield from decode_packet_id(reader)
     else:
         packet_id = None
     return cls(topic_name, packet_id)
Beispiel #3
0
 def from_stream(cls, reader: asyncio.StreamReader, fixed_header: MQTTFixedHeader):
     topic_name = yield from decode_string(reader)
     has_qos = (fixed_header.flags >> 1) & 0x03
     if has_qos:
         packet_id = yield from decode_packet_id(reader)
     else:
         packet_id = None
     return cls(topic_name, packet_id)
Beispiel #4
0
 def from_stream(cls, reader: asyncio.StreamReader, fixed_header: MQTTFixedHeader,
                 variable_header: MQTTVariableHeader):
     topics = []
     payload_length = fixed_header.remaining_length - variable_header.bytes_length
     read_bytes = 0
     while read_bytes < payload_length:
         try:
             topic = yield from decode_string(reader)
             topics.append(topic)
             read_bytes += 2 + len(topic.encode('utf-8'))
         except NoDataException:
             break
     return cls(topics)
Beispiel #5
0
    def from_stream(cls, reader: ReaderAdapter, fixed_header: MQTTFixedHeader,
                    variable_header: ConnectVariableHeader):
        payload = cls()
        #  Client identifier
        try:
            payload.client_id = yield from decode_string(reader)
        except NoDataException:
            payload.client_id = None

        if (payload.client_id is None or payload.client_id == ""):
            # A Server MAY allow a Client to supply a ClientId that has a length of zero bytes
            # [MQTT-3.1.3-6]
            payload.client_id = gen_client_id()
            # indicator to trow exception in case CLEAN_SESSION_FLAG is set to False
            payload.client_id_is_random = True

        # Read will topic, username and password
        if variable_header.will_flag:
            try:
                payload.will_topic = yield from decode_string(reader)
                payload.will_message = yield from decode_data_with_length(
                    reader)
            except NoDataException:
                payload.will_topic = None
                payload.will_message = None

        if variable_header.username_flag:
            try:
                payload.username = yield from decode_string(reader)
            except NoDataException:
                payload.username = None

        if variable_header.password_flag:
            try:
                payload.password = yield from decode_string(reader)
            except NoDataException:
                payload.password = None

        return payload
Beispiel #6
0
    def from_stream(cls, reader: ReaderAdapter, fixed_header: MQTTFixedHeader,
                    variable_header: ConnectVariableHeader):
        payload = cls()
        #  Client identifier
        try:
            payload.client_id = yield from decode_string(reader)
        except NoDataException:
            payload.client_id = None

        if (payload.client_id is None or payload.client_id == ""):
            # A Server MAY allow a Client to supply a ClientId that has a length of zero bytes
            # [MQTT-3.1.3-6]
            payload.client_id = gen_client_id()
            # indicator to trow exception in case CLEAN_SESSION_FLAG is set to False
            payload.client_id_is_random = True

        # Read will topic, username and password
        if variable_header.will_flag:
            try:
                payload.will_topic = yield from decode_string(reader)
                payload.will_message = yield from decode_data_with_length(reader)
            except NoDataException:
                payload.will_topic = None
                payload.will_message = None

        if variable_header.username_flag:
            try:
                payload.username = yield from decode_string(reader)
            except NoDataException:
                payload.username = None

        if variable_header.password_flag:
            try:
                payload.password = yield from decode_string(reader)
            except NoDataException:
                payload.password = None

        return payload
Beispiel #7
0
 def from_stream(cls, reader: asyncio.StreamReader,
                 fixed_header: MQTTFixedHeader,
                 variable_header: MQTTVariableHeader):
     topics = []
     payload_length = fixed_header.remaining_length - variable_header.bytes_length
     read_bytes = 0
     while read_bytes < payload_length:
         try:
             topic = yield from decode_string(reader)
             topics.append(topic)
             read_bytes += 2 + len(topic.encode('utf-8'))
         except NoDataException:
             break
     return cls(topics)
Beispiel #8
0
 def from_stream(cls, reader: asyncio.StreamReader, fixed_header: MQTTFixedHeader,
                 variable_header: MQTTVariableHeader):
     topics = []
     payload_length = fixed_header.remaining_length - variable_header.bytes_length
     read_bytes = 0
     while read_bytes < payload_length:
         try:
             topic = yield from decode_string(reader)
             qos_byte = yield from read_or_raise(reader, 1)
             qos = bytes_to_int(qos_byte)
             topics.append((topic, qos))
             read_bytes += 2 + len(topic.encode('utf-8')) + 1
         except NoDataException as exc:
             break
     return cls(topics)
Beispiel #9
0
 def from_stream(cls, reader: asyncio.StreamReader,
                 fixed_header: MQTTFixedHeader,
                 variable_header: MQTTVariableHeader):
     topics = []
     payload_length = fixed_header.remaining_length - variable_header.bytes_length
     read_bytes = 0
     while read_bytes < payload_length:
         try:
             topic = yield from decode_string(reader)
             qos_byte = yield from read_or_raise(reader, 1)
             qos = bytes_to_int(qos_byte)
             topics.append((topic, qos))
             read_bytes += 2 + len(topic.encode('utf-8')) + 1
         except NoDataException as exc:
             break
     return cls(topics)
Beispiel #10
0
    def from_stream(cls, reader: ReaderAdapter, fixed_header: MQTTFixedHeader):
        #  protocol name
        protocol_name = yield from decode_string(reader)

        # protocol level
        protocol_level_byte = yield from read_or_raise(reader, 1)
        protocol_level = bytes_to_int(protocol_level_byte)

        # flags
        flags_byte = yield from read_or_raise(reader, 1)
        flags = bytes_to_int(flags_byte)

        # keep-alive
        keep_alive_byte = yield from read_or_raise(reader, 2)
        keep_alive = bytes_to_int(keep_alive_byte)

        return cls(flags, keep_alive, protocol_name, protocol_level)
Beispiel #11
0
    def from_stream(cls, reader: ReaderAdapter, fixed_header: MQTTFixedHeader):
        #  protocol name
        protocol_name = yield from decode_string(reader)

        # protocol level
        protocol_level_byte = yield from read_or_raise(reader, 1)
        protocol_level = bytes_to_int(protocol_level_byte)

        # flags
        flags_byte = yield from read_or_raise(reader, 1)
        flags = bytes_to_int(flags_byte)

        # keep-alive
        keep_alive_byte = yield from read_or_raise(reader, 2)
        keep_alive = bytes_to_int(keep_alive_byte)

        return cls(flags, keep_alive, protocol_name, protocol_level)
Beispiel #12
0
 def test_decode_string(self):
     stream = asyncio.StreamReader(loop=self.loop)
     stream.feed_data(b'\x00\x02AA')
     ret = self.loop.run_until_complete(decode_string(stream))
     self.assertEqual(ret, 'AA')