aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/db.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libmsc/db.c')
-rw-r--r--openbsc/src/libmsc/db.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 428f99bbc..38c72a4af 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -498,7 +498,7 @@ int db_fini(void)
return 0;
}
-struct gsm_subscriber *db_create_subscriber(const char *imsi)
+struct gsm_subscriber *db_create_subscriber(const char *imsi, uint64_t prefix)
{
dbi_result result;
struct gsm_subscriber *subscr;
@@ -533,7 +533,7 @@ struct gsm_subscriber *db_create_subscriber(const char *imsi)
strncpy(subscr->imsi, imsi, GSM_IMSI_LENGTH-1);
dbi_result_free(result);
LOGP(DDB, LOGL_INFO, "New Subscriber: ID %llu, IMSI %s\n", subscr->id, subscr->imsi);
- db_subscriber_alloc_exten(subscr);
+ db_subscriber_alloc_exten(subscr, prefix);
return subscr;
}
@@ -1227,16 +1227,17 @@ int db_subscriber_alloc_tmsi(struct gsm_subscriber *subscriber)
return 0;
}
-int db_subscriber_alloc_exten(struct gsm_subscriber *subscriber)
+int db_subscriber_alloc_exten(struct gsm_subscriber *subscriber, uint64_t prefix)
{
dbi_result result = NULL;
- uint32_t try;
+ uint64_t try;
for (;;) {
try = (rand()%(GSM_MAX_EXTEN-GSM_MIN_EXTEN+1)+GSM_MIN_EXTEN);
+ try = prefix*100000 + try;
result = dbi_conn_queryf(conn,
"SELECT * FROM Subscriber "
- "WHERE extension = %i",
+ "WHERE extension = %llu",
try
);
if (!result) {
@@ -1254,8 +1255,9 @@ int db_subscriber_alloc_exten(struct gsm_subscriber *subscriber)
}
dbi_result_free(result);
}
- sprintf(subscriber->extension, "%i", try);
- DEBUGP(DDB, "Allocated extension %i for IMSI %s.\n", try, subscriber->imsi);
+ sprintf(subscriber->extension, "%llu", try);
+ DEBUGP(DDB, "Allocated extension %llu for IMSI %s.\n", try, subscriber->imsi);
+
return db_sync_subscriber(subscriber);
}
/*