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