Example #1
0
    def handle_publish(self):
        """Handle incoming PUBLISH packet."""
        self.logger.debug("PUBLISH received")
        
        header = self.in_packet.command
        
        message = NyamukMsgAll()
        message.direction = NC.DIRECTION_IN
        message.dup = (header & 0x08) >> 3
        message.msg.qos = (header & 0x06) >> 1
        message.msg.retain = (header & 0x01)
        
        rc, ba = self.in_packet.read_string()
        message.msg.topic = ba.decode()
        
        if rc != NC.ERR_SUCCESS:
            return rc
        
        #fix_sub_topic TODO
        
        if message.msg.qos > 0:
            rc, word = self.in_packet.read_uint16()
            message.msg.mid = word
            if rc != NC.ERR_SUCCESS:
                return rc
        
        message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos
        
        if message.msg.payloadlen > 0:
            rc, message.msg.payload = self.in_packet.read_bytes(message.msg.payloadlen)
            if rc != NC.ERR_SUCCESS:
                return rc
        
        self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s",message.dup, message.msg.qos, message.msg.retain)
        self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid, message.msg.topic, message.msg.payloadlen)
        
        message.timestamp = time.time()
        
        qos = message.msg.qos
        
        if qos == 0:
            if self.on_message is not None:
                self.in_callback = True
                self.on_message(self, message.msg)
                self.in_callback = False
            else:
                self.in_pub_msg.append(message.msg)

            return NC.ERR_SUCCESS
        elif qos == 1 or qos == 2:
            self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2")
            sys.exit(-1)
        else:
            return NC.ERR_PROTOCOL
        
        return NC.ERR_SUCCESS
Example #2
0
    def handle_publish(self):
        """Handle incoming PUBLISH packet."""
        self.logger.debug("PUBLISH received")

        header = self.in_packet.command

        message = NyamukMsgAll()
        message.direction = NC.DIRECTION_IN
        message.dup = (header & 0x08) >> 3
        message.msg.qos = (header & 0x06) >> 1
        message.msg.retain = (header & 0x01)

        ret, ba_data = self.in_packet.read_string()
        message.msg.topic = ba_data.decode()

        if ret != NC.ERR_SUCCESS:
            return ret

        #fix_sub_topic TODO
        if message.msg.qos > 0:
            ret, word = self.in_packet.read_uint16()
            message.msg.mid = word
            if ret != NC.ERR_SUCCESS:
                return ret

        message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos

        if message.msg.payloadlen > 0:
            ret, message.msg.payload = self.in_packet.read_bytes(
                message.msg.payloadlen)
            if ret != NC.ERR_SUCCESS:
                return ret

        self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s",
                          message.dup, message.msg.qos, message.msg.retain)
        self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid,
                          message.msg.topic, message.msg.payloadlen)

        message.timestamp = time.time()

        qos = message.msg.qos

        if qos == 0:
            evt = event.EventPublish(message.msg)
            self.push_event(evt)

            return NC.ERR_SUCCESS

        elif qos == 1 or qos == 2:
            self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2")
            sys.exit(-1)
        else:
            return NC.ERR_PROTOCOL

        return NC.ERR_SUCCESS
Example #3
0
    def handle_publish(self):
        """Handle incoming PUBLISH packet."""
        self.logger.debug("PUBLISH received")
        
        header = self.in_packet.command
        
        message = NyamukMsgAll()
        message.direction = NC.DIRECTION_IN
        message.dup = (header & 0x08) >> 3
        message.msg.qos = (header & 0x06) >> 1
        message.msg.retain = (header & 0x01)
        
        ret, ba_data = self.in_packet.read_string()
        message.msg.topic = ba_data.decode()
        
        if ret != NC.ERR_SUCCESS:
            return ret
        
        #fix_sub_topic TODO
        if message.msg.qos > 0:
            ret, word = self.in_packet.read_uint16()
            message.msg.mid = word
            if ret != NC.ERR_SUCCESS:
                return ret
        
        message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos
        
        if message.msg.payloadlen > 0:
            ret, message.msg.payload = self.in_packet.read_bytes(message.msg.payloadlen)
            if ret != NC.ERR_SUCCESS:
                return ret
        
        self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s", message.dup, message.msg.qos, message.msg.retain)
        self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid, message.msg.topic, message.msg.payloadlen)
        
        message.timestamp = time.time()
        
        qos = message.msg.qos
        
        if qos == 0:
            evt = event.EventPublish(message.msg)
            self.push_event(evt)

            return NC.ERR_SUCCESS
        
        elif qos == 1 or qos == 2:
            self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2")
            sys.exit(-1)
        else:
            return NC.ERR_PROTOCOL
        
        return NC.ERR_SUCCESS