diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2016-08-21 20:16:33 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2016-09-17 08:45:07 +0000 |
commit | aa386d29fd6b0e6ceecaf01d51f621a89f5a6720 (patch) | |
tree | 6bcd280cc9071f48025557adcc9e8e19280eec58 /openbsc/src/libmsc/gsm_04_11.c | |
parent | c2f2ad8a5f575a38011bfa9b1833a88ed393dd1d (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.c | 17 |
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 */ |