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 } } } } } } template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_RETURN_RESULT_EMPTY( integer invoke_id := 1 ) := { { returnResult := { invokeId := { present_ := invoke_id }, result := omit } } } template SS_FacilityInformation tr_SS_USSD_FACILITY_RETURN_RESULT_EMPTY( template integer invoke_id := ? ) := { { returnResult := { invokeId := { present_ := invoke_id }, result := omit } } } /* 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 } } } }