<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>