Address code-review nits for BAD_FCS support

- decode.py: use the GSMTAP_FLAG_BAD_FCS constant instead of a literal
  0x01 in gsmtap_flag_names() (import from ..gsmtap); no behavior change.
- tests: add a DB round-trip test (insert_message with BAD_FCS flag →
  get_messages → decoded.errors) covering the end-to-end path, not just
  the direct decode_sniff_msg call.
This commit is contained in:
catarrh committed 2026-08-26 22:11:29 +03:00
1 parent 66094a0114
commit 79acb3773f
2 files changed
+17 -1

No files matched your search

+3 -1
View File
@@ -4,6 +4,8 @@ Pure Python, no dependencies. Decodes raw TPDU bytes captured by
the SIMtrace2 sniffer into structured dicts for the PWA to display. the SIMtrace2 sniffer into structured dicts for the PWA to display.
""" """
from ..gsmtap import GSMTAP_FLAG_BAD_FCS
# ──────────────────── Status Word names ──────────────────── # ──────────────────── Status Word names ────────────────────
SW_NAMES = { SW_NAMES = {
@@ -4038,7 +4040,7 @@ def gsmtap_flag_names(flags):
desynced TPDU (mis-framed exchange / implausible status word). desynced TPDU (mis-framed exchange / implausible status word).
""" """
names = [] names = []
if flags & 0x01: if flags & GSMTAP_FLAG_BAD_FCS:
names.append('bad FCS (desynced)') names.append('bad FCS (desynced)')
return names or None return names or None
+14
View File
@@ -1204,6 +1204,20 @@ class TestFileDecoders(unittest.TestCase):
class TestSelectionTracking(unittest.TestCase): class TestSelectionTracking(unittest.TestCase):
def test_bad_fcs_roundtrip(self):
# GSMTAP BAD_FCS flag stored via insert_message must surface as a
# decode error in the DB → frontend path (not just the direct call).
import tempfile
from simtrace2_pysniff.server.database import Database
from simtrace2_pysniff.gsmtap import GSMTAP_FLAG_BAD_FCS
with tempfile.NamedTemporaryFile(suffix='.db') as tmp:
db = Database(tmp.name)
sid = db.create_session('capture')
db.insert_message(sid, 0.1, 'tpdu', bytes.fromhex('80f2000000'),
GSMTAP_FLAG_BAD_FCS)
msgs = db.get_messages(sid)
self.assertIn('bad FCS (desynced)', msgs[0]['decoded']['errors'])
def test_select_then_read(self): def test_select_then_read(self):
import tempfile import tempfile
from simtrace2_pysniff.server.database import Database from simtrace2_pysniff.server.database import Database