aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-12-27 05:39:54 +0700
committerNeels Hofmeyr <neels@hofmeyr.de>2019-08-20 04:40:09 +0200
commit277b2d642ae0ead1aa887368dde9b7fc76f4333f (patch)
tree984d8aac10ce18b8866d0d5d77e45214da8d90e0
parentf1949f7b99f2d6779f9d67da7554322963235c34 (diff)
SS/USSD: implement an IUSE for getting RAN type(s)
-rw-r--r--src/hlr_ussd.c39
-rw-r--r--src/hlr_vty.c5
2 files changed, 42 insertions, 2 deletions
diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c
index 1568815..93ecd38 100644
--- a/src/hlr_ussd.c
+++ b/src/hlr_ussd.c
@@ -355,6 +355,41 @@ static int handle_ussd_own_imsi(struct osmo_gsup_conn *conn, struct ss_session *
return 0;
}
+static int handle_ussd_get_ran(struct osmo_gsup_conn *conn, struct ss_session *ss,
+ const struct osmo_gsup_message *gsup,
+ const struct ss_request *req)
+{
+ struct hlr_subscriber subscr;
+ const char *response;
+ int rc;
+
+#define RAN_TYPE_DESC "Available RAN types: "
+
+ rc = db_subscr_get_by_imsi(g_hlr->dbc, ss->imsi, &subscr);
+ switch (rc) {
+ case 0:
+ if (subscr.rat_types[OSMO_RAT_GERAN_A] && subscr.rat_types[OSMO_RAT_UTRAN_IU])
+ response = RAN_TYPE_DESC "GERAN-A (2G) & UTRAN-Iu (3G)";
+ else if (subscr.rat_types[OSMO_RAT_GERAN_A])
+ response = RAN_TYPE_DESC "GERAN-A (2G)";
+ else if (subscr.rat_types[OSMO_RAT_UTRAN_IU])
+ response = RAN_TYPE_DESC "UTRAN-Iu (3G)";
+ else
+ response = "No RAN types available";
+
+ rc = ss_tx_ussd_7bit(ss, true, req->invoke_id, response);
+ break;
+ case -ENOENT:
+ rc = ss_tx_error(ss, true, GSM0480_ERR_CODE_UNKNOWN_SUBSCRIBER);
+ break;
+ case -EIO:
+ default:
+ rc = ss_tx_error(ss, true, GSM0480_ERR_CODE_SYSTEM_FAILURE);
+ break;
+ }
+
+ return rc;
+}
static const struct hlr_iuse hlr_iuses[] = {
{
@@ -365,6 +400,10 @@ static const struct hlr_iuse hlr_iuses[] = {
.name = "own-imsi",
.handle_ussd = handle_ussd_own_imsi,
},
+ {
+ .name = "get-ran",
+ .handle_ussd = handle_ussd_get_ran,
+ },
};
const struct hlr_iuse *iuse_find(const char *name)
diff --git a/src/hlr_vty.c b/src/hlr_vty.c
index f7c5bc8..d2f5a2e 100644
--- a/src/hlr_vty.c
+++ b/src/hlr_vty.c
@@ -156,10 +156,11 @@ DEFUN(cfg_hlr_gsup_bind_ip,
#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|get-ran)"
#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" \
+ "Respond with available RAN types\n"
#define EXT_STR "External USSD Handler\n" \
"Name of External USSD Handler (IPA CCM ID)\n"