This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
osmith gerrit-no-reply at lists.osmocom.orgosmith has uploaded this change for review. ( https://gerrit.osmocom.org/13515 Change subject: USSD: send 'unknown imsi' back to source ...................................................................... USSD: send 'unknown imsi' back to source Depends: Ic00b0601eacff6d72927cea51767801142ee75db (libosmocore.git) Change-Id: If5a65f471672949192061c5fe396603611123bc1 --- M src/hlr_ussd.c 1 file changed, 32 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/15/13515/1 diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c index 7de750f..3a9151c 100644 --- a/src/hlr_ussd.c +++ b/src/hlr_ussd.c @@ -171,6 +171,11 @@ * Still, this should be refreshed in due time, e.g. once per received message. */ struct hlr_subscriber *subscr; + /* The IPA name of the entity (MSC/VLR) that sent this message, so we can send "unknown IMSI" errors back.*/ + uint8_t *source_name; + size_t source_name_len; + bool source_fallback; + /* we don't keep a pointer to the osmo_gsup_{route,conn} towards the MSC/VLR here, * as this might change during inter-VLR hand-over, and we simply look-up the serving MSC/VLR * every time we receive an USSD component from the EUSE */ @@ -202,7 +207,8 @@ ss_session_free(ss); } -struct ss_session *ss_session_alloc(struct hlr *hlr, const char *imsi, uint32_t session_id) +struct ss_session *ss_session_alloc(struct hlr *hlr, const char *imsi, uint32_t session_id, const uint8_t *source_name, + size_t source_name_len) { struct ss_session *ss; @@ -214,6 +220,10 @@ OSMO_STRLCPY_ARRAY(ss->imsi, imsi); ss->session_id = session_id; + ss->source_name = talloc_memdup(ss, source_name, source_name_len); + OSMO_ASSERT(ss->source_name); + ss->source_name_len = source_name_len; + /* Schedule self-destruction timer */ osmo_timer_setup(&ss->timeout, ss_session_timeout, ss); if (g_hlr->ncss_guard_timeout > 0) @@ -232,6 +242,8 @@ { struct hlr_subscriber _subscr = {}; struct hlr_subscriber *subscr = ss->subscr; + uint8_t *vlr_number; + size_t vlr_number_len; int rc; /* Use subscr as looked up by the caller, or look up now. */ @@ -245,14 +257,24 @@ subscr = &_subscr; } - if (!subscr->vlr_number[0]) { - LOGP(DLGSUP, LOGL_ERROR, "Cannot send GSUP message, no VLR number stored for subscriber %s\n", - subscr->imsi); - return -EINVAL; + vlr_number = (uint8_t *)&subscr->vlr_number; + vlr_number_len = strlen(subscr->vlr_number); + if (!vlr_number_len) { + if (ss->source_fallback) { + LOGP(DLGSUP, LOGL_DEBUG, "No VLR number stored for subscriber %s, sending to source instead\n", + subscr->imsi); + vlr_number = ss->source_name; + vlr_number_len = ss->source_name_len; + } else { + LOGP(DLGSUP, LOGL_ERROR, "Cannot send GSUP message, no VLR number stored for subscriber %s\n", + subscr->imsi); + return -EINVAL; + } } - LOGPSS(ss, LOGL_DEBUG, "Tx USSD for IMSI %s to VLR '%s'\n", subscr->imsi, subscr->vlr_number); - return osmo_gsup_addr_send(gs, (uint8_t *)subscr->vlr_number, strlen(subscr->vlr_number), msg); + LOGPSS(ss, LOGL_DEBUG, "Tx USSD for IMSI %s to VLR %s\n", subscr->imsi, + osmo_quote_str((const char *)vlr_number, vlr_number_len)); + return osmo_gsup_addr_send(gs, vlr_number, vlr_number_len, msg); } static int ss_tx_to_ms(struct ss_session *ss, enum osmo_gsup_message_type gsup_msg_type, @@ -527,7 +549,7 @@ gsup->imsi, gsup->session_id); goto out_err; } - ss = ss_session_alloc(hlr, gsup->imsi, gsup->session_id); + ss = ss_session_alloc(hlr, gsup->imsi, gsup->session_id, gsup->source_name, gsup->source_name_len); if (!ss) { LOGP(DSS, LOGL_ERROR, "%s/0x%08x: Unable to allocate SS session\n", gsup->imsi, gsup->session_id); @@ -555,6 +577,8 @@ ss->u.euse = hlr->euse_default; } } + /* send "unknown IMSI" errors back to source */ + ss->source_fallback = true; } /* dispatch unstructured SS to routing */ handle_ussd(conn, ss, gsup, &req); -- To view, visit https://gerrit.osmocom.org/13515 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-hlr Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: If5a65f471672949192061c5fe396603611123bc1 Gerrit-Change-Number: 13515 Gerrit-PatchSet: 1 Gerrit-Owner: osmith <osmith at sysmocom.de> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190404/73021b83/attachment.htm>