]> www.average.org Git - loctrkd.git/blobdiff - loctrkd/zmsg.py
Update changelog for 2.00 release
[loctrkd.git] / loctrkd / zmsg.py
index 9dae60540f46019957a72121700c6ada5df081de..07798a63dc5dbcc5fb4512d6740f759af66d3c15 100644 (file)
@@ -4,7 +4,7 @@ import ipaddress as ip
 from struct import pack, unpack
 from typing import Any, cast, Optional, Tuple, Type, Union
 
 from struct import pack, unpack
 from typing import Any, cast, Optional, Tuple, Type, Union
 
-__all__ = "Bcast", "Resp", "topic"
+__all__ = "Bcast", "Resp", "topic", "rtopic"
 
 
 def pack_peer(  # 18 bytes
 
 
 def pack_peer(  # 18 bytes
@@ -100,12 +100,17 @@ def topic(
     )
 
 
     )
 
 
+def rtopic(imei: str) -> bytes:
+    return pack("16s", imei.encode())
+
+
 class Bcast(_Zmsg):
     """Zmq message to broadcast what was received from the terminal"""
 
     KWARGS = (
         ("is_incoming", True),
         ("proto", "UNKNOWN"),
 class Bcast(_Zmsg):
     """Zmq message to broadcast what was received from the terminal"""
 
     KWARGS = (
         ("is_incoming", True),
         ("proto", "UNKNOWN"),
+        ("pmod", None),
         ("imei", None),
         ("when", None),
         ("peeraddr", None),
         ("imei", None),
         ("when", None),
         ("peeraddr", None),
@@ -116,28 +121,36 @@ class Bcast(_Zmsg):
     def packed(self) -> bytes:
         return (
             pack(
     def packed(self) -> bytes:
         return (
             pack(
-                "!B16s16sd",
+                "!B16s16sd16s",
                 int(self.is_incoming),
                 self.proto[:16].ljust(16, "\0").encode(),
                 b"0000000000000000"
                 if self.imei is None
                 else self.imei.encode(),
                 0 if self.when is None else self.when,
                 int(self.is_incoming),
                 self.proto[:16].ljust(16, "\0").encode(),
                 b"0000000000000000"
                 if self.imei is None
                 else self.imei.encode(),
                 0 if self.when is None else self.when,
+                b"                "
+                if self.pmod is None
+                else self.pmod.encode(),
             )
             + pack_peer(self.peeraddr)
             + self.packet
         )
 
     def decode(self, buffer: bytes) -> None:
             )
             + pack_peer(self.peeraddr)
             + self.packet
         )
 
     def decode(self, buffer: bytes) -> None:
-        is_incoming, proto, imei, when = unpack("!B16s16sd", buffer[:41])
+        is_incoming, proto, imei, when, pmod = unpack(
+            "!B16s16sd16s", buffer[:57]
+        )
         self.is_incoming = bool(is_incoming)
         self.proto = proto.decode().rstrip("\0")
         self.imei = (
             None if imei == b"0000000000000000" else imei.decode().strip("\0")
         )
         self.when = when
         self.is_incoming = bool(is_incoming)
         self.proto = proto.decode().rstrip("\0")
         self.imei = (
             None if imei == b"0000000000000000" else imei.decode().strip("\0")
         )
         self.when = when
-        self.peeraddr = unpack_peer(buffer[41:59])
-        self.packet = buffer[59:]
+        self.pmod = (
+            None if pmod == b"                " else pmod.decode().strip("\0")
+        )
+        self.peeraddr = unpack_peer(buffer[57:75])
+        self.packet = buffer[75:]
 
 
 class Resp(_Zmsg):
 
 
 class Resp(_Zmsg):
@@ -168,8 +181,8 @@ class Resp(_Zmsg):
         self.packet = buffer[24:]
 
 
         self.packet = buffer[24:]
 
 
-class Report(_Zmsg):
-    """Broadcast Zzmq message with "rectified" proto-agnostic json data"""
+class Rept(_Zmsg):
+    """Broadcast zmq message with "rectified" proto-agnostic json data"""
 
     KWARGS = (("imei", None), ("payload", ""))
 
 
     KWARGS = (("imei", None), ("payload", ""))
 
@@ -178,7 +191,7 @@ class Report(_Zmsg):
         return (
             pack(
                 "16s",
         return (
             pack(
                 "16s",
-                "0000000000000000"
+                b"0000000000000000"
                 if self.imei is None
                 else self.imei.encode(),
             )
                 if self.imei is None
                 else self.imei.encode(),
             )