subscr: Add the subscr_get_or_create from the on-waves/bsc-master branch

Create a subscriber based on a known IMSI, search the list of
active subscribers if there is already someone like this.
This commit is contained in:
Holger Hans Peter Freyther 2010-11-15 09:15:01 +01:00
parent 928ca743db
commit d740b688dc
2 changed files with 20 additions and 0 deletions

View File

@ -77,6 +77,8 @@ struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net,
const char *ext);
struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net,
unsigned long long id);
struct gsm_subscriber *subscr_get_or_create(struct gsm_network *net,
const char *imsi);
int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
void subscr_put_channel(struct gsm_subscriber_connection *conn);
void subscr_get_channel(struct gsm_subscriber *subscr,

View File

@ -219,3 +219,21 @@ void subscr_put_channel(struct gsm_subscriber_connection *conn)
subscr_send_paging_request(conn->subscr);
}
struct gsm_subscriber *subscr_get_or_create(struct gsm_network *net,
const char *imsi)
{
struct gsm_subscriber *subscr;
llist_for_each_entry(subscr, subscr_bsc_active_subscriber(), entry) {
if (strcmp(subscr->imsi, imsi) == 0 && subscr->net == net)
return subscr_get(subscr);
}
subscr = subscr_alloc();
if (!subscr)
return NULL;
strcpy(subscr->imsi, imsi);
subscr->net = net;
return subscr;
}