aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Sperling <ssperling@sysmocom.de>2018-01-18 18:55:26 +0100
committerStefan Sperling <ssperling@sysmocom.de>2018-01-18 18:55:26 +0100
commit6ba2d5a9f7894efcc30677cab65482c855880140 (patch)
tree9577c381fe9a101f9a80d42fe8d43ecb0eea875c
parent832046d38311ff0a4578e05bf20681b3f796e5f6 (diff)
Delete SMS from the database once they were sent successfully
Currently the SMS database keeps accumulating entries for each SMS. These entries are never deleted automatically. With this change, we start deleting SMS which have successfully been sent to subscriber B. Change-Id: I3749855fe25d9d4e37ec96b0c2bffbc692b66a78
-rw-r--r--include/osmocom/msc/db.h1
-rw-r--r--src/libmsc/db.c16
-rw-r--r--src/libmsc/sms_queue.c1
3 files changed, 18 insertions, 0 deletions
diff --git a/include/osmocom/msc/db.h b/include/osmocom/msc/db.h
index 988c9bd6e..13c5ed363 100644
--- a/include/osmocom/msc/db.h
+++ b/include/osmocom/msc/db.h
@@ -49,6 +49,7 @@ struct gsm_sms *db_sms_get_unsent_for_subscr(struct vlr_subscr *vsub,
int db_sms_mark_delivered(struct gsm_sms *sms);
int db_sms_inc_deliver_attempts(struct gsm_sms *sms);
int db_sms_delete_by_msisdn(const char *msisdn);
+int db_sms_delete_sent_message_by_id(unsigned long long sms_id);
/* Statistics counter storage */
struct osmo_counter;
diff --git a/src/libmsc/db.c b/src/libmsc/db.c
index 7007c7af1..e80ef530a 100644
--- a/src/libmsc/db.c
+++ b/src/libmsc/db.c
@@ -970,6 +970,22 @@ int db_sms_delete_by_msisdn(const char *msisdn)
return 0;
}
+int db_sms_delete_sent_message_by_id(unsigned long long sms_id)
+{
+ dbi_result result;
+
+ result = dbi_conn_queryf(conn,
+ "DELETE FROM SMS WHERE id = %llu AND sent is NOT NULL",
+ sms_id);
+ if (!result) {
+ LOGP(DDB, LOGL_ERROR, "Failed to delete SMS %llu.\n", sms_id);
+ return 1;
+ }
+
+ dbi_result_free(result);
+ return 0;
+}
+
int db_store_counter(struct osmo_counter *ctr)
{
dbi_result result;
diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c
index 609a0db1d..1372a2cef 100644
--- a/src/libmsc/sms_queue.c
+++ b/src/libmsc/sms_queue.c
@@ -483,6 +483,7 @@ static int sms_sms_cb(unsigned int subsys, unsigned int signal,
network->sms_queue->pending -= 1;
vsub = vlr_subscr_get(pending->vsub);
sms_pending_free(pending);
+ db_sms_delete_sent_message_by_id(pending->sms_id);
/* Attempt to send another SMS to this subscriber */
sms_send_next(vsub);
vlr_subscr_put(vsub);