smpp: Parse and use SMPP-provided validity period
Before this patch, we always ignored any SMPP-provided validity period
and used '0' which is now, and means it expires immediately.
As SMPP allows for validity_period of NULL, use 7 days as SMSC default
in such situations.
Change-Id: Iad9f2697f045ed3bc0eb74c3a9730861f82e6c48
Closes: OS#5567
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c
index 54cd75b..4ce6c27 100644
--- a/src/libmsc/smpp_openbsc.c
+++ b/src/libmsc/smpp_openbsc.c
@@ -1,6 +1,6 @@
/* OpenBSC SMPP 3.4 interface, SMSC-side implementation */
-/* (C) 2012-2013 by Harald Welte <laforge@gnumonks.org>
+/* (C) 2012-2022 by Harald Welte <laforge@gnumonks.org>
*
* All Rights Reserved
*
@@ -24,6 +24,7 @@
#include <string.h>
#include <stdint.h>
#include <errno.h>
+#include <time.h>
#include <smpp34.h>
#include <smpp34_structs.h>
@@ -122,6 +123,8 @@
static int submit_to_sms(struct gsm_sms **psms, struct gsm_network *net,
const struct submit_sm_t *submit)
{
+ time_t t_now = time(NULL);
+ time_t t_validity_absolute;
const uint8_t *sms_msg = NULL;
unsigned int sms_msg_len = 0;
struct vlr_subscr *dest;
@@ -258,6 +261,12 @@
sms->user_data_len = sms_msg_len;
}
+ t_validity_absolute = smpp_parse_time_format((const char *) submit->validity_period, &t_now);
+ if (!t_validity_absolute)
+ sms->validity_minutes = 7 * 24 * 60; /* default: 7 days */
+ else
+ sms->validity_minutes = (t_validity_absolute - t_now) / 60;
+
*psms = sms;
return ESME_ROK;
}