v3.18.1: the raw envelope action takes the source override too

The events without a semantic builder (MT call, IMS registration, slices, ...)
are network-sourced, but the raw `envelope` action had no `src` override - the
only way to express them was the semantic set.  `envelope` now accepts
`src` (82 terminal / 83 network) exactly like the `event` action; the step
editor exposes it and the authoring guide gets the row.

Also: the guide marks `por` as SCP80-only (the normaliser refuses it
elsewhere) and the semantic-events section names the shared src override.

Tests: 813 frontend + 717 Python; sw cache simple-v382.
This commit is contained in:
2026-10-04 18:06:13 +03:00
parent fb4e4bd7b2
commit 1aa1b44063
9 changed files with 59 additions and 14 deletions
+2 -2
View File
@@ -34,7 +34,7 @@ from osmocom.tlv import BER_TLV_IE
from osmocom.utils import rpad
VERSION = '3.18.0'
VERSION = '3.18.1'
MAX_ENVELOPE_SEGMENTS = 5 # max SMS segments for outgoing C-APDU in ENVELOPE
@@ -5953,7 +5953,7 @@ def _test_run_action(server, step, ctx):
if kind == 'envelope':
data, sw = _send_event_download(scc, p['event'],
bytes.fromhex(p['data']) if p['data'] else None,
drain=False)
drain=False, src=p.get('src'))
sent = 'ENVELOPE(Event Download) type=0x%02X' % p['event']
elif kind == 'event':
# The semantic event download: the builder owns the byte layout.
+9 -2
View File
@@ -218,8 +218,15 @@ def _normalise_params(kind, p):
if kind == 'envelope':
if p.get('event') is None:
raise ScriptError('envelope: event is required')
return {'event': _int(p['event'], 'envelope event', 0, 255),
'data': _data_hex(p.get('data'), 'envelope data', allow_empty=True)}
out = {'event': _int(p['event'], 'envelope event', 0, 255),
'data': _data_hex(p.get('data'), 'envelope data', allow_empty=True)}
src = str(p.get('src') or '').strip().upper()
if src:
if not re.fullmatch(r'[0-9A-F]{2}', src):
raise ScriptError('envelope: src must be one hex byte '
'(82 terminal / 83 network)')
out['src'] = src
return out
if kind == 'event':
# The semantic event download: the builder owns the field set and the
# byte layout (events.py mirrors the PWA's forms for the supported