diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ebf3c2..3f586d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,19 @@ every change carries a descriptive commit message. ### Fixed +- The **PLI location answer** now uses the 7-byte PLI form (TS 31.111 8.19.1): + PLMN 001/01, LAC `0001`, Cell ID `0001`. The former default was the 5-byte + *Network Rejection event* form (no Cell ID) with LAC `0000`; a card applet + that re-reads its location after a `*LOCI` status change (the Alfa MultiIMSI + applet) treated it as empty and re-requested PLI on every STATUS tick — the + PLI storm that slowed RAM Explore. The TR data is now + `13 07 00F110 0001 0001`. +- The **proactive chain is bounded on every call site**: `_handle_proactive_chain`'s + `max_rounds` defaults to `_POLL_CHAIN_MAX` (the background poll always passed it; + the manual STATUS poll and the ENVELOPE/menu/TP chains did not). A card that + re-queues a command (the PLI storm) could keep the manual poll looping forever + while it held the card lock — `/api/status-poll` never returned and every card + request waited. The manual poll also passes the bound explicitly. - The load-test loop closes properly on a raised runner error (it used to leave the run `running` forever - the PWA polled a dead run and *Clear report* stayed refused), on a card session change inside a suite iteration, and on a member that was stopped; a diff --git a/docs/api.md b/docs/api.md index 79b99b5..4193acf 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1769,13 +1769,16 @@ Lists the PROVIDE LOCAL INFORMATION qualifier codes with their names. Returns the effective PLI data dictionary as a qualifier-code map: the operator's override, else the built-in default (the qualifiers whose objects -the pinned ETSI specs define - location as the test network 001/01, the test -IMEI/IMEISV, language, access technology, search mode, battery; v3.23.1). +the pinned ETSI specs define - location as the test network 001/01 with test +LAC 0001 and Cell ID 0001 (the 7-byte PLI form per TS 31.111 8.19.1; the +5-byte form without the Cell ID belongs to the Network Rejection event +download), the test IMEI/IMEISV, language, access technology, search mode, +battery; v3.23.1, the PLI location form fixed in v3.37.0). The date/time qualifier stays empty - the host clock answers it while no override is set. ```json -{"00": "930500F1100000", "0A": "630104", "03": ""} +{"00": "130700F11000010001", "0A": "630104", "03": ""} ``` ### `POST /api/pli-dict` diff --git a/frontend/help-ru.html b/frontend/help-ru.html index 2cab622..b92427c 100644 --- a/frontend/help-ru.html +++ b/frontend/help-ru.html @@ -540,7 +540,7 @@
Значения хранятся на сервере до перезапуска. Для квалификаторов, определённых в спецификациях ETSI, заранее заданы разумные значения по умолчанию (местоположение — тестовая сеть 001/01, тестовый IMEI 490154203237518 и его IMEISV, язык «en», технология доступа E-UTRAN, автоматический поиск сети, полный заряд батареи): заданное значение переопределяет умолчание, а очистка поля возвращает умолчание; квалификатор даты/времени, пока пуст, отвечается часами хоста, а специфичные для 3GPP/3GPP2 квалификаторы (NMR, ESN, MEID, CSG/HNB, WLAN, slices, CAG, …) остаются пустыми — спецификации ETSI не определяют для них содержимое. Поле, которое сервер не может использовать (значение не hex, нечётное число цифр, код вне списка квалификаторов), указывается под кнопкой «Сохранить», а не отбрасывается молча. Когда карта выдаёт PLI, сервер вставляет значения в TERMINAL RESPONSE — в том числе в ответ тест-скрипта.
+Значения хранятся на сервере до перезапуска. Для квалификаторов, определённых в спецификациях ETSI, заранее заданы разумные значения по умолчанию (местоположение — тестовая сеть 001/01 с тестовыми LAC 0001 и Cell ID 0001 — 7-байтовая форма PLI, а не короткая форма события Network Rejection; тестовый IMEI 490154203237518 и его IMEISV, язык «en», технология доступа E-UTRAN, автоматический поиск сети, полный заряд батареи): заданное значение переопределяет умолчание, а очистка поля возвращает умолчание; квалификатор даты/времени, пока пуст, отвечается часами хоста, а специфичные для 3GPP/3GPP2 квалификаторы (NMR, ESN, MEID, CSG/HNB, WLAN, slices, CAG, …) остаются пустыми — спецификации ETSI не определяют для них содержимое. Поле, которое сервер не может использовать (значение не hex, нечётное число цифр, код вне списка квалификаторов), указывается под кнопкой «Сохранить», а не отбрасывается молча. Когда карта выдаёт PLI, сервер вставляет значения в TERMINAL RESPONSE — в том числе в ответ тест-скрипта.
Воспроизводит шаблоны записи реального телефона при смене сетевых условий (исследование трасс в projects/UICC_NAA.md): подключение EPS, потеря сервиса / ограниченный сервис, запрет роуминга, откат на 2G, приём SMS, перенастройка cell broadcast и AUTHENTICATE. По кнопке на сценарий; карта должна быть подключена.
Values persist server-side until restart. Sensible defaults are pre-settled for the qualifiers the ETSI specs define (location as the test network 001/01, the test IMEI 490154203237518 and its IMEISV, language ‘en’, E-UTRAN access technology, automatic search mode, a full battery): a value you set overrides its default, and clearing the field restores it; the date/time qualifier is answered from the host clock while empty, and the 3GPP/3GPP2-specific qualifiers (NMR, ESN, MEID, CSG/HNB, WLAN, slices, CAG, …) stay empty - the ETSI specs define no contents for them. A field the server cannot use (a value that is not hex, an odd number of digits, a code outside the qualifier list) is named under the Save button instead of being silently dropped. When the card issues PLI, the server injects the values into the TERMINAL RESPONSE - also into a test-script expectation's answer.
+Values persist server-side until restart. Sensible defaults are pre-settled for the qualifiers the ETSI specs define (location as the test network 001/01 with test LAC 0001 and Cell ID 0001 — the 7-byte PLI form, not the shorter Network Rejection one, the test IMEI 490154203237518 and its IMEISV, language ‘en’, E-UTRAN access technology, automatic search mode, a full battery): a value you set overrides its default, and clearing the field restores it; the date/time qualifier is answered from the host clock while empty, and the 3GPP/3GPP2-specific qualifiers (NMR, ESN, MEID, CSG/HNB, WLAN, slices, CAG, …) stay empty - the ETSI specs define no contents for them. A field the server cannot use (a value that is not hex, an odd number of digits, a code outside the qualifier list) is named under the Save button instead of being silently dropped. When the card issues PLI, the server injects the values into the TERMINAL RESPONSE - also into a test-script expectation's answer.
Replays the write patterns a real phone performs when the network condition changes (trace study in projects/UICC_NAA.md): EPS attach, service loss / limited service, roaming denial, 2G fallback, SMS delivery, cell-broadcast reconfiguration and AUTHENTICATE. One button per scenario; the card must be equipped.