def resend(self):
   logger.debug("resending unfinished publications %s", str(self.outbound))
   if len(self.outbound) > 0:
     logger.info("[MQTT-4.4.0-1] resending inflight QoS 1 and 2 messages")
   for pub in self.outbound:
     logger.debug("resending", pub)
     logger.info("[MQTT-4.4.0-2] dup flag must be set on in re-publish")
     if pub.fh.QoS == 0:
       respond(self.socket, pub)
     elif pub.fh.QoS == 1:
       pub.fh.DUP = 1
       logger.info("[MQTT-2.1.2-3] Dup when resending QoS 1 publish id %d", pub.messageIdentifier)
       logger.info("[MQTT-2.3.1-4] Message id same as original publish on resend")
       logger.info("[MQTT-4.3.2-1] Resending QoS 1 with DUP flag")
       respond(self.socket, pub)
     elif pub.fh.QoS == 2:
       if pub.qos2state == "PUBREC":
         logger.info("[MQTT-2.1.2-3] Dup when resending QoS 2 publish id %d", pub.messageIdentifier)
         pub.fh.DUP = 1
         logger.info("[MQTT-2.3.1-4] Message id same as original publish on resend")
         logger.info("[MQTT-4.3.3-1] Resending QoS 2 with DUP flag")
         respond(self.socket, pub)
       else:
         resp = MQTTV3.Pubrels()
         logger.info("[MQTT-2.3.1-4] Message id same as original publish on resend")
         resp.messageIdentifier = pub.messageIdentifier
         respond(self.socket, resp)
 def pubrec(self, sock, packet):
   "confirmed reception of qos 2"
   myclient = self.clients[sock]
   if myclient.pubrec(packet.messageIdentifier):
     logger.info("[MQTT-3.5.4-1] must reply with pubrel in response to pubrec")
     resp = MQTTV3.Pubrels()
     resp.messageIdentifier = packet.messageIdentifier
     respond(sock, resp)
Beispiel #3
0
    def __init__(self, socket):
        logging.debug("initializing receiver")
        self.socket = socket
        self.stopping = False
        self.paused = False

        self.inMsgs = {}
        self.outMsgs = {}

        self.puback = MQTTV3.Pubacks()
        self.pubrec = MQTTV3.Pubrecs()
        self.pubrel = MQTTV3.Pubrels()
        self.pubcomp = MQTTV3.Pubcomps()
        self.running = False
Beispiel #4
0
def pubrel(pubrec: "pubrecs"):  # pubrecs are observable events
    sockid, pubrec = pubrec
    sock = state.sockets[sockid]
    pubrel = MQTTV3.Pubrels()
    pubrel.messageIdentifier = pubrec.messageIdentifier
    sock.send(pubrel.pack())