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;
 }