From 5ad9aec98f35918ae06ff048422c2bc83c7b6b3a Mon Sep 17 00:00:00 2001 From: Supreeth Herle Date: Tue, 24 Mar 2020 17:26:40 +0100 Subject: pySim-read.py: Enabled reading P-CSCF address from ISIM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per 3GPP TS 31.103 version 14.2.0 Release 14, this EF can found under ADF.ISIM at File Id 6f09. This EF contains one or more Proxy Call Session Control Function addresses. The first record in the EF shall be considered to be of the highest priority If ISIM service n°1 and/or service n°5 is available, this file shall be present. Change-Id: I7a701212c84d3dc5d4c8ccbcf638c97ceda33654 --- pySim-read.py | 12 +++++++++++- pySim/cards.py | 13 +++++++++++++ pysim-testdata/sysmoISIM-SJA2.ok | 10 ++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/pySim-read.py b/pySim-read.py index c8b1a5d..b6eeab7 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -30,7 +30,7 @@ import re import sys from pySim.ts_51_011 import EF, DF, EF_SST_map, EF_AD_mode_map from pySim.ts_31_102 import EF_UST_map, EF_USIM_ADF_map -from pySim.ts_31_103 import EF_IST_map +from pySim.ts_31_103 import EF_IST_map, EF_ISIM_ADF_map from pySim.commands import SimCardCommands from pySim.cards import card_detect, Card @@ -294,6 +294,16 @@ if __name__ == '__main__': except Exception as e: print("ePDGSelection: Can't read file -- " + str(e)) + # Select ISIM application by its AID + if '9000' == card.select_adf_by_aid(adf="isim"): + #EF.P-CSCF - P-CSCF Address + try: + if card.file_exists(EF_ISIM_ADF_map['PCSCF']): + res = card.read_pcscf() + print("P-CSCF:\n%s" % (len(res) and res or '\tNot available\n',)) + except Exception as e: + print("P-CSCF: Can't read file -- " + str(e)) + # Check whether we have th AID of ISIM, if so select it by its AID # EF.IST - File Id in ADF ISIM : 6f07 if '9000' == card.select_adf_by_aid(adf="isim"): diff --git a/pySim/cards.py b/pySim/cards.py index 498c34e..b9bd699 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -25,6 +25,7 @@ from pySim.ts_51_011 import EF, DF from pySim.ts_31_102 import EF_USIM_ADF_map +from pySim.ts_31_103 import EF_ISIM_ADF_map from pySim.utils import * from smartcard.util import toBytes @@ -313,6 +314,18 @@ class IsimCard(Card): def __init__(self, ssc): super(IsimCard, self).__init__(ssc) + def read_pcscf(self): + rec_cnt = self._scc.record_count(EF_ISIM_ADF_map['PCSCF']) + pcscf_recs = "" + for i in range(0, rec_cnt): + (res, sw) = self._scc.read_record(EF_ISIM_ADF_map['PCSCF'], i + 1) + if sw == '9000': + content = dec_addr_tlv(res) + pcscf_recs += "%s" % (len(content) and content or '\tNot available\n') + else: + pcscf_recs += "\tP-CSCF: Can't read, response code = %s\n" % (sw) + return pcscf_recs + class _MagicSimBase(Card): """ diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok index 94c4328..03de57f 100644 --- a/pysim-testdata/sysmoISIM-SJA2.ok +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -172,6 +172,16 @@ ePDGSelection: ffffffffffff # unused ffffffffffff # unused +P-CSCF: + Not available + Not available + Not available + Not available + Not available + Not available + Not available + Not available + ISIM Service Table: 190200 Service 1 - P-CSCF address Service 4 - GBA-based Local Key Establishment Mechanism -- cgit v1.2.3