Esempio n. 1
0
 def PUBLISH_TO_NODE(self, subscription):
     tid = subscription["tid"]
     self.last_mid += 1
     mid = self.last_mid
     if self.data_len == 0:
         # send deliberately broken length packets
         # (to small payload, len field < 256)
         self.last_packet = mqttsn.MQTTSN(len=128) / mqttsn.MQTTSNPublish(
             qos=self._qos_flags, tid=tid, mid=mid, data="128")
         self.send(self.last_packet)
         # send deliberately broken length packets
         # (to small payload, len field >= 256)
         self.last_packet = mqttsn.MQTTSN(len=400) / mqttsn.MQTTSNPublish(
             qos=self._qos_flags, tid=tid, mid=mid, data="400")
         self.send(self.last_packet)
         # send deliberately broken length packets (too large payload)
         self.last_packet = mqttsn.MQTTSN(len=10) / mqttsn.MQTTSNPublish(
             qos=self._qos_flags, tid=tid, mid=mid, data="X" * 20)
         self.send(self.last_packet)
         return subscription, mid
     if self.data_len < self.data_len_end:
         self.last_packet = mqttsn.MQTTSN() / mqttsn.MQTTSNPublish(
             qos=self._qos_flags,
             tid=tid,
             mid=mid,
             data="X" * self.data_len)
         self.send(self.last_packet)
         return subscription, mid
     else:
         raise self.END()
Esempio n. 2
0
 def send_SUBACK(self, mid, tid):
     self.last_packet = mqttsn.MQTTSN() / mqttsn.MQTTSNSuback(
         tid=tid, mid=mid
     )
     self.send(self.last_packet)
     self.spawn.expect_exact("success: now subscribed to {}"
                             .format(self._get_topic_name(tid).decode()))
Esempio n. 3
0
 def send_CONNACK(self):
     # send too large packet for reception buffer
     # see https://github.com/RIOT-OS/RIOT/pull/12382
     self.last_packet = mqttsn.MQTTSN() / \
         mqttsn.MQTTSNConnack() / ("X" * 525)
     self.send(self.last_packet)
     # send deliberately broken length packets (too small len)
     self.last_packet = mqttsn.MQTTSN(len=2) / mqttsn.MQTTSNConnack()
     self.send(self.last_packet)
     # send deliberately broken length packets (too large len)
     self.last_packet = mqttsn.MQTTSN(len=3, type=mqttsn.CONNACK)
     self.send(self.last_packet)
     # send deliberately broken length packets (garbage payload)
     self.last_packet = mqttsn.MQTTSN(len=128) / \
         mqttsn.MQTTSNConnack() / b"this is garbage"
     self.send(self.last_packet)
     self.last_packet = mqttsn.MQTTSN() / mqttsn.MQTTSNConnack()
     self.send(self.last_packet)
     self.spawn.expect_exact("success: connected to gateway at {}".format(
         self.gw_addr))
Esempio n. 4
0
 def send_PUBACK_if_required(self, qos, topic_name, mid, tid):
     if qos in (mqttsn.QOS_1, mqttsn.QOS_2):
         # send deliberately broken length packets (too small len)
         self.last_packet = mqttsn.MQTTSN(len=4) / \
             mqttsn.MQTTSNPuback(mid=mid, tid=tid)
         self.send(self.last_packet)
         # send deliberately broken length packets (too large len)
         # include valid MID for extra confusion
         self.last_packet = mqttsn.MQTTSN(len=7, type=mqttsn.PUBACK) / \
             bytes([tid >> 8, tid & 0xff, mid >> 8, mid & 0xff])
         self.send(self.last_packet)
         # send deliberately broken length packets (garbage payload)
         self.last_packet = mqttsn.MQTTSN(len=128) / \
             mqttsn.MQTTSNPuback(mid=mid, tid=tid) / b"this is garbage"
         self.send(self.last_packet)
         self.last_packet = mqttsn.MQTTSN() / mqttsn.MQTTSNPuback(mid=mid,
                                                                  tid=tid)
         self.send(self.last_packet)
     self.spawn.expect_exact(
         "success: published {:d} bytes to topic '{} [{:d}]'".format(
             self.data_len - self.data_len_step, topic_name, tid))
     time.sleep(self.pub_interval)
Esempio n. 5
0
 def send_REGACK(self, topic_name, mid):
     tid = self._get_tid(topic_name)
     if topic_name not in self.registered_topics:
         self.registered_topics.append(topic_name)
     # send deliberately broken length packets (too small len)
     self.last_packet = mqttsn.MQTTSN(len=4) / \
         mqttsn.MQTTSNRegack(mid=mid, tid=tid)
     self.send(self.last_packet)
     # send deliberately broken length packets (too large len)
     # include valid MID for extra confusion
     self.last_packet = mqttsn.MQTTSN(len=7, type=mqttsn.REGACK) / \
         bytes([tid >> 8, tid & 0xff, mid >> 8, mid & 0xff])
     self.send(self.last_packet)
     # send deliberately broken length packets (garbage payload)
     self.last_packet = mqttsn.MQTTSN(len=128) / \
         mqttsn.MQTTSNRegack(mid=mid, tid=tid) / b"this is garbage"
     self.send(self.last_packet)
     self.last_packet = mqttsn.MQTTSN() / \
         mqttsn.MQTTSNRegack(mid=mid, tid=tid)
     self.send(self.last_packet)
     self.spawn.expect_exact(
         "success: registered to topic '{} [{:d}]'".format(topic_name, tid))
Esempio n. 6
0
 def recv(self, x=MTU):
     pkt, sa = self.ins.recvfrom(x)
     self.server.last_remote = sa
     return mqttsn.MQTTSN(pkt)