Vadim Yanitskiy has uploaded this change for review. ( 
https://gerrit.osmocom.org/12059


Change subject: (HACK) libmsc/gsm_04_11.c: properly handle MMS indication
......................................................................

(HACK) libmsc/gsm_04_11.c: properly handle MMS indication

MMS (More Messages to Send) is a part of MT-ForwardSM-Req message,
that is used by ESME to indicate that there are more MT SMS messages
to be sent, so the MSC should keep RAN connection open.

Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e
Related Change-Id: (TTCN) I6308586a70c4fb3254c519330a61a9667372149f
Related: OS#3587
---
M include/osmocom/msc/gsm_04_11.h
M include/osmocom/msc/ran_conn.h
M include/osmocom/msc/transaction.h
M src/libmsc/gsm_04_11.c
M src/libmsc/gsm_04_11_gsup.c
M src/libmsc/osmo_msc.c
6 files changed, 25 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/59/12059/1

diff --git a/include/osmocom/msc/gsm_04_11.h b/include/osmocom/msc/gsm_04_11.h
index 4297cdb..0e5b3d2 100644
--- a/include/osmocom/msc/gsm_04_11.h
+++ b/include/osmocom/msc/gsm_04_11.h
@@ -42,7 +42,8 @@
 int gsm411_send_sms(struct gsm_network *net,
                    struct vlr_subscr *vsub,
                    struct gsm_sms *sms);
-int gsm411_send_rp_data(struct gsm_network *net, struct vlr_subscr *vsub,
+int gsm411_send_rp_data(struct gsm_network *net,
+                       struct vlr_subscr *vsub, uint8_t *mms_ind,
                        size_t sm_rp_oa_len, const uint8_t *sm_rp_oa,
                        size_t sm_rp_ud_len, const uint8_t *sm_rp_ud);

diff --git a/include/osmocom/msc/ran_conn.h b/include/osmocom/msc/ran_conn.h
index d71872e..5975a59 100644
--- a/include/osmocom/msc/ran_conn.h
+++ b/include/osmocom/msc/ran_conn.h
@@ -220,6 +220,7 @@
        RAN_CONN_USE_TRANS_SMS,
        RAN_CONN_USE_TRANS_NC_SS,
        RAN_CONN_USE_SILENT_CALL,
+       RAN_CONN_USE_MT_SMS_MMTS,
        RAN_CONN_USE_RELEASE,
 };

diff --git a/include/osmocom/msc/transaction.h 
b/include/osmocom/msc/transaction.h
index 0760c07..a987b1c 100644
--- a/include/osmocom/msc/transaction.h
+++ b/include/osmocom/msc/transaction.h
@@ -78,6 +78,9 @@

                        /* SM-RP-MR, Message Reference (see GSM TS 04.11, 
section 8.2.3) */
                        uint8_t sm_rp_mr;
+                       /* SM-RP-MMS, More Messages to Send
+                        * (see GSM 3GPP TS 29.002, section 7.6.8.7) */
+                       bool sm_rp_mms;

                        struct gsm_sms *sms;
                } sms;
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 01f1cb5..c77c4ec 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -1133,7 +1133,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,
+int gsm411_send_rp_data(struct gsm_network *net,
+                       struct vlr_subscr *vsub, uint8_t *mms_ind,
                        size_t sm_rp_oa_len, const uint8_t *sm_rp_oa,
                        size_t sm_rp_ud_len, const uint8_t *sm_rp_ud)
 {
@@ -1146,6 +1147,10 @@
        if (!trans)
                return -ENOMEM;

+       /* Handle MMS indication */
+       if (mms_ind != NULL && *mms_ind != 0x00)
+               trans->sms.sm_rp_mms = true;
+
        /* Allocate a message buffer for to be encoded SMS */
        msg = gsm411_msgb_alloc();
        if (!msg) {
@@ -1277,6 +1282,17 @@
        trans->sms.smc_inst.mn_recv = NULL;
        trans->sms.smc_inst.mm_send = NULL;

+       /* HACK: handle SM-RP-MMS (More Messages to Send) */
+       if (trans->conn != NULL) {
+               if (trans->sms.sm_rp_mms) {
+                       if (!ran_conn_used_by(trans->conn, 
RAN_CONN_USE_MT_SMS_MMTS))
+                               ran_conn_get(trans->conn, 
RAN_CONN_USE_MT_SMS_MMTS);
+               } else {
+                       if (ran_conn_used_by(trans->conn, 
RAN_CONN_USE_MT_SMS_MMTS))
+                               ran_conn_put(trans->conn, 
RAN_CONN_USE_MT_SMS_MMTS);
+               }
+       }
+
        if (trans->sms.sms) {
                LOGP(DLSMS, LOGL_ERROR, "Transaction contains SMS.\n");
                send_signal(S_SMS_UNKNOWN_ERROR, trans, trans->sms.sms, 0);
diff --git a/src/libmsc/gsm_04_11_gsup.c b/src/libmsc/gsm_04_11_gsup.c
index 9b15961..2aedbf4 100644
--- a/src/libmsc/gsm_04_11_gsup.c
+++ b/src/libmsc/gsm_04_11_gsup.c
@@ -280,7 +280,7 @@
                goto msg_error;

        /* Send RP-DATA */
-       rc = gsm411_send_rp_data(net, vsub,
+       rc = gsm411_send_rp_data(net, vsub, gsup_msg->sm_rp_mms,
                gsup_msg->sm_rp_oa_len, gsup_msg->sm_rp_oa,
                gsup_msg->sm_rp_ui_len, gsup_msg->sm_rp_ui);
        if (rc) {
diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c
index 52277b7..a996e14 100644
--- a/src/libmsc/osmo_msc.c
+++ b/src/libmsc/osmo_msc.c
@@ -316,6 +316,7 @@
        {RAN_CONN_USE_TRANS_SMS,        "trans_sms"},
        {RAN_CONN_USE_TRANS_NC_SS,      "trans_nc_ss"},
        {RAN_CONN_USE_SILENT_CALL,      "silent_call"},
+       {RAN_CONN_USE_MT_SMS_MMTS,      "mt_sms_mmts"},
        {RAN_CONN_USE_RELEASE,          "release"},
        {0, NULL},
 };

--
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: newchange
Gerrit-Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e
Gerrit-Change-Number: 12059
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <[email protected]>

Reply via email to