laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/28138 )


Change subject: sms: Introduce VTY-configurable minimum SMS validity period
......................................................................

sms: Introduce VTY-configurable minimum SMS validity period

This is meant as a safeguard against users or user equipment which
doesn't set a reasonable validity period.  Using this setting, the
SMSC administrator can set a minimum SMS validity period. Any SMS
submitted with lower validity period will be extended to that minimum.

Change-Id: I192528a6f9059d158fa12876a247d61bd7edaec8
Related: OS#5567
---
M include/osmocom/msc/sms_queue.h
M src/libmsc/gsm_04_11.c
M src/libmsc/smpp_openbsc.c
M src/libmsc/sms_queue.c
M src/libmsc/smsc_vty.c
M tests/test_nodes.vty
6 files changed, 25 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/38/28138/1

diff --git a/include/osmocom/msc/sms_queue.h b/include/osmocom/msc/sms_queue.h
index c3a6cfb..a6e6aeb 100644
--- a/include/osmocom/msc/sms_queue.h
+++ b/include/osmocom/msc/sms_queue.h
@@ -13,6 +13,7 @@
        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? 
*/
+       unsigned int minimum_validity_mins;     /* minimum validity period in 
minutes */
        unsigned int default_validity_mins;     /* default validity period in 
minutes */
 };

diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 722973e..743e272 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -626,6 +626,12 @@
                  osmo_hexdump(gsms->user_data, gsms->user_data_len));

        gsms->validity_minutes = gsm340_validity_period(sms_vpf, sms_vp);
+       if (gsms->validity_minutes < net->sms_queue_cfg->minimum_validity_mins) 
{
+               LOG_TRANS(trans, LOGL_INFO, "Overriding user-provided validity 
period (%lu) "
+                         "with minimum SMSC validity period (%u) minutes\n", 
gsms->validity_minutes,
+                         net->sms_queue_cfg->minimum_validity_mins);
+               gsms->validity_minutes = 
net->sms_queue_cfg->minimum_validity_mins;
+       }

        rc = sms_route_mt_sms(trans, gsms);

diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c
index 64d4f1e..91666a9 100644
--- a/src/libmsc/smpp_openbsc.c
+++ b/src/libmsc/smpp_openbsc.c
@@ -267,6 +267,13 @@
        else
                sms->validity_minutes = (t_validity_absolute - t_now) / 60;

+       if (sms->validity_minutes < net->sms_queue_cfg->minimum_validity_mins) {
+               LOGP(DLSMS, LOGL_INFO, "SMS to %s: Overriding ESME-provided 
validity period (%lu) "
+                    "with minimum SMSC validity period (%u) minutes\n", 
submit->destination_addr,
+                    sms->validity_minutes, 
net->sms_queue_cfg->minimum_validity_mins);
+               sms->validity_minutes = 
net->sms_queue_cfg->minimum_validity_mins;
+       }
+
        *psms = sms;
        return ESME_ROK;
 }
diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c
index 24811c5..9f18f4f 100644
--- a/src/libmsc/sms_queue.c
+++ b/src/libmsc/sms_queue.c
@@ -475,6 +475,7 @@
        sqcfg->delete_delivered = true;
        sqcfg->delete_expired = true;
        sqcfg->default_validity_mins = 7 * 24 * 60; /* 7 days */
+       sqcfg->minimum_validity_mins = 1;
        sqcfg->db_file_path = talloc_strdup(ctx, SMS_DEFAULT_DB_FILE_PATH);

        return sqcfg;
diff --git a/src/libmsc/smsc_vty.c b/src/libmsc/smsc_vty.c
index 547b7d5..e99b236 100644
--- a/src/libmsc/smsc_vty.c
+++ b/src/libmsc/smsc_vty.c
@@ -99,12 +99,16 @@
 }

 DEFUN(cfg_sms_def_val_per, cfg_sms_def_val_per_cmd,
-      "validity-period default <1-5256000>",
+      "validity-period (minimum|default) <1-5256000>",
       "Configure validity period for SMS\n"
+      "Minimum SMS validity period in minutes\n"
       "Default SMS validity period in minutes\n"
-      "Default SMS validity period in minutes\n")
+      "Validity period in minutes\n")
 {
-       smqcfg->default_validity_mins = atoi(argv[0]);
+       if (!strcmp(argv[0], "minimum"))
+               smqcfg->minimum_validity_mins = atoi(argv[1]);
+       else
+               smqcfg->default_validity_mins = atoi(argv[1]);
        return CMD_SUCCESS;
 }

@@ -177,6 +181,7 @@
        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);

+       vty_out(vty, " validity-period minimum %u%s", 
smqcfg->minimum_validity_mins, VTY_NEWLINE);
        vty_out(vty, " validity-period default %u%s", 
smqcfg->default_validity_mins, VTY_NEWLINE);

        return 0;
diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty
index ac3ff16..8ffb2bd 100644
--- a/tests/test_nodes.vty
+++ b/tests/test_nodes.vty
@@ -183,6 +183,8 @@
  queue max-failure 1
  database delete-delivered 1
  database delete-expired 1
+ validity-period minimum 1
+ validity-period default 10080
 end

 OsmoMSC# configure terminal

--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/28138
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I192528a6f9059d158fa12876a247d61bd7edaec8
Gerrit-Change-Number: 28138
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <lafo...@osmocom.org>
Gerrit-MessageType: newchange

Reply via email to