aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2022-05-17 14:39:51 +0200
committerHarald Welte <laforge@osmocom.org>2022-05-17 14:47:34 +0200
commit72a651a457519b665950697c030030578f9ef0aa (patch)
tree0264089cc796aefe9fe048ab249623a8de4e94e5
parent9a67864ed1792ffe7ff95d678bdb074222cdc3d4 (diff)
sms_queue: Make deletion of messages from DB VTY-configurable
This introduces some VTY settings that determine if delivered or expired messages should be removed from he SQL database or not. Change-Id: Id6174875d5c01c40d987077651b27ae1acbcaa93
-rw-r--r--include/osmocom/msc/sms_queue.h4
-rw-r--r--src/libmsc/sms_queue.c8
-rw-r--r--src/libmsc/smsc_vty.c27
-rw-r--r--tests/test_nodes.vty2
4 files changed, 39 insertions, 2 deletions
diff --git a/include/osmocom/msc/sms_queue.h b/include/osmocom/msc/sms_queue.h
index 76f885bf6..ccc56ab74 100644
--- a/include/osmocom/msc/sms_queue.h
+++ b/include/osmocom/msc/sms_queue.h
@@ -1,6 +1,8 @@
#ifndef SMS_QUEUE_H
#define SMS_QUEUE_H
+#include <stdbool.h>
+
struct gsm_network;
struct gsm_sms_queue;
struct vty;
@@ -9,6 +11,8 @@ struct sms_queue_config {
char *db_file_path; /* SMS database file path */
int max_fail; /* maximum number of delivery failures */
int max_pending; /* maximum number of gsm_sms_pending in RAM */
+ bool delete_delivered; /* delete delivered SMS from DB? */
+ bool delete_expired; /* delete expired SMS from DB? */
};
struct sms_queue_config *sms_queue_cfg_alloc(void *ctx);
diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c
index ff4940aef..7d1860f76 100644
--- a/src/libmsc/sms_queue.c
+++ b/src/libmsc/sms_queue.c
@@ -472,6 +472,8 @@ struct sms_queue_config *sms_queue_cfg_alloc(void *ctx)
sqcfg->max_pending = 20;
sqcfg->max_fail = 1;
+ sqcfg->delete_delivered = true;
+ sqcfg->delete_expired = true;
sqcfg->db_file_path = talloc_strdup(ctx, SMS_DEFAULT_DB_FILE_PATH);
return sqcfg;
@@ -615,7 +617,8 @@ static int sms_sms_cb(unsigned int subsys, unsigned int signal,
/* Remember the subscriber and clear the pending entry */
vsub = pending->vsub;
vlr_subscr_get(vsub, __func__);
- db_sms_delete_sent_message_by_id(pending->sms_id);
+ if (smq->cfg->delete_delivered)
+ db_sms_delete_sent_message_by_id(pending->sms_id);
sms_pending_free(smq, pending);
/* Attempt to send another SMS to this subscriber */
sms_send_next(vsub);
@@ -653,7 +656,8 @@ static int sms_sms_cb(unsigned int subsys, unsigned int signal,
}
/* While here, attempt to remove an expired SMS from the DB. */
- db_sms_delete_oldest_expired_message();
+ if (smq->cfg->delete_expired)
+ db_sms_delete_oldest_expired_message();
return 0;
}
diff --git a/src/libmsc/smsc_vty.c b/src/libmsc/smsc_vty.c
index cdb81c60f..b2d191a4d 100644
--- a/src/libmsc/smsc_vty.c
+++ b/src/libmsc/smsc_vty.c
@@ -76,6 +76,28 @@ DEFUN(cfg_sms_queue_fail, cfg_sms_queue_fail_cmd,
return CMD_SUCCESS;
}
+#define DB_STR "SMS Database Configuration\n"
+
+DEFUN(cfg_sms_db_del_delivered, cfg_sms_db_del_delivered_cmd,
+ "database delete-delivered (0|1)",
+ DB_STR "Configure if delivered SMS are deleted from DB\n"
+ "Do not delete SMS after delivery\n"
+ "Delete SMS after delivery\n")
+{
+ smqcfg->delete_delivered = atoi(argv[0]);
+ return CMD_SUCCESS;
+}
+
+DEFUN(cfg_sms_db_del_expired, cfg_sms_db_del_expired_cmd,
+ "database delete-expired (0|1)",
+ DB_STR "Configure if expired SMS are deleted from DB\n"
+ "Do not delete SMS after expiration of validity period\n"
+ "Delete SMS after expiration of validity period\n")
+{
+ smqcfg->delete_expired = atoi(argv[0]);
+ return CMD_SUCCESS;
+}
+
/***********************************************************************
* View / Enable Node
***********************************************************************/
@@ -141,6 +163,9 @@ static int config_write_smsc(struct vty *vty)
vty_out(vty, " queue max-pending %u%s", smqcfg->max_pending, VTY_NEWLINE);
vty_out(vty, " queue max-failure %u%s", smqcfg->max_fail, VTY_NEWLINE);
+ vty_out(vty, " database delete-delivered %u%s", smqcfg->delete_delivered, VTY_NEWLINE);
+ vty_out(vty, " database delete-expired %u%s", smqcfg->delete_expired, VTY_NEWLINE);
+
return 0;
}
@@ -156,6 +181,8 @@ void smsc_vty_init(struct gsm_network *msc_network)
install_element(SMSC_NODE, &cfg_sms_database_cmd);
install_element(SMSC_NODE, &cfg_sms_queue_max_cmd);
install_element(SMSC_NODE, &cfg_sms_queue_fail_cmd);
+ install_element(SMSC_NODE, &cfg_sms_db_del_delivered_cmd);
+ install_element(SMSC_NODE, &cfg_sms_db_del_expired_cmd);
/* enable node */
install_element(ENABLE_NODE, &smsqueue_trigger_cmd);
diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty
index a67f20268..ac3ff1639 100644
--- a/tests/test_nodes.vty
+++ b/tests/test_nodes.vty
@@ -181,6 +181,8 @@ sgs
smsc
queue max-pending 20
queue max-failure 1
+ database delete-delivered 1
+ database delete-expired 1
end
OsmoMSC# configure terminal