From 6cee799d5e7d1f19e30424f2411a79e21381754a Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 28 Sep 2018 02:53:22 +0200 Subject: [PATCH] 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 --- src/hlr.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/hlr.c b/src/hlr.c index df48a99a..f631d523 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);