From 4019ec969158fe2fb3b649a04352a00d588a5104 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Tue, 29 May 2018 05:36:29 +0700 Subject: library: introduce Facility IE templates for SS/USSD Change-Id: Ibc3e8f70230d656b2f0994ea0c63e6554b6165de --- library/SS_Templates.ttcn | 202 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 library/SS_Templates.ttcn diff --git a/library/SS_Templates.ttcn b/library/SS_Templates.ttcn new file mode 100644 index 00000000..316b71bf --- /dev/null +++ b/library/SS_Templates.ttcn @@ -0,0 +1,202 @@ +module SS_Templates { + +/* SS/USSD Facility IE templates, building on top of SS_Types. + * + * (C) 2018 by Vadim Yanitskiy + * All rights reserved. + * + * Released under the terms of GNU General Public License, Version 2 or + * (at your option) any later version. + */ + +import from General_Types all; +import from SS_Types all; + +/* GSM TS 04.80, section 4.5, SS operation code */ +type enumerated SS_Op_Code { + SS_OP_CODE_REGISTER_SS ('0A'O), + SS_OP_CODE_ERASE_SS ('0B'O), + SS_OP_CODE_ACTIVATE_SS ('0C'O), + SS_OP_CODE_DEACTIVATE_SS ('0D'O), + SS_OP_CODE_INTERROGATE_SS ('0E'O), + SS_OP_CODE_NOTIFY_SS ('10'O), + SS_OP_CODE_REGISTER_PASSWORD ('11'O), + SS_OP_CODE_GET_PASSWORD ('12'O), + SS_OP_CODE_PROCESS_USS_DATA ('13'O), + SS_OP_CODE_FORWARD_CHECK_SS_IND ('26'O), + SS_OP_CODE_PROCESS_USS_REQ ('3B'O), + SS_OP_CODE_USS_REQUEST ('3C'O), + SS_OP_CODE_USS_NOTIFY ('3D'O), + SS_OP_CODE_FORWARD_CUG_INFO ('78'O), + SS_OP_CODE_SPLIT_MPTY ('79'O), + SS_OP_CODE_RETRIEVE_MPTY ('7A'O), + SS_OP_CODE_HOLD_MPTY ('7B'O), + SS_OP_CODE_BUILD_MPTY ('7C'O), + SS_OP_CODE_FORWARD_CHARGE_ADVICE ('7D'O) +} + +/* GSM TS 04.80, section 4.5, SS error code */ +type enumerated SS_Err_Code { + SS_ERR_CODE_UNKNOWN_SUBSCRIBER ('01'O), + SS_ERR_CODE_ILLEGAL_SUBSCRIBER ('09'O), + SS_ERR_CODE_BEARER_SERVICE_NOT_PROVISIONED ('0A'O), + SS_ERR_CODE_TELESERVICE_NOT_PROVISIONED ('0B'O), + SS_ERR_CODE_ILLEGAL_EQUIPMENT ('0C'O), + SS_ERR_CODE_CALL_BARRED ('0D'O), + SS_ERR_CODE_ILLEGAL_SS_OPERATION ('10'O), + SS_ERR_CODE_SS_ERROR_STATUS ('11'O), + SS_ERR_CODE_SS_NOT_AVAILABLE ('12'O), + SS_ERR_CODE_SS_SUBSCRIPTION_VIOLATION ('13'O), + SS_ERR_CODE_SS_INCOMPATIBILITY ('14'O), + SS_ERR_CODE_FACILITY_NOT_SUPPORTED ('15'O), + SS_ERR_CODE_ABSENT_SUBSCRIBER ('1B'O), + SS_ERR_CODE_SYSTEM_FAILURE ('22'O), + SS_ERR_CODE_DATA_MISSING ('23'O), + SS_ERR_CODE_UNEXPECTED_DATA_VALUE ('24'O), + SS_ERR_CODE_PW_REGISTRATION_FAILURE ('25'O), + SS_ERR_CODE_NEGATIVE_PW_CHECK ('26'O), + SS_ERR_CODE_NUM_PW_ATTEMPTS_VIOLATION ('2B'O), + SS_ERR_CODE_UNKNOWN_ALPHABET ('47'O), + SS_ERR_CODE_USSD_BUSY ('48'O), + SS_ERR_CODE_MAX_MPTY_PARTICIPANTS ('7E'O), + SS_ERR_CODE_RESOURCES_NOT_AVAILABLE ('7F'O) +} + +/** + * According to GSM TS 02.90, section 4.1.1, + * the mobile initiated USSD request shall contain + * an alphabet indicator set to "SMS default alphabet" + * and language indicator set to "language unspecified". + * + * This DCS value is used quite often, so it makes + * sense to define it here as a constant. + */ +const octetstring SS_USSD_DEFAULT_DCS := '0F'O; + +template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_INVOKE( + integer invoke_id := 1, + SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ, + octetstring ussd_dcs := SS_USSD_DEFAULT_DCS, + octetstring ussd_string := 'AA180C3602'O // *#100# +) := { + { + invoke := { + invokeId := { present_ := invoke_id }, + linkedId := omit, + opcode := { + local := enum2int(op_code) + }, + argument := { + uSSD_Arg := { + ussd_DataCodingScheme := ussd_dcs, + ussd_String := ussd_string, + alertingPattern := omit, + msisdn := omit + } + } + } + } +} +template SS_FacilityInformation tr_SS_USSD_FACILITY_INVOKE( + template integer invoke_id := ?, + template integer op_code := ?, + template octetstring ussd_dcs := ?, + template octetstring ussd_string := ? +) := { + { + invoke := { + invokeId := { present_ := invoke_id }, + linkedId := omit, + opcode := { + local := op_code + }, + argument := { + uSSD_Arg := { + ussd_DataCodingScheme := ussd_dcs, + ussd_String := ussd_string, + alertingPattern := omit, + msisdn := omit + } + } + } + } +} + +template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_RETURN_RESULT( + integer invoke_id := 1, + SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ, + octetstring ussd_dcs, + octetstring ussd_string +) := { + { + returnResult := { + invokeId := { present_ := invoke_id }, + result := { + opcode := { + local := enum2int(op_code) + }, + result := { + uSSD_Res := { + ussd_DataCodingScheme := ussd_dcs, + ussd_String := ussd_string + } + } + } + } + } +} +template SS_FacilityInformation tr_SS_USSD_FACILITY_RETURN_RESULT( + template integer invoke_id := ?, + template integer op_code := ?, + template octetstring ussd_dcs := ?, + template octetstring ussd_string := ? +) := { + { + returnResult := { + invokeId := { present_ := invoke_id }, + result := { + opcode := { + local := op_code + }, + result := { + uSSD_Res := { + ussd_DataCodingScheme := ussd_dcs, + ussd_String := ussd_string + } + } + } + } + } +} + +/* Common for both structured and unstructured SS */ +template (value) SS_FacilityInformation ts_SS_FACILITY_RETURN_ERROR( + integer invoke_id := 1, + SS_Err_Code err_code +) := { + { + returnError := { + invokeId := { present_ := invoke_id }, + errcode := { + local := enum2int(err_code) + }, + parameter := omit + } + } +} +template SS_FacilityInformation tr_SS_FACILITY_RETURN_ERROR( + template integer invoke_id := ?, + template integer err_code := ? +) := { + { + returnError := { + invokeId := { present_ := invoke_id }, + errcode := { + local := err_code + }, + parameter := omit + } + } +} + +} -- cgit v1.2.3