summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-05-29 05:36:29 +0700
committerVadim Yanitskiy <axilirator@gmail.com>2018-06-02 04:55:18 +0700
commit4019ec969158fe2fb3b649a04352a00d588a5104 (patch)
tree8c8e2d48d53e6ff82128266317e7f4f6f5311169
parent0319813c4139c7c14fcb793ffbfd5905f97b8911 (diff)
library: introduce Facility IE templates for SS/USSD
-rw-r--r--library/SS_Templates.ttcn202
1 files changed, 202 insertions, 0 deletions
diff --git a/library/SS_Templates.ttcn b/library/SS_Templates.ttcn
new file mode 100644
index 0000000..316b71b
--- /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 <axilirator@gmail.com>
+ * 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
+ }
+ }
+}
+
+}