From 95b3395d79c078d05b122cf1b6de2971605ef214 Mon Sep 17 00:00:00 2001 From: Ciaby Date: Fri, 7 Mar 2014 16:21:02 +0100 Subject: Revert "db: Remove the struct gsm_network from the database layer" This reverts commit 7634ec1de178f8bf0459973b0e863a6dc9949762. --- openbsc/include/openbsc/db.h | 6 ++++-- openbsc/include/openbsc/gsm_subscriber.h | 2 -- openbsc/src/libmsc/db.c | 9 ++++++--- openbsc/src/libmsc/gsm_04_08.c | 4 ++-- openbsc/src/libmsc/gsm_subscriber.c | 25 ++++--------------------- openbsc/src/libmsc/vty_interface_layer3.c | 2 +- openbsc/tests/db/db_test.c | 12 ++++++------ 7 files changed, 23 insertions(+), 37 deletions(-) diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h index a89c22d54..25c2aea70 100644 --- a/openbsc/include/openbsc/db.h +++ b/openbsc/include/openbsc/db.h @@ -35,8 +35,10 @@ int db_prepare(void); int db_fini(void); /* subscriber management */ -struct gsm_subscriber *db_create_subscriber(const char *imsi); -struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, +struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, + char *imsi); +struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, + enum gsm_subscriber_field field, const char *subscr); int db_sync_subscriber(struct gsm_subscriber *subscriber); int db_subscriber_expire(void *priv, void (*callback)(void *priv, long long unsigned int id)); diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h index 7aae4c332..6b577b0bf 100644 --- a/openbsc/include/openbsc/gsm_subscriber.h +++ b/openbsc/include/openbsc/gsm_subscriber.h @@ -73,8 +73,6 @@ enum gsm_subscriber_update_reason { struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); -struct gsm_subscriber *subscr_create_subscriber(struct gsm_network *net, - const char *imsi); struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, uint32_t tmsi); struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c index e720c7895..bbd4e90b8 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(const char *imsi) +struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi) { dbi_result result; struct gsm_subscriber *subscr; /* Is this subscriber known in the db? */ - subscr = db_get_subscriber(GSM_SUBSCRIBER_IMSI, imsi); + subscr = db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); if (subscr) { result = dbi_conn_queryf(conn, "UPDATE Subscriber set updated = datetime('now') " @@ -346,6 +346,7 @@ struct gsm_subscriber *db_create_subscriber(const 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,7 +646,8 @@ 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(enum gsm_subscriber_field field, +struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, + enum gsm_subscriber_field field, const char *id) { dbi_result result; @@ -703,6 +705,7 @@ struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, } 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 cd2a0b5cd..7be187286 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -500,7 +500,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 = subscr_create_subscriber(net, mi_string); + conn->subscr = db_create_subscriber(net, mi_string); } if (conn->loc_operation) conn->loc_operation->waiting_for_imsi = 0; @@ -612,7 +612,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 = subscr_create_subscriber(bts->network, mi_string); + subscr = db_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 bc6f3cf55..5ace8f666 100644 --- a/openbsc/src/libmsc/gsm_subscriber.c +++ b/openbsc/src/libmsc/gsm_subscriber.c @@ -78,15 +78,6 @@ 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. @@ -275,14 +266,6 @@ 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) @@ -297,7 +280,7 @@ struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, } sprintf(tmsi_string, "%u", tmsi); - return get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string); + return db_get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string); } struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, @@ -310,7 +293,7 @@ struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, return subscr_get(subscr); } - return get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); + return db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); } struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, @@ -323,7 +306,7 @@ struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, return subscr_get(subscr); } - return get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext); + return db_get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext); } struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, @@ -338,7 +321,7 @@ struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, return subscr_get(subscr); } - return get_subscriber(net, GSM_SUBSCRIBER_ID, buf); + return db_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 7869d5b99..15c48e978 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 = subscr_create_subscriber(gsmnet, argv[0]); + subscr = db_create_subscriber(gsmnet, argv[0]); if (!subscr) { vty_out(vty, "%% No subscriber created for IMSI %s%s", argv[0], VTY_NEWLINE); diff --git a/openbsc/tests/db/db_test.c b/openbsc/tests/db/db_test.c index 3c5de9026..c3beee22f 100644 --- a/openbsc/tests/db/db_test.c +++ b/openbsc/tests/db/db_test.c @@ -78,32 +78,32 @@ int main() struct gsm_subscriber *alice_db; char *alice_imsi = "3243245432345"; - alice = db_create_subscriber(alice_imsi); + alice = db_create_subscriber(NULL, alice_imsi); db_sync_subscriber(alice); - alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice->imsi); + alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice->imsi); COMPARE(alice, alice_db); SUBSCR_PUT(alice_db); SUBSCR_PUT(alice); alice_imsi = "3693245423445"; - alice = db_create_subscriber(alice_imsi); + alice = db_create_subscriber(NULL, alice_imsi); db_subscriber_assoc_imei(alice, "1234567890"); db_subscriber_alloc_tmsi(alice); alice->lac=42; db_sync_subscriber(alice); - alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice_imsi); + alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice_imsi); COMPARE(alice, alice_db); SUBSCR_PUT(alice); SUBSCR_PUT(alice_db); alice_imsi = "9993245423445"; - alice = db_create_subscriber(alice_imsi); + alice = db_create_subscriber(NULL, alice_imsi); db_subscriber_alloc_tmsi(alice); alice->lac=42; db_sync_subscriber(alice); db_subscriber_assoc_imei(alice, "1234567890"); db_subscriber_assoc_imei(alice, "6543560920"); - alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice_imsi); + alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice_imsi); COMPARE(alice, alice_db); SUBSCR_PUT(alice); SUBSCR_PUT(alice_db); -- cgit v1.2.3