es9p_client: Fix type conversion in installation result notification (details)
es9p_client: MAke install notification code execute at all (details)
http_json_api: Only require Content-Type if response body is non-empty (details)
Commit
429b12c8b5064f3abc7ca4c1d748cd5544d15b29
by laforge
pySim-trace: pySim.apdu_source.stdin_hex
This introduces an "APDU source" for pySim-trace which enables the decoding of APDUs that are copy+pasted from elsewhere, for example APDU logs in text form created by proprietary tools, or to decode personalization scripts or the like.
Commit
e0a9e73267f18fed1d81874938f5e2831afd12e6
by laforge
http_json_api: Only require Content-Type if response body is non-empty
If there is an empty body returned, such as in the case of the response to an es9p notification, then it is of course also legal to not set the content-type header.
This patch fixes an exception when talking to certain SM-DP+ with es9p_client.py:
DEBUG:pySim.esim.http_json_api:HTTP RSP-STS: [204] hdr: {'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'} DEBUG:pySim.esim.http_json_api:HTTP RSP: b'' {'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'} <Response [204]> Traceback (most recent call last): File "gprojects/git/pysim/es9p/../contrib/es9p_client.py", line 315, in <module> c.do_notification() ~~~~~~~~~~~~~~~~~^^ File "projects/git/pysim/es9p/../contrib/es9p_client.py", line 159, in do_notification res = self.peer.call_handleNotification(data) File "projects/git/pysim/contrib/pySim/esim/es9p.py", line 174, in call_handleNotification return self.handleNotification.call(data) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "projects/git/pysim/contrib/pySim/esim/http_json_api.py", line 335, in call if not response.headers.get('Content-Type').startswith(req_headers['Content-Type']): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'startswith'