<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12059">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">(HACK) libmsc/gsm_04_11.c: properly handle MMS indication<br><br>MMS (More Messages to Send) is a part of MT-ForwardSM-Req message,<br>that is used by ESME to indicate that there are more MT SMS messages<br>to be sent, so the MSC should keep RAN connection open.<br><br>Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e<br>Related Change-Id: (TTCN) I6308586a70c4fb3254c519330a61a9667372149f<br>Related: OS#3587<br>---<br>M include/osmocom/msc/gsm_04_11.h<br>M include/osmocom/msc/ran_conn.h<br>M include/osmocom/msc/transaction.h<br>M src/libmsc/gsm_04_11.c<br>M src/libmsc/gsm_04_11_gsup.c<br>M src/libmsc/osmo_msc.c<br>6 files changed, 25 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/59/12059/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/gsm_04_11.h b/include/osmocom/msc/gsm_04_11.h</span><br><span>index 4297cdb..0e5b3d2 100644</span><br><span>--- a/include/osmocom/msc/gsm_04_11.h</span><br><span>+++ b/include/osmocom/msc/gsm_04_11.h</span><br><span>@@ -42,7 +42,8 @@</span><br><span> int gsm411_send_sms(struct gsm_network *net,</span><br><span>                     struct vlr_subscr *vsub,</span><br><span>                     struct gsm_sms *sms);</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm411_send_rp_data(struct gsm_network *net, struct vlr_subscr *vsub,</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm411_send_rp_data(struct gsm_network *net,</span><br><span style="color: hsl(120, 100%, 40%);">+                  struct vlr_subscr *vsub, uint8_t *mms_ind,</span><br><span>                   size_t sm_rp_oa_len, const uint8_t *sm_rp_oa,</span><br><span>                        size_t sm_rp_ud_len, const uint8_t *sm_rp_ud);</span><br><span> </span><br><span>diff --git a/include/osmocom/msc/ran_conn.h b/include/osmocom/msc/ran_conn.h</span><br><span>index d71872e..5975a59 100644</span><br><span>--- a/include/osmocom/msc/ran_conn.h</span><br><span>+++ b/include/osmocom/msc/ran_conn.h</span><br><span>@@ -220,6 +220,7 @@</span><br><span>        RAN_CONN_USE_TRANS_SMS,</span><br><span>      RAN_CONN_USE_TRANS_NC_SS,</span><br><span>    RAN_CONN_USE_SILENT_CALL,</span><br><span style="color: hsl(120, 100%, 40%);">+     RAN_CONN_USE_MT_SMS_MMTS,</span><br><span>    RAN_CONN_USE_RELEASE,</span><br><span> };</span><br><span> </span><br><span>diff --git a/include/osmocom/msc/transaction.h b/include/osmocom/msc/transaction.h</span><br><span>index 0760c07..a987b1c 100644</span><br><span>--- a/include/osmocom/msc/transaction.h</span><br><span>+++ b/include/osmocom/msc/transaction.h</span><br><span>@@ -78,6 +78,9 @@</span><br><span> </span><br><span>                     /* SM-RP-MR, Message Reference (see GSM TS 04.11, section 8.2.3) */</span><br><span>                  uint8_t sm_rp_mr;</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* SM-RP-MMS, More Messages to Send</span><br><span style="color: hsl(120, 100%, 40%);">+                    * (see GSM 3GPP TS 29.002, section 7.6.8.7) */</span><br><span style="color: hsl(120, 100%, 40%);">+                       bool sm_rp_mms;</span><br><span> </span><br><span>                  struct gsm_sms *sms;</span><br><span>                 } sms;</span><br><span>diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c</span><br><span>index 01f1cb5..c77c4ec 100644</span><br><span>--- a/src/libmsc/gsm_04_11.c</span><br><span>+++ b/src/libmsc/gsm_04_11.c</span><br><span>@@ -1133,7 +1133,8 @@</span><br><span> }</span><br><span> </span><br><span> /* Low-level function to send raw RP-DATA to a given subscriber */</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm411_send_rp_data(struct gsm_network *net, struct vlr_subscr *vsub,</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm411_send_rp_data(struct gsm_network *net,</span><br><span style="color: hsl(120, 100%, 40%);">+                 struct vlr_subscr *vsub, uint8_t *mms_ind,</span><br><span>                   size_t sm_rp_oa_len, const uint8_t *sm_rp_oa,</span><br><span>                        size_t sm_rp_ud_len, const uint8_t *sm_rp_ud)</span><br><span> {</span><br><span>@@ -1146,6 +1147,10 @@</span><br><span>  if (!trans)</span><br><span>          return -ENOMEM;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   /* Handle MMS indication */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mms_ind != NULL && *mms_ind != 0x00)</span><br><span style="color: hsl(120, 100%, 40%);">+              trans->sms.sm_rp_mms = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* Allocate a message buffer for to be encoded SMS */</span><br><span>        msg = gsm411_msgb_alloc();</span><br><span>   if (!msg) {</span><br><span>@@ -1277,6 +1282,17 @@</span><br><span>         trans->sms.smc_inst.mn_recv = NULL;</span><br><span>       trans->sms.smc_inst.mm_send = NULL;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    /* HACK: handle SM-RP-MMS (More Messages to Send) */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (trans->conn != NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (trans->sms.sm_rp_mms) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (!ran_conn_used_by(trans->conn, RAN_CONN_USE_MT_SMS_MMTS))</span><br><span style="color: hsl(120, 100%, 40%);">+                              ran_conn_get(trans->conn, RAN_CONN_USE_MT_SMS_MMTS);</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (ran_conn_used_by(trans->conn, RAN_CONN_USE_MT_SMS_MMTS))</span><br><span style="color: hsl(120, 100%, 40%);">+                               ran_conn_put(trans->conn, RAN_CONN_USE_MT_SMS_MMTS);</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>  if (trans->sms.sms) {</span><br><span>             LOGP(DLSMS, LOGL_ERROR, "Transaction contains SMS.\n");</span><br><span>            send_signal(S_SMS_UNKNOWN_ERROR, trans, trans->sms.sms, 0);</span><br><span>diff --git a/src/libmsc/gsm_04_11_gsup.c b/src/libmsc/gsm_04_11_gsup.c</span><br><span>index 9b15961..2aedbf4 100644</span><br><span>--- a/src/libmsc/gsm_04_11_gsup.c</span><br><span>+++ b/src/libmsc/gsm_04_11_gsup.c</span><br><span>@@ -280,7 +280,7 @@</span><br><span>                goto msg_error;</span><br><span> </span><br><span>  /* Send RP-DATA */</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = gsm411_send_rp_data(net, vsub,</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = gsm411_send_rp_data(net, vsub, gsup_msg->sm_rp_mms,</span><br><span>          gsup_msg->sm_rp_oa_len, gsup_msg->sm_rp_oa,</span><br><span>            gsup_msg->sm_rp_ui_len, gsup_msg->sm_rp_ui);</span><br><span>   if (rc) {</span><br><span>diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c</span><br><span>index 52277b7..a996e14 100644</span><br><span>--- a/src/libmsc/osmo_msc.c</span><br><span>+++ b/src/libmsc/osmo_msc.c</span><br><span>@@ -316,6 +316,7 @@</span><br><span>     {RAN_CONN_USE_TRANS_SMS,        "trans_sms"},</span><br><span>      {RAN_CONN_USE_TRANS_NC_SS,      "trans_nc_ss"},</span><br><span>    {RAN_CONN_USE_SILENT_CALL,      "silent_call"},</span><br><span style="color: hsl(120, 100%, 40%);">+     {RAN_CONN_USE_MT_SMS_MMTS,      "mt_sms_mmts"},</span><br><span>    {RAN_CONN_USE_RELEASE,          "release"},</span><br><span>        {0, NULL},</span><br><span> };</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12059">change 12059</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/12059"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ic46b04913b2e8cc5d11a39426dcc1bfe11f1d31e </div>
<div style="display:none"> Gerrit-Change-Number: 12059 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>