diff options
-rw-r--r-- | include/osmocom/msc/db.h | 1 | ||||
-rw-r--r-- | src/libmsc/db.c | 16 | ||||
-rw-r--r-- | src/libmsc/sms_queue.c | 1 |
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); |