Import COMPRION trace exports (Protocol Layer + Application Layer time base)
- new `simtrace_analyser/comprion.py`: parses the tab-separated ISO Protocol
Layer export (metadata block, ATR/PPS exchanges, APDUs with continuation
rows, delays in etu) and re-encodes every exchange into the wire-shaped
TPDUs the analyser stores — a case-4 exchange becomes the command, a
fabricated `61 <len>` status word and a GET RESPONSE (command's logical
channel preserved), so command/response pairing, FCP/file decoding and the
GET RESPONSE filters work unchanged; Cold reset / Power off become RST/VCC
line events, deliberately without the sigrok CLK extension (the export
carries no clock measurement)
- optional matching **ISO Application Layer** export as the exact time base:
its one `Time:` row per exchange (ms precision) replaces the delay estimate
(0-based elapsed, `started = Session Name + first Time`), guarded by a
session-identity check (`Session Name`, falling back to `Working
directory`; the two layers' export timestamps differ and are not compared)
and an exchange-count check — mismatched files are refused, never mixed
- protocol-only imports keep the Delay-based timeline: card/line activity
time (host pauses absent), the unit assuming 3.8 MHz (`CLK_HZ`); the
estimate is not fed into the CLK/RST line-event annotation
- `POST /api/sessions/import?format=comprion` (raw text body, or a JSON
`{text, times_text}` bundle) with stable error codes (app_layer /
not_comprion / unsupported_layout / no_data / times_unparsable /
session_mismatch / time_base_unverified / time_base_mismatch); a COMPRION
file dropped on the PCAP path answers with a pointer (comprion_export);
session mode `comprion`, window from the Session Name
- PWA: import dialog with two separate pickers (Protocol Layer required,
Application Layer optional) whose hint switches between "activity time"
and "exact timestamps"; errors stay in the dialog with both selections
until fixed or cancelled (Cancel/Esc, also disabled while importing);
EN/RU
- tests: tests/test_comprion.py (parser, wire encoding, time base + guards,
import endpoint) and frontend/tests/comprion.test.js (file checks, slot
validation, dialog state machine with a DOM stub, RU coverage)
- v2.2.0; MIN_SERVER_VERSION 2.2.0; SW cache simtrace-analyser-v61
This commit is contained in:
1 parent
a50a93a238
commit
28bc8f1f24
11 files changed
+2021
-29
No files matched your search
+46
-2
@@ -24,7 +24,8 @@ SIM/UICC из UDP-потока GSMTAP (или импортирует файлы
|
||||
анализатор (см. также
|
||||
[sigrok_iso7816_stream](https://github.com/anttro/sigrok_iso7816_stream)).
|
||||
- **PWA** ([`frontend/`](frontend/)) — окно трассировки с декодированными
|
||||
APDU, SIM Toolkit, SMS и SCP80 OTA; сессии, импорт PCAP, интерфейс EN/RU.
|
||||
APDU, SIM Toolkit, SMS и SCP80 OTA; сессии, импорт PCAP и трасс COMPRION,
|
||||
интерфейс EN/RU.
|
||||
|
||||
## Возможности
|
||||
|
||||
@@ -64,7 +65,8 @@ SIM/UICC из UDP-потока GSMTAP (или импортирует файлы
|
||||
- Окно трассировки с режимами «Карта»/«Список» — proactive,
|
||||
TERMINAL RESPONSE, ENVELOPE и AUTH-команды выделяются в режиме карты
|
||||
- Сессии с прямыми ссылками (`#session=N`), импорт PCAP
|
||||
(`.pcap/.pcapng/.cap`), поиск и фильтрация по типу
|
||||
(`.pcap/.pcapng/.cap`), импорт трасс COMPRION (текстовый экспорт
|
||||
«ISO Protocol Layer» из Device Manager), поиск и фильтрация по типу
|
||||
- Устанавливаемая PWA, тёмная тема, интерфейс на английском/русском
|
||||
|
||||
## Требования
|
||||
@@ -147,6 +149,48 @@ RST несёт измеренную частоту CLK (декодер v1.9.0+,
|
||||
помеченная/десинхронизированная запись, чтобы такие артефакты было легко
|
||||
заметить при разборе, а не молча искажали декодирование.
|
||||
|
||||
### Импорт текстового экспорта COMPRION
|
||||
|
||||
Кнопка **Import COMPRION trace** принимает экспорт **ISO Protocol Layer**
|
||||
(табулированный текст) из COMPRION Device Manager — байтовое представление
|
||||
протокола (ATR, PPS, APDU с кодами возврата). Экспорт *ISO Application
|
||||
Layer* не содержит необработанных байтов ответов и не нужен; при его выборе
|
||||
выводится указание на файл Protocol Layer (та же проверка выполняется в PWA
|
||||
до загрузки и на сервере — для вызовов API).
|
||||
|
||||
Обмены перекодируются в такие же «проводные» TPDU, какие несёт захват
|
||||
GSMTAP (обмен case 4 превращается в команду, статусное слово `61 xx` и GET
|
||||
RESPONSE с данными ответа и итоговым SW), поэтому связывание
|
||||
команда/ответ, декодирование FCP и файлов и фильтры работают так же, как
|
||||
для живого захвата.
|
||||
|
||||
**Точные метки времени:** диалог импорта запрашивает экспорт *ISO Protocol
|
||||
Layer* (обязательный) и, при наличии, соответствующий экспорт *ISO
|
||||
Application Layer* — два отдельных поля выбора, имена выбранных файлов
|
||||
видны, а ошибка остаётся в диалоге до исправления или отмены. С обоими
|
||||
файлами метки времени Application Layer по обменам становятся таймлайном
|
||||
трассы: окно сессии и интервалы между APDU точные; без него таймлайн —
|
||||
оценка, описанная ниже. Перед импортом проверяется, что файлы относятся к
|
||||
одной сессии (`Session Name`, при отсутствии — `Working directory`; метки
|
||||
времени экспорта у слоёв различаются и не сравниваются) и что число обменов
|
||||
совпадает (экспорты должны покрывать один и тот же набор обменов) — при
|
||||
несовпадении импорт отклоняется, а не смешивает сессии. У ATR и обмена PPS
|
||||
блоков в Application Layer нет, поэтому они получают метку времени
|
||||
предыдущего обмена.
|
||||
|
||||
**Только Protocol Layer:** столбец `Delay` измеряет лишь активность
|
||||
карты/линии — паузы хоста между сериями APDU в него не входят — поэтому
|
||||
таймлайн сохраняет порядок сообщений и короткие интервалы, но заметно
|
||||
короче реальной сессии. Его единица измерения задаётся предполагаемой
|
||||
тактовой частотой 3,8 МГц (`CLK_HZ` в `simtrace_analyser/comprion.py`) —
|
||||
это масштаб, а не измерение: в экспорте нет CLK, и импорт намеренно его не
|
||||
выдумывает (ATR показывает F/D из файла, без аннотации скорости/ETU, в
|
||||
отличие от захвата сниффером sigrok-iso7816-stream). Окно настенных часов
|
||||
сессии берётся из метки времени `Session Name` в файле, если она там есть.
|
||||
|
||||
Обмены длиннее 255 байт (APDU с расширенной длиной) невозможно представить
|
||||
в хранимом «проводном» виде — они пропускаются с пометкой в отчёте импорта.
|
||||
|
||||
Параметры сервера:
|
||||
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user