aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmocom/gsm/gsup.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/osmocom/gsm/gsup.h')
-rw-r--r--include/osmocom/gsm/gsup.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h
index cd6fd31f..192b877b 100644
--- a/include/osmocom/gsm/gsup.h
+++ b/include/osmocom/gsm/gsup.h
@@ -40,6 +40,7 @@
#include <stdint.h>
#include <osmocom/core/msgb.h>
+#include <osmocom/gsm/gsup_sms.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
#include <osmocom/crypt/auth.h>
@@ -88,6 +89,14 @@ enum osmo_gsup_iei {
/*! Supplementary Services payload */
OSMO_GSUP_SS_INFO_IE = 0x35,
+
+ /* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */
+ OSMO_GSUP_SM_RP_MR_IE = 0x40,
+ OSMO_GSUP_SM_RP_DA_IE = 0x41,
+ OSMO_GSUP_SM_RP_OA_IE = 0x42,
+ OSMO_GSUP_SM_RP_UI_IE = 0x43,
+ OSMO_GSUP_SM_RP_CAUSE_IE = 0x44,
+ OSMO_GSUP_SM_RP_MMS_IE = 0x45,
};
/*! GSUP message type */
@@ -121,6 +130,14 @@ enum osmo_gsup_message_type {
OSMO_GSUP_MSGT_PROC_SS_REQUEST = 0b00100000,
OSMO_GSUP_MSGT_PROC_SS_ERROR = 0b00100001,
OSMO_GSUP_MSGT_PROC_SS_RESULT = 0b00100010,
+
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST = 0b00100100,
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR = 0b00100101,
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT = 0b00100110,
+
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST = 0b00101000,
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR = 0b00101001,
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT = 0b00101010,
};
#define OSMO_GSUP_IS_MSGT_REQUEST(msgt) (((msgt) & 0b00000011) == 0b00)
@@ -213,6 +230,26 @@ struct osmo_gsup_message {
/*! ASN.1 encoded MAP payload for Supplementary Services */
uint8_t *ss_info;
size_t ss_info_len;
+
+ /*! SM-RP-MR (see 3GPP TS 29.002, 7.6.1.1), Message Reference.
+ * Please note that there is no SM-RP-MR in TCAP/MAP! SM-RP-MR
+ * is usually mapped to TCAP's InvokeID, but we don't need it. */
+ const uint8_t *sm_rp_mr;
+ /*! SM-RP-DA (see 3GPP TS 29.002, 7.6.8.1), Destination Address */
+ enum osmo_gsup_sms_sm_rp_oda_t sm_rp_da_type;
+ size_t sm_rp_da_len;
+ const uint8_t *sm_rp_da;
+ /*! SM-RP-OA (see 3GPP TS 29.002, 7.6.8.2), Originating Address */
+ enum osmo_gsup_sms_sm_rp_oda_t sm_rp_oa_type;
+ size_t sm_rp_oa_len;
+ const uint8_t *sm_rp_oa;
+ /*! SM-RP-UI (see 3GPP TS 29.002, 7.6.8.4), SMS TPDU */
+ const uint8_t *sm_rp_ui;
+ size_t sm_rp_ui_len;
+ /*! SM-RP-Cause value (1 oct.) as per GSM TS 04.11, section 8.2.5.4 */
+ const uint8_t *sm_rp_cause;
+ /*! SM-RP-MMS (More Messages to Send), section 7.6.8.7 */
+ const uint8_t *sm_rp_mms;
};
int osmo_gsup_decode(const uint8_t *data, size_t data_len,