Пример #1
0
 def publish(self, p_topic, p_message, qosLevel=0, retain=False, dup=False, messageId=None):
     # LOG.info("Sending publish packet\n\tTopic: {};\n\tAddr: {};".format(p_topic, self.m_broker.BrokerAddress))
     l_varHeader = bytearray()
     l_payload = bytearray()
     #  Type = publish
     l_varHeader.extend(EncodeDecode._encodeString(p_topic))
     if qosLevel > 0:
         if messageId is not None:
             l_varHeader.extend(EncodeDecode._encodeValue(messageId))
         else:
             l_varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     l_payload.extend(EncodeDecode._put_string(p_message))
     # l_payload.extend(p_message)
     l_fixHeader = self._build_fixed_header(0x03, len(l_varHeader) + len(l_payload), dup, qosLevel, retain)
     self._send_transport(l_fixHeader, l_varHeader, l_payload)
Пример #2
0
 def unsubscribe(self, topic, messageId = None):
     LOG.info("Sending unsubscribe packet")
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     header.append(0x0A << 4 | 0x01 << 1)
     if messageId is not None:
         varHeader.extend(EncodeDecode._encodeValue(self.messageID))
     else:
         varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     payload.extend(EncodeDecode._encodeString(topic))
     header.extend(EncodeDecode._encodeLength(len(payload) + len(varHeader)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #3
0
 def unsubscribe(self, topic, messageId = None):
     LOG.info("Sending unsubscribe packet")
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     header.append(0x0A << 4 | 0x01 << 1)
     if messageId is not None:
         varHeader.extend(EncodeDecode._encodeValue(self.messageID))
     else:
         varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     payload.extend(EncodeDecode._encodeString(topic))
     header.extend(EncodeDecode._encodeLength(len(payload) + len(varHeader)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #4
0
 def _build_connect(self, p_broker, p_mqtt):
     """
     """
     l_varHeader = bytearray()
     l_payload = bytearray()
     l_varHeader.extend(EncodeDecode._encodeString("MQTT"))
     l_varHeader.append(4)
     varLogin = 0
     if p_broker.UserName is not None:
         varLogin += 2
     if p_broker.Password is not None:
         varLogin += 1
     if p_broker.WillMessage is None or p_broker.WillMessage == '' or p_broker.WillTopic is None:
         #  Clean start, no will message
         l_varHeader.append(varLogin << 6 | 0 << 2 | 1 << 1)
     else:
         l_varHeader.append(varLogin << 6 | p_broker.WillRetain << 5 | p_broker.WillQoS << 3 | 1 << 2 | 1 << 1)
     l_varHeader.extend(EncodeDecode._encodeValue(int(p_broker.Keepalive / 1000)))
     l_payload.extend(EncodeDecode._encodeString(p_mqtt.ClientID))
     if (p_broker.WillMessage is not None or p_broker.WillMessage != '') and p_broker.WillTopic is not None:
         # LOG.debug('Adding last will testiment {}'.format(p_broker.WillMessage + p_broker.WillTopic))
         l_payload.extend(EncodeDecode._encodeString(p_broker.WillTopic))
         l_payload.extend(EncodeDecode._encodeString(p_broker.WillMessage))
     if p_broker.UserName is not None and len(p_broker.UserName) > 0:
         LOG.debug('Adding username "{}"'.format(p_broker.UserName))
         l_payload.extend(EncodeDecode._encodeString(p_broker.UserName))
     if p_broker.Password is not None and len(p_broker.Password) > 0:
         LOG.debug('Adding password "{}"'.format(p_broker.Password))
         l_payload.extend(EncodeDecode._encodeString(p_broker.Password))
     l_fixHeader = self._build_fixed_header(0x01, len(l_varHeader) + len(l_payload))
     return (l_fixHeader, l_varHeader, l_payload)
Пример #5
0
 def unsuback(self, messageId):
     header = bytearray()
     varHeader = bytearray()
     header.append(0x0B << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     header.extend(EncodeDecode._encodeLength(len(varHeader)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
Пример #6
0
 def subscribe(self, p_topic, requestedQoS=0, messageId=None):
     """
     Only supports QoS = 0 subscribes
     Only supports one subscription per message
     """
     # LOG.info("Sending subscribe packet - Topic: {}\n\tAddr: {}".format(p_topic, self.m_broker.BrokerAddress))
     l_varHeader = bytearray()
     l_payload = bytearray()
     #  Type = subscribe, QoS = 1
     if messageId is None:
         l_varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     else:
         l_varHeader.extend(EncodeDecode._encodeValue(messageId))
     l_payload.extend(EncodeDecode._encodeString(p_topic))
     l_payload.append(requestedQoS)
     l_fixHeader = self._build_fixed_header(0x08, len(l_varHeader) + len(l_payload), qosLevel=1)
     self._send_transport(l_fixHeader, l_varHeader, l_payload)
Пример #7
0
 def unsuback(self, messageId):
     header = bytearray()
     varHeader = bytearray()
     header.append(0x0B << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     header.extend(EncodeDecode._encodeLength(len(varHeader)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
Пример #8
0
 def publish(self, p_topic, p_message, qosLevel = 0, retain = False, dup = False, messageId = None):
     #  LOG.info("Sending publish packet - Topic: {}".format(p_topic))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     #  Type = publish
     header.append(0x03 << 4 | dup << 3 | qosLevel << 1 | retain)
     varHeader.extend(EncodeDecode._encodeString(p_topic))
     if qosLevel > 0:
         if messageId is not None:
             varHeader.extend(EncodeDecode._encodeValue(messageId))
         else:
             varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     payload.extend(p_message)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #9
0
 def pubcomp(self, messageId):
     # LOG.warn('Sending pubcomp packet')
     header = bytearray()
     varHeader = bytearray()
     header.append(0x07 << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     header.extend(EncodeDecode._encodeLength(len(varHeader)))
     self.transport.write(header)
     self.transport.write(varHeader)
Пример #10
0
 def publish(self, p_topic, p_message, qosLevel = 0, retain = False, dup = False, messageId = None):
     #  LOG.info("Sending publish packet - Topic: {}".format(p_topic))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     #  Type = publish
     header.append(0x03 << 4 | dup << 3 | qosLevel << 1 | retain)
     varHeader.extend(EncodeDecode._encodeString(p_topic))
     if qosLevel > 0:
         if messageId is not None:
             varHeader.extend(EncodeDecode._encodeValue(messageId))
         else:
             varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     payload.extend(p_message)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #11
0
 def unsuback(self, messageId):
     # LOG.info("Sending unsuback packet")
     header = bytearray()
     varHeader = bytearray()
     header.append(0x0B << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     header.extend(EncodeDecode._encodeLength(len(varHeader)))
     self.transport.write(header)
     self.transport.write(varHeader)
Пример #12
0
 def subscribe(self, p_topic, requestedQoS = 0, messageId = None):
     """
     Only supports QoS = 0 subscribes
     Only supports one subscription per message
     """
     LOG.info("Sending subscribe packet - Topic: {}".format(p_topic))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     #  Type = subscribe, QoS = 1
     header.append(0x08 << 4 | 0x01 << 1)
     if messageId is None:
         varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     else:
         varHeader.extend(EncodeDecode._encodeValue(messageId))
     payload.extend(EncodeDecode._encodeString(p_topic))
     payload.append(requestedQoS)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #13
0
 def suback(self, grantedQos, messageId):
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     header.append(0x09 << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     for i in grantedQos:
         payload.append(i)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #14
0
 def subscribe(self, p_topic, requestedQoS = 0, messageId = None):
     """
     Only supports QoS = 0 subscribes
     Only supports one subscription per message
     """
     LOG.info("Sending subscribe packet - Topic: {}".format(p_topic))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     #  Type = subscribe, QoS = 1
     header.append(0x08 << 4 | 0x01 << 1)
     if messageId is None:
         varHeader.extend(EncodeDecode._encodeValue(random.randint(1, 0xFFFF)))
     else:
         varHeader.extend(EncodeDecode._encodeValue(messageId))
     payload.extend(EncodeDecode._encodeString(p_topic))
     payload.append(requestedQoS)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #15
0
 def suback(self, grantedQos, messageId):
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     header.append(0x09 << 4)
     varHeader.extend(EncodeDecode._encodeValue(messageId))
     for i in grantedQos:
         payload.append(i)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #16
0
 def connect(self, p_clientID, keepalive = 3000,
             willTopic = None, willMessage = None, willQoS = 0, willRetain = False,
             cleanStart = True,
             username = None,
             password = None
             ):
     """
     DBK - Modified this packet to add username and password flags and fields (2016-01-22)
     """
     LOG.info("Sending 'connect' packet - ID: {}".format(p_clientID))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     varHeader.extend(EncodeDecode._encodeString("MQIsdp"))
     varHeader.append(3)
     varLogin = 0
     if username is not None:
         varLogin += 2
     if password is not None:
         varLogin += 1
     if willMessage is None or willTopic is None:
         #  Clean start, no will message
         varHeader.append(varLogin << 6 | 0 << 2 | cleanStart << 1)
     else:
         varHeader.append(varLogin << 6 | willRetain << 5 | willQoS << 3 |
                          1 << 2 | cleanStart << 1)
     varHeader.extend(EncodeDecode._encodeValue(keepalive / 1000))
     payload.extend(EncodeDecode._encodeString(p_clientID))
     if willMessage is not None and willTopic is not None:
         LOG.debug('Adding last will testiment {}'.format(willMessage + willTopic))
         payload.extend(EncodeDecode._encodeString(willTopic))
         payload.extend(EncodeDecode._encodeString(willMessage))
     if username is not None:
         LOG.debug('Adding username {}'.format(username))
         payload.extend(EncodeDecode._encodeString(username))
     if password is not None:
         LOG.debug('Adding password {}'.format(password))
         payload.extend(EncodeDecode._encodeString(password))
     header.append(0x01 << 4)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))
Пример #17
0
 def connect(self, p_clientID, keepalive = 3000,
             willTopic = None, willMessage = None, willQoS = 0, willRetain = False,
             cleanStart = True,
             username = None,
             password = None
             ):
     """
     DBK - Modified this packet to add username and password flags and fields (2016-01-22)
     """
     LOG.info("Sending 'connect' packet - ID: {}".format(p_clientID))
     header = bytearray()
     varHeader = bytearray()
     payload = bytearray()
     varHeader.extend(EncodeDecode._encodeString("MQIsdp"))
     varHeader.append(3)
     varLogin = 0
     if username is not None:
         varLogin += 2
     if password is not None:
         varLogin += 1
     if willMessage is None or willTopic is None:
         #  Clean start, no will message
         varHeader.append(varLogin << 6 | 0 << 2 | cleanStart << 1)
     else:
         varHeader.append(varLogin << 6 | willRetain << 5 | willQoS << 3
                          | 1 << 2 | cleanStart << 1)
     varHeader.extend(EncodeDecode._encodeValue(keepalive / 1000))
     payload.extend(EncodeDecode._encodeString(p_clientID))
     if willMessage is not None and willTopic is not None:
         LOG.debug('Adding last will testiment {}'.format(willMessage + willTopic))
         payload.extend(EncodeDecode._encodeString(willTopic))
         payload.extend(EncodeDecode._encodeString(willMessage))
     if username is not None:
         LOG.debug('Adding username {}'.format(username))
         payload.extend(EncodeDecode._encodeString(username))
     if password is not None:
         LOG.debug('Adding password {}'.format(password))
         payload.extend(EncodeDecode._encodeString(password))
     header.append(0x01 << 4)
     header.extend(EncodeDecode._encodeLength(len(varHeader) + len(payload)))
     self.transport.write(str(header))
     self.transport.write(str(varHeader))
     self.transport.write(str(payload))