diff options
author | Holger Freyther <zecke@selfish.org> | 2009-02-09 23:39:20 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2009-02-09 23:39:20 +0000 |
commit | 9c564b85e65623ab99a3c3ba7c490740592bd149 (patch) | |
tree | 0b5323b103d82e5962b5844b7dfa02f38c7debc8 | |
parent | cbc7b065345d41e077069bcee1519b8557f70fed (diff) |
introduce lookup of subscribers based on their extension number
-rw-r--r-- | include/openbsc/gsm_subscriber.h | 2 | ||||
-rw-r--r-- | src/db.c | 10 | ||||
-rw-r--r-- | src/gsm_subscriber.c | 12 |
3 files changed, 24 insertions, 0 deletions
diff --git a/include/openbsc/gsm_subscriber.h b/include/openbsc/gsm_subscriber.h index 8dcde3e53..e0c621bfa 100644 --- a/include/openbsc/gsm_subscriber.h +++ b/include/openbsc/gsm_subscriber.h @@ -28,12 +28,14 @@ struct gsm_subscriber { enum gsm_subscriber_field { GSM_SUBSCRIBER_IMSI, GSM_SUBSCRIBER_TMSI, + GSM_SUBSCRIBER_EXTENSION, }; struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); struct gsm_subscriber *subscr_get_by_tmsi(const char *tmsi); struct gsm_subscriber *subscr_get_by_imsi(const char *imsi); +struct gsm_subscriber *subscr_get_by_extension(const char *ext); int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts); /* internal */ @@ -119,6 +119,7 @@ int db_prepare() { "id INTEGER PRIMARY KEY AUTOINCREMENT, " "created TIMESTAMP NOT NULL, " "updated TIMESTAMP NOT NULL, " + "name TEXT, " "imei NUMERIC UNIQUE NOT NULL" ")" ); @@ -219,6 +220,15 @@ struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, const ); free(quoted); break; + case GSM_SUBSCRIBER_EXTENSION: + dbi_conn_quote_string_copy(conn, id, "ed); + result = dbi_conn_queryf(conn, + "SELECT * FROM Subscriber " + "WHERE extension = %s ", + quoted + ); + free(quoted); + break; default: printf("DB: Unknown query selector for Subscriber.\n"); return NULL; diff --git a/src/gsm_subscriber.c b/src/gsm_subscriber.c index 390979b93..d4dfea49a 100644 --- a/src/gsm_subscriber.c +++ b/src/gsm_subscriber.c @@ -78,6 +78,18 @@ struct gsm_subscriber *subscr_get_by_imsi(const char *imsi) return db_get_subscriber(GSM_SUBSCRIBER_IMSI, imsi); } +struct gsm_subscriber *subscr_get_by_extension(const char *ext) +{ + struct gsm_subscriber *subscr; + + llist_for_each_entry(subscr, &active_subscribers, entry) { + if (strcmp(subscr->extension, ext) == 0) + return subscr_get(subscr); + } + + return db_get_subscriber(GSM_SUBSCRIBER_EXTENSION, ext); +} + int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts) { return db_sync_subscriber(s); |