This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHarald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/12059 ) Change subject: libmsc/gsm_04_11.c: properly handle MMTS indication ...................................................................... libmsc/gsm_04_11.c: properly handle MMTS indication According to 3GPP TS 29.002, section 7.6.8.7, MMS (More Messages to Send) is an optional IE of MT-ForwardSM-Req message which is used by SMSC to indicate that there are more (multi-part) MT SMS messages to be sent. The MSC needs to use this indication in order to decide whether to keep the RAN connection with a given subscriber open. Related Change-Id: (TTCN) I6308586a70c4fb3254c519330a61a9667372149f Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e Related: OS#3587 --- M include/osmocom/msc/gsm_04_11.h M include/osmocom/msc/msc_a.h M include/osmocom/msc/transaction.h M src/libmsc/gsm_04_11.c M src/libmsc/gsm_04_11_gsup.c 5 files changed, 47 insertions(+), 3 deletions(-) Approvals: Harald Welte: Looks good to me, approved osmith: Looks good to me, approved Jenkins Builder: Verified Vadim Yanitskiy: Verified diff --git a/include/osmocom/msc/gsm_04_11.h b/include/osmocom/msc/gsm_04_11.h index be8bff3..c504c7f 100644 --- a/include/osmocom/msc/gsm_04_11.h +++ b/include/osmocom/msc/gsm_04_11.h @@ -45,7 +45,8 @@ struct gsm_sms *sms); int gsm411_send_rp_data(struct gsm_network *net, struct vlr_subscr *vsub, size_t sm_rp_oa_len, const uint8_t *sm_rp_oa, - size_t sm_rp_ud_len, const uint8_t *sm_rp_ud); + size_t sm_rp_ud_len, const uint8_t *sm_rp_ud, + bool sm_rp_mmts_ind); void gsm411_sapi_n_reject(struct msc_a *msc_a); diff --git a/include/osmocom/msc/msc_a.h b/include/osmocom/msc/msc_a.h index c732695..a4d3226 100644 --- a/include/osmocom/msc/msc_a.h +++ b/include/osmocom/msc/msc_a.h @@ -45,6 +45,7 @@ #define MSC_A_USE_PAGING_RESPONSE "paging-response" #define MSC_A_USE_CC "cc" #define MSC_A_USE_SMS "sms" +#define MSC_A_USE_SMS_MMTS "sms_mmts" #define MSC_A_USE_NC_SS "nc_ss" #define MSC_A_USE_SILENT_CALL "silent_call" diff --git a/include/osmocom/msc/transaction.h b/include/osmocom/msc/transaction.h index 9278b64..ba609ea 100644 --- a/include/osmocom/msc/transaction.h +++ b/include/osmocom/msc/transaction.h @@ -110,6 +110,8 @@ /* SM-RP-MR, Message Reference (see GSM TS 04.11, section 8.2.3) */ uint8_t sm_rp_mr; + /* More Messages to Send (see 3GPP TS 29.002, section 7.6.8.7) */ + bool sm_rp_mmts_ind; struct gsm_sms *sms; } sms; diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c index a3b3830..3a3ec8c 100644 --- a/src/libmsc/gsm_04_11.c +++ b/src/libmsc/gsm_04_11.c @@ -129,6 +129,28 @@ return msc_a_tx_dtap_to_i(trans->msc_a, msg); } +/* Handle MMTS (More Messages to Send) indication */ +static void gsm411_handle_mmts_ind(const struct gsm_trans *trans) +{ + int32_t use_count; + + OSMO_ASSERT(trans); + OSMO_ASSERT(trans->msc_a); + + use_count = osmo_use_count_by(&trans->msc_a->use_count, MSC_A_USE_SMS_MMTS); + OSMO_ASSERT(use_count >= 0); /* Shall not be negative */ + + if (trans->sms.sm_rp_mmts_ind && use_count == 0) { + LOG_TRANS(trans, LOGL_INFO, "Multi-part SMS delivery is initiated\n"); + msc_a_get(trans->msc_a, MSC_A_USE_SMS_MMTS); + } else if (trans->sms.sm_rp_mmts_ind && use_count > 0) { + LOG_TRANS(trans, LOGL_INFO, "Continuing multi-part SMS delivery\n"); + } else if (!trans->sms.sm_rp_mmts_ind && use_count > 0) { + LOG_TRANS(trans, LOGL_INFO, "Multi-part SMS delivery has been completed\n"); + msc_a_put(trans->msc_a, MSC_A_USE_SMS_MMTS); + } +} + /* Paging callback for MT SMS (Paging is triggered by SMC) */ static void mmsms_paging_cb(struct msc_a *msc_a, struct gsm_trans *trans) { @@ -141,6 +163,10 @@ /* Associate transaction with established connection */ msc_a_get(msc_a, MSC_A_USE_SMS); trans->msc_a = msc_a; + + /* Multi-part SMS: handle MMTS (More Messages to Send) indication */ + gsm411_handle_mmts_ind(trans); + /* Confirm successful connection establishment */ gsm411_smc_recv(&trans->sms.smc_inst, GSM411_MMSMS_EST_CNF, NULL, 0); } else { @@ -1180,7 +1206,8 @@ /* Low-level function to send raw RP-DATA to a given subscriber */ int gsm411_send_rp_data(struct gsm_network *net, struct vlr_subscr *vsub, size_t sm_rp_oa_len, const uint8_t *sm_rp_oa, - size_t sm_rp_ud_len, const uint8_t *sm_rp_ud) + size_t sm_rp_ud_len, const uint8_t *sm_rp_ud, + bool sm_rp_mmts_ind) { struct gsm_trans *trans; struct msgb *msg; @@ -1190,6 +1217,11 @@ if (!trans) return -ENOMEM; + /* Multi-part SMS: handle MMTS (More Messages to Send) indication */ + trans->sms.sm_rp_mmts_ind = sm_rp_mmts_ind; + if (trans->msc_a != NULL) + gsm411_handle_mmts_ind(trans); + /* Allocate a message buffer for to be encoded SMS */ msg = gsm411_msgb_alloc(); if (!msg) { diff --git a/src/libmsc/gsm_04_11_gsup.c b/src/libmsc/gsm_04_11_gsup.c index 9f5175b..a1ec634 100644 --- a/src/libmsc/gsm_04_11_gsup.c +++ b/src/libmsc/gsm_04_11_gsup.c @@ -234,6 +234,7 @@ const struct osmo_gsup_message *gsup_msg) { struct gsm_network *net; + bool sm_rp_mmts_ind; int rc; /* Obtain required pointers */ @@ -267,10 +268,17 @@ if (gsup_msg->sm_rp_oa_type != OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR) goto msg_error; + /* MMS (More Messages to Send) IE is optional */ + if (gsup_msg->sm_rp_mms) + sm_rp_mmts_ind = *gsup_msg->sm_rp_mms > 0; + else + sm_rp_mmts_ind = false; + /* Send RP-DATA */ rc = gsm411_send_rp_data(net, vsub, gsup_msg->sm_rp_oa_len, gsup_msg->sm_rp_oa, - gsup_msg->sm_rp_ui_len, gsup_msg->sm_rp_ui); + gsup_msg->sm_rp_ui_len, gsup_msg->sm_rp_ui, + sm_rp_mmts_ind); if (rc) { LOGP(DLSMS, LOGL_NOTICE, "Failed to send MT SMS, " "ignoring MT-forwardSM-Req message...\n"); -- To view, visit https://gerrit.osmocom.org/12059 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e Gerrit-Change-Number: 12059 Gerrit-PatchSet: 11 Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com> Gerrit-Assignee: Neels Hofmeyr <nhofmeyr at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder (1000002) Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de> Gerrit-Reviewer: Vadim Yanitskiy <axilirator at gmail.com> Gerrit-Reviewer: osmith <osmith at sysmocom.de> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190519/c91e9e30/attachment.htm>