diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-10-04 08:35:11 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-10-13 13:44:54 +0200 |
commit | 7634ec1de178f8bf0459973b0e863a6dc9949762 (patch) | |
tree | 3191458c92dd10b74e193218d8f499fcc8edebc3 /openbsc/src | |
parent | 0c48fc7c62e947f2934f7bfe10f2d01cbc0349c1 (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')
-rw-r--r-- | openbsc/src/libmsc/db.c | 9 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_04_08.c | 4 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_subscriber.c | 25 | ||||
-rw-r--r-- | openbsc/src/libmsc/vty_interface_layer3.c | 2 |
4 files changed, 27 insertions, 13 deletions
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c index 9a8cd886b..d179c4e23 100644 --- a/openbsc/src/libmsc/db.c +++ b/openbsc/src/libmsc/db.c @@ -315,13 +315,13 @@ int db_fini(void) return 0; } -struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi) +struct gsm_subscriber *db_create_subscriber(const char *imsi) { dbi_result result; struct gsm_subscriber *subscr; /* Is this subscriber known in the db? */ - subscr = db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); + subscr = db_get_subscriber(GSM_SUBSCRIBER_IMSI, imsi); if (subscr) { result = dbi_conn_queryf(conn, "UPDATE Subscriber set updated = datetime('now') " @@ -346,7 +346,6 @@ struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi) ); if (!result) LOGP(DDB, LOGL_ERROR, "Failed to create Subscriber by IMSI.\n"); - subscr->net = net; subscr->id = dbi_conn_sequence_last(conn, NULL); strncpy(subscr->imsi, imsi, GSM_IMSI_LENGTH-1); dbi_result_free(result); @@ -645,8 +644,7 @@ static void db_set_from_query(struct gsm_subscriber *subscr, dbi_conn result) } #define BASE_QUERY "SELECT * FROM Subscriber " -struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, - enum gsm_subscriber_field field, +struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, const char *id) { dbi_result result; @@ -704,7 +702,6 @@ struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, } subscr = subscr_alloc(); - subscr->net = net; subscr->id = dbi_result_get_ulonglong(result, "id"); db_set_from_query(subscr, result); diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c index a2995902e..c41443eb4 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -474,7 +474,7 @@ static int mm_rx_id_resp(struct gsm_subscriber_connection *conn, struct msgb *ms if (!conn->subscr) { conn->subscr = subscr_get_by_imsi(net, mi_string); if (!conn->subscr) - conn->subscr = db_create_subscriber(net, mi_string); + conn->subscr = subscr_create_subscriber(net, mi_string); } if (conn->loc_operation) conn->loc_operation->waiting_for_imsi = 0; @@ -586,7 +586,7 @@ static int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb /* look up subscriber based on IMSI, create if not found */ subscr = subscr_get_by_imsi(bts->network, mi_string); if (!subscr) { - subscr = db_create_subscriber(bts->network, mi_string); + subscr = subscr_create_subscriber(bts->network, mi_string); } break; case GSM_MI_TYPE_TMSI: 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) diff --git a/openbsc/src/libmsc/vty_interface_layer3.c b/openbsc/src/libmsc/vty_interface_layer3.c index acb4af7f6..e0324d60c 100644 --- a/openbsc/src/libmsc/vty_interface_layer3.c +++ b/openbsc/src/libmsc/vty_interface_layer3.c @@ -229,7 +229,7 @@ DEFUN(subscriber_create, struct gsm_network *gsmnet = gsmnet_from_vty(vty); struct gsm_subscriber *subscr; - subscr = db_create_subscriber(gsmnet, argv[0]); + subscr = subscr_create_subscriber(gsmnet, argv[0]); if (!subscr) { vty_out(vty, "%% No subscriber created for IMSI %s%s", argv[0], VTY_NEWLINE); |