- xx, length, proto = unpack("!2sBB", packet[:4])
- crlf = packet[-2:]
- payload = packet[4:-2]
- adjust = 2 if proto == STATUS.PROTO else 4 # Weird special case
- if (
- proto
- not in (WIFI_POSITIONING.PROTO, WIFI_OFFLINE_POSITIONING.PROTO)
- and length > 1
- and len(payload) + adjust != length
- ):
- log.warning(
- "With proto %d length is %d but payload length is %d+%d",
- proto,
- length,
- len(payload),
- adjust,
- )
- if xx != b"xx" or crlf != b"\r\n":
- return UNKNOWN.from_packet(length, proto, packet) # full packet
- else:
- return make_object(length, proto, payload)
+ retobj = UNKNOWN.from_packet(length, payload)
+ retobj.PROTO = proto # Override class attr with object attr
+ return retobj
+
+
+def parse_message(packet):
+ length, proto = unpack("BB", packet[:2])
+ payload = packet[2:]
+ adjust = 2 if proto == STATUS.PROTO else 4 # Weird special case
+ if (
+ proto not in (WIFI_POSITIONING.PROTO, WIFI_OFFLINE_POSITIONING.PROTO)
+ and length > 1
+ and len(payload) + adjust != length
+ ):
+ log.warning(
+ "With proto %d length is %d but payload length is %d+%d",
+ proto,
+ length,
+ len(payload),
+ adjust,
+ )
+ return make_object(length, proto, payload)