<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9368">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
Harald Welte: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library: introduce Facility IE templates for SS/USSD<br><br>Change-Id: Ibc3e8f70230d656b2f0994ea0c63e6554b6165de<br>---<br>A library/SS_Templates.ttcn<br>1 file changed, 202 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/SS_Templates.ttcn b/library/SS_Templates.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..316b71b</span><br><span>--- /dev/null</span><br><span>+++ b/library/SS_Templates.ttcn</span><br><span>@@ -0,0 +1,202 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module SS_Templates {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* SS/USSD Facility IE templates, building on top of SS_Types.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* GSM TS 04.80, section 4.5, SS operation code */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated SS_Op_Code {</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_REGISTER_SS ('0A'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_ERASE_SS ('0B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_ACTIVATE_SS ('0C'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_DEACTIVATE_SS ('0D'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_INTERROGATE_SS ('0E'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_NOTIFY_SS ('10'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_REGISTER_PASSWORD ('11'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_GET_PASSWORD ('12'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_PROCESS_USS_DATA ('13'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_FORWARD_CHECK_SS_IND ('26'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_PROCESS_USS_REQ ('3B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_USS_REQUEST ('3C'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_USS_NOTIFY ('3D'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_FORWARD_CUG_INFO ('78'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_SPLIT_MPTY ('79'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_RETRIEVE_MPTY ('7A'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_HOLD_MPTY ('7B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_BUILD_MPTY ('7C'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_OP_CODE_FORWARD_CHARGE_ADVICE ('7D'O)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* GSM TS 04.80, section 4.5, SS error code */</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated SS_Err_Code {</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_UNKNOWN_SUBSCRIBER ('01'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_ILLEGAL_SUBSCRIBER ('09'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_BEARER_SERVICE_NOT_PROVISIONED ('0A'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_TELESERVICE_NOT_PROVISIONED ('0B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_ILLEGAL_EQUIPMENT ('0C'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_CALL_BARRED ('0D'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_ILLEGAL_SS_OPERATION ('10'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_SS_ERROR_STATUS ('11'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_SS_NOT_AVAILABLE ('12'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_SS_SUBSCRIPTION_VIOLATION ('13'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_SS_INCOMPATIBILITY ('14'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_FACILITY_NOT_SUPPORTED ('15'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_ABSENT_SUBSCRIBER ('1B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_SYSTEM_FAILURE ('22'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_DATA_MISSING ('23'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_UNEXPECTED_DATA_VALUE ('24'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_PW_REGISTRATION_FAILURE ('25'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_NEGATIVE_PW_CHECK ('26'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_NUM_PW_ATTEMPTS_VIOLATION ('2B'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_UNKNOWN_ALPHABET ('47'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_USSD_BUSY ('48'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_MAX_MPTY_PARTICIPANTS ('7E'O),</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_ERR_CODE_RESOURCES_NOT_AVAILABLE ('7F'O)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * According to GSM TS 02.90, section 4.1.1,</span><br><span style="color: hsl(120, 100%, 40%);">+ * the mobile initiated USSD request shall contain</span><br><span style="color: hsl(120, 100%, 40%);">+ * an alphabet indicator set to "SMS default alphabet"</span><br><span style="color: hsl(120, 100%, 40%);">+ * and language indicator set to "language unspecified".</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This DCS value is used quite often, so it makes</span><br><span style="color: hsl(120, 100%, 40%);">+ * sense to define it here as a constant.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring SS_USSD_DEFAULT_DCS := '0F'O;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_INVOKE(</span><br><span style="color: hsl(120, 100%, 40%);">+ integer invoke_id := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring ussd_dcs := SS_USSD_DEFAULT_DCS,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring ussd_string := 'AA180C3602'O // *#100#</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ invoke := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ linkedId := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ opcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := enum2int(op_code)</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ argument := {</span><br><span style="color: hsl(120, 100%, 40%);">+ uSSD_Arg := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_DataCodingScheme := ussd_dcs,</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_String := ussd_string,</span><br><span style="color: hsl(120, 100%, 40%);">+ alertingPattern := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template SS_FacilityInformation tr_SS_USSD_FACILITY_INVOKE(</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer invoke_id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer op_code := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ussd_dcs := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ussd_string := ?</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ invoke := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ linkedId := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ opcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := op_code</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ argument := {</span><br><span style="color: hsl(120, 100%, 40%);">+ uSSD_Arg := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_DataCodingScheme := ussd_dcs,</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_String := ussd_string,</span><br><span style="color: hsl(120, 100%, 40%);">+ alertingPattern := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ msisdn := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) SS_FacilityInformation ts_SS_USSD_FACILITY_RETURN_RESULT(</span><br><span style="color: hsl(120, 100%, 40%);">+ integer invoke_id := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring ussd_dcs,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring ussd_string</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ returnResult := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ result := {</span><br><span style="color: hsl(120, 100%, 40%);">+ opcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := enum2int(op_code)</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ result := {</span><br><span style="color: hsl(120, 100%, 40%);">+ uSSD_Res := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_DataCodingScheme := ussd_dcs,</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_String := ussd_string</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template SS_FacilityInformation tr_SS_USSD_FACILITY_RETURN_RESULT(</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer invoke_id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer op_code := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ussd_dcs := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ussd_string := ?</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ returnResult := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ result := {</span><br><span style="color: hsl(120, 100%, 40%);">+ opcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := op_code</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ result := {</span><br><span style="color: hsl(120, 100%, 40%);">+ uSSD_Res := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_DataCodingScheme := ussd_dcs,</span><br><span style="color: hsl(120, 100%, 40%);">+ ussd_String := ussd_string</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Common for both structured and unstructured SS */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) SS_FacilityInformation ts_SS_FACILITY_RETURN_ERROR(</span><br><span style="color: hsl(120, 100%, 40%);">+ integer invoke_id := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ SS_Err_Code err_code</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ returnError := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ errcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := enum2int(err_code)</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ parameter := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template SS_FacilityInformation tr_SS_FACILITY_RETURN_ERROR(</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer invoke_id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template integer err_code := ?</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ returnError := {</span><br><span style="color: hsl(120, 100%, 40%);">+ invokeId := { present_ := invoke_id },</span><br><span style="color: hsl(120, 100%, 40%);">+ errcode := {</span><br><span style="color: hsl(120, 100%, 40%);">+ local := err_code</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ parameter := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9368">change 9368</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/9368"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ibc3e8f70230d656b2f0994ea0c63e6554b6165de </div>
<div style="display:none"> Gerrit-Change-Number: 9368 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>