summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Makefile.am1
-rw-r--r--include/osmocom/gsm/gsup.h37
-rw-r--r--include/osmocom/gsm/gsup_sms.h38
3 files changed, 76 insertions, 0 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index ccf9e108..86d8d157 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -94,6 +94,7 @@ nobase_include_HEADERS = \
osmocom/gsm/gsm48_ie.h \
osmocom/gsm/gsm_utils.h \
osmocom/gsm/gsup.h \
+ osmocom/gsm/gsup_sms.h \
osmocom/gsm/ipa.h \
osmocom/gsm/lapd_core.h \
osmocom/gsm/lapdm.h \
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,
diff --git a/include/osmocom/gsm/gsup_sms.h b/include/osmocom/gsm/gsup_sms.h
new file mode 100644
index 00000000..521412d6
--- /dev/null
+++ b/include/osmocom/gsm/gsup_sms.h
@@ -0,0 +1,38 @@
+#pragma once
+
+/*! \addtogroup gsup
+ * @{
+ *
+ * This header defines SMS (Short Message Service) extensions for
+ * Osmocom GSUP (Generic Subscriber Update Protocol). The scope of
+ * this module is defined by 3GPP TS 29.002, section 12.
+ *
+ * \file gsup_sms.h
+ * SMS (Short Message Service) extensions for Osmocom GSUP. */
+
+#include <stdint.h>
+
+/*! Possible identity types for SM-RP-{OA|DA} */
+enum osmo_gsup_sms_sm_rp_oda_t {
+ OSMO_GSUP_SMS_SM_RP_ODA_NONE = 0x00,
+ OSMO_GSUP_SMS_SM_RP_ODA_IMSI = 0x01,
+ OSMO_GSUP_SMS_SM_RP_ODA_MSISDN = 0x02,
+ OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR = 0x03,
+ /*! Special value for noSM-RP-DA and noSM-RP-OA */
+ OSMO_GSUP_SMS_SM_RP_ODA_NULL = 0xff,
+};
+
+struct osmo_gsup_message;
+struct msgb;
+
+int osmo_gsup_sms_encode_sm_rp_da(struct msgb *msg,
+ const struct osmo_gsup_message *gsup_msg);
+int osmo_gsup_sms_decode_sm_rp_da(struct osmo_gsup_message *gsup_msg,
+ uint8_t *data, size_t data_len);
+
+int osmo_gsup_sms_encode_sm_rp_oa(struct msgb *msg,
+ const struct osmo_gsup_message *gsup_msg);
+int osmo_gsup_sms_decode_sm_rp_oa(struct osmo_gsup_message *gsup_msg,
+ uint8_t *data, size_t data_len);
+
+/*! @} */