aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-11-17 04:17:46 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-11-17 18:50:27 +0700
commitdac855e5c85250c7113c5c5af2f54f799369f1d1 (patch)
tree6e4854297b17b29f22820e14e06a87b01fa0e3b9
parent6a6c7f87ca3d51085f01389b36c30096da6d6417 (diff)
USSD: add special 'idle' handler to IUSE for testing
-rw-r--r--doc/manuals/chapters/ussd.adoc4
-rw-r--r--src/hlr_ussd.c17
-rw-r--r--src/hlr_vty.c5
-rw-r--r--tests/test_nodes.vty2
4 files changed, 24 insertions, 4 deletions
diff --git a/doc/manuals/chapters/ussd.adoc b/doc/manuals/chapters/ussd.adoc
index 3ab587f..6100c93 100644
--- a/doc/manuals/chapters/ussd.adoc
+++ b/doc/manuals/chapters/ussd.adoc
@@ -67,7 +67,9 @@ USSD requests internally. It features a set of simple handlers, which
can be assigned to one or more USSD request prefixes:
* `own-msisdn` returns subscriber's MSISDN (if assigned);
-* `own-imsi` returns subscriber's IMSI.
+* `own-imsi` returns subscriber's IMSI;
+* `test-idle` keeps the session idle until the MS terminates it, or
+ the guard timer expires (may be useful for testing).
Additional handlers can be added on request.
diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c
index 399bdbc..35b74b6 100644
--- a/src/hlr_ussd.c
+++ b/src/hlr_ussd.c
@@ -379,6 +379,19 @@ static int handle_ussd_own_imsi(struct ss_session *ss,
return 0;
}
+/* This handler just keeps the session idle unless the guard timer expires. */
+static int handle_ussd_test_idle(struct ss_session *ss,
+ const struct osmo_gsup_message *gsup,
+ const struct ss_request *req)
+{
+ char buf[GSM0480_USSD_7BIT_STRING_LEN + 1];
+ snprintf(buf, sizeof(buf), "Keeping your session idle, it will expire "
+ "at most in %u seconds.", g_hlr->ncss_guard_timeout);
+ ss->state = OSMO_GSUP_SESSION_STATE_CONTINUE;
+ ss_tx_to_ms_ussd_7bit(ss, req->invoke_id, buf);
+ return 0;
+}
+
static const struct hlr_iuse hlr_iuses[] = {
{
@@ -389,6 +402,10 @@ static const struct hlr_iuse hlr_iuses[] = {
.name = "own-imsi",
.handle_ussd = handle_ussd_own_imsi,
},
+ {
+ .name = "test-idle",
+ .handle_ussd = handle_ussd_test_idle,
+ },
};
const struct hlr_iuse *iuse_find(const char *name)
diff --git a/src/hlr_vty.c b/src/hlr_vty.c
index a054cbe..4b91aa9 100644
--- a/src/hlr_vty.c
+++ b/src/hlr_vty.c
@@ -174,10 +174,11 @@ DEFUN(cfg_hlr_gsup_ipa_name,
#define UROUTE_STR "Routing Configuration\n"
#define PREFIX_STR "Prefix-Matching Route\n" "USSD Prefix\n"
-#define INT_CHOICE "(own-msisdn|own-imsi)"
+#define INT_CHOICE "(own-msisdn|own-imsi|test-idle)"
#define INT_STR "Internal USSD Handler\n" \
"Respond with subscribers' own MSISDN\n" \
- "Respond with subscribers' own IMSI\n"
+ "Respond with subscribers' own IMSI\n" \
+ "Keep the session idle (useful for testing)\n"
#define EXT_STR "External USSD Handler\n" \
"Name of External USSD Handler (IPA CCM ID)\n"
diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty
index d9971f7..cf1707a 100644
--- a/tests/test_nodes.vty
+++ b/tests/test_nodes.vty
@@ -51,7 +51,7 @@ OsmoHLR(config-hlr)# list
database PATH
euse NAME
no euse NAME
- ussd route prefix PREFIX internal (own-msisdn|own-imsi)
+ ussd route prefix PREFIX internal (own-msisdn|own-imsi|test-idle)
ussd route prefix PREFIX external EUSE
no ussd route prefix PREFIX
ussd default-route external EUSE