Files view: name the phonebook files from the card's EF_PBR (v2.7.7)
- EF_PBR (TS 31.102 §4.4.2.1) is the card's declaration of its phonebook:
the constructed tags A8/A9/AA announce the type-1/2/3 groups and each nested
primitive tag C0…CC names the file kind plus its FID — and, in a three-byte
object, its SFI (length 2 = FID only). pySim has no parser for it (its
EF_PBR class still carries a "# TODO: a80ac0034f3a…" stub), so the decoder
follows the spec: new simtrace_analyser/pbr.py
- the tracker decodes every EF_PBR record it observes (a READ RECORD's data
or an UPDATE RECORD's body) and uses it for the DF it belongs to: the
phonebook files get their symbolic names (4FA1 = EF_PBC, 4F3A = EF_ADN,
4F01 = EF_IAP, 4F4A = EF_EXT1, 4F3D = EF_CCP1, 4F61 = EF_EMAIL, …), an
earlier placeholder name is upgraded when the PBR arrives later, and the
declared SFIs feed the DF's SFI→FID map (so SFI-addressed reads resolve
without waiting for an FCP)
- verified on the live sessions 47/193:
DF_TELECOM/DF_PHONEBOOK/EF_PBC (4FA1) and the SFI map
{2→4F3A, 4→4FA1, 6→4F4A, 7→4F4F}
- also fixed: the "SFI = FID's five low bits" fallback (TS 102 221
§11.1.1.4.8) no longer applies to a DF/ADF's FCP, which has no SFI
- tests: tests/test_pbr.py (the two real records, SFI-less objects, padding,
truncation, merging, the shape check) and tracker cases (names, path,
SFI map, the later-PBR upgrade); 537 Python + 76 Node tests
- README/README_RUS document the PBR naming; PWA_VERSION/pyproject/
version.py 2.7.7, SW cache simtrace-analyser-v87
This commit is contained in:
1 parent
5dea6bceb8
commit
ac424e67e3
13 files changed
+283
-9
No files matched your search
@@ -323,10 +323,14 @@ class TestFcpResponse(unittest.TestCase):
|
||||
self.assertIsNone(fcp['sfi'])
|
||||
|
||||
def test_fcp_sfi_absent_uses_fid_lsbs(self):
|
||||
# No SFI tag → SFI = 5 LSBs of the FID (TS 102 221 §11.1.2).
|
||||
# No SFI tag → SFI = 5 LSBs of the FID (TS 102 221 §11.1.1.4.8).
|
||||
from simtrace_analyser.decode import _decode_fcp
|
||||
fcp = _decode_fcp(bytes.fromhex('8202412183022f06'))
|
||||
self.assertEqual(fcp['sfi'], 0x06)
|
||||
# …but only for an EF: a DF/ADF's FCP carries no SFI.
|
||||
df = _decode_fcp(bytes.fromhex('82017883025f3a'))
|
||||
self.assertEqual(df['file_descriptor']['file_type'], 'DF or ADF')
|
||||
self.assertNotIn('sfi', df)
|
||||
|
||||
def test_fcp_summary_transparent(self):
|
||||
# GET RESPONSE (FCP) for a transparent EF of 9 bytes
|
||||
|
||||
Reference in new issue
Block a user