aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith <keith@rhizomatica.org>2017-08-16 22:45:07 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2017-08-27 03:52:47 +0200
commit5f9d0bdd64eee9acfc3e24aaa63b3874454db415 (patch)
treeaf017755fc47bad98083e6d5edb6dc7bf8f64f0c
parente8159690ac2f3ebc79a61882b8b7574d6b713365 (diff)
libmsc: Use actual delivery time in delivery reports.
Set the time on the status report to the time the message was delivered, as this may not be the same as the time when we are delivering the report to the originating MS. Change-Id: I9056429d40bf02731f004b7833f1de45a0d1add8
-rw-r--r--include/openbsc/gsm_data.h1
-rw-r--r--src/libmsc/db.c1
-rw-r--r--src/libmsc/gsm_04_11.c4
3 files changed, 4 insertions, 2 deletions
diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h
index 51cf6dcd4..f4de38105 100644
--- a/include/openbsc/gsm_data.h
+++ b/include/openbsc/gsm_data.h
@@ -511,6 +511,7 @@ struct gsm_sms {
} smpp;
unsigned long validity_minutes;
+ time_t created;
bool is_report;
uint8_t reply_path_req;
uint8_t status_rep_req;
diff --git a/src/libmsc/db.c b/src/libmsc/db.c
index 3495806de..ae7e2876b 100644
--- a/src/libmsc/db.c
+++ b/src/libmsc/db.c
@@ -742,6 +742,7 @@ static struct gsm_sms *sms_from_result(struct gsm_network *net, dbi_result resul
/* FIXME: validity */
/* FIXME: those should all be get_uchar, but sqlite3 is braindead */
+ sms->created = dbi_result_get_datetime(result, "created");
sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req");
sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req");
sms->is_report = dbi_result_get_ulonglong(result, "is_report");
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 55642aa4a..c5bcce75e 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -312,11 +312,11 @@ static int gsm340_gen_sms_status_report_tpdu(struct msgb *msg,
/* generate TP-SCTS (Service centre timestamp) */
smsp = msgb_put(msg, 7);
- gsm340_gen_scts(smsp, time(NULL));
+ gsm340_gen_scts(smsp, sms->created);
/* generate TP-DT (Discharge time, in TP-SCTS format). */
smsp = msgb_put(msg, 7);
- gsm340_gen_scts(smsp, time(NULL));
+ gsm340_gen_scts(smsp, sms->created);
/* TP-ST (status) */
smsp = msgb_put(msg, 1);