Vadim Yanitskiy | 4019ec9 | 2018-05-29 05:36:29 +0700 | [diff] [blame] | 1 | module SS_Templates { |
| 2 | |
| 3 | /* SS/USSD Facility IE templates, building on top of SS_Types. |
| 4 | * |
| 5 | * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com> |
| 6 | * All rights reserved. |
| 7 | * |
| 8 | * Released under the terms of GNU General Public License, Version 2 or |
| 9 | * (at your option) any later version. |
Harald Welte | 34b5a95 | 2019-05-27 11:54:11 +0200 | [diff] [blame] | 10 | * |
| 11 | * SPDX-License-Identifier: GPL-2.0-or-later |
Vadim Yanitskiy | 4019ec9 | 2018-05-29 05:36:29 +0700 | [diff] [blame] | 12 | */ |
| 13 | |
| 14 | import from General_Types all; |
| 15 | import from SS_Types all; |
| 16 | |
| 17 | /* GSM TS 04.80, section 4.5, SS operation code */ |
| 18 | type enumerated SS_Op_Code { |
| 19 | SS_OP_CODE_REGISTER_SS ('0A'O), |
| 20 | SS_OP_CODE_ERASE_SS ('0B'O), |
| 21 | SS_OP_CODE_ACTIVATE_SS ('0C'O), |
| 22 | SS_OP_CODE_DEACTIVATE_SS ('0D'O), |
| 23 | SS_OP_CODE_INTERROGATE_SS ('0E'O), |
| 24 | SS_OP_CODE_NOTIFY_SS ('10'O), |
| 25 | SS_OP_CODE_REGISTER_PASSWORD ('11'O), |
| 26 | SS_OP_CODE_GET_PASSWORD ('12'O), |
| 27 | SS_OP_CODE_PROCESS_USS_DATA ('13'O), |
| 28 | SS_OP_CODE_FORWARD_CHECK_SS_IND ('26'O), |
| 29 | SS_OP_CODE_PROCESS_USS_REQ ('3B'O), |
| 30 | SS_OP_CODE_USS_REQUEST ('3C'O), |
| 31 | SS_OP_CODE_USS_NOTIFY ('3D'O), |
| 32 | SS_OP_CODE_FORWARD_CUG_INFO ('78'O), |
| 33 | SS_OP_CODE_SPLIT_MPTY ('79'O), |
| 34 | SS_OP_CODE_RETRIEVE_MPTY ('7A'O), |
| 35 | SS_OP_CODE_HOLD_MPTY ('7B'O), |
| 36 | SS_OP_CODE_BUILD_MPTY ('7C'O), |
| 37 | SS_OP_CODE_FORWARD_CHARGE_ADVICE ('7D'O) |
| 38 | } |
| 39 | |
| 40 | /* GSM TS 04.80, section 4.5, SS error code */ |
| 41 | type enumerated SS_Err_Code { |
| 42 | SS_ERR_CODE_UNKNOWN_SUBSCRIBER ('01'O), |
| 43 | SS_ERR_CODE_ILLEGAL_SUBSCRIBER ('09'O), |
| 44 | SS_ERR_CODE_BEARER_SERVICE_NOT_PROVISIONED ('0A'O), |
| 45 | SS_ERR_CODE_TELESERVICE_NOT_PROVISIONED ('0B'O), |
| 46 | SS_ERR_CODE_ILLEGAL_EQUIPMENT ('0C'O), |
| 47 | SS_ERR_CODE_CALL_BARRED ('0D'O), |
| 48 | SS_ERR_CODE_ILLEGAL_SS_OPERATION ('10'O), |
| 49 | SS_ERR_CODE_SS_ERROR_STATUS ('11'O), |
| 50 | SS_ERR_CODE_SS_NOT_AVAILABLE ('12'O), |
| 51 | SS_ERR_CODE_SS_SUBSCRIPTION_VIOLATION ('13'O), |
| 52 | SS_ERR_CODE_SS_INCOMPATIBILITY ('14'O), |
| 53 | SS_ERR_CODE_FACILITY_NOT_SUPPORTED ('15'O), |
| 54 | SS_ERR_CODE_ABSENT_SUBSCRIBER ('1B'O), |
| 55 | SS_ERR_CODE_SYSTEM_FAILURE ('22'O), |
| 56 | SS_ERR_CODE_DATA_MISSING ('23'O), |
| 57 | SS_ERR_CODE_UNEXPECTED_DATA_VALUE ('24'O), |
| 58 | SS_ERR_CODE_PW_REGISTRATION_FAILURE ('25'O), |
| 59 | SS_ERR_CODE_NEGATIVE_PW_CHECK ('26'O), |
| 60 | SS_ERR_CODE_NUM_PW_ATTEMPTS_VIOLATION ('2B'O), |
| 61 | SS_ERR_CODE_UNKNOWN_ALPHABET ('47'O), |
| 62 | SS_ERR_CODE_USSD_BUSY ('48'O), |
| 63 | SS_ERR_CODE_MAX_MPTY_PARTICIPANTS ('7E'O), |
| 64 | SS_ERR_CODE_RESOURCES_NOT_AVAILABLE ('7F'O) |
| 65 | } |
| 66 | |
| 67 | /** |
| 68 | * According to GSM TS 02.90, section 4.1.1, |
| 69 | * the mobile initiated USSD request shall contain |
| 70 | * an alphabet indicator set to "SMS default alphabet" |
| 71 | * and language indicator set to "language unspecified". |
| 72 | * |
| 73 | * This DCS value is used quite often, so it makes |
| 74 | * sense to define it here as a constant. |
| 75 | */ |
| 76 | const octetstring SS_USSD_DEFAULT_DCS := '0F'O; |
| 77 | |
| 78 | template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_INVOKE( |
| 79 | integer invoke_id := 1, |
| 80 | SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ, |
| 81 | octetstring ussd_dcs := SS_USSD_DEFAULT_DCS, |
| 82 | octetstring ussd_string := 'AA180C3602'O // *#100# |
| 83 | ) := { |
| 84 | { |
| 85 | invoke := { |
| 86 | invokeId := { present_ := invoke_id }, |
| 87 | linkedId := omit, |
| 88 | opcode := { |
| 89 | local := enum2int(op_code) |
| 90 | }, |
| 91 | argument := { |
| 92 | uSSD_Arg := { |
| 93 | ussd_DataCodingScheme := ussd_dcs, |
| 94 | ussd_String := ussd_string, |
| 95 | alertingPattern := omit, |
| 96 | msisdn := omit |
| 97 | } |
| 98 | } |
| 99 | } |
| 100 | } |
| 101 | } |
| 102 | template SS_FacilityInformation tr_SS_USSD_FACILITY_INVOKE( |
| 103 | template integer invoke_id := ?, |
| 104 | template integer op_code := ?, |
| 105 | template octetstring ussd_dcs := ?, |
| 106 | template octetstring ussd_string := ? |
| 107 | ) := { |
| 108 | { |
| 109 | invoke := { |
| 110 | invokeId := { present_ := invoke_id }, |
| 111 | linkedId := omit, |
| 112 | opcode := { |
| 113 | local := op_code |
| 114 | }, |
| 115 | argument := { |
| 116 | uSSD_Arg := { |
| 117 | ussd_DataCodingScheme := ussd_dcs, |
| 118 | ussd_String := ussd_string, |
| 119 | alertingPattern := omit, |
| 120 | msisdn := omit |
| 121 | } |
| 122 | } |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | |
Vadim Yanitskiy | bc18afa | 2018-11-28 06:00:52 +0700 | [diff] [blame] | 127 | template (value) SS_FacilityInformation ts_SS_FACILITY_INVOKE( |
| 128 | integer invoke_id := 1, |
| 129 | SS_Op_Code op_code, |
| 130 | OCT1 ss_code |
| 131 | ) := { |
| 132 | { |
| 133 | invoke := { |
| 134 | invokeId := { present_ := invoke_id }, |
| 135 | linkedId := omit, |
| 136 | opcode := { local := enum2int(op_code) }, |
| 137 | argument := { |
| 138 | sS_ForBS_Code := { |
| 139 | ss_Code := ss_code, |
| 140 | basicService := omit, |
| 141 | longFTN_Supported := omit |
| 142 | } |
| 143 | } |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | template SS_FacilityInformation tr_SS_FACILITY_INVOKE( |
| 148 | template integer invoke_id := 1, |
| 149 | template integer op_code := ?, |
| 150 | template OCT1 ss_code := ? |
| 151 | ) := { |
| 152 | { |
| 153 | invoke := { |
| 154 | invokeId := { present_ := invoke_id }, |
| 155 | linkedId := omit, |
| 156 | opcode := { local := op_code }, |
| 157 | argument := { |
| 158 | sS_ForBS_Code := { |
| 159 | ss_Code := ss_code, |
| 160 | basicService := omit, |
| 161 | longFTN_Supported := omit |
| 162 | } |
| 163 | } |
| 164 | } |
| 165 | } |
| 166 | } |
| 167 | |
Vadim Yanitskiy | 4019ec9 | 2018-05-29 05:36:29 +0700 | [diff] [blame] | 168 | template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_RETURN_RESULT( |
| 169 | integer invoke_id := 1, |
| 170 | SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ, |
| 171 | octetstring ussd_dcs, |
| 172 | octetstring ussd_string |
| 173 | ) := { |
| 174 | { |
| 175 | returnResult := { |
| 176 | invokeId := { present_ := invoke_id }, |
| 177 | result := { |
| 178 | opcode := { |
| 179 | local := enum2int(op_code) |
| 180 | }, |
| 181 | result := { |
| 182 | uSSD_Res := { |
| 183 | ussd_DataCodingScheme := ussd_dcs, |
| 184 | ussd_String := ussd_string |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | } |
| 189 | } |
| 190 | } |
| 191 | template SS_FacilityInformation tr_SS_USSD_FACILITY_RETURN_RESULT( |
| 192 | template integer invoke_id := ?, |
| 193 | template integer op_code := ?, |
| 194 | template octetstring ussd_dcs := ?, |
| 195 | template octetstring ussd_string := ? |
| 196 | ) := { |
| 197 | { |
| 198 | returnResult := { |
| 199 | invokeId := { present_ := invoke_id }, |
| 200 | result := { |
| 201 | opcode := { |
| 202 | local := op_code |
| 203 | }, |
| 204 | result := { |
| 205 | uSSD_Res := { |
| 206 | ussd_DataCodingScheme := ussd_dcs, |
| 207 | ussd_String := ussd_string |
| 208 | } |
| 209 | } |
| 210 | } |
| 211 | } |
| 212 | } |
| 213 | } |
| 214 | |
Vadim Yanitskiy | b59ae2d | 2018-06-19 00:45:00 +0700 | [diff] [blame] | 215 | template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_RETURN_RESULT_EMPTY( |
| 216 | integer invoke_id := 1 |
| 217 | ) := { |
| 218 | { |
| 219 | returnResult := { |
| 220 | invokeId := { present_ := invoke_id }, |
| 221 | result := omit |
| 222 | } |
| 223 | } |
| 224 | } |
| 225 | template SS_FacilityInformation tr_SS_USSD_FACILITY_RETURN_RESULT_EMPTY( |
| 226 | template integer invoke_id := ? |
| 227 | ) := { |
| 228 | { |
| 229 | returnResult := { |
| 230 | invokeId := { present_ := invoke_id }, |
| 231 | result := omit |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | |
Vadim Yanitskiy | 4019ec9 | 2018-05-29 05:36:29 +0700 | [diff] [blame] | 236 | /* Common for both structured and unstructured SS */ |
| 237 | template (value) SS_FacilityInformation ts_SS_FACILITY_RETURN_ERROR( |
| 238 | integer invoke_id := 1, |
| 239 | SS_Err_Code err_code |
| 240 | ) := { |
| 241 | { |
| 242 | returnError := { |
| 243 | invokeId := { present_ := invoke_id }, |
| 244 | errcode := { |
| 245 | local := enum2int(err_code) |
| 246 | }, |
| 247 | parameter := omit |
| 248 | } |
| 249 | } |
| 250 | } |
| 251 | template SS_FacilityInformation tr_SS_FACILITY_RETURN_ERROR( |
| 252 | template integer invoke_id := ?, |
| 253 | template integer err_code := ? |
| 254 | ) := { |
| 255 | { |
| 256 | returnError := { |
| 257 | invokeId := { present_ := invoke_id }, |
| 258 | errcode := { |
| 259 | local := err_code |
| 260 | }, |
| 261 | parameter := omit |
| 262 | } |
| 263 | } |
| 264 | } |
| 265 | |
| 266 | } |