diff options
Diffstat (limited to 'openbsc/src/libmsc/db.c')
-rw-r--r-- | openbsc/src/libmsc/db.c | 16 |
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); } /* |