<p>herlesupreeth has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/16949">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Added support for MSISDN programming plus check for SPN length<br><br>Change-Id: I4399aa10a266fff0432cddfe33937b8b96ca0758<br>---<br>M pySim-prog.py<br>M pySim-read.py<br>M pySim/cards.py<br>3 files changed, 38 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/49/16949/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim-prog.py b/pySim-prog.py</span><br><span>index 739c7b1..14ea11d 100755</span><br><span>--- a/pySim-prog.py</span><br><span>+++ b/pySim-prog.py</span><br><span>@@ -266,21 +266,21 @@</span><br><span> # Digitize MCC/MNC (5 or 6 digits)</span><br><span> plmn_digits = _mcc_mnc_digits(mcc, mnc)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if opts.name is not None and len(opts.name) > 16:</span><br><span style="color: hsl(0, 100%, 40%);">- raise ValueError('Service Provider Name must max 16 characters!');</span><br><span style="color: hsl(120, 100%, 40%);">+ name = None</span><br><span style="color: hsl(120, 100%, 40%);">+ if opts.name is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+ if len(opts.name) > 16:</span><br><span style="color: hsl(120, 100%, 40%);">+ raise ValueError('Service Provider Name must max 16 characters!');</span><br><span> name = opts.name</span><br><span style="color: hsl(0, 100%, 40%);">- else:</span><br><span style="color: hsl(0, 100%, 40%);">- name = None</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn = None</span><br><span> if opts.msisdn is not None:</span><br><span style="color: hsl(0, 100%, 40%);">- if not _isnum(opts.msisdn):</span><br><span style="color: hsl(0, 100%, 40%);">- raise ValueError('MSISDN must be digits only!');</span><br><span> if len(opts.msisdn) > 10*2:</span><br><span style="color: hsl(0, 100%, 40%);">- # Need to support MSISDN of length > 20</span><br><span style="color: hsl(120, 100%, 40%);">+ # ToDo: Support MSISDN of length > 20 (10 Bytes)</span><br><span> raise ValueError('For now support for MSISDN of length <= 20 digits!');</span><br><span style="color: hsl(120, 100%, 40%);">+ if (len(opts.msisdn) % 2) != 0:</span><br><span style="color: hsl(120, 100%, 40%);">+ # ToDo: Support odd number of MSISDN digits</span><br><span style="color: hsl(120, 100%, 40%);">+ raise ValueError('For now support for only even number of MSISDN digits!');</span><br><span> msisdn = opts.msisdn</span><br><span style="color: hsl(0, 100%, 40%);">- else:</span><br><span style="color: hsl(0, 100%, 40%);">- msisdn = None</span><br><span> </span><br><span> # ICCID (19 digits, E.118), though some phase1 vendors use 20 :(</span><br><span> if opts.iccid is not None:</span><br><span>diff --git a/pySim-read.py b/pySim-read.py</span><br><span>index 9e3d2f0..ff27b90 100755</span><br><span>--- a/pySim-read.py</span><br><span>+++ b/pySim-read.py</span><br><span>@@ -208,10 +208,14 @@</span><br><span> try:</span><br><span> # print(scc.record_size(['3f00', '7f10', '6f40']))</span><br><span> (res, sw) = scc.read_record(['3f00', '7f10', '6f40'], 1)</span><br><span style="color: hsl(120, 100%, 40%);">+ #print res</span><br><span> if sw == '9000':</span><br><span> x_bytes = (len(res)/2) - 14</span><br><span style="color: hsl(120, 100%, 40%);">+ #print res[(x_bytes * 2):]</span><br><span> bcd_len = res[(x_bytes * 2):(x_bytes * 2) + 2]</span><br><span style="color: hsl(120, 100%, 40%);">+ #print bcd_len</span><br><span> ton_npi = res[(x_bytes * 2) + 2:(x_bytes * 2) + 4]</span><br><span style="color: hsl(120, 100%, 40%);">+ #print ton_npi</span><br><span> dial_num = res[(x_bytes * 2) + 4:(x_bytes * 2) + 24]</span><br><span> # Refer 3GPP TS 24.008 Called party BCD number information element</span><br><span> print("MSISDN: %s" % (swap_nibbles(dial_num).rstrip('f')))</span><br><span>diff --git a/pySim/cards.py b/pySim/cards.py</span><br><span>index ff9c9b1..a7aa72c 100644</span><br><span>--- a/pySim/cards.py</span><br><span>+++ b/pySim/cards.py</span><br><span>@@ -588,8 +588,9 @@</span><br><span> data, sw = self._scc.update_binary('00F7', content)</span><br><span> </span><br><span> # set Service Provider Name</span><br><span style="color: hsl(0, 100%, 40%);">- content = enc_spn(p['name'], True, True)</span><br><span style="color: hsl(0, 100%, 40%);">- data, sw = self._scc.update_binary('6F46', rpad(content, 32))</span><br><span style="color: hsl(120, 100%, 40%);">+ if p.get('name') is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+ content = enc_spn(p['name'], True, True)</span><br><span style="color: hsl(120, 100%, 40%);">+ data, sw = self._scc.update_binary('6F46', rpad(content, 32))</span><br><span> </span><br><span> # write EF.IMSI</span><br><span> data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))</span><br><span>@@ -628,6 +629,28 @@</span><br><span> r = self._scc.select_file(['3f00', '7f10'])</span><br><span> data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ # EF.MSISDN</span><br><span style="color: hsl(120, 100%, 40%);">+ if p.get('msisdn') is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn = p['msisdn']</span><br><span style="color: hsl(120, 100%, 40%);">+ ton = "81"</span><br><span style="color: hsl(120, 100%, 40%);">+ if msisdn[0] == '+':</span><br><span style="color: hsl(120, 100%, 40%);">+ ton = "91"</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn = msisdn[1:]</span><br><span style="color: hsl(120, 100%, 40%);">+ l = -1</span><br><span style="color: hsl(120, 100%, 40%);">+ if not (msisdn.isdigit() and ((l== -1) or (len(msisdn) == l))):</span><br><span style="color: hsl(120, 100%, 40%);">+ raise ValueError('MSISDN must be digits only!\n \</span><br><span style="color: hsl(120, 100%, 40%);">+ Start with \'+\' for international numbers')</span><br><span style="color: hsl(120, 100%, 40%);">+ even_dig = ((len(msisdn) % 2) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ if even_dig:</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn = '%02d' % ((len(msisdn)/2)+1,) + ton + swap_nibbles(rpad(msisdn, 24))</span><br><span style="color: hsl(120, 100%, 40%);">+ else:</span><br><span style="color: hsl(120, 100%, 40%);">+ raise ValueError('MSISDN with even number of digits are supported for now!')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn = (('ff' * 20) + msisdn)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+ data, sw = self._scc.update_record('6F40', 1, msisdn, force_len=True)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def erase(self):</span><br><span> return</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/16949">change 16949</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/+/16949"/><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: I4399aa10a266fff0432cddfe33937b8b96ca0758 </div>
<div style="display:none"> Gerrit-Change-Number: 16949 </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>