aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-12-29 04:10:35 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2019-08-20 04:42:46 +0200
commitd2d9f3583580012b10ac5951c096174c05106c50 (patch)
tree838a8cdb720bc2f0b8e6d880338fb115900690a3
parent80b7fe759f371ded75e5c6f7714a66e08a004455 (diff)
for ussd_get_ran, show current RAT
-rw-r--r--src/db_hlr.c2
-rw-r--r--src/hlr_ussd.c25
2 files changed, 16 insertions, 11 deletions
diff --git a/src/db_hlr.c b/src/db_hlr.c
index 3364647..18096ed 100644
--- a/src/db_hlr.c
+++ b/src/db_hlr.c
@@ -789,7 +789,7 @@ int db_subscr_lu(struct db_context *dbc, int64_t subscr_id,
for (i = 0; i < rat_types_len; i++) {
char *pos = rat_types_str + strnlen(rat_types_str, sizeof(rat_types_str));
- int len = pos - rat_types_str;
+ int len = sizeof(rat_types_str) - (pos - rat_types_str);
rc = snprintf(pos, len, "%s%s", pos == rat_types_str ? "" : ",", osmo_rat_type_name(rat_types[i]));
if (rc > len) {
osmo_strlcpy(rat_types_str + sizeof(rat_types_str) - 4, "...", 4);
diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c
index 5465bfd..c88c1cd 100644
--- a/src/hlr_ussd.c
+++ b/src/hlr_ussd.c
@@ -360,22 +360,27 @@ static int handle_ussd_get_ran(struct osmo_gsup_conn *conn, struct ss_session *s
const struct ss_request *req)
{
struct hlr_subscriber subscr;
- const char *response;
+ char response[512];
int rc;
-
-#define RAN_TYPE_DESC "Available RAN types: "
+ const char *rat;
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)";
+ if (!*subscr.last_lu_rat)
+ rat = "nothing, you don't exist";
+ else if (!strcmp(subscr.last_lu_rat, "GERAN-A"))
+ rat = "2G";
+ else if (!strcmp(subscr.last_lu_rat, "UTRAN-Iu"))
+ rat = "3G";
else
- response = "No RAN types available";
+ rat = subscr.last_lu_rat;
+
+ snprintf(response, sizeof(response),
+ "Now on %s. Available:%s%s.",
+ rat,
+ subscr.rat_types[OSMO_RAT_GERAN_A]? " 2G" : "",
+ subscr.rat_types[OSMO_RAT_UTRAN_IU]? " 3G" : "");
rc = ss_tx_ussd_7bit(ss, true, req->invoke_id, response);
break;