aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSupreeth Herle <herlesupreeth@gmail.com>2019-11-30 10:37:09 +0100
committerVadim Yanitskiy <axilirator@gmail.com>2020-02-15 03:26:49 +0700
commitd24f1635135f72743345c0296dd469ec037eff5b (patch)
tree8bb79f72e054e439a21934c5ae1c41bd44c9d2aa
parentf442fb4d6985000c08cf3d55243609163919a388 (diff)
Fix MCC and MCC representation in the output of pySim-read
-rw-r--r--pySim/utils.py55
-rw-r--r--pysim-testdata/Fairwaves-SIM.ok2
-rw-r--r--pysim-testdata/Wavemobile-SIM.ok4
-rw-r--r--pysim-testdata/sysmoISIM-SJA2.ok4
-rw-r--r--pysim-testdata/sysmoUSIM-SJS1.ok6
5 files changed, 48 insertions, 23 deletions
diff --git a/pySim/utils.py b/pySim/utils.py
index e8dd531..af4a491 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -124,10 +124,7 @@ def dec_mcc_from_plmn(plmn):
digit3 = ia[1] & 0x0F # 2nd byte, LSB
if digit3 == 0xF and digit2 == 0xF and digit1 == 0xF:
return 0xFFF # 4095
- mcc = digit1 * 100
- mcc += digit2 * 10
- mcc += digit3
- return mcc
+ return derive_mcc(digit1, digit2, digit3)
def dec_mnc_from_plmn(plmn):
ia = h2i(plmn)
@@ -136,16 +133,7 @@ def dec_mnc_from_plmn(plmn):
digit3 = (ia[1] & 0xF0) >> 4 # 2nd byte, MSB
if digit3 == 0xF and digit2 == 0xF and digit1 == 0xF:
return 0xFFF # 4095
- mnc = 0
- # signifies two digit MNC
- if digit3 == 0xF:
- mnc += digit1 * 10
- mnc += digit2
- else:
- mnc += digit1 * 100
- mnc += digit2 * 10
- mnc += digit3
- return mnc
+ return derive_mnc(digit1, digit2, digit3)
def dec_act(twohexbytes):
act_list = [
@@ -182,7 +170,7 @@ def format_xplmn_w_act(hexstr):
if rec_info['mcc'] == 0xFFF and rec_info['mnc'] == 0xFFF:
rec_str = "unused"
else:
- rec_str = "MCC: %3s MNC: %3s AcT: %s" % (rec_info['mcc'], rec_info['mnc'], ", ".join(rec_info['act']))
+ rec_str = "MCC: %03d MNC: %03d AcT: %s" % (rec_info['mcc'], rec_info['mnc'], ", ".join(rec_info['act']))
s += "\t%s # %s\n" % (rec_data, rec_str)
return s
@@ -233,3 +221,40 @@ def mnc_from_imsi(imsi, long=False):
return imsi[3:5]
else:
return None
+
+def derive_mcc(digit1, digit2, digit3):
+ """
+ Derive decimal representation of the MCC (Mobile Country Code)
+ from three given digits.
+ """
+
+ mcc = 0
+
+ if digit1 != 0x0f:
+ mcc += digit1 * 100
+ if digit2 != 0x0f:
+ mcc += digit2 * 10
+ if digit3 != 0x0f:
+ mcc += digit3
+
+ return mcc
+
+def derive_mnc(digit1, digit2, digit3=0x0f):
+ """
+ Derive decimal representation of the MNC (Mobile Network Code)
+ from two or (optionally) three given digits.
+ """
+
+ mnc = 0
+
+ # 3-rd digit is optional for the MNC. If present
+ # the algorythm is the same as for the MCC.
+ if digit3 != 0x0f:
+ return derive_mcc(digit1, digit2, digit3)
+
+ if digit1 != 0x0f:
+ mnc += digit1 * 10
+ if digit2 != 0x0f:
+ mnc += digit2
+
+ return mnc
diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok
index 94df376..cd6e33b 100644
--- a/pysim-testdata/Fairwaves-SIM.ok
+++ b/pysim-testdata/Fairwaves-SIM.ok
@@ -28,7 +28,7 @@ OPLMNwAcT:
ffffff0000 # unused
HPLMNAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok
index 8b14a30..30aeed8 100644
--- a/pysim-testdata/Wavemobile-SIM.ok
+++ b/pysim-testdata/Wavemobile-SIM.ok
@@ -8,7 +8,7 @@ Display HPLMN: False
Display OPLMN: False
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
PLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
@@ -26,7 +26,7 @@ PLMNwAcT:
ffffff0000 # unused
OPLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok
index 77c4878..a64aa8b 100644
--- a/pysim-testdata/sysmoISIM-SJA2.ok
+++ b/pysim-testdata/sysmoISIM-SJA2.ok
@@ -8,7 +8,7 @@ Display HPLMN: False
Display OPLMN: False
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
PLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
@@ -22,7 +22,7 @@ PLMNwAcT:
ffffff0000 # unused
OPLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok
index d0523f8..8def4e3 100644
--- a/pysim-testdata/sysmoUSIM-SJS1.ok
+++ b/pysim-testdata/sysmoUSIM-SJS1.ok
@@ -8,7 +8,7 @@ Display HPLMN: True
Display OPLMN: True
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
PLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
@@ -22,7 +22,7 @@ PLMNwAcT:
ffffff0000 # unused
OPLMNwAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused
@@ -36,7 +36,7 @@ OPLMNwAcT:
ffffff0000 # unused
HPLMNAcT:
- fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
+ fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
ffffff0000 # unused
ffffff0000 # unused
ffffff0000 # unused