aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/db.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-07-23 18:46:00 +0200
committerHarald Welte <laforge@gnumonks.org>2009-07-23 18:46:00 +0200
commit9176bd46e388b0ebfb22e2e0cbad892a099f9ef1 (patch)
treecaf3cd98bc1f3e38c9cd1833375bf871b533449e /openbsc/src/db.c
parent9f93c7d61ba6d0049a18f14ed99ebd237e11c89e (diff)
make sure subscr->net is always set
since a subscriber is an element of the gsm_network, we have to ensure subscr->net is always set correctly. We do this by using gsm_network as an argument to all functions that resolve or create a subscriber.
Diffstat (limited to 'openbsc/src/db.c')
-rw-r--r--openbsc/src/db.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index fb589003d..57c5c85f6 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -158,12 +158,13 @@ int db_fini() {
return 0;
}
-struct gsm_subscriber* db_create_subscriber(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') "
@@ -189,6 +190,7 @@ struct gsm_subscriber* db_create_subscriber(char *imsi) {
if (result==NULL) {
printf("DB: 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);
@@ -196,7 +198,10 @@ struct gsm_subscriber* db_create_subscriber(char *imsi) {
return subscr;
}
-struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, const char *id) {
+struct gsm_subscriber *db_get_subscriber(struct gsm_network *net,
+ enum gsm_subscriber_field field,
+ const char *id)
+{
dbi_result result;
const char *string;
char *quoted;
@@ -253,6 +258,7 @@ struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, const
}
subscr = subscr_alloc();
+ subscr->net = net;
subscr->id = dbi_result_get_ulonglong(result, "id");
string = dbi_result_get_string(result, "imsi");
if (string)
@@ -470,7 +476,7 @@ int db_sms_store(struct gsm_sms *sms)
}
/* retrieve the next unsent SMS with ID >= min_id */
-struct gsm_sms *db_sms_get_unsent(int min_id)
+struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, int min_id)
{
dbi_result result;
long long unsigned int sender_id, receiver_id;
@@ -494,11 +500,11 @@ struct gsm_sms *db_sms_get_unsent(int min_id)
sender_id = dbi_result_get_ulonglong(result, "sender_id");
sprintf(buf, "%llu", sender_id);
- sms->sender = db_get_subscriber(GSM_SUBSCRIBER_ID, buf);
+ sms->sender = db_get_subscriber(net, GSM_SUBSCRIBER_ID, buf);
receiver_id = dbi_result_get_ulonglong(result, "receiver_id");
sprintf(buf, "%llu", receiver_id);
- sms->receiver = db_get_subscriber(GSM_SUBSCRIBER_ID, buf);
+ sms->receiver = db_get_subscriber(net, GSM_SUBSCRIBER_ID, buf);
/* FIXME: fill header */