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 = MQTTSN.Pubrels()
         resp.messageIdentifier = packet.messageIdentifier
         respond(sock, resp)
 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 = MQTTSN.Pubrels()
                 logger.info(
                     "[MQTT-2.3.1-4] Message id same as original publish on resend"
                 )
                 resp.messageIdentifier = pub.messageIdentifier
                 respond(self.socket, resp)