Fix dropped change flags + FIDI parsing

- capture.py: DirectSniffer/GsmtapListener yield (type, data, flags),
  CaptureManager passes flags to insert_message (change flags were
  previously dropped, leaving every change row with flags=0)
- protocol.py: add _parse_fidi (1-byte value) — FIDI was mis-mapped to
  _parse_change (4-byte flags), so FIDI messages were silently dropped
- database.py: pass flags into decode_sniff_msg
- decode.py: decode_change(flags) reads flags directly; decode_sniff_msg
  gains flags parameter; change messages no longer require non-empty data
- tests: fix FIDI test, add change/fidi decode tests (43 total)
This commit is contained in:
catarrh committed 2026-08-12 19:25:14 +03:00
1 parent 4097bb864e
commit 2a58fec0a3
7 files changed
+52 -20

No files matched your search

+4 -3
View File
@@ -83,13 +83,14 @@ class TestParseMessage(unittest.TestCase):
self.assertEqual(msg.flags, CHANGE_FLAG_TIMEOUT_WT)
def test_fidi_message(self):
payload = struct.pack('<I', 0x97) # Fi=9, Di=7
payload = b'\x97' # Fi=9, Di=7
buf = _build_hdr(SIMTRACE_MSGC_SNIFF, SIMTRACE_MSGT_SNIFF_FIDI,
payload=payload)
msg, consumed = parse_message(buf)
self.assertEqual(msg.type, 'fidi')
self.assertEqual(len(msg.data), 0)
self.assertEqual(msg.flags, 0x97)
self.assertEqual(len(msg.data), 1)
self.assertEqual(msg.data, b'\x97')
self.assertEqual(msg.flags, 0)
def test_atr_message(self):
atr = b'\x3b\x9e\x12\x34\x56\x78\x90'