Change in pysim[master]: pySim-shell: add ADF.ISIM / ADF.USIM dynamically

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Sat Mar 27 18:20:28 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/23473 )

Change subject: pySim-shell: add ADF.ISIM / ADF.USIM dynamically
......................................................................

pySim-shell: add ADF.ISIM / ADF.USIM dynamically

currently ADF.ISIM and ADF.USIM are always added regardless if there is
a matching application on the card or not. Lets check what applications
are actually installed and add ADF.ISIM and ADF.USIM dynamically.

Change-Id: I42ee23375f98e6322708c1c4db6d65e1425feecd
Related: OS#4963
---
M pySim-shell.py
M pySim/cards.py
M pySim/filesystem.py
3 files changed, 29 insertions(+), 5 deletions(-)

Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved



diff --git a/pySim-shell.py b/pySim-shell.py
index 946b3e5..e7bb7c0 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -58,8 +58,6 @@
 		self.card = card
 		self.rs = rs
 		self.py_locals = { 'card': self.card, 'rs' : self.rs }
-		self.card.read_aids()
-		self.poutput('AIDs on card: %s' % (self.card._aids))
 		self.numeric_path = False
 		self.add_settable(cmd2.Settable('numeric_path', bool, 'Print File IDs instead of names',
 						  onchange_cb=self._onchange_numeric_path))
@@ -254,13 +252,14 @@
 		sys.exit(2)
 
 	profile = CardProfileUICC()
+	profile.add_application(ADF_USIM())
+	profile.add_application(ADF_ISIM())
+
 	rs = RuntimeState(card, profile)
 
 	# FIXME: do this dynamically
 	rs.mf.add_file(DF_TELECOM())
 	rs.mf.add_file(DF_GSM())
-	rs.mf.add_application(ADF_USIM())
-	rs.mf.add_application(ADF_ISIM())
 
 	app = PysimApp(card, rs)
 	rs.select('MF', app)
diff --git a/pySim/cards.py b/pySim/cards.py
index c640591..857d0b6 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -207,6 +207,7 @@
 
 	# Fetch all the AIDs present on UICC
 	def read_aids(self):
+		self._aids = []
 		try:
 			# Find out how many records the EF.DIR has
 			# and store all the AIDs in the UICC
@@ -218,6 +219,8 @@
 					self._aids.append(rec[0][8:8 + int(rec[0][6:8], 16) * 2])
 		except Exception as e:
 			print("Can't read AIDs from SIM -- %s" % (str(e),))
+			self._aids = []
+		return self._aids
 
 	# Select ADF.U/ISIM in the Card using its full AID
 	def select_adf_by_aid(self, adf="usim"):
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 0494df7..a1bb127 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -550,11 +550,33 @@
         self.selected_file = self.mf
         self.profile = profile
         # add applications + MF-files from profile
-        for a in self.profile.applications:
+        apps = self._match_applications()
+        for a in apps:
             self.mf.add_application(a)
         for f in self.profile.files_in_mf:
             self.mf.add_file(f)
 
+    def _match_applications(self):
+        """match the applications from the profile with applications on the card"""
+        apps_profile = self.profile.applications
+        aids_card = self.card.read_aids()
+        apps_taken = []
+        if aids_card:
+            aids_taken = []
+            print("AIDs on card:")
+            for a in aids_card:
+                for f in apps_profile:
+                    if f.aid in a:
+                        print(" %s: %s" % (f.name, a))
+                        aids_taken.append(a)
+                        apps_taken.append(f)
+            aids_unknown = set(aids_card) - set(aids_taken)
+            for a in aids_unknown:
+                print(" unknown: %s" % a)
+        else:
+            print("error: could not determine card applications")
+        return apps_taken
+
     def get_cwd(self):
         """Obtain the current working directory."""
         if isinstance(self.selected_file, CardDF):

-- 
To view, visit https://gerrit.osmocom.org/c/pysim/+/23473
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I42ee23375f98e6322708c1c4db6d65e1425feecd
Gerrit-Change-Number: 23473
Gerrit-PatchSet: 3
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210327/7e69e24c/attachment.htm>


More information about the gerrit-log mailing list