<p>herlesupreeth has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/16991">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Added feature to parse Service table based on SIM type. If USIM is present EF.UST service mapping is used else EF.SST service mapping is used<br><br>Change-Id: I6680e8c7f86326f72b98a33338e0dd5b58e55013<br>---<br>M pySim-read.py<br>A pySim/ts_31_102.py<br>M pySim/ts_51_011.py<br>M pySim/utils.py<br>M pysim-testdata/Fairwaves-SIM.ok<br>M pysim-testdata/Wavemobile-SIM.ok<br>M pysim-testdata/fakemagicsim.ok<br>M pysim-testdata/sysmoISIM-SJA2.ok<br>M pysim-testdata/sysmoUSIM-SJS1.ok<br>M pysim-testdata/sysmosim-gr1.ok<br>10 files changed, 259 insertions(+), 31 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/91/16991/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim-read.py b/pySim-read.py</span><br><span>index 4e17b42..1210852 100755</span><br><span>--- a/pySim-read.py</span><br><span>+++ b/pySim-read.py</span><br><span>@@ -28,7 +28,8 @@</span><br><span> import random</span><br><span> import re</span><br><span> import sys</span><br><span style="color: hsl(0, 100%, 40%);">-from pySim.ts_51_011 import EF, DF</span><br><span style="color: hsl(120, 100%, 40%);">+from pySim.ts_51_011 import EF, DF, EF_SST_map</span><br><span style="color: hsl(120, 100%, 40%);">+from pySim.ts_31_102 import EF_UST_map</span><br><span> </span><br><span> try:</span><br><span> import json</span><br><span>@@ -37,7 +38,7 @@</span><br><span> import simplejson as json</span><br><span> </span><br><span> from pySim.commands import SimCardCommands</span><br><span style="color: hsl(0, 100%, 40%);">-from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, format_xplmn_w_act, dec_spn</span><br><span style="color: hsl(120, 100%, 40%);">+from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, format_xplmn_w_act, dec_spn, parse_st</span><br><span> </span><br><span> </span><br><span> def parse_options():</span><br><span>@@ -114,31 +115,37 @@</span><br><span> else:</span><br><span> print("IMSI: Can't read, response code = %s" % (sw,))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- # EF.SST</span><br><span style="color: hsl(120, 100%, 40%);">+ # Determine whether the has just SIM or SIM+USIM or SIM+USIM+ISIM</span><br><span style="color: hsl(120, 100%, 40%);">+ # First (known) halves of the AID</span><br><span style="color: hsl(120, 100%, 40%);">+ aid_usim = "a0000000871002"</span><br><span style="color: hsl(120, 100%, 40%);">+ aid_isim = "a0000000871004"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ sim_type = []</span><br><span style="color: hsl(120, 100%, 40%);">+ # Find out how many records the EF.DIR has</span><br><span style="color: hsl(120, 100%, 40%);">+ aid_record_count = scc.record_count(['3f00', '2F00'])</span><br><span style="color: hsl(120, 100%, 40%);">+ for i in range(0, aid_record_count):</span><br><span style="color: hsl(120, 100%, 40%);">+ record = scc.read_record(['3f00', '2F00'], i + 1)</span><br><span style="color: hsl(120, 100%, 40%);">+ if aid_isim in record[0]:</span><br><span style="color: hsl(120, 100%, 40%);">+ sim_type.append("ISIM")</span><br><span style="color: hsl(120, 100%, 40%);">+ elif aid_usim in record[0]:</span><br><span style="color: hsl(120, 100%, 40%);">+ sim_type.append("USIM")</span><br><span style="color: hsl(120, 100%, 40%);">+ else:</span><br><span style="color: hsl(120, 100%, 40%);">+ sim_type.append("SIM")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ # EF.SST/EF.UST - Base on SIM type</span><br><span style="color: hsl(120, 100%, 40%);">+ # Both EF.SST and EF.UST have same identifier - 6F38</span><br><span> (res, sw) = scc.read_binary(EF['SST'])</span><br><span> if sw == '9000':</span><br><span style="color: hsl(0, 100%, 40%);">- swapped = swap_nibbles(res)</span><br><span style="color: hsl(0, 100%, 40%);">- print("USIM Service Table: %s" % swapped)</span><br><span style="color: hsl(0, 100%, 40%);">- if len(res) >= 24:</span><br><span style="color: hsl(0, 100%, 40%);">- byte12 = int(swapped[(12*2) - 2:(12*2)], 16)</span><br><span style="color: hsl(0, 100%, 40%);">- service96 = (byte12&0x80 == 0x80)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 96 - Non-Access Stratum configuration by USIM: %s" % service96)</span><br><span style="color: hsl(0, 100%, 40%);">- service95 = (byte12&0x40 == 0x40)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 95 - Support of UICC access to IMS: %s" % service95)</span><br><span style="color: hsl(0, 100%, 40%);">- service93 = (byte12&0x10 == 0x10)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 93 - Communication Control for IMS by USIM: %s" % service93)</span><br><span style="color: hsl(0, 100%, 40%);">- if len(res) >= 6:</span><br><span style="color: hsl(0, 100%, 40%);">- byte3 = int(swapped[(3*2) - 2:(3*2)], 16)</span><br><span style="color: hsl(0, 100%, 40%);">- service21 = (byte3&0x10 == 0x10)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 21 - MSISDN: %s" % service21)</span><br><span style="color: hsl(0, 100%, 40%);">- if len(res) >= 10:</span><br><span style="color: hsl(0, 100%, 40%);">- byte5 = int(swapped[(5*2) - 2:(5*2)], 16)</span><br><span style="color: hsl(0, 100%, 40%);">- service34 = (byte5&0x02 == 0x02)</span><br><span style="color: hsl(0, 100%, 40%);">- service35 = (byte5&0x04 == 0x04)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 34 - Enabled Services Table: %s" % service34)</span><br><span style="color: hsl(0, 100%, 40%);">- print("Service 35 - APN Control List (ACL): %s" % service35)</span><br><span style="color: hsl(120, 100%, 40%);">+ # Get list of available services</span><br><span style="color: hsl(120, 100%, 40%);">+ avail_srvcs = parse_st(res)</span><br><span style="color: hsl(120, 100%, 40%);">+ srvc_map = EF_SST_map</span><br><span style="color: hsl(120, 100%, 40%);">+ if "USIM" in sim_type:</span><br><span style="color: hsl(120, 100%, 40%);">+ srvc_map = EF_UST_map</span><br><span style="color: hsl(120, 100%, 40%);">+ # Print those we're interested in</span><br><span style="color: hsl(120, 100%, 40%);">+ for s in (96, 95, 93, 21, 34, 35):</span><br><span style="color: hsl(120, 100%, 40%);">+ print('Service %d - %s: %s' % (s, srvc_map[s], s in avail_srvcs))</span><br><span> else:</span><br><span style="color: hsl(0, 100%, 40%);">- print("USIM Service Table: Can't read, response code = %s" % (sw,))</span><br><span style="color: hsl(120, 100%, 40%);">+ print("Service Table: Can't read, response code = %s" % (sw,))</span><br><span> </span><br><span> # EF.SMSP</span><br><span> (res, sw) = scc.read_record(['3f00', '7f10', '6f42'], 1)</span><br><span>diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py</span><br><span>new file mode 100644</span><br><span>index 0000000..c29aa04</span><br><span>--- /dev/null</span><br><span>+++ b/pySim/ts_31_102.py</span><br><span>@@ -0,0 +1,138 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+# -*- coding: utf-8 -*-</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+""" </span><br><span style="color: hsl(120, 100%, 40%);">+Various constants from ETSI TS 131 102</span><br><span style="color: hsl(120, 100%, 40%);">+"""</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright (C) 2020 Supreeth Herle <herlesupreeth@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is free software: you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+# the Free Software Foundation, either version 2 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+# (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+# along with this program. If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Mapping between USIM Service Number and its description</span><br><span style="color: hsl(120, 100%, 40%);">+EF_UST_map = {</span><br><span style="color: hsl(120, 100%, 40%);">+ 1: 'Local Phone Book',</span><br><span style="color: hsl(120, 100%, 40%);">+ 2: 'Fixed Dialling Numbers (FDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 3: 'Extension 2',</span><br><span style="color: hsl(120, 100%, 40%);">+ 4: 'Service Dialling Numbers (SDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 5: 'Extension3',</span><br><span style="color: hsl(120, 100%, 40%);">+ 6: 'Barred Dialling Numbers (BDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 7: 'Extension4',</span><br><span style="color: hsl(120, 100%, 40%);">+ 8: 'Outgoing Call Information (OCI and OCT)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 9: 'Incoming Call Information (ICI and ICT)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 10: 'Short Message Storage (SMS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 11: 'Short Message Status Reports (SMSR)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 12: 'Short Message Service Parameters (SMSP)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 13: 'Advice of Charge (AoC)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 14: 'Capability Configuration Parameters 2 (CCP2)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 15: 'Cell Broadcast Message Identifier',</span><br><span style="color: hsl(120, 100%, 40%);">+ 16: 'Cell Broadcast Message Identifier Ranges',</span><br><span style="color: hsl(120, 100%, 40%);">+ 17: 'Group Identifier Level 1',</span><br><span style="color: hsl(120, 100%, 40%);">+ 18: 'Group Identifier Level 2',</span><br><span style="color: hsl(120, 100%, 40%);">+ 19: 'Service Provider Name',</span><br><span style="color: hsl(120, 100%, 40%);">+ 20: 'User controlled PLMN selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 21: 'MSISDN',</span><br><span style="color: hsl(120, 100%, 40%);">+ 22: 'Image (IMG)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 23: 'Support of Localised Service Areas (SoLSA)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 24: 'Enhanced Multi-Level Precedence and Pre-emption Service',</span><br><span style="color: hsl(120, 100%, 40%);">+ 25: 'Automatic Answer for eMLPP',</span><br><span style="color: hsl(120, 100%, 40%);">+ 26: 'RFU',</span><br><span style="color: hsl(120, 100%, 40%);">+ 27: 'GSM Access',</span><br><span style="color: hsl(120, 100%, 40%);">+ 28: 'Data download via SMS-PP',</span><br><span style="color: hsl(120, 100%, 40%);">+ 29: 'Data download via SMS-CB',</span><br><span style="color: hsl(120, 100%, 40%);">+ 30: 'Call Control by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 31: 'MO-SMS Control by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 32: 'RUN AT COMMAND command',</span><br><span style="color: hsl(120, 100%, 40%);">+ 33: 'shall be set to 1',</span><br><span style="color: hsl(120, 100%, 40%);">+ 34: 'Enabled Services Table',</span><br><span style="color: hsl(120, 100%, 40%);">+ 35: 'APN Control List (ACL)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 36: 'Depersonalisation Control Keys',</span><br><span style="color: hsl(120, 100%, 40%);">+ 37: 'Co-operative Network List',</span><br><span style="color: hsl(120, 100%, 40%);">+ 38: 'GSM security context',</span><br><span style="color: hsl(120, 100%, 40%);">+ 39: 'CPBCCH Information',</span><br><span style="color: hsl(120, 100%, 40%);">+ 40: 'Investigation Scan',</span><br><span style="color: hsl(120, 100%, 40%);">+ 41: 'MexE',</span><br><span style="color: hsl(120, 100%, 40%);">+ 42: 'Operator controlled PLMN selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 43: 'HPLMN selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 44: 'Extension 5',</span><br><span style="color: hsl(120, 100%, 40%);">+ 45: 'PLMN Network Name',</span><br><span style="color: hsl(120, 100%, 40%);">+ 46: 'Operator PLMN List',</span><br><span style="color: hsl(120, 100%, 40%);">+ 47: 'Mailbox Dialling Numbers',</span><br><span style="color: hsl(120, 100%, 40%);">+ 48: 'Message Waiting Indication Status',</span><br><span style="color: hsl(120, 100%, 40%);">+ 49: 'Call Forwarding Indication Status',</span><br><span style="color: hsl(120, 100%, 40%);">+ 50: 'Reserved and shall be ignored',</span><br><span style="color: hsl(120, 100%, 40%);">+ 51: 'Service Provider Display Information',</span><br><span style="color: hsl(120, 100%, 40%);">+ 52: 'Multimedia Messaging Service (MMS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 53: 'Extension 8',</span><br><span style="color: hsl(120, 100%, 40%);">+ 54: 'Call control on GPRS by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 55: 'MMS User Connectivity Parameters',</span><br><span style="color: hsl(120, 100%, 40%);">+ 56: 'Network\'s indication of alerting in the MS (NIA)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 57: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 58: 'VBS Group Identifier List (EFVBS and EFVBSS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 59: 'Pseudonym',</span><br><span style="color: hsl(120, 100%, 40%);">+ 60: 'User Controlled PLMN selector for I-WLAN access',</span><br><span style="color: hsl(120, 100%, 40%);">+ 61: 'Operator Controlled PLMN selector for I-WLAN access',</span><br><span style="color: hsl(120, 100%, 40%);">+ 62: 'User controlled WSID list',</span><br><span style="color: hsl(120, 100%, 40%);">+ 63: 'Operator controlled WSID list',</span><br><span style="color: hsl(120, 100%, 40%);">+ 64: 'VGCS security',</span><br><span style="color: hsl(120, 100%, 40%);">+ 65: 'VBS security',</span><br><span style="color: hsl(120, 100%, 40%);">+ 66: 'WLAN Reauthentication Identity',</span><br><span style="color: hsl(120, 100%, 40%);">+ 67: 'Multimedia Messages Storage',</span><br><span style="color: hsl(120, 100%, 40%);">+ 68: 'Generic Bootstrapping Architecture (GBA)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 69: 'MBMS security',</span><br><span style="color: hsl(120, 100%, 40%);">+ 70: 'Data download via USSD and USSD application mode',</span><br><span style="color: hsl(120, 100%, 40%);">+ 71: 'Equivalent HPLMN',</span><br><span style="color: hsl(120, 100%, 40%);">+ 72: 'Additional TERMINAL PROFILE after UICC activation',</span><br><span style="color: hsl(120, 100%, 40%);">+ 73: 'Equivalent HPLMN Presentation Indication',</span><br><span style="color: hsl(120, 100%, 40%);">+ 74: 'Last RPLMN Selection Indication',</span><br><span style="color: hsl(120, 100%, 40%);">+ 75: 'OMA BCAST Smart Card Profile',</span><br><span style="color: hsl(120, 100%, 40%);">+ 76: 'GBA-based Local Key Establishment Mechanism',</span><br><span style="color: hsl(120, 100%, 40%);">+ 77: 'Terminal Applications',</span><br><span style="color: hsl(120, 100%, 40%);">+ 78: 'Service Provider Name Icon',</span><br><span style="color: hsl(120, 100%, 40%);">+ 79: 'PLMN Network Name Icon',</span><br><span style="color: hsl(120, 100%, 40%);">+ 80: 'Connectivity Parameters for USIM IP connections',</span><br><span style="color: hsl(120, 100%, 40%);">+ 81: 'Home I-WLAN Specific Identifier List',</span><br><span style="color: hsl(120, 100%, 40%);">+ 82: 'I-WLAN Equivalent HPLMN Presentation Indication',</span><br><span style="color: hsl(120, 100%, 40%);">+ 83: 'I-WLAN HPLMN Priority Indication',</span><br><span style="color: hsl(120, 100%, 40%);">+ 84: 'I-WLAN Last Registered PLMN',</span><br><span style="color: hsl(120, 100%, 40%);">+ 85: 'EPS Mobility Management Information',</span><br><span style="color: hsl(120, 100%, 40%);">+ 86: 'Allowed CSG Lists and corresponding indications',</span><br><span style="color: hsl(120, 100%, 40%);">+ 87: 'Call control on EPS PDN connection by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 88: 'HPLMN Direct Access',</span><br><span style="color: hsl(120, 100%, 40%);">+ 89: 'eCall Data',</span><br><span style="color: hsl(120, 100%, 40%);">+ 90: 'Operator CSG Lists and corresponding indications',</span><br><span style="color: hsl(120, 100%, 40%);">+ 91: 'Support for SM-over-IP',</span><br><span style="color: hsl(120, 100%, 40%);">+ 92: 'Support of CSG Display Control',</span><br><span style="color: hsl(120, 100%, 40%);">+ 93: 'Communication Control for IMS by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 94: 'Extended Terminal Applications',</span><br><span style="color: hsl(120, 100%, 40%);">+ 95: 'Support of UICC access to IMS',</span><br><span style="color: hsl(120, 100%, 40%);">+ 96: 'Non-Access Stratum configuration by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 97: 'PWS configuration by USIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 98: 'RFU',</span><br><span style="color: hsl(120, 100%, 40%);">+ 99: 'URI support by UICC',</span><br><span style="color: hsl(120, 100%, 40%);">+ 100: 'Extended EARFCN support',</span><br><span style="color: hsl(120, 100%, 40%);">+ 101: 'ProSe',</span><br><span style="color: hsl(120, 100%, 40%);">+ 102: 'USAT Application Pairing',</span><br><span style="color: hsl(120, 100%, 40%);">+ 103: 'Media Type support',</span><br><span style="color: hsl(120, 100%, 40%);">+ 104: 'IMS call disconnection cause',</span><br><span style="color: hsl(120, 100%, 40%);">+ 105: 'URI support for MO SHORT MESSAGE CONTROL',</span><br><span style="color: hsl(120, 100%, 40%);">+ 106: 'ePDG configuration Information support',</span><br><span style="color: hsl(120, 100%, 40%);">+ 107: 'ePDG configuration Information configured',</span><br><span style="color: hsl(120, 100%, 40%);">+ 108: 'ACDC support',</span><br><span style="color: hsl(120, 100%, 40%);">+ 109: 'MCPTT',</span><br><span style="color: hsl(120, 100%, 40%);">+ 110: 'ePDG configuration Information for Emergency Service support',</span><br><span style="color: hsl(120, 100%, 40%);">+ 111: 'ePDG configuration Information for Emergency Service configured',</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>\ No newline at end of file</span><br><span>diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py</span><br><span>index 754d57f..1cec91f 100644</span><br><span>--- a/pySim/ts_51_011.py</span><br><span>+++ b/pySim/ts_51_011.py</span><br><span>@@ -249,3 +249,66 @@</span><br><span> 'MMSUP': DF['GSM']+[EF_num['MMSUP']],</span><br><span> 'MMSUCP': DF['GSM']+[EF_num['MMSUCP']],</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Mapping between SIM Service Number and its description</span><br><span style="color: hsl(120, 100%, 40%);">+EF_SST_map = {</span><br><span style="color: hsl(120, 100%, 40%);">+ 1: 'CHV1 disable function',</span><br><span style="color: hsl(120, 100%, 40%);">+ 2: 'Abbreviated Dialling Numbers (ADN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 3: 'Fixed Dialling Numbers (FDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 4: 'Short Message Storage (SMS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 5: 'Advice of Charge (AoC)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 6: 'Capability Configuration Parameters (CCP)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 7: 'PLMN selector',</span><br><span style="color: hsl(120, 100%, 40%);">+ 8: 'RFU',</span><br><span style="color: hsl(120, 100%, 40%);">+ 9: 'MSISDN',</span><br><span style="color: hsl(120, 100%, 40%);">+ 10: 'Extension1',</span><br><span style="color: hsl(120, 100%, 40%);">+ 11: 'Extension2',</span><br><span style="color: hsl(120, 100%, 40%);">+ 12: 'SMS Parameters',</span><br><span style="color: hsl(120, 100%, 40%);">+ 13: 'Last Number Dialled (LND)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 14: 'Cell Broadcast Message Identifier',</span><br><span style="color: hsl(120, 100%, 40%);">+ 15: 'Group Identifier Level 1',</span><br><span style="color: hsl(120, 100%, 40%);">+ 16: 'Group Identifier Level 2',</span><br><span style="color: hsl(120, 100%, 40%);">+ 17: 'Service Provider Name',</span><br><span style="color: hsl(120, 100%, 40%);">+ 18: 'Service Dialling Numbers (SDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 19: 'Extension3',</span><br><span style="color: hsl(120, 100%, 40%);">+ 20: 'RFU',</span><br><span style="color: hsl(120, 100%, 40%);">+ 21: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 22: 'VBS Group Identifier List (EFVBS and EFVBSS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 23: 'enhanced Multi-Level Precedence and Pre-emption Service',</span><br><span style="color: hsl(120, 100%, 40%);">+ 24: 'Automatic Answer for eMLPP',</span><br><span style="color: hsl(120, 100%, 40%);">+ 25: 'Data download via SMS-CB',</span><br><span style="color: hsl(120, 100%, 40%);">+ 26: 'Data download via SMS-PP',</span><br><span style="color: hsl(120, 100%, 40%);">+ 27: 'Menu selection',</span><br><span style="color: hsl(120, 100%, 40%);">+ 28: 'Call control',</span><br><span style="color: hsl(120, 100%, 40%);">+ 29: 'Proactive SIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 30: 'Cell Broadcast Message Identifier Ranges',</span><br><span style="color: hsl(120, 100%, 40%);">+ 31: 'Barred Dialling Numbers (BDN)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 32: 'Extension4',</span><br><span style="color: hsl(120, 100%, 40%);">+ 33: 'De-personalization Control Keys',</span><br><span style="color: hsl(120, 100%, 40%);">+ 34: 'Co-operative Network List',</span><br><span style="color: hsl(120, 100%, 40%);">+ 35: 'Short Message Status Reports',</span><br><span style="color: hsl(120, 100%, 40%);">+ 36: 'Network\'s indication of alerting in the MS',</span><br><span style="color: hsl(120, 100%, 40%);">+ 37: 'Mobile Originated Short Message control by SIM',</span><br><span style="color: hsl(120, 100%, 40%);">+ 38: 'GPRS',</span><br><span style="color: hsl(120, 100%, 40%);">+ 39: 'Image (IMG)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 40: 'SoLSA (Support of Local Service Area)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 41: 'USSD string data object supported in Call Control',</span><br><span style="color: hsl(120, 100%, 40%);">+ 42: 'RUN AT COMMAND command',</span><br><span style="color: hsl(120, 100%, 40%);">+ 43: 'User controlled PLMN Selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 44: 'Operator controlled PLMN Selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 45: 'HPLMN Selector with Access Technology',</span><br><span style="color: hsl(120, 100%, 40%);">+ 46: 'CPBCCH Information',</span><br><span style="color: hsl(120, 100%, 40%);">+ 47: 'Investigation Scan',</span><br><span style="color: hsl(120, 100%, 40%);">+ 48: 'Extended Capability Configuration Parameters',</span><br><span style="color: hsl(120, 100%, 40%);">+ 49: 'MExE',</span><br><span style="color: hsl(120, 100%, 40%);">+ 50: 'Reserved and shall be ignored',</span><br><span style="color: hsl(120, 100%, 40%);">+ 51: 'PLMN Network Name',</span><br><span style="color: hsl(120, 100%, 40%);">+ 52: 'Operator PLMN List',</span><br><span style="color: hsl(120, 100%, 40%);">+ 53: 'Mailbox Dialling Numbers',</span><br><span style="color: hsl(120, 100%, 40%);">+ 54: 'Message Waiting Indication Status',</span><br><span style="color: hsl(120, 100%, 40%);">+ 55: 'Call Forwarding Indication Status',</span><br><span style="color: hsl(120, 100%, 40%);">+ 56: 'Service Provider Display Information',</span><br><span style="color: hsl(120, 100%, 40%);">+ 57: 'Multimedia Messaging Service (MMS)',</span><br><span style="color: hsl(120, 100%, 40%);">+ 58: 'Extension 8',</span><br><span style="color: hsl(120, 100%, 40%);">+ 59: 'MMS User Connectivity Parameters',</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>\ No newline at end of file</span><br><span>diff --git a/pySim/utils.py b/pySim/utils.py</span><br><span>index fbe3e47..2d71ade 100644</span><br><span>--- a/pySim/utils.py</span><br><span>+++ b/pySim/utils.py</span><br><span>@@ -252,4 +252,24 @@</span><br><span> mcc += digit2 * 10</span><br><span> if digit3 != 0XF:</span><br><span> mcc += digit3</span><br><span style="color: hsl(0, 100%, 40%);">- return mcc</span><br><span>\ No newline at end of file</span><br><span style="color: hsl(120, 100%, 40%);">+ return mcc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def parse_st(st):</span><br><span style="color: hsl(120, 100%, 40%);">+ """</span><br><span style="color: hsl(120, 100%, 40%);">+ Parses the EF S/UST and returns available/supported services</span><br><span style="color: hsl(120, 100%, 40%);">+ """</span><br><span style="color: hsl(120, 100%, 40%);">+ swapped = swap_nibbles(st)</span><br><span style="color: hsl(120, 100%, 40%);">+ print("Service Table: %s" % swapped)</span><br><span style="color: hsl(120, 100%, 40%);">+ swapped_bytes = [swapped[i:i+2] for i in range(0, len(swapped), 2) ]</span><br><span style="color: hsl(120, 100%, 40%);">+ avail_srvc = []</span><br><span style="color: hsl(120, 100%, 40%);">+ # Get each byte and check for available services</span><br><span style="color: hsl(120, 100%, 40%);">+ for i in range(0, len(swapped_bytes)):</span><br><span style="color: hsl(120, 100%, 40%);">+ byte = int(swapped_bytes[i], 16)</span><br><span style="color: hsl(120, 100%, 40%);">+ for j in range(1, 9):</span><br><span style="color: hsl(120, 100%, 40%);">+ if byte&0x01 == 0x01:</span><br><span style="color: hsl(120, 100%, 40%);">+ # Byte X contains info about Services num (8X-7) to num (8X)</span><br><span style="color: hsl(120, 100%, 40%);">+ # bit = 1: service available</span><br><span style="color: hsl(120, 100%, 40%);">+ # bit = 0: service not available</span><br><span style="color: hsl(120, 100%, 40%);">+ avail_srvc.append((8*i) + j)</span><br><span style="color: hsl(120, 100%, 40%);">+ byte = byte >> 1</span><br><span style="color: hsl(120, 100%, 40%);">+ return avail_srvc</span><br><span>diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok</span><br><span>index 149b9b4..d1b62f2 100644</span><br><span>--- a/pysim-testdata/Fairwaves-SIM.ok</span><br><span>+++ b/pysim-testdata/Fairwaves-SIM.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 8988219000000117833</span><br><span> IMSI: 001010000000111</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: ffc33cff30f0fff000f0ff300f0c</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: ffc33cff30f0fff000f0ff300f0c</span><br><span> Service 96 - Non-Access Stratum configuration by USIM: False</span><br><span> Service 95 - Support of UICC access to IMS: False</span><br><span> Service 93 - Communication Control for IMS by USIM: True</span><br><span>diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok</span><br><span>index 8214a4c..0347401 100644</span><br><span>--- a/pysim-testdata/Wavemobile-SIM.ok</span><br><span>+++ b/pysim-testdata/Wavemobile-SIM.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 89445310150011013678</span><br><span> IMSI: 001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: ff33fff0c300fff000c00f0c0f300000</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: ff33fff0c300fff000c00f0c0f300000</span><br><span> Service 96 - Non-Access Stratum configuration by USIM: False</span><br><span> Service 95 - Support of UICC access to IMS: False</span><br><span> Service 93 - Communication Control for IMS by USIM: False</span><br><span>diff --git a/pysim-testdata/fakemagicsim.ok b/pysim-testdata/fakemagicsim.ok</span><br><span>index be24539..be5f8f4 100644</span><br><span>--- a/pysim-testdata/fakemagicsim.ok</span><br><span>+++ b/pysim-testdata/fakemagicsim.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 1122334455667788990</span><br><span> IMSI: 001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: fff3fff030000f3000c0</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: fff3fff030000f3000c0</span><br><span> Service 21 - MSISDN: True</span><br><span> Service 34 - Enabled Services Table: False</span><br><span> Service 35 - APN Control List (ACL): False</span><br><span>diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok</span><br><span>index 7161b55..d40944c 100644</span><br><span>--- a/pysim-testdata/sysmoISIM-SJA2.ok</span><br><span>+++ b/pysim-testdata/sysmoISIM-SJA2.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 8988211900000000004</span><br><span> IMSI: 001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: ff33fffff300f3f003c00f3c0f0000</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: ff33fffff300f3f003c00f3c0f0000</span><br><span> Service 96 - Non-Access Stratum configuration by USIM: False</span><br><span> Service 95 - Support of UICC access to IMS: False</span><br><span> Service 93 - Communication Control for IMS by USIM: True</span><br><span>diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok</span><br><span>index 25f14d8..43fa43b 100644</span><br><span>--- a/pysim-testdata/sysmoUSIM-SJS1.ok</span><br><span>+++ b/pysim-testdata/sysmoUSIM-SJS1.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 1122334455667788990</span><br><span> IMSI: 001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: fff3fffff300f3f10fc0000c0f0000</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: fff3fffff300f3f10fc0000c0f0000</span><br><span> Service 96 - Non-Access Stratum configuration by USIM: False</span><br><span> Service 95 - Support of UICC access to IMS: False</span><br><span> Service 93 - Communication Control for IMS by USIM: False</span><br><span>diff --git a/pysim-testdata/sysmosim-gr1.ok b/pysim-testdata/sysmosim-gr1.ok</span><br><span>index b26433b..f466f9f 100644</span><br><span>--- a/pysim-testdata/sysmosim-gr1.ok</span><br><span>+++ b/pysim-testdata/sysmosim-gr1.ok</span><br><span>@@ -2,7 +2,7 @@</span><br><span> Reading ...</span><br><span> ICCID: 1122334455667788990</span><br><span> IMSI: 001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-USIM Service Table: fff3fff0f00000300000</span><br><span style="color: hsl(120, 100%, 40%);">+Service Table: fff3fff0f00000300000</span><br><span> Service 21 - MSISDN: True</span><br><span> Service 34 - Enabled Services Table: False</span><br><span> Service 35 - APN Control List (ACL): False</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/16991">change 16991</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/pysim/+/16991"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6680e8c7f86326f72b98a33338e0dd5b58e55013 </div>
<div style="display:none"> Gerrit-Change-Number: 16991 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: herlesupreeth <herlesupreeth@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>