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/.
Vadim Yanitskiy gerrit-no-reply at lists.osmocom.orgVadim Yanitskiy has uploaded this change for review. ( https://gerrit.osmocom.org/13720 Change subject: Assign random MSISDN to subscribers created on demand ...................................................................... Assign random MSISDN to subscribers created on demand Change-Id: I475c71f9902950fa7498855a616e1ec231fad6ac --- M src/hlr.c 1 file changed, 41 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/20/13720/1 diff --git a/src/hlr.c b/src/hlr.c index 7facef7..4fb039e 100644 --- a/src/hlr.c +++ b/src/hlr.c @@ -34,6 +34,7 @@ #include <osmocom/ctrl/control_vty.h> #include <osmocom/gsm/apn.h> #include <osmocom/gsm/gsm48_ie.h> +#include <osmocom/gsm/gsm_utils.h> #include "db.h" #include "hlr.h" @@ -148,19 +149,54 @@ } } -static void subscr_create_on_demand(const char *imsi) +static int subscr_create_on_demand(const char *imsi) { - int rc; + uint8_t rand_buf[15]; + char msisdn[15 + 1]; + int i, rc; if (!g_hlr->create_subscr_on_demand) - return; + return -1; if (db_subscr_exists_by_imsi(g_hlr->dbc, imsi) == 0) - return; + return -1; LOGP(DMAIN, LOGL_INFO, "IMSI='%s': Creating subscriber on demand\n", imsi); rc = db_subscr_create(g_hlr->dbc, imsi, 1, 1); /* Allow both CS and PS domains by default */ - if (rc) + if (rc) { LOGP(DMAIN, LOGL_ERROR, "Failed to create subscriber on demand (rc=%d): IMSI='%s'\n", rc, imsi); + return rc; + } + + /* FIXME: this should be optional and configurable! */ + #define RAND_MSISDN_LEN 6 + + /* Generate a random unique MSISDN */ + while (1) { + rc = osmo_get_rand_id(rand_buf, RAND_MSISDN_LEN); + if (rc) /* Keep trying until we get some result */ + continue; + + /* Shift 0x00 ... 0xff range to 30 ... 39 (ASCII numbers) */ + for (i = 0; i < RAND_MSISDN_LEN; i++) + msisdn[i] = 48 + (rand_buf[i] % 10); + msisdn[i] = '\0'; + + /* Ensure there is subscriber with such MSISDN */ + if (db_subscr_exists_by_msisdn(g_hlr->dbc, msisdn)) + break; + } + + /* Update MSISDN of the new (just allocated) subscriber */ + rc = db_subscr_update_msisdn_by_imsi(g_hlr->dbc, imsi, msisdn); + if (rc) { + LOGP(DMAIN, LOGL_ERROR, "IMSI='%s': Failed to assign MSISDN='%s' " + "(rc=%d)\n", imsi, msisdn, rc); + return rc; + } + + LOGP(DMAIN, LOGL_INFO, "IMSI='%s': Successfully assigned MSISDN='%s'\n", imsi, msisdn); + + return 0; } /*********************************************************************** -- To view, visit https://gerrit.osmocom.org/13720 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: I475c71f9902950fa7498855a616e1ec231fad6ac Gerrit-Change-Number: 13720 Gerrit-PatchSet: 1 Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190420/c3319c2b/attachment.htm>