diff options
author | Harald Welte <laforge@osmocom.org> | 2023-12-08 15:06:29 +0100 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2023-12-17 10:46:31 +0000 |
commit | 301d6ed14a25b828a458654c9a1d8147cfd91a9c (patch) | |
tree | e7cd44142687d87b8c7592bb5015cc57e4eeb3b5 | |
parent | b3c46135bb87893d504750ceadfb32df2b17cff2 (diff) |
isim: Replace legacy imperative address TLV encoder/decoder with construct
We've recently introduced IPv{4,6}Adapter construct classes and can
switch to this instead of using the old imperative encoder/decoder
functions {enc,dec}_addr_tlv().
Aside from code cleanup, this also means we now support the IPv6 address
type in EF.PCSCF.
Change-Id: I4d01ccfe473a8a80fbee33fdcbd8a19b39da85ac
-rw-r--r-- | pySim/ts_31_103.py | 19 | ||||
-rw-r--r-- | pysim-testdata/pySim-trace_test_gsmtap.pcapng.ok | 16 |
2 files changed, 17 insertions, 18 deletions
diff --git a/pySim/ts_31_103.py b/pySim/ts_31_103.py index 5268c70..a4a7656 100644 --- a/pySim/ts_31_103.py +++ b/pySim/ts_31_103.py @@ -135,19 +135,18 @@ class EF_IST(EF_UServiceTable): class EF_PCSCF(LinFixedEF): _test_de_encode = [ ( '802c0070637363662e696d732e6d6e633030302e6d63633733382e7075622e336770706e6574776f726b2e6f7267', - { "addr": "pcscf.ims.mnc000.mcc738.pub.3gppnetwork.org", "addr_type": "00" } ), + {'pcscf_address': { "address": "pcscf.ims.mnc000.mcc738.pub.3gppnetwork.org", "type_of_address": "FQDN" } } ), ] + class PcscfAddress(BER_TLV_IE, tag=0x80): + _construct = Struct('type_of_address'/Enum(Byte, FQDN=0, IPv4=1, IPv6=2), + 'address'/Switch(this.type_of_address, + {'FQDN': Utf8Adapter(GreedyBytes), + 'IPv4': Ipv4Adapter(GreedyBytes), + 'IPv6': Ipv6Adapter(GreedyBytes)})) + def __init__(self, fid='6f09', sfid=None, name='EF.P-CSCF', desc='P-CSCF Address', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - - def _decode_record_hex(self, raw_hex, **kwargs): - addr, addr_type = dec_addr_tlv(raw_hex) - return {"addr": addr, "addr_type": addr_type} - - def _encode_record_hex(self, json_in, **kwargs): - addr = json_in['addr'] - addr_type = json_in['addr_type'] - return enc_addr_tlv(addr, addr_type) + self._tlv = EF_PCSCF.PcscfAddress # TS 31.103 Section 4.2.9 class EF_GBABP(TransparentEF): diff --git a/pysim-testdata/pySim-trace_test_gsmtap.pcapng.ok b/pysim-testdata/pySim-trace_test_gsmtap.pcapng.ok index a8a7676..600c36d 100644 --- a/pysim-testdata/pySim-trace_test_gsmtap.pcapng.ok +++ b/pysim-testdata/pySim-trace_test_gsmtap.pcapng.ok @@ -343,7 +343,7 @@ CardReset(3b9f96801f878031e073fe211b674a4c753034054ba9) =============================== 01 READ BINARY MF/ADF.ISIM/EF.DOMAIN - 9000 {'domain': ''} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 01 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 01 9000 {'pcscf_address': None} =============================== 01 READ BINARY MF/ADF.ISIM/EF.IST - 9000 {1: {'activated': True, 'description': 'P-CSCF address'}, 2: {'activated': False, 'description': 'Generic Bootstrapping Architecture (GBA)'}, 3: {'activated': False, 'description': 'HTTP Digest'}, 4: {'activated': True, 'description': 'GBA-based Local Key Establishment Mechanism'}, 5: {'activated': True, 'description': 'Support of P-CSCF discovery for IMS Local Break Out'}, 6: {'activated': False, 'description': 'Short Message Storage (SMS)'}, 7: {'activated': False, 'description': 'Short Message Status Reports (SMSR)'}, 8: {'activated': False, 'description': 'Support for SM-over-IP including data download via SMS-PP as defined in TS 31.111 [31]'}, 9: {'activated': False, 'description': 'Communication Control for IMS by ISIM'}, 10: {'activated': True, 'description': 'Support of UICC access to IMS'}, 11: {'activated': False, 'description': 'URI support by UICC'}, 12: {'activated': False, 'description': 'Media Type support'}, 13: {'activated': False, 'description': 'IMS call disconnection cause'}, 14: {'activated': False, 'description': 'URI support for MO SHORT MESSAGE CONTROL'}, 15: {'activated': False, 'description': 'MCPTT'}, 16: {'activated': False, 'description': 'URI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [31]'}, 17: {'activated': False, 'description': 'From Preferred'}, 18: {'activated': False, 'description': 'IMS configuration data'}, 19: {'activated': False, 'description': 'XCAP Configuration Data'}, 20: {'activated': False, 'description': 'WebRTC URI'}, 21: {'activated': False, 'description': 'MuD and MiD configuration data'}, 22: {'activated': False}, 23: {'activated': False}, 24: {'activated': False}} =============================== @@ -351,7 +351,7 @@ CardReset(3b9f96801f878031e073fe211b674a4c753034054ba9) =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 02 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 02 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 02 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 00 MANAGE CHANNEL 02 9000 {'mode': 'open_channel', 'created_channel': 2} =============================== @@ -359,7 +359,7 @@ CardReset(3b9f96801f878031e073fe211b674a4c753034054ba9) =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 03 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 03 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 03 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 00 UPDATE BINARY MF/ADF.USIM/EF.CBMI - 9000 [[65535], [65535], [65535], [65535], [65535], [65535], [65535], [65535], [65535], [65535]] =============================== @@ -393,25 +393,25 @@ CardReset(3b9f96801f878031e073fe211b674a4c753034054ba9) =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 04 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 04 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 04 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 00 UPDATE BINARY MF/ADF.USIM/EF.CBMIR - 9000 [[{'lower': 65535, 'upper': 65535}], [{'lower': 65535, 'upper': 65535}], [{'lower': 65535, 'upper': 65535}], [{'lower': 65535, 'upper': 65535}], [{'lower': 65535, 'upper': 65535}]] =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 05 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 05 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 05 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 06 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 06 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 06 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 07 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 07 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 07 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 01 READ RECORD MF/ADF.ISIM/EF.IMPU 08 9000 {'impu': None} =============================== -01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 08 9000 {'addr': None, 'addr_type': None} +01 READ RECORD MF/ADF.ISIM/EF.P-CSCF 08 9000 {'pcscf_address': {'type_of_address': 255, 'address': None}} =============================== 00 MANAGE CHANNEL 02 9000 {'mode': 'open_channel', 'created_channel': 2} =============================== |