From b3ba2ccedbddfa697ecd16b5c06441304a89d806 Mon Sep 17 00:00:00 2001 From: Nicolas Jouanin Date: Wed, 24 Jun 2015 23:19:11 +0200 Subject: [PATCH] Return none instead of throwing exception when no data is read --- hbmqtt/mqtt/packet.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/hbmqtt/mqtt/packet.py b/hbmqtt/mqtt/packet.py index 6966284..d6c064d 100644 --- a/hbmqtt/mqtt/packet.py +++ b/hbmqtt/mqtt/packet.py @@ -110,14 +110,17 @@ class MQTTFixedHeader: raise MQTTException("Invalid remaining length bytes:%s" % bytes_to_hex_str(length_bytes)) return value - b1 = yield from read_or_raise(reader, 1) - msg_type = decode_message_type(b1) - if msg_type is PacketType.RESERVED_0 or msg_type is PacketType.RESERVED_15: - raise MQTTException("Usage of control packet type %s is forbidden" % msg_type) - flags = decode_flags(b1) + try: + b1 = yield from read_or_raise(reader, 1) + msg_type = decode_message_type(b1) + if msg_type is PacketType.RESERVED_0 or msg_type is PacketType.RESERVED_15: + raise MQTTException("Usage of control packet type %s is forbidden" % msg_type) + flags = decode_flags(b1) - remain_length = yield from decode_remaining_length() - return cls(msg_type, flags, remain_length) + remain_length = yield from decode_remaining_length() + return cls(msg_type, flags, remain_length) + except NoDataException: + return None def __repr__(self): return type(self).__name__ + '(type={0}, length={1}, flags={2})'.format(self.packet_type, self.remaining_length, hex(self.flags))