aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/gsm_04_11.c
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2016-08-21 20:16:33 +0200
committerHarald Welte <laforge@gnumonks.org>2016-09-17 08:45:07 +0000
commitaa386d29fd6b0e6ceecaf01d51f621a89f5a6720 (patch)
tree6bcd280cc9071f48025557adcc9e8e19280eec58 /openbsc/src/libmsc/gsm_04_11.c
parentc2f2ad8a5f575a38011bfa9b1833a88ed393dd1d (diff)
sms: change rp err cause of smpp_try_deliver errors
smpp_try_deliver could fail with rc < 0. In such cases don't send the MS the rp error sms rejected (cause 21). A rejected message should not be sent again. The spec 04 11 recommends sending cause 41 Temporary failure in unknown cases. Add also a log message and rate counter for such cases. Tweaked-By: Neels Hofmeyr <nhofmeyr@sysmocom.de> Change-Id: Ia03e50ce2bd9a7d1054cc5a6000fd73bd3497c03
Diffstat (limited to 'openbsc/src/libmsc/gsm_04_11.c')
-rw-r--r--openbsc/src/libmsc/gsm_04_11.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c
index 6d3f41b23..d1fdfb997 100644
--- a/openbsc/src/libmsc/gsm_04_11.c
+++ b/openbsc/src/libmsc/gsm_04_11.c
@@ -40,6 +40,7 @@
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/gsm/gsm0411_utils.h>
+#include <osmocom/gsm/protocol/gsm_04_11.h>
#include <openbsc/debug.h>
#include <openbsc/gsm_data.h>
@@ -294,8 +295,12 @@ int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct msgb *msg,
if (rc == 1)
goto try_local;
if (rc < 0) {
- rc = 21; /* cause 21: short message transfer rejected */
- /* FIXME: handle the error somehow? */
+ LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.",
+ subscr_name(conn->subscr), rc);
+ rc = GSM411_RP_CAUSE_MO_TEMP_FAIL;
+ /* rc will be logged by gsm411_send_rp_error() */
+ rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[
+ MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR]);
}
return rc;
}
@@ -319,8 +324,12 @@ try_local:
rc = 1; /* cause 1: unknown subscriber */
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
} else if (rc < 0) {
- rc = 21; /* cause 21: short message transfer rejected */
- /* FIXME: handle the error somehow? */
+ LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.",
+ subscr_name(conn->subscr), rc);
+ rc = GSM411_RP_CAUSE_MO_TEMP_FAIL;
+ /* rc will be logged by gsm411_send_rp_error() */
+ rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[
+ MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR]);
}
#else
rc = 1; /* cause 1: unknown subscriber */