laforge has uploaded this change for review. (
https://gerrit.osmocom.org/c/pysim/+/37655?usp=email )
Change subject: pySim.esim.saip: Initial support for parsing GenericFileManagement
......................................................................
pySim.esim.saip: Initial support for parsing GenericFileManagement
Change-Id: I4a92f5849158a59f6acca05121d38adc0a495906
---
M pySim/esim/saip/__init__.py
1 file changed, 65 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/55/37655/1
diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py
index c76cb5c..6cddf3e 100644
--- a/pySim/esim/saip/__init__.py
+++ b/pySim/esim/saip/__init__.py
@@ -153,6 +153,10 @@
self.fileDescriptor.update(dict(fd))
self.stream = self.linearize_file_content(l)
+ def from_gfm(self, d: Dict):
+ print(d)
+ # FIXME
+
def to_tuples(self) -> List[Tuple]:
"""Generate a list of fileDescriptor, fillFileContent,
fillFileOffset tuples into this instance."""
raise NotImplementedError
@@ -277,6 +281,7 @@
'opt-isim': ProfileElementOptISIM,
'akaParameter': ProfileElementAKA,
'header': ProfileElementHeader,
+ 'genericFileManagement': ProfileElementGFM,
'end': ProfileElementEnd,
}
"""Construct an instance from given raw, DER encoded
bytes."""
@@ -342,6 +347,57 @@
#self.files2pe()
pass
+class ProfileElementGFM(ProfileElement):
+ type = 'genericFileManagement'
+
+ def __init__(self, decoded = None, mandated: bool = True):
+ super().__init__(decoded, mandated)
+ # indexed by PE-Name
+ self.files = {}
+ self.tdef = asn1.types['ProfileElement'].type.name_to_member[self.type]
+
+ def add_file(self, path, file: File):
+ # FIXME: proper FS hiearchy
+ #if path in self.files:
+ # raise KeyError('Cannot add file: path %s already exists' % path)
+ self.files[path] = file
+
+ def pe2files(self):
+ """Update the "files" member with the contents of the
"decoded" member."""
+ def perform(self, path, file_elements):
+ if len(file_elements):
+ file = File('', file_elements)
+ self.add_file(path, file)
+
+ path = "3f00" # current DF: MF
+ file_elements = []
+ # looks like TCA added one level too much in the ASN.1 hierarchy here
+ for fmc in self.decoded['fileManagementCMD']:
+ for fmc2 in fmc:
+ if fmc2[0] == 'filePath':
+ # selecting a new path means we're done with the previous file
+ perform(self, path, file_elements)
+ if fmc2[1] == "":
+ path = "3f00"
+ else:
+ # FIXME
+ pass
+ elif fmc2[0] == 'createFCP':
+ # new FCP means new file; perform the old one
+ perform(self, path, file_elements)
+ file_elements = [('fileDescriptor', fmc2[1])]
+ elif fmc2[0] == 'fillFileOffset' or fmc2[0] ==
'fillFileContent':
+ file_elements.append(fmc2)
+ else:
+ raise ValueError("Unknown GFM choice '%s'" %
fmc2[0])
+ # add the last file, if we still have any pending data in file_elements
+ perform(self, path, file_elements)
+
+ def _post_decode(self):
+ # not entirely sure about this automatism
+ self.pe2files()
+
+
class ProfileElementMF(FsProfileElement):
type = 'mf'
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/37655?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I4a92f5849158a59f6acca05121d38adc0a495906
Gerrit-Change-Number: 37655
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange