[S] Change in pysim[master]: transport: define TERMINAL RESPONSE content within ProactiveHandler
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/38017?usp=email ) Change subject: transport: define TERMINAL RESPONSE content within ProactiveHandler ...................................................................... transport: define TERMINAL RESPONSE content within ProactiveHandler So far the core proactive handling code would always generate a positive response, with no way for the ProactiveHandler call-back to influence that or to include additional IEs/TLVs. Let's change that. Change-Id: Ic772b3383533f845689ac97ad03fcf67cf59c208 --- M pySim/transport/__init__.py 1 file changed, 18 insertions(+), 15 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py index 47f6547..97022ce 100644 --- a/pySim/transport/__init__.py +++ b/pySim/transport/__init__.py @@ -57,7 +57,18 @@ """Default handler for not otherwise handled proactive commands.""" raise NotImplementedError('No handler method for %s' % pcmd.decoded) - + def prepare_response(self, pcmd: ProactiveCommand, general_result: str = 'performed_successfully'): + # The Command Details are echoed from the command that has been processed. + (command_details,) = [c for c in pcmd.children if isinstance(c, CommandDetails)] + # invert the device identities + (command_dev_ids,) = [c for c in pcmd.children if isinstance(c, DeviceIdentities)] + rsp_dev_ids = DeviceIdentities() + rsp_dev_ids.from_dict({'device_identities': { + 'dest_dev_id': command_dev_ids.decoded['source_dev_id'], + 'source_dev_id': command_dev_ids.decoded['dest_dev_id']}}) + result = Result() + result.from_dict({'result': {'general_result': general_result, 'additional_information': ''}}) + return [command_details, rsp_dev_ids, result] class LinkBase(abc.ABC): """Base class for link/transport to card.""" @@ -185,34 +196,26 @@ pcmd = ProactiveCommand() parsed = pcmd.from_tlv(h2b(fetch_rv[0])) print("FETCH: %s (%s)" % (fetch_rv[0], type(parsed).__name__)) - result = Result() if self.proactive_handler: # Extension point: If this does return a list of TLV objects, # they could be appended after the Result; if the first is a # Result, that cuold replace the one built here. - self.proactive_handler.receive_fetch_raw(pcmd, parsed) - result.from_dict({'result': {'general_result': 'performed_successfully', - 'additional_information': ''}}) + ti_list = self.proactive_handler.receive_fetch_raw(pcmd, parsed) + if not ti_list: + ti_list = self.proactive_handler.prepare_response(pcmd, 'FIXME') else: - result.from_dict({'result': {'general_result': 'command_beyond_terminal_capability', - 'additional_information': ''}}) + ti_list = self.proactive_handler.prepare_response(pcmd, 'command_beyond_terminal_capability') # Send response immediately, thus also flushing out any further # proactive commands that the card already wants to send # # Structure as per TS 102 223 V4.4.0 Section 6.8 - # The Command Details are echoed from the command that has been processed. - (command_details,) = [c for c in pcmd.decoded.children if isinstance(c, CommandDetails)] - # The Device Identities are fixed. (TS 102 223 V4.0.0 Section 6.8.2) - device_identities = DeviceIdentities() - device_identities.from_dict({'device_identities': {'source_dev_id': 'terminal', 'dest_dev_id': - 'uicc'}}) - # Testing hint: The value of tail does not influence the behavior # of an SJA2 that sent ans SMS, so this is implemented only # following TS 102 223, and not fully tested. - tail = command_details.to_tlv() + device_identities.to_tlv() + result.to_tlv() + ti_list_bin = [x.to_tlv() for x in ti_list] + tail = b''.join(ti_list_bin) # Testing hint: In contrast to the above, this part is positively # essential to get the SJA2 to provide the later parts of a # multipart SMS in response to an OTA RFM command. -- To view, visit https://gerrit.osmocom.org/c/pysim/+/38017?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: Ic772b3383533f845689ac97ad03fcf67cf59c208 Gerrit-Change-Number: 38017 Gerrit-PatchSet: 4 Gerrit-Owner: laforge <laforge@osmocom.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge@osmocom.org>
participants (1)
-
laforge