aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-05-31 08:48:51 +0200
committerHarald Welte <laforge@osmocom.org>2021-06-13 21:20:38 +0200
commit14dd42f70cb3b51c31a282b4e9b58ee21632236c (patch)
tree9ccc69221f7c44232d97801406e765141b331991
parenta2ddc6e818d46d23913efab81fe032ceef2b1877 (diff)
WIP: more fileslaforge/nested
-rw-r--r--pySim/ts_31_102.py153
-rw-r--r--pySim/ts_31_103.py16
-rw-r--r--pySim/ts_51_011.py60
3 files changed, 216 insertions, 13 deletions
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 7031dfd..06c97dc 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -508,7 +508,14 @@ class EF_Keys(TransparentEF):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct('ksi'/Int8ub, 'ck'/HexAdapter(Bytes(16)), 'ik'/HexAdapter(Bytes(16)))
-# TS 31.103 Section 4.2.7
+# TS 31.102 Section 4.2.6
+class EF_HPPLMN(TransparentEF):
+ def __init__(self, fid='6f31', sfid=0x12, name='EF.HPPLMN', size={1,1},
+ desc='Higher Priority PLMN search period'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
+ self._construct = Int8ub
+
+# TS 31.102 Section 4.2.8
class EF_UST(TransparentEF):
def __init__(self, fid='6f38', sfid=0x04, name='EF.UST', desc='USIM Service Table', size={1,17}):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, size=size)
@@ -674,6 +681,33 @@ class EF_MSK(LinFixedEF):
self._construct = Struct('key_domain_id'/Bytes(3),
'num_msk_id'/Int8ub,
'msk_ids'/msk_ts_constr[this.num_msk_id])
+# TS 31.102 Section 4.2.81
+class EF_MUK(LinFixedEF):
+ class MUK_Idr(BER_TLV_IE, tag=0x80):
+ _construct = HexAdapter(GreedyBytes)
+ class MUK_Idi(BER_TLV_IE, tag=0x82):
+ _construct = HexAdapter(GreedyBytes)
+ class MUK_ID(BER_TLV_IE, tag=0xA0, nested=[MUK_Idr, MUK_Idi]):
+ pass
+ class TimeStampCounter(BER_TLV_IE, tag=0x81):
+ pass
+ class EF_MUK_Collection(TLV_IE_Collection, nested=[MUK_ID, TimeStampCounter]):
+ pass
+ def __init__(self, fid='6fd8', sfid=None, name='EF.MUK', desc='MBMS User Key'):
+ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={None,None})
+ self._tlv = EF_MUK.EF_MUK_Collection
+
+# TS 31.102 Section 4.2.83
+class EF_GBANL(LinFixedEF):
+ class NAF_ID(BER_TLV_IE, tag=0x80):
+ _construct = HexAdapter(GreedyBytes)
+ class B_TID(BER_TLV_IE, tag=0x81):
+ _construct = HexAdapter(GreedyBytes)
+ class EF_GBANL_Collection(BER_TLV_IE, nested=[NAF_ID, B_TID]):
+ pass
+ def __init__(self, fid='6fda', sfid=None, name='EF.GBANL', desc='GBA NAF List'):
+ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={None,None})
+ self._tlv = EF_GBANL.EF_GBANL_Collection
# TS 31.102 Section 4.2.85
class EF_EHPLMNPI(TransparentEF):
@@ -682,6 +716,42 @@ class EF_EHPLMNPI(TransparentEF):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct('presentation_ind'/
Enum(Byte, no_preference=0, display_highest_prio_only=1, display_all=2))
+
+# TS 31.102 Section 4.2.87
+class EF_NAFKCA(LinFixedEF):
+ class NAF_KeyCentreAddress(BER_TLV_IE, tag=0x80):
+ _construct = HexAdapter(GreedyBytes)
+ def __init__(self, fid='6fdd', sfid=None, name='EF.NAFKCA', rec_len={None, None},
+ desc='NAF Key Centre Address'):
+ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
+ self._tlv = EF_NAFKCA.NAF_KeyCentreAddress
+
+# TS 31.102 Section 4.2.90
+class EF_NCP_IP(LinFixedEF):
+ class DataDestAddrRange(TLV_IE, tag=0x83):
+ _construct = Struct('type_of_address'/Enum(Byte, IPv4=0x21, IPv6=0x56),
+ 'prefix_length'/Int8ub,
+ 'prefix'/HexAdapter(GreedyBytes))
+ class AccessPointName(TLV_IE, tag=0x80):
+ # coded as per TS 23.003
+ _construct = HexAdapter(GreedyBytes)
+ class Login(TLV_IE, tag=0x81):
+ # as per SMS DCS TS 23.038
+ _construct = GsmStringAdapter(GreedyBytes)
+ class Password(TLV_IE, tag=0x82):
+ # as per SMS DCS TS 23.038
+ _construct = GsmStringAdapter(GreedyBytes)
+ class BearerDescription(TLV_IE, tag=0x84):
+ # Bearer descriptionTLV DO as per TS 31.111
+ pass
+ class EF_NCP_IP_Collection(TLV_IE_Collection,
+ nested=[AccessPointName, Login, Password, BearerDescription]):
+ pass
+ def __init__(self, fid='6fe2', sfid=None, name='EF.NCP-IP', rec_len={None, None},
+ desc='Network Connectivity Parameters for USIM IP connections'):
+ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
+ self._tlv = EF_NCP_IP.EF_NCP_IP_Collection
+
# TS 31.102 Section 4.2.91
class EF_EPSLOCI(TransparentEF):
def __init__(self, fid='6fe3', sfid=0x1e, name='EF.EPSLOCI', size={18,18},
@@ -691,6 +761,27 @@ class EF_EPSLOCI(TransparentEF):
self._construct = Struct('guti'/Bytes(12), 'last_visited_registered_tai'/Bytes(5),
'eps_update_status'/upd_status_constr)
+# TS 31.102 Section 4.2.92
+class EF_EPSNSC(LinFixedEF):
+ class KSI_ASME(BER_TLV_IE, tag= 0x80):
+ _construct = Int8ub
+ class K_ASME(BER_TLV_IE, tag= 0x81):
+ _construct = HexAdapter(GreedyBytes)
+ class UplinkNASCount(BER_TLV_IE, tag=0x82):
+ _construct = Int32ub
+ class DownlinkNASCount(BER_TLV_IE, tag=0x83):
+ _construct = Int32ub
+ class IDofNASAlgorithms(BER_TLV_IE, tag=0x84):
+ _construct = HexAdapter(GreedyBytes)
+ class EPS_NAS_Security_Context(BER_TLV_IE, tag=0xa0,
+ nested=[KSI_ASME, K_ASME, UplinkNASCount, DownlinkNASCount,
+ IDofNASAlgorithms]):
+ pass
+ def __init__(self,fid='6fe4', sfid=0x18, name='EF.EPSNSC', rec_len={54,128},
+ desc='EPS NAS Security Context'):
+ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
+ self._tlv = EF_EPSNSC.EPS_NAS_Security_Context
+
# TS 31.102 Section 4.2.96
class EF_PWS(TransparentEF):
def __init__(self, fid='6fec', sfid=None, name='EF.PWS', desc='Public Warning System', size={1,1}):
@@ -706,6 +797,18 @@ class EF_IPS(CyclicEF):
self._construct = Struct('status'/PaddedString(2, 'ascii'),
'link_to_ef_ipd'/Int8ub, 'rfu'/Byte)
+# TS 31.102 Section 4.2.103
+class EF_ePDGId(TransparentEF):
+ class ePDGId(BER_TLV_IE, tag=0x80, nested=[]):
+ _construct = Struct('type_of_ePDG_address'/Enum(Byte, FQDN=0, IPv4=1, IPv6=2),
+ 'ePDG_address'/Switch(this.type_of_address,
+ { 'FQDN': GreedyString("utf8"),
+ 'IPv4': HexAdapter(GreedyBytes),
+ 'IPv6': HexAdapter(GreedyBytes) }))
+ def __init__(self, fid='6ff3', sfid=None, name='EF.eDPDGId', desc='Home ePDG Identifier'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_ePDGId.ePDGId
+
# TS 31.102 Section 4.2.106
class EF_FromPreferred(TransparentEF):
def __init__(self, fid='6ff7', sfid=None, name='EF.FromPreferred', size={1,1},
@@ -735,12 +838,39 @@ class EF_UAC_AIC(TransparentEF):
mission_critical_service=2)
self._construct = Struct('uac_access_id_config'/cfg_constr)
-# TS 31.102 Section 4.4.11.10
+# TS 31.102 Section 4.4.11.9
class EF_OPL5G(LinFixedEF):
def __init__(self, fid='6f08', sfid=0x08, name='EF.OPL5G', desc='5GS Operator PLMN List'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={10,None})
self._construct = Struct('tai'/Bytes(9), 'pnn_record_id'/Int8ub)
+# TS 31.102 Section 4.4.11.10
+class EF_SUPI_NAI(TransparentEF):
+ class NetworkSpecificIdentifier(TLV_IE, tag=0x80):
+ # RFC 7542 encoded as UTF-8 string
+ _construct = GreedyString("utf8")
+ class GlobalLineIdentifier(TLV_IE, tag=0x81):
+ # TS 23.003 clause 28.16.2
+ pass
+ class GlobalCableIdentifier(TLV_IE, tag=0x82):
+ # TS 23.003 clause 28.15.2
+ pass
+ class NAI_TLV_Collection(TLV_IE_Collection,
+ nested=[NetworkSpecificIdentifier, GlobalLineIdentifier, GlobalCableIdentifier]):
+ pass
+ def __init__(self, fid='4f09', sfid=0x09, name='EF.SUPI_NAI',
+ desc='SUPI as Network Access Identifier'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_SUPI_NAI.NAI_TLV_Collection
+
+class EF_TN3GPPSNN(TransparentEF):
+ class ServingNetworkName(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
+ def __init__(self, fid='4f0c', sfid=0x0c, name='EF.TN3GPPSNN',
+ desc='Trusted non-3GPP Serving network names list'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_TN3GPPSNN.ServingNetworkName
+
# TS 31.102 Section 4.4.5
class DF_WLAN(CardDF):
def __init__(self, fid='5f40', name='DF.WLAN', desc='Files for WLAN purpose'):
@@ -809,10 +939,10 @@ class DF_USIM_5GS(CardDF):
EF_UAC_AIC(),
EF_SUCI_Calc_Info(),
EF_OPL5G(),
- TransparentEF('4F09', 0x09, 'EF.SUPI_NAI', 'SUPI as Network Access Identifier'),
+ EF_SUPI_NAI(),
TransparentEF('4F0A', 0x0a, 'EF.Routing_Indicator', 'Routing Indicator', size={4,4}),
TransparentEF('4F0B', 0x0b, 'EF.URSP', 'UE Route Selector Policies per PLMN'),
- TransparentEF('4F0C', 0x0c, 'EF.TN3GPPSNN', 'Trusted non-3GPP Serving network names list'),
+ EF_TN3GPPSNN(),
]
self.add_files(files)
@@ -830,7 +960,7 @@ class ADF_USIM(CardADF):
EF_Keys('6f09', 0x09, 'EF.KeysPS', desc='Ciphering and Integrity Keys for PS domain'),
EF_xPLMNwAcT('6f60', 0x0a, 'EF.PLMNwAcT',
'User controlled PLMN Selector with Access Technology'),
- TransparentEF('6f31', 0x12, 'EF.HPPLMN', 'Higher Priority PLMN search period'),
+ EF_HPPLMN(),
EF_ACMmax(),
EF_UST(),
CyclicEF('6f39', None, 'EF.ACM', 'Accumulated call meter', rec_len={3,3}),
@@ -900,16 +1030,16 @@ class ADF_USIM(CardADF):
EF_VGCSCA('6fd5', None, 'EF.VBCSCA', 'Voice Broadcast Service Ciphering Algorithm'),
EF_GBABP(),
EF_MSK(),
- LinFixedEF('6fd8', None, 'EF.MUK', 'MBMS User Key'),
- LinFixedEF('6fda', None, 'EF.GBANL', 'GBA NFA List'),
+ EF_MUK(),
+ EF_GBANL(),
EF_PLMNsel('6fd9', 0x1d, 'EF.EHPLMN', 'Equivalent HPLMN', size={12,None}),
EF_EHPLMNPI(),
- LinFixedEF('6fdd', None, 'EF.NAFKCA', 'NAF Key Centre Address'),
+ EF_NAFKCA(),
TransparentEF('6fde', None, 'EF.SPNI', 'Service Provider Name Icon'),
LinFixedEF('6fdf', None, 'EF.PNNI', 'PLMN Network Name Icon'),
- LinFixedEF('6fe2', None, 'EF.NCP-IP', 'Network Connectivity Parameters for USIM IP connections'),
+ EF_NCP_IP(),
EF_EPSLOCI('6fe3', 0x1e, 'EF.EPSLOCI', 'EPS location information'),
- LinFixedEF('6fe4', 0x18, 'EF.EPSNSC', 'EPS NAS Security Context', rec_len={54,128}),
+ EF_EPSNSC(),
TransparentEF('6fe6', None, 'EF.UFC', 'USAT Facility Control', size={1,16}),
TransparentEF('6fe8', None, 'EF.NASCONFIG', 'Non Access Stratum Configuration'),
# UICC IARI (only in cards that have no ISIM)
@@ -918,7 +1048,8 @@ class ADF_USIM(CardADF):
LinFixedEF('6fee', None, 'EF.BDNURI', 'Barred Dialling Numbers URI'),
LinFixedEF('6fef', None, 'EF.SDNURI', 'Service Dialling Numbers URI'),
EF_IPS(),
- # FIXME: from EF_ePDGid onwards
+ EF_ePDGId(),
+ # FIXME: from EF_ePDGSelection onwards
EF_FromPreferred(),
# FIXME: DF_SoLSA
# FIXME: DF_PHONEBOOK
diff --git a/pySim/ts_31_103.py b/pySim/ts_31_103.py
index 5ca8279..e1f552f 100644
--- a/pySim/ts_31_103.py
+++ b/pySim/ts_31_103.py
@@ -24,6 +24,7 @@ Various constants from 3GPP TS 31.103 V16.1.0
from pySim.filesystem import *
from pySim.utils import *
+from pySim.tlv import *
from pySim.ts_51_011 import EF_AD, EF_SMS, EF_SMSS, EF_SMSR, EF_SMSP
from pySim.ts_31_102 import ADF_USIM, EF_FromPreferred
import pySim.ts_102_221
@@ -78,18 +79,27 @@ EF_ISIM_ADF_map = {
# TS 31.103 Section 4.2.2
class EF_IMPI(TransparentEF):
+ class nai(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
def __init__(self, fid='6f02', sfid=0x02, name='EF.IMPI', desc='IMS private user identity'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_IMPI.nai
# TS 31.103 Section 4.2.3
class EF_DOMAIN(TransparentEF):
+ class domain(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
def __init__(self, fid='6f05', sfid=0x05, name='EF.DOMAIN', desc='Home Network Domain Name'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_DOMAIN.domain
# TS 31.103 Section 4.2.4
class EF_IMPU(LinFixedEF):
+ class impu(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
def __init__(self, fid='6f04', sfid=0x04, name='EF.IMPU', desc='IMS public user identity'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_IMPU.impu
# TS 31.103 Section 4.2.7
class EF_IST(TransparentEF):
@@ -140,8 +150,11 @@ class EF_NAFKCA(LinFixedEF):
# TS 31.103 Section 4.2.16
class EF_UICCIARI(LinFixedEF):
+ class iari(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
def __init__(self, fid='6fe7', sfid=None, name='EF.UICCIARI', desc='UICC IARI'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_UICCIARI.iari
# TS 31.103 Section 4.2.18
class EF_IMSConfigData(BerTlvEF):
@@ -155,8 +168,11 @@ class EF_XCAPConfigData(BerTlvEF):
# TS 31.103 Section 4.2.20
class EF_WebRTCURI(TransparentEF):
+ class uri(BER_TLV_IE, tag=0x80):
+ _construct = GreedyString("utf8")
def __init__(self, fid='6ffa', sfid=None, name='EF.WebRTCURI', desc='WebRTC URI'):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_WebRTCURI.uri
# TS 31.103 Section 4.2.21
class EF_MuDMiDConfigData(BerTlvEF):
diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py
index 6ab07f0..2bc2e85 100644
--- a/pySim/ts_51_011.py
+++ b/pySim/ts_51_011.py
@@ -320,6 +320,7 @@ EF_SST_map = {
}
from pySim.utils import *
+from pySim.tlv import *
from struct import pack, unpack
from construct import *
from construct import Optional as COptional
@@ -533,6 +534,7 @@ class EF_CBMI(TransRecEF):
def __init__(self, fid='6f45', sfid=None, name='EF.CBMI', size={2,None}, rec_len=2,
desc='Cell Broadcast message identifier selection'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
+ self._construct = GreedyRange(Int16ub)
# TS 51.011 Section 10.3.15
class EF_ACC(TransparentEF):
@@ -617,18 +619,21 @@ class EF_CBMID(EF_CBMI):
def __init__(self, fid='6f48', sfid=None, name='EF.CBMID', size={2,None}, rec_len=2,
desc='Cell Broadcast Message Identifier for Data Download'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
+ self._construct = GreedyRange(Int16ub)
# TS 51.011 Section 10.3.27
class EF_ECC(TransRecEF):
def __init__(self, fid='6fb7', sfid=None, name='EF.ECC', size={3,15}, rec_len=3,
desc='Emergency Call Codes'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
+ self._construct = GreedyRange(BcdAdapter(Bytes(3)))
# TS 51.011 Section 10.3.28
class EF_CBMIR(TransRecEF):
def __init__(self, fid='6f50', sfid=None, name='EF.CBMIR', size={4,None}, rec_len=4,
desc='Cell Broadcast message identifier range selection'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
+ self._construct = GreedyRange(Struct('lower'/Int16ub, 'upper'/Int16ub))
# TS 51.011 Section 10.3.29
class EF_DCK(TransparentEF):
@@ -740,6 +745,20 @@ class EF_InvScan(TransparentEF):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = FlagsEnum(Byte, in_limited_service_mode=1, after_successful_plmn_selection=2)
+# TS 51.011 Section 4.2.58
+class EF_PNN(LinFixedEF):
+ class FullNameForNetwork(BER_TLV_IE, tag=0x43):
+ # TS 24.008 10.5.3.5a
+ pass
+ class ShortNameForNetwork(BER_TLV_IE, tag=0x45):
+ # TS 24.008 10.5.3.5a
+ pass
+ class NetworkNameCollection(TLV_IE_Collection, nested=[FullNameForNetwork, ShortNameForNetwork]):
+ pass
+ def __init__(self, fid='6fc5', sfid=None, name='EF.PNN', desc='PLMN Network Name'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_PNN.NetworkNameCollection
+
# TS 51.011 Section 10.3.42
class EF_OPL(LinFixedEF):
def __init__(self, fid='6fc6', sfid=None, name='EF.OPL', rec_len={8,8}, desc='Operator PLMN List'):
@@ -763,6 +782,18 @@ class EF_MWIS(LinFixedEF):
'num_waiting_fax'/Int8ub, 'num_waiting_email'/Int8ub,
'num_waiting_other'/Int8ub, 'num_waiting_videomail'/COptional(Int8ub))
+# TS 51.011 Section 10.3.66
+class EF_SPDI(TransparentEF):
+ class ServiceProviderPLMN(BER_TLV_IE, tag=0x80):
+ # flexible numbers of 3-byte PLMN records
+ _construct = GreedyRange(BcdAdapter(Bytes(3)))
+ class SPDI(BER_TLV_IE, tag=0xA3, nested=[ServiceProviderPLMN]):
+ pass
+ def __init__(self, fid='6fcd', sfid=None, name='EF.SPDI',
+ desc='Service Provider Display Information'):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc)
+ self._tlv = EF_SPDI.SPDI
+
# TS 51.011 Section 10.3.51
class EF_MMSN(LinFixedEF):
def __init__(self, fid='6fce', sfid=None, name='EF.MMSN', rec_len={4,20}, desc='MMS Notification'):
@@ -770,17 +801,42 @@ class EF_MMSN(LinFixedEF):
self._construct = Struct('mms_status'/Bytes(2), 'mms_implementation'/Bytes(1),
'mms_notification'/Bytes(this._.total_len-4), 'ext_record_nr'/Byte)
+# TS 51.011 Annex K.1
+class MMS_Implementation(BER_TLV_IE, tag=0x80):
+ _construct = FlagsEnum(Byte, WAP=1)
+
# TS 51.011 Section 10.3.53
class EF_MMSICP(TransparentEF):
+ class MMS_Relay_Server(BER_TLV_IE, tag=0x81):
+ # 3GPP TS 23.140
+ pass
+ class Interface_to_CN(BER_TLV_IE, tag=0x82):
+ # 3GPP TS 23.140
+ pass
+ class Gateway(BER_TLV_IE, tag=0x83):
+ # Address, Type of address, Port, Service, AuthType, AuthId, AuthPass / 3GPP TS 23.140
+ pass
+ class MMS_ConnectivityParamters(TLV_IE_Collection,
+ nested=[MMS_Implementation, MMS_Relay_Server, Interface_to_CN, Gateway]):
+ pass
def __init__(self, fid='6fd0', sfid=None, name='EF.MMSICP', size={1,None},
desc='MMS Issuer Connectivity Parameters'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
+ self._tlv = EF_MMSICP.MMS_ConnectivityParamters
# TS 51.011 Section 10.3.54
class EF_MMSUP(LinFixedEF):
+ class MMS_UserPref_ProfileName(BER_TLV_IE, tag=0x81):
+ pass
+ class MMS_UserPref_Info(BER_TLV_IE, tag=0x82):
+ pass
+ class MMS_User_Preferences(TLV_IE_Collection,
+ nested=[MMS_Implementation,MMS_UserPref_ProfileName,MMS_UserPref_Info]):
+ pass
def __init__(self, fid='6fd1', sfid=None, name='EF.MMSUP', rec_len={1,None},
desc='MMS User Preferences'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
+ self.tlv = EF_MMSUP.MMS_User_Preferences
# TS 51.011 Section 10.3.55
class EF_MMSUCP(TransparentEF):
@@ -834,7 +890,7 @@ class DF_GSM(CardDF):
EF_xPLMNwAcT('6f62', None, 'EF.HPLMNwAcT', 'HPLMN Selector with Access Technology'),
EF_CPBCCH(),
EF_InvScan(),
- LinFixedEF('6fc5', None,'EF.PNN', 'PLMN Network Name'),
+ EF_PNN(),
EF_OPL(),
EF_ADN('6fc7', None, 'EF.MBDN', 'Mailbox Dialling Numbers'),
EF_MBI(),
@@ -842,7 +898,7 @@ class DF_GSM(CardDF):
EF_ADN('6fcb', None, 'EF.CFIS', 'Call Forwarding Indication Status'),
EF_EXT('6fc8', None, 'EF.EXT6', 'Externsion6 (MBDN)'),
EF_EXT('6fcc', None, 'EF.EXT7', 'Externsion7 (CFIS)'),
- TransparentEF('6fcd', None, 'EF.SPDI', 'Service Provider Display Information'),
+ EF_SPDI(),
EF_MMSN(),
EF_EXT('6fcf', None, 'EF.EXT8', 'Extension8 (MMSN)'),
EF_MMSICP(),