diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-09-28 02:53:22 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-09-28 03:01:02 +0200 |
commit | 6cee799d5e7d1f19e30424f2411a79e21381754a (patch) | |
tree | 86e659dc9a1ade67cb4303138fc1efcd7b160850 | |
parent | c88bdab96dbb2786ddecb1f11ee2973eb9248265 (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.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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); |