Beispiel #1
0
 def publish(self, sock, packet):
     packet.receivedTime = time.monotonic()
     if packet.topicName.find("+") != -1 or packet.topicName.find(
             "#") != -1:
         raise MQTTV3.MQTTException(
             "[MQTT-3.3.2-2][MQTT-4.7.1-1] wildcards not allowed in topic name"
         )
     if packet.fh.QoS == 0:
         self.broker.publish(self.clients[sock].id, packet.topicName,
                             packet.data, packet.fh.QoS, packet.fh.RETAIN,
                             packet.receivedTime)
     elif packet.fh.QoS == 1:
         if packet.fh.DUP:
             logger.info(
                 "[MQTT-3.3.1-3] Incoming publish DUP 1 ==> outgoing publish with DUP 0"
             )
             logger.info(
                 "[MQTT-4.3.2-2] server must store message in accordance with QoS 1"
             )
         self.broker.publish(self.clients[sock].id, packet.topicName,
                             packet.data, packet.fh.QoS, packet.fh.RETAIN,
                             packet.receivedTime)
         resp = MQTTV3.Pubacks()
         logger.info("[MQTT-2.3.1-6] puback messge id same as publish")
         resp.messageIdentifier = packet.messageIdentifier
         respond(sock, resp)
     elif packet.fh.QoS == 2:
         myclient = self.clients[sock]
         if self.publish_on_pubrel:
             if packet.messageIdentifier in myclient.inbound.keys():
                 if packet.fh.DUP == 0:
                     logger.error(
                         "[MQTT-3.3.1-2] duplicate QoS 2 message id %d found with DUP 0",
                         packet.messageIdentifier)
                 else:
                     logger.info(
                         "[MQTT-3.3.1-2] DUP flag is 1 on redelivery")
             else:
                 myclient.inbound[packet.messageIdentifier] = packet
         else:
             if packet.messageIdentifier in myclient.inbound:
                 if packet.fh.DUP == 0:
                     logger.error(
                         "[MQTT-3.3.1-2] duplicate QoS 2 message id %d found with DUP 0",
                         packet.messageIdentifier)
                 else:
                     logger.info(
                         "[MQTT-3.3.1-2] DUP flag is 1 on redelivery")
             else:
                 myclient.inbound.append(packet.messageIdentifier)
                 logger.info(
                     "[MQTT-4.3.3-2] server must store message in accordance with QoS 2"
                 )
                 self.broker.publish(myclient, packet.topicName,
                                     packet.data, packet.fh.QoS,
                                     packet.fh.RETAIN, packet.receivedTime)
         resp = MQTTV3.Pubrecs()
         logger.info("[MQTT-2.3.1-6] pubrec messge id same as publish")
         resp.messageIdentifier = packet.messageIdentifier
         respond(sock, resp)
Beispiel #2
0
def puback(publish: "publishes"):
    sockid, publish = publish
    sock = state.sockets[sockid]
    if publish.fh.QoS == 1:
        puback = MQTTV3.Pubacks()
        puback.messageIdentifier = publish.messageIdentifier
        sock.send(puback.pack())
    elif publish.fh.QoS == 2:
        pubrec = MQTTV3.Pubrecs()
        pubrec.messageIdentifier = publish.messageIdentifier
        sock.send(pubrec.pack())
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