Add --capture disabled mode + capture-mode status in PWA

Server:
- --capture accepts 'disabled'; no backend is created, capture_mode exposed
- /api/status returns capture_mode; capture start/stop return 403 when
  disabled; latest/status/delete_session are None-safe

PWA:
- captureMode state; conn-status shows server version
- new capture-mode line (Settings) explaining gsmtap/direct/disabled
- hide capture + New capture UI when disabled; trace empty-state shows
  'Capture unavailable'
- 7 new EN/RU i18n keys

Version 1.2.0 (server + PWA); tests: 111.
This commit is contained in:
catarrh committed 2026-08-14 23:49:10 +03:00
1 parent b900a8a3e1
commit 24d0decd51
7 files changed
+130 -22

No files matched your search

+8 -6
View File
@@ -29,8 +29,8 @@ def main():
help='HTTP server port (default: 8081)')
p.add_argument('--db', default=DEFAULT_DB_PATH,
help=f'SQLite database path (default: {DEFAULT_DB_PATH})')
p.add_argument('--capture', choices=['gsmtap', 'direct'], default='gsmtap',
help='Capture mode: gsmtap (listen UDP 4729) or direct (SIMtrace2 USB)')
p.add_argument('--capture', choices=['gsmtap', 'direct', 'disabled'], default='gsmtap',
help='Capture mode: gsmtap (listen UDP 4729), direct (SIMtrace2 USB), or disabled (no capture)')
p.add_argument('--gsmtap-port', type=int, default=4729,
help='UDP port for GSMTAP listener (default: 4729)')
p.add_argument('--web-dir', default=_default_web_dir(), metavar='PATH',
@@ -39,15 +39,17 @@ def main():
db = Database(args.db)
capture = None
if args.capture == 'gsmtap':
backend = GsmtapListener(bind_port=args.gsmtap_port)
else:
capture = CaptureManager(backend, db)
elif args.capture == 'direct':
backend = DirectSniffer()
capture = CaptureManager(backend, db)
capture = CaptureManager(backend, db)
RequestHandler.db = db
RequestHandler.capture = capture
RequestHandler.capture_mode = args.capture
server = HTTPServer(('127.0.0.1', args.port), RequestHandler)
server.web_dir = args.web_dir
@@ -65,7 +67,7 @@ def main():
except KeyboardInterrupt:
pass
finally:
if capture.active:
if capture and capture.active:
capture.stop_session()
server.server_close()