From bbb43757da8f35403ea03e5756b18c565dadf2b8 Mon Sep 17 00:00:00 2001 From: p1-bmu Date: Wed, 30 Jun 2021 14:21:43 +0200 Subject: [PATCH] corenet: fix IE setting when no IE ref exist in RAN proto --- pycrate_corenet/ProcProto.py | 76 +++++++++++++++++------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/pycrate_corenet/ProcProto.py b/pycrate_corenet/ProcProto.py index 4022d43..b10fef3 100644 --- a/pycrate_corenet/ProcProto.py +++ b/pycrate_corenet/ProcProto.py @@ -305,26 +305,8 @@ class LinkSigProc(SigProc): #for (ident, IE) in IEs.items(): for ident in ord_ies: IE = IEs[ident] - name, val = IE['Value']._tr._name, None - pyname, idname = pythonize_name(name), 'id_%i' % ident - if pyname in Encod[0]: - # static object value provided - val = (IE['Value']._tr._name, Encod[0][pyname]) - if pyname in kw: - del kw[pyname] - elif idname in Encod[0]: - # static buffer value provided - val = Encod[0][idname] - if idname in kw: - del kw[idname] - elif pyname in kw: - # object value provided at runtime - val = (IE['Value']._tr._name, kw[pyname]) - del kw[pyname] - elif idname in kw: - # buffer value provided at runtime - val = kw[idname] - del kw[idname] + idname = 'id_%i' % ident + val = self._get_ie_val(idname, IE, Encod[0], kw) if val is not None: pdu_ies.append({'id': ident, 'criticality': IE['criticality'], @@ -339,26 +321,8 @@ class LinkSigProc(SigProc): #for (ident, IE) in Extensions.items(): for ident in ord_exts: IE = Extensions[ident] - name, val = IE['Extension']._tr._name, None - pyname, idname = pythonize_name(name), 'idext_%i' % ident - if pyname in Encod[1]: - # static object value provided - val = (IE['Value']._tr._name, Encod[1][pyname]) - if pyname in kw: - del kw[pyname] - elif idname in Encod[0]: - # static buffer value provided - val = Encod[0][idname] - if idname in kw: - del kw[idname] - elif pyname in kw: - # object value provided at runtime - val = (IE['Value']._tr._name, kw[pyname]) - del val[pyname] - elif idname in kw: - # buffer value provided at runtime - val = kw[idname] - del kw[idname] + idname = 'idext_%i' % ident + val = self._get_ie_val(idname, IE, Encod[1], kw) if val is not None: pdu_exts.append({'id': ident, 'criticality': IE['criticality'], @@ -402,6 +366,38 @@ class LinkSigProc(SigProc): 'criticality': self.Crit, 'value': (Cont._tr._name, val)}) ) + + def _get_ie_val(self, idname, IE, Encod, kw): + val = None + if IE['Value']._tr is not None: + # IE refers to a sub object, that can be assigned by name + iename = IE['Value']._tr._name + pyname = pythonize_name(iename) + if pyname in Encod: + # static object value provided at the procedure class level + # referred by its name + val = (iename, Encod[pyname]) + if pyname in kw: + del kw[pyname] + elif pyname in kw: + # object value provided at runtime + # referred by its name + val = (iename, kw[pyname]) + del kw[pyname] + if val is None: + if idname in Encod: + # static object value provided at the procedure class level + # referred by its ident + val = Encod[idname] + if idname in kw: + del kw[idname] + elif idname in kw: + # object value provided at runtime + # referred by its ident + val = kw[idname] + del kw[idname] + return val + #--------------------------------------------------------------------------# def recv(self, pdu):