mirror of https://gerrit.osmocom.org/pysim
sysmoISIM-SJA2: Add support for programming IMS public user identity
This EF contains one or more records, with each record able to hold a public SIP Identity (SIP URI) of the user. EF.IMPU consist of URI TLV data object values see IETF RFC 3261. The URI shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629 ./pySim-prog.py -p 0 -x 001 -y 01 -s 8988211900000000004 -i 001011234567895 -k 8baf473f2f8fd09487cccbd7097c6862 --op 11111111111111111111111111111111 -o 8E27B6AF0E692E750F32667A3B14605D -a 85524953 -n isim.test --msisdn 0598765432100 --epdgid epdg.epc.mnc001.mcc001.pub.3gppnetwork.org --pcscf pcscf.ims.testop.org --ims-hdomain ims.testop.org --impi 1234567895@ims.testop.org --impu sip:5987654321@ims.testop.org Change-Id: If10bc2e50eca390b81755b5cc7211e695233612dchanges/55/21955/1
parent
a5bd9684d3
commit
be7007e1d9
|
@ -162,6 +162,9 @@ def parse_options():
|
|||
parser.add_option("--impi", dest="impi",
|
||||
help="Set IMS private user identity",
|
||||
)
|
||||
parser.add_option("--impu", dest="impu",
|
||||
help="Set IMS public user identity",
|
||||
)
|
||||
parser.add_option("--read-imsi", dest="read_imsi", action="store_true",
|
||||
help="Read the IMSI from the CARD", default=False
|
||||
)
|
||||
|
@ -471,7 +474,8 @@ def gen_parameters(opts):
|
|||
'epdgSelection' : opts.epdgSelection,
|
||||
'pcscf' : opts.pcscf,
|
||||
'ims_hdomain': opts.ims_hdomain,
|
||||
'impi' : opts.impi
|
||||
'impi' : opts.impi,
|
||||
'impu' : opts.impu,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -411,6 +411,19 @@ class IsimCard(Card):
|
|||
impu_recs += "IMS public user identity: Can't read, response code = %s\n" % (sw)
|
||||
return impu_recs
|
||||
|
||||
def update_impu(self, impu=None):
|
||||
hex_str = ""
|
||||
if impu:
|
||||
hex_str = s2h(impu)
|
||||
# Build TLV
|
||||
tlv = TLV(['80'])
|
||||
content = tlv.build({'80': hex_str})
|
||||
|
||||
rec_size_bytes = self._scc.record_size(EF_ISIM_ADF_map['IMPU'])
|
||||
impu_tlv = rpad(content, rec_size_bytes*2)
|
||||
data, sw = self._scc.update_record(EF_ISIM_ADF_map['IMPU'], 1, impu_tlv)
|
||||
return sw
|
||||
|
||||
|
||||
class _MagicSimBase(Card):
|
||||
"""
|
||||
|
@ -1323,6 +1336,17 @@ class SysmoISIMSJA2(UsimCard, IsimCard):
|
|||
if sw != '9000':
|
||||
print("Programming IMPI failed with code %s"%sw)
|
||||
|
||||
# update EF.IMPU in ADF.ISIM
|
||||
# TODO: Validate IMPU input
|
||||
# Support multiple IMPU if there is enough space
|
||||
if self.file_exists(EF_ISIM_ADF_map['IMPU']):
|
||||
if p.get('impu'):
|
||||
sw = self.update_impu(p['impu'])
|
||||
else:
|
||||
sw = self.update_impu()
|
||||
if sw != '9000':
|
||||
print("Programming IMPU failed with code %s"%sw)
|
||||
|
||||
if '9000' == self.select_adf_by_aid():
|
||||
# update EF-USIM_AUTH_KEY in ADF.USIM
|
||||
if p.get('ki'):
|
||||
|
|
Loading…
Reference in New Issue