<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11062">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/GSUP_Types.ttcn: add MO/MT FORWARD_SM messages<br><br>According to 3GPP TS 29.002, sections 12.2 and 12.9 the FORWARD_SM<br>messages (a.k.a MAP-*-FORWARD-SHORT-MESSAGE) are used to forward<br>MO/MT SMS messages.<br><br>Please note that only the 'must-have' fields of both message<br>types are introduced by this change, in particular:<br><br>  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_SM_REQUEST (MAP Request)<br>    - OSMO_GSUP_SM_RP_DA_IE<br>    - OSMO_GSUP_SM_RP_OA_IE<br>    - OSMO_GSUP_SM_RP_UI_IE<br><br>  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_SM_RESULT (MAP ACK)<br>    - OSMO_GSUP_SM_RP_UI_IE<br><br>  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_SM_ERROR (MAP Response)<br>    - GSUP_CAUSE_IE (MAP User Error, see 7.6.1)<br><br>Since there is no TCAP layer in GSUP, the context is emulated<br>using the session management IEs, in particular using the<br>GSUP_SESSION_ID_IE. The session state IE isn't used due to<br>the 'REQ-RSP' nature of this message.<br><br>Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e<br>---<br>M library/GSUP_Types.ttcn<br>1 file changed, 310 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/62/11062/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn</span><br><span>index fed13bf..a7c4732 100644</span><br><span>--- a/library/GSUP_Types.ttcn</span><br><span>+++ b/library/GSUP_Types.ttcn</span><br><span>@@ -48,7 +48,10 @@</span><br><span>       /* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */</span><br><span>     OSMO_GSUP_SMSC_ADDR_IE          ('40'O),</span><br><span>     OSMO_GSUP_NODE_ADDR_IE          ('41'O),</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_GSUP_SM_RP_RPI_IE          ('42'O)</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_SM_RP_RPI_IE          ('42'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_SM_RP_DA_IE           ('43'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_SM_RP_OA_IE           ('44'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_SM_RP_UI_IE           ('45'O)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated GSUP_MessageType {</span><br><span>@@ -85,7 +88,15 @@</span><br><span>     /* FIXME: 0b001001? any ideas? */</span><br><span>    OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST       ('00100100'B),</span><br><span>       OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR         ('00100101'B),</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT        ('00100110'B)</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT        ('00100110'B),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST    ('00101000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR      ('00101001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT     ('00101010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST    ('00110000'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR      ('00110001'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT     ('00110010'B)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated GSUP_CancelType {</span><br><span>@@ -141,6 +152,9 @@</span><br><span>                                smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;</span><br><span>                             node_addr, tag = OSMO_GSUP_NODE_ADDR_IE;</span><br><span>                             sm_rp_rpi, tag = OSMO_GSUP_SM_RP_RPI_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                              sm_rp_da, tag = OSMO_GSUP_SM_RP_DA_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                                sm_rp_oa, tag = OSMO_GSUP_SM_RP_OA_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                                sm_rp_ui, tag = OSMO_GSUP_SM_RP_UI_IE;</span><br><span>                      )"</span><br><span> };</span><br><span> </span><br><span>@@ -178,7 +192,10 @@</span><br><span>     /* Short Message Service */</span><br><span>  octetstring             smsc_addr, /* FIXME: octetstring? */</span><br><span>         octetstring             node_addr, /* FIXME: octetstring? */</span><br><span style="color: hsl(0, 100%, 40%);">-    boolean                 sm_rp_rpi /* FIXME: boolean? */</span><br><span style="color: hsl(120, 100%, 40%);">+       boolean                 sm_rp_rpi, /* FIXME: boolean? */</span><br><span style="color: hsl(120, 100%, 40%);">+      GSUP_SM_RP_DA           sm_rp_da,</span><br><span style="color: hsl(120, 100%, 40%);">+     GSUP_SM_RP_OA           sm_rp_oa,</span><br><span style="color: hsl(120, 100%, 40%);">+     octetstring             sm_rp_ui</span><br><span> };</span><br><span> </span><br><span> type record GSUP_PDU {</span><br><span>@@ -655,6 +672,140 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * SM-RP-DA represents the SM Destination Address, see 7.6.8.1.</span><br><span style="color: hsl(120, 100%, 40%);">+ * It can be either of the following:</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - IMSI</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - LMSI (not implemented)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - MSISDN</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - roaming number (not implemented)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - service centre address</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+type union GSUP_SM_RP_DA_IeValue {</span><br><span style="color: hsl(120, 100%, 40%);">+        hexstring       imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+ hexstring       msisdn,</span><br><span style="color: hsl(120, 100%, 40%);">+       octetstring     smsc_addr</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%);">+type record GSUP_SM_RP_DA {</span><br><span style="color: hsl(120, 100%, 40%);">+  GSUP_IEI                tag,</span><br><span style="color: hsl(120, 100%, 40%);">+  GSUP_SM_RP_DA_IeValue   val</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                              msisdn, tag = OSMO_GSUP_MSISDN_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                            smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;</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) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_IMSI(hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      tag := OSMO_GSUP_IMSI_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := { imsi := imsi }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_IMSI(template hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tag := OSMO_GSUP_IMSI_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := { imsi := imsi }</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) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_MSISDN(hexstring msisdn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   tag := OSMO_GSUP_MSISDN_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+   val := { msisdn := msisdn }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_MSISDN(template hexstring msisdn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tag := OSMO_GSUP_MSISDN_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+   val := { msisdn := msisdn }</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) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_SMSC_ADDR(octetstring smsc_addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       tag := OSMO_GSUP_SMSC_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+        val := { smsc_addr := smsc_addr }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_SMSC_ADDR(template octetstring smsc_addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_SMSC_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+        val := { smsc_addr := smsc_addr }</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) GSUP_IE ts_GSUP_IE_SM_RP_DA(GSUP_SM_RP_DA val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_SM_RP_DA_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_da := val</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 GSUP_IE tr_GSUP_IE_SM_RP_DA(template GSUP_SM_RP_DA val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   tag := OSMO_GSUP_SM_RP_DA_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_da := val</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%);">+ * SM-RP-OA represents the SM Originating Address, see 7.6.8.2.</span><br><span style="color: hsl(120, 100%, 40%);">+ * It can be either of the following:</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - MSISDN</span><br><span style="color: hsl(120, 100%, 40%);">+ *  - service centre address</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+type union GSUP_SM_RP_OA_IeValue {</span><br><span style="color: hsl(120, 100%, 40%);">+      hexstring       msisdn,</span><br><span style="color: hsl(120, 100%, 40%);">+       octetstring     smsc_addr</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%);">+type record GSUP_SM_RP_OA {</span><br><span style="color: hsl(120, 100%, 40%);">+  GSUP_IEI                tag,</span><br><span style="color: hsl(120, 100%, 40%);">+  GSUP_SM_RP_OA_IeValue   val</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (val) "CROSSTAG(msisdn, tag = OSMO_GSUP_MSISDN_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                          smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;</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) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_MSISDN(hexstring msisdn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_MSISDN_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+   val := { msisdn := msisdn }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_MSISDN(template hexstring msisdn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tag := OSMO_GSUP_MSISDN_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+   val := { msisdn := msisdn }</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) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_SMSC_ADDR(octetstring smsc_addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       tag := OSMO_GSUP_SMSC_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+        val := { smsc_addr := smsc_addr }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_SMSC_ADDR(template octetstring smsc_addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_SMSC_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+        val := { smsc_addr := smsc_addr }</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) GSUP_IE ts_GSUP_IE_SM_RP_OA(GSUP_SM_RP_OA val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_SM_RP_OA_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_oa := val</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 GSUP_IE tr_GSUP_IE_SM_RP_OA(template GSUP_SM_RP_OA val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   tag := OSMO_GSUP_SM_RP_OA_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_oa := val</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%);">+/* SM-RP-UI represents the SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_IE ts_GSUP_IE_SM_RP_UI(octetstring val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tag := OSMO_GSUP_SM_RP_UI_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_ui := val</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 GSUP_IE tr_GSUP_IE_SM_RP_UI(template octetstring val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     tag := OSMO_GSUP_SM_RP_UI_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_ui := val</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> template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {</span><br><span>    tag := OSMO_GSUP_SS_INFO_IE,</span><br><span>         len := 0, /* overwritten */</span><br><span>@@ -853,6 +1004,162 @@</span><br><span>         }</span><br><span> );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+     OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+        GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+        octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* TODO: optional IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),</span><br><span style="color: hsl(120, 100%, 40%);">+               valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),</span><br><span style="color: hsl(120, 100%, 40%);">+               valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))</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 GSUP_PDU tr_GSUP_MO_FORWARD_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+       template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+       template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* TODO: optional IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_SM_RP_DA(sm_rp_da),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_SM_RP_OA(sm_rp_oa),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_SM_RP_UI(sm_rp_ui)</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) GSUP_PDU ts_GSUP_MO_FORWARD_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))</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 GSUP_PDU tr_GSUP_MO_FORWARD_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_SM_RP_UI(sm_rp_ui)</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) GSUP_PDU ts_GSUP_MO_FORWARD_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    integer cause /* User error, see 12.2.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+   {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_Cause(cause))</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 GSUP_PDU tr_GSUP_MO_FORWARD_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template integer cause := ? /* User error, see 12.2.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+   {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_Cause(cause)</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) GSUP_PDU ts_GSUP_MT_FORWARD_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+        GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+        octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,</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%);">+            * TODO: add MT-specific fields (and IEs):</span><br><span style="color: hsl(120, 100%, 40%);">+             *  - moreMessagesToSend</span><br><span style="color: hsl(120, 100%, 40%);">+               *  - smDeliveryTimer</span><br><span style="color: hsl(120, 100%, 40%);">+          *  - smDeliveryStartTime</span><br><span style="color: hsl(120, 100%, 40%);">+              */</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),</span><br><span style="color: hsl(120, 100%, 40%);">+               valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),</span><br><span style="color: hsl(120, 100%, 40%);">+               valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))</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 GSUP_PDU tr_GSUP_MT_FORWARD_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+       template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+       template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,</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%);">+            * TODO: add MT-specific fields (and IEs):</span><br><span style="color: hsl(120, 100%, 40%);">+             *  - moreMessagesToSend</span><br><span style="color: hsl(120, 100%, 40%);">+               *  - smDeliveryTimer</span><br><span style="color: hsl(120, 100%, 40%);">+          *  - smDeliveryStartTime</span><br><span style="color: hsl(120, 100%, 40%);">+              */</span><br><span style="color: hsl(120, 100%, 40%);">+           tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_SM_RP_DA(sm_rp_da),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_SM_RP_OA(sm_rp_oa),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_SM_RP_UI(sm_rp_ui)</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) GSUP_PDU ts_GSUP_MT_FORWARD_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))</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 GSUP_PDU tr_GSUP_MT_FORWARD_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_SM_RP_UI(sm_rp_ui)</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) GSUP_PDU ts_GSUP_MT_FORWARD_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    integer cause /* User error, see 12.9.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+   {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_Cause(cause))</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 GSUP_PDU tr_GSUP_MT_FORWARD_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+   template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template integer cause := ? /* User error, see 12.9.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+   {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_Cause(cause)</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> function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {</span><br><span>        for (var integer i := 0; i < sizeof(msg.ies); i := i+1) {</span><br><span>                 if (msg.ies[i].tag == iei) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11062">change 11062</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/11062"/><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: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e </div>
<div style="display:none"> Gerrit-Change-Number: 11062 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>