aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-09-28 02:53:22 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2018-09-28 03:01:02 +0200
commit6cee799d5e7d1f19e30424f2411a79e21381754a (patch)
tree86e659dc9a1ade67cb4303138fc1efcd7b160850
parentc88bdab96dbb2786ddecb1f11ee2973eb9248265 (diff)
fix is_ps logic in rx_upd_loc_req(), store CS as is_ps = false
A missing 'else' in rx_upd_loc_req() causes *all* clients to be indicated as is_ps=true regardless of the GSUP CN Domain IE that was received. Replace that odd if cascade with a switch() that fixes the flawed logic. Hence osmo-hlr now correctly indicates each client's is_ps, iff the client sends CN Domain IEs in GSUP LU Request messages. Related: OS#2796, OS#3601 Change-Id: I2c5fa9f5cae25cfd66afbf088303edff7d045a00
-rw-r--r--src/hlr.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/hlr.c b/src/hlr.c
index df48a99..f631d52 100644
--- a/src/hlr.c
+++ b/src/hlr.c
@@ -250,18 +250,19 @@ static int rx_upd_loc_req(struct osmo_gsup_conn *conn,
lu_op_statechg(luop, LU_S_LU_RECEIVED);
- if (gsup->cn_domain == OSMO_GSUP_CN_DOMAIN_CS)
+ switch (gsup->cn_domain) {
+ case OSMO_GSUP_CN_DOMAIN_CS:
conn->supports_cs = true;
- if (gsup->cn_domain == OSMO_GSUP_CN_DOMAIN_PS) {
- conn->supports_ps = true;
- luop->is_ps = true;
- } else {
+ break;
+ default:
/* The client didn't send a CN_DOMAIN IE; assume packet-switched in
* accordance with the GSUP spec in osmo-hlr's user manual (section
* 11.6.15 "CN Domain" says "if no CN Domain IE is present within
* a request, the PS Domain is assumed." */
+ case OSMO_GSUP_CN_DOMAIN_PS:
conn->supports_ps = true;
luop->is_ps = true;
+ break;
}
llist_add(&luop->list, &g_lu_ops);