libmsc/gsm_04_11.c: forward MO SMS messages over GSUP
Change-Id: I7d651fde3d608d02f275a74043dc42262aabb1b8
Depends-on: (core) Ic37f3b2114b8095cfce22977e67133b9103942e3
Depends-on: (core) Ibe325c64ae2d6c626b232533bb4cbc65fc2b5d71
Depends-on: (OsmoHLR) I0589ff27933e9bca2bcf93b8259004935778db8f
Related Change-Id: (TTCN) I7abc95b8e416f7308d54e11be11c08586d18e6c5
Related Change-Id: (TTCN) Id14bbd8bd51558cdacefea0fe042769cd69ed5c8
Related: OS#3587
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 62f3bba..788a0a9 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -664,10 +664,20 @@
/* Receive a 04.11 TPDU inside RP-DATA / user data */
static int gsm411_rx_rp_ud(struct msgb *msg, struct gsm_trans *trans,
- struct gsm411_rp_hdr *rph)
+ struct gsm411_rp_hdr *rph,
+ uint8_t *dst, uint8_t dst_len)
{
int rc = 0;
+ if (trans->net->sms_over_gsup) {
+ /* RP-ACK or RP-ERROR is triggered as soon as we get the response */
+ rc = gsm411_gsup_mo_fwd_sm_req(trans, msg, rph->msg_ref, dst, dst_len);
+ if (rc) /* GSUP message sending error */
+ return gsm411_send_rp_error(trans, rph->msg_ref, rc);
+
+ return 0;
+ }
+
rc = gsm340_rx_tpdu(trans, msg, rph->msg_ref);
if (rc == 0)
return gsm411_send_rp_ack(trans, rph->msg_ref);
@@ -715,7 +725,7 @@
DEBUGP(DLSMS, "DST(%u,%s)\n", dst_len, osmo_hexdump(dst, dst_len));
- return gsm411_rx_rp_ud(msg, trans, rph);
+ return gsm411_rx_rp_ud(msg, trans, rph, dst, dst_len);
}
static struct gsm_sms *sms_report_alloc(struct gsm_sms *sms)
@@ -852,6 +862,15 @@
{
int rc;
+ if (trans->net->sms_over_gsup) {
+ /* RP-ACK or RP-ERROR is triggered as soon as we get the response */
+ rc = gsm411_gsup_mo_ready_for_sm_req(trans, rph->msg_ref);
+ if (rc) /* GSUP message sending error */
+ return gsm411_send_rp_error(trans, rph->msg_ref, rc);
+
+ return 0;
+ }
+
rc = gsm411_send_rp_ack(trans, rph->msg_ref);
/* MS tells us that it has memory for more SMS, we need