aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);