diff options
author | Vadim Yanitskiy <axilirator@gmail.com> | 2018-12-27 08:15:00 +0700 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2019-12-23 18:01:57 +0100 |
commit | 95825a6a667fd37b95ac16a45b368fd44cacfbc0 (patch) | |
tree | c0e9e7e0b30733ed669a3289681c7f8897f15694 | |
parent | 20b15edf62025be90269be2716ec27b533177ecc (diff) |
SS/USSD: add IUSEs to enable / disable UMTS
Change-Id: Icf85ec8dd71813a9bbf359b9011456844f398337
-rw-r--r-- | src/hlr_ussd.c | 60 | ||||
-rw-r--r-- | src/hlr_vty.c | 6 |
2 files changed, 64 insertions, 2 deletions
diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c index cb3031a..9cd2bce 100644 --- a/src/hlr_ussd.c +++ b/src/hlr_ussd.c @@ -409,6 +409,58 @@ static int handle_ussd_get_ran(struct ss_session *ss, return rc; } +static int handle_ussd_umts_on(struct ss_session *ss, + const struct osmo_gsup_message *gsup, + const struct ss_request *req) +{ + struct hlr_subscriber subscr; + int rc; + + rc = db_subscr_get_by_imsi(g_hlr->dbc, ss->imsi, &subscr); + switch (rc) { + case 0: + hlr_subscr_rat_flag(g_hlr, &subscr, OSMO_RAT_UTRAN_IU, true); + rc = ss_tx_to_ms_ussd_7bit(ss, true, req->invoke_id, + "Enabled UTRAN-Iu (3G)"); + break; + case -ENOENT: + rc = ss_tx_to_ms_error(ss, true, GSM0480_ERR_CODE_UNKNOWN_SUBSCRIBER); + break; + case -EIO: + default: + rc = ss_tx_to_ms_error(ss, true, GSM0480_ERR_CODE_SYSTEM_FAILURE); + break; + } + + return rc; +} + +static int handle_ussd_umts_off(struct ss_session *ss, + const struct osmo_gsup_message *gsup, + const struct ss_request *req) +{ + struct hlr_subscriber subscr; + int rc; + + rc = db_subscr_get_by_imsi(g_hlr->dbc, ss->imsi, &subscr); + switch (rc) { + case 0: + hlr_subscr_rat_flag(g_hlr, &subscr, OSMO_RAT_UTRAN_IU, false); + rc = ss_tx_to_ms_ussd_7bit(ss, true, req->invoke_id, + "Disabled UTRAN-Iu (3G)"); + break; + case -ENOENT: + rc = ss_tx_to_ms_error(ss, true, GSM0480_ERR_CODE_UNKNOWN_SUBSCRIBER); + break; + case -EIO: + default: + rc = ss_tx_to_ms_error(ss, true, GSM0480_ERR_CODE_SYSTEM_FAILURE); + break; + } + + return rc; +} + static const struct hlr_iuse hlr_iuses[] = { { .name = "own-msisdn", @@ -422,6 +474,14 @@ static const struct hlr_iuse hlr_iuses[] = { .name = "get-ran", .handle_ussd = handle_ussd_get_ran, }, + { + .name = "umts-on", + .handle_ussd = handle_ussd_umts_on, + }, + { + .name = "umts-off", + .handle_ussd = handle_ussd_umts_off, + }, }; const struct hlr_iuse *iuse_find(const char *name) diff --git a/src/hlr_vty.c b/src/hlr_vty.c index cdc5147..8a69f70 100644 --- a/src/hlr_vty.c +++ b/src/hlr_vty.c @@ -174,11 +174,13 @@ 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|get-ran)" +#define INT_CHOICE "(own-msisdn|own-imsi|get-ran|umts-on|umts-off)" #define INT_STR "Internal USSD Handler\n" \ "Respond with subscribers' own MSISDN\n" \ "Respond with subscribers' own IMSI\n" \ - "Respond with available RAN types\n" + "Respond with available RAN types\n" \ + "Enable UMTS service\n" \ + "Disable UMTS service\n" #define EXT_STR "External USSD Handler\n" \ "Name of External USSD Handler (IPA CCM ID)\n" |