<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>