Compact C-APDU detail rows; drop duplicated Data hex
- Pair CLA+INS and P1+P2 into single rows (halves the header rows per C-APDU): "· CLA, INS 00 — UICC, A4 — SELECT". - Skip the " — desc" suffix when the parser's desc merely repeats the hex (generic Data fields showed "6F46 — 6F46"). - Restore the implied-CLA annotation on the C-APDU title row (was dead code behind an operator-precedence bug). Version 1.20.2, SW cache simtrace-analyser-v30.
This commit is contained in:
1 parent
acbd2bda4a
commit
3e21d093d9
5 files changed
+30
-11
No files matched your search
+26
-7
@@ -1277,14 +1277,33 @@ function cmdRows(cmd) {
|
|||||||
const kids = apdu.children || [];
|
const kids = apdu.children || [];
|
||||||
const insKid = kids.find(k => k.label === 'INS');
|
const insKid = kids.find(k => k.label === 'INS');
|
||||||
const name = insKid ? (insKid.desc || '') : apdu.label;
|
const name = insKid ? (insKid.desc || '') : apdu.label;
|
||||||
rows.push(['C-APDU #' + n + ' — ' + (name || apdu.label),
|
rows.push(['C-APDU #' + n + ' — ' + (name || apdu.label) +
|
||||||
apdu.hex || '' + (apdu.label === 'APDU (implied CLA)' ? ' (implied CLA)' : '')]);
|
(apdu.label.includes('implied CLA') ? ' (implied CLA)' : ''),
|
||||||
|
apdu.hex || '']);
|
||||||
|
// Compact layout: pair CLA+INS and P1+P2; skip a
|
||||||
|
// desc that merely repeats the hex value.
|
||||||
|
const fmtKid = k => {
|
||||||
|
let v = k.hex || '';
|
||||||
|
if (k.desc && k.desc !== k.hex) v += ' — ' + k.desc;
|
||||||
|
return v;
|
||||||
|
};
|
||||||
|
const byLabel = {};
|
||||||
|
for (const k of kids) byLabel[k.label] = k;
|
||||||
|
const pairs = [['CLA', 'INS'], ['P1', 'P2']];
|
||||||
|
const done = new Set();
|
||||||
|
for (const [a, b] of pairs) {
|
||||||
|
if (byLabel[a] && byLabel[b]) {
|
||||||
|
rows.push(['· ' + a + ', ' + b,
|
||||||
|
fmtKid(byLabel[a]) + ', ' + fmtKid(byLabel[b])]);
|
||||||
|
done.add(a);
|
||||||
|
done.add(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
for (const k of kids) {
|
for (const k of kids) {
|
||||||
rows.push(['· ' + k.label,
|
if (done.has(k.label)) continue;
|
||||||
(k.hex || '') + (k.desc ? ' — ' + k.desc : '')]);
|
rows.push(['· ' + k.label, fmtKid(k)]);
|
||||||
if (k.children) for (const c of k.children) {
|
if (k.children) for (const c of k.children) {
|
||||||
rows.push(['· · ' + c.label,
|
rows.push(['· · ' + c.label, fmtKid(c)]);
|
||||||
(c.hex || '') + (c.desc ? ' — ' + c.desc : '')]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2465,7 +2484,7 @@ function onFilterChange() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ──────────────────── Versioning ────────────────────
|
// ──────────────────── Versioning ────────────────────
|
||||||
const PWA_VERSION = '1.20.1';
|
const PWA_VERSION = '1.20.2';
|
||||||
const MIN_SERVER_VERSION = '1.0.0';
|
const MIN_SERVER_VERSION = '1.0.0';
|
||||||
|
|
||||||
function parseVersion(v) {
|
function parseVersion(v) {
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
const CACHE = 'simtrace-analyser-v29';
|
const CACHE = 'simtrace-analyser-v30';
|
||||||
|
|
||||||
const PRECACHE = [
|
const PRECACHE = [
|
||||||
'index.html',
|
'index.html',
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.backends._legacy:_Backend"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "simtrace2-pysniff"
|
name = "simtrace2-pysniff"
|
||||||
version = "1.20.1"
|
version = "1.20.2"
|
||||||
description = "Python-based sniffing tool for SIMtrace2 hardware (SIM card communication sniffer)"
|
description = "Python-based sniffing tool for SIMtrace2 hardware (SIM card communication sniffer)"
|
||||||
readme = {file = "README.md", content-type = "text/markdown"}
|
readme = {file = "README.md", content-type = "text/markdown"}
|
||||||
license = {text = "GPL-2.0-or-later"}
|
license = {text = "GPL-2.0-or-later"}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from .gsmtap import GsmtapSender, GsmtapReceiver
|
|||||||
from .pcap import PcapWriter
|
from .pcap import PcapWriter
|
||||||
from .dump import FileDumper, format_message
|
from .dump import FileDumper, format_message
|
||||||
|
|
||||||
__version__ = '1.20.1'
|
__version__ = '1.20.2'
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'SniffSession',
|
'SniffSession',
|
||||||
'DeviceDisconnected',
|
'DeviceDisconnected',
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ class TestImportEndpoint(unittest.TestCase):
|
|||||||
class TestVersion(unittest.TestCase):
|
class TestVersion(unittest.TestCase):
|
||||||
def test_package_version(self):
|
def test_package_version(self):
|
||||||
from simtrace2_pysniff import __version__
|
from simtrace2_pysniff import __version__
|
||||||
self.assertEqual(__version__, '1.20.1')
|
self.assertEqual(__version__, '1.20.2')
|
||||||
|
|
||||||
def test_status_includes_version(self):
|
def test_status_includes_version(self):
|
||||||
import os
|
import os
|
||||||
|
|||||||
Reference in new issue
Block a user