<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/26204">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved
  fixeria: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pySim-shell: export command: guess number of records when not specified<br><br>The select response of an UICC will always return the number of records<br>of a file. However, older SIM will not include the number of records in<br>the select response. In those cases, simply guess the number of records<br>by reading until the first invalid record is hit.<br><br>Change-Id: Ib480797d881b9ec607ec6a86b73d452449f8cf87<br>Related: OS#5274<br>---<br>M pySim-shell.py<br>1 file changed, 22 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim-shell.py b/pySim-shell.py</span><br><span>index 0519ec4..8e8a1a6 100755</span><br><span>--- a/pySim-shell.py</span><br><span>+++ b/pySim-shell.py</span><br><span>@@ -517,10 +517,28 @@</span><br><span>                             result = self._cmd.rs.read_binary()</span><br><span>                          self._cmd.poutput("update_binary " + str(result[0]))</span><br><span>                       elif structure == 'cyclic' or structure == 'linear_fixed':</span><br><span style="color: hsl(0, 100%, 40%);">-                              num_of_rec = fd['num_of_rec']</span><br><span style="color: hsl(0, 100%, 40%);">-                           for r in range(1, num_of_rec + 1):</span><br><span style="color: hsl(0, 100%, 40%);">-                                      result = self._cmd.rs.read_record(r)</span><br><span style="color: hsl(0, 100%, 40%);">-                                    self._cmd.poutput("update_record %d %s" % (r, str(result[0])))</span><br><span style="color: hsl(120, 100%, 40%);">+                              # Use number of records specified in select response</span><br><span style="color: hsl(120, 100%, 40%);">+                          if 'num_of_rec' in fd:</span><br><span style="color: hsl(120, 100%, 40%);">+                                        num_of_rec = fd['num_of_rec']</span><br><span style="color: hsl(120, 100%, 40%);">+                                 for r in range(1, num_of_rec + 1):</span><br><span style="color: hsl(120, 100%, 40%);">+                                            result = self._cmd.rs.read_record(r)</span><br><span style="color: hsl(120, 100%, 40%);">+                                          self._cmd.poutput("update_record %d %s" % (r, str(result[0])))</span><br><span style="color: hsl(120, 100%, 40%);">+                              # When the select response does not return the number of records, read until we hit the</span><br><span style="color: hsl(120, 100%, 40%);">+                               # first record that cannot be read.</span><br><span style="color: hsl(120, 100%, 40%);">+                           else:</span><br><span style="color: hsl(120, 100%, 40%);">+                                 r = 1</span><br><span style="color: hsl(120, 100%, 40%);">+                                 while True:</span><br><span style="color: hsl(120, 100%, 40%);">+                                           try:</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  result = self._cmd.rs.read_record(r)</span><br><span style="color: hsl(120, 100%, 40%);">+                                          except SwMatchError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     # We are past the last valid record - stop</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    if e.sw_actual == "9402":</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           break</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 # Some other problem occurred</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 else:</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         raise e</span><br><span style="color: hsl(120, 100%, 40%);">+                                               self._cmd.poutput("update_record %d %s" % (r, str(result[0])))</span><br><span style="color: hsl(120, 100%, 40%);">+                                              r = r + 1</span><br><span>                    elif structure == 'ber_tlv':</span><br><span>                                 tags = self._cmd.rs.retrieve_tags()</span><br><span>                          for t in tags:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/26204">change 26204</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/+/26204"/><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: Ib480797d881b9ec607ec6a86b73d452449f8cf87 </div>
<div style="display:none"> Gerrit-Change-Number: 26204 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>