aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/gsm_subscriber.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-04 08:35:11 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-13 13:44:54 +0200
commit7634ec1de178f8bf0459973b0e863a6dc9949762 (patch)
tree3191458c92dd10b74e193218d8f499fcc8edebc3 /openbsc/src/libmsc/gsm_subscriber.c
parent0c48fc7c62e947f2934f7bfe10f2d01cbc0349c1 (diff)
db: Remove the struct gsm_network from the database layer
The database code should not know about the network. Move the setting of the network pointer into the subscriber layer.
Diffstat (limited to 'openbsc/src/libmsc/gsm_subscriber.c')
-rw-r--r--openbsc/src/libmsc/gsm_subscriber.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c
index 5ace8f666..bc6f3cf55 100644
--- a/openbsc/src/libmsc/gsm_subscriber.c
+++ b/openbsc/src/libmsc/gsm_subscriber.c
@@ -78,6 +78,15 @@ enum {
REQ_STATE_DISPATCHED,
};
+static struct gsm_subscriber *get_subscriber(struct gsm_network *net,
+ int type, const char *ident)
+{
+ struct gsm_subscriber *subscr = db_get_subscriber(type, ident);
+ if (subscr)
+ subscr->net = net;
+ return subscr;
+}
+
/*
* We got the channel assigned and can now hand this channel
* over to one of our callbacks.
@@ -266,6 +275,14 @@ void subscr_put_channel(struct gsm_subscriber *subscr)
subscr_send_paging_request(subscr);
}
+struct gsm_subscriber *subscr_create_subscriber(struct gsm_network *net,
+ const char *imsi)
+{
+ struct gsm_subscriber *subscr = db_create_subscriber(imsi);
+ if (subscr)
+ subscr->net = net;
+ return subscr;
+}
struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net,
uint32_t tmsi)
@@ -280,7 +297,7 @@ struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net,
}
sprintf(tmsi_string, "%u", tmsi);
- return db_get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string);
+ return get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string);
}
struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net,
@@ -293,7 +310,7 @@ struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net,
return subscr_get(subscr);
}
- return db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi);
+ return get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi);
}
struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net,
@@ -306,7 +323,7 @@ struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net,
return subscr_get(subscr);
}
- return db_get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext);
+ return get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext);
}
struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net,
@@ -321,7 +338,7 @@ struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net,
return subscr_get(subscr);
}
- return db_get_subscriber(net, GSM_SUBSCRIBER_ID, buf);
+ return get_subscriber(net, GSM_SUBSCRIBER_ID, buf);
}
int subscr_update_expire_lu(struct gsm_subscriber *s, struct gsm_bts *bts)