eclipse / paho.mqtt.testing

An Eclipse Paho project - a Python broker for testing
https://eclipse.org/paho
Other
108 stars 73 forks source link

Retained messages not compatible between MQTTv5 and MQTTv3.1.1 #51

Closed ckrey closed 6 years ago

ckrey commented 6 years ago

Setting:

CONNECT MQTTv3.1.1 PUBLISH with retain flag set DISCONNECT

CONNECT MQTTv5 SUBSCRIBE

Result:

ERROR 20180726 091732 WebSocketTCPHandler
Traceback (most recent call last):
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/listeners/TCPListeners.py", line 167, in handle
    terminate = broker.handleRequest(sock)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V5/MQTTBrokers.py", line 344, in handleRequest
    terminate = self.handlePacket(packet, sock)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V5/MQTTBrokers.py", line 373, in handlePacket
    getattr(self, MQTTV5.Packets.Names[packet.fh.PacketType].lower())(sock, packet)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V5/MQTTBrokers.py", line 519, in subscribe
    self.broker.subscribe(self.clients[sock].id, topics, optionss)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V5/Brokers.py", line 235, in subscribe
    self.__doRetained__(aClientid, topic, [options for (options, props) in optionsprops], resubscribeds)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V5/Brokers.py", line 227, in __doRetained__
    (ret_msg, ret_qos, properties) = self.se.getRetained(s)
ValueError: not enough values to unpack (expected 3, got 2)

Or vice versa when published in MQTTv5 and subscribed from MQTTv3.1.1:

ERROR 20180726 091712 WebSocketTCPHandler
Traceback (most recent call last):
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/listeners/TCPListeners.py", line 167, in handle
    terminate = broker.handleRequest(sock)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V311/MQTTBrokers.py", line 231, in handleRequest
    terminate = self.handlePacket(packet, sock)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V311/MQTTBrokers.py", line 245, in handlePacket
    getattr(self, MQTTV3.packetNames[packet.fh.MessageType].lower())(sock, packet)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V311/MQTTBrokers.py", line 355, in subscribe
    self.broker.subscribe(self.clients[sock].id, topics, qoss)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V311/Brokers.py", line 142, in subscribe
    self.__doRetained__(aClientid, topic, qos)
  File "/home/ckrey/paho.mqtt.testing/interoperability/mqtt/brokers/V311/Brokers.py", line 135, in __doRetained__
    (ret_msg, ret_qos) = self.se.getRetained(s)
ValueError: too many values to unpack (expected 2)
ckrey commented 6 years ago

probably not tested yet see #44

icraggs commented 6 years ago

Thanks, Christoph. Yes, I had noticed this as well.

icraggs commented 6 years ago

I've added a fix.

ckrey commented 6 years ago

I did a retest and the problem is gone! Thanks