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)
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
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())