Files view: per-file tracking (counters, image, device/card changes)
- new `simtrace_analyser/filetrack.py`: a single-pass tracker over a session's decoded messages, keyed by (DF, FID) and trace-wide (resets only wipe the per-channel selection): counters (`select`/`read`/`update`, successful operations only), a sparse image of the observed bytes (transparent files by offset, record files per record number) and the change log - changes: **device** = an UPDATE seen in the trace (applied to the image, `no_change` flags a provable no-op); **card** = a READ whose bytes differ from the image on bytes already known (logged at the surfacing read with the changed ranges and the before/after hex; never-seen bytes just fill the image, they are an observation, not a change) - SFI-addressed accesses join the same entry as path/FID ones: the SFI ↔ FID relations come from the normative tables and from every surfaced FCP `88` DO (including the spec's "SFI = 5 LSBs of the FID" rule when the DO is absent); an SFI used before its relation is learned stays provisional and merges into the resolved entry - the DF identity follows TS 102 221 §8.4/Table 8.2: `selected_df_fid()` now resolves an EF path selection to its parent DF and returns `aid:<hex>` for applications selected by an unknown AID (named from EF.DIR when the trace surfaced it); `Database._decode_rows` gained an `on_message` hook and `track_files()` - `GET /api/sessions/<id>/files`: the operation timeline, the per-file counters/coverage/change log, the SFI relations and the AID labels - PWA: the side panel's Map/Stats tabs became a view selector (Map / Stats / Files); the Files view is a timeline of Read / Update / Changed (card) rows (colour-coded, the same file names as the Map view), a row click jumps to the APDU (loading the pages it needs) and a card-change row's Δ opens the changed ranges with the previous and the new bytes; EN/RU - bounds: the image freezes past 64 KB of observed bytes per file, the change log keeps the last 1000 events per file (counters keep counting) - tests: tests/test_filetrack.py (counters, resets, channels, image/diff semantics, record files, SFI resolution and the provisional merge, EF.DIR labels, caps, the endpoint) and Node tests for the Files-view helpers and wiring - v2.3.0; MIN_SERVER_VERSION 2.3.0; SW cache simtrace-analyser-v63
This commit is contained in:
1 parent
b8d9c4cc63
commit
c494bf4111
14 files changed
+1302
-36
No files matched your search
@@ -191,6 +191,36 @@ Application Layer* — два отдельных поля выбора, имен
|
||||
Обмены длиннее 255 байт (APDU с расширенной длиной) невозможно представить
|
||||
в хранимом «проводном» виде — они пропускаются с пометкой в отчёте импорта.
|
||||
|
||||
### Просмотр файлов (сопровождение состояния файлов)
|
||||
|
||||
В боковой панели вкладки «Трассировка» появился выбор вида (*Map* / *Stats* /
|
||||
**Files** — выпадающий список, три подписи-вкладки уже не помещались). Вид
|
||||
Files — это таймлайн файловых операций по всей трассе: строки **Read**,
|
||||
**Update** и **Changed (card)** показывают те же имена файлов, что и вид Map,
|
||||
а щелчок по строке переходит к APDU в трассе. У строки *Changed (card)* есть
|
||||
кнопка Δ, открывающая изменённые диапазоны с прежними и новыми байтами.
|
||||
|
||||
Данные даёт `simtrace_analyser/filetrack.py` (`GET /api/sessions/<id>/files`) —
|
||||
однопроходный анализатор сессии, который ведёт по ключу (DF, FID) и **через
|
||||
сбросы карты**: счётчики доступа (`select`/`read`/`update`, только успешные
|
||||
операции), разреженный образ наблюдаемого содержимого и журнал изменений.
|
||||
Изменения со стороны устройства — это операции UPDATE из трассы; изменения со
|
||||
стороны карты выводятся, когда чтение возвращает байты, отличающиеся от уже
|
||||
известных образу (никогда не виденные байты просто заполняют образ — это
|
||||
наблюдение, а не изменение). Файлы, доступные по SFI, попадают в ту же
|
||||
запись, что и доступ по пути/FID: соответствия SFI ↔ FID берутся из
|
||||
нормативных таблиц (TS 102 221 Annex H, TS 31.102 Annex H) и из каждого
|
||||
показанного FCP с DO `88`, включая правило спецификации «SFI = 5 младших бит
|
||||
FID» при отсутствии DO; SFI, использованный до того, как связь выучена,
|
||||
остаётся предварительным и сливается с разрешённой записью. Контекст DF
|
||||
следует TS 102 221 §8.4/Table 8.2 (выбор EF оставляет текущим его родительский
|
||||
DF, включая выбор по пути); приложения, выбранные по неизвестному AID,
|
||||
получают в качестве идентичности DF сам AID и имя из EF.DIR, если он
|
||||
показан в трассе. Ограничения: образ замораживается после 64 КБ
|
||||
наблюдаемых байт на файл (`image_truncated`), журнал изменений хранит
|
||||
последние 1000 событий на файл (`changes_total` продолжает считать).
|
||||
Счётчики API отдаёт, но в этом виде пока не показываются.
|
||||
|
||||
Параметры сервера:
|
||||
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user