aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2009-02-09 23:39:20 +0000
committerHolger Freyther <zecke@selfish.org>2009-02-09 23:39:20 +0000
commit9c564b85e65623ab99a3c3ba7c490740592bd149 (patch)
tree0b5323b103d82e5962b5844b7dfa02f38c7debc8
parentcbc7b065345d41e077069bcee1519b8557f70fed (diff)
introduce lookup of subscribers based on their extension number
-rw-r--r--include/openbsc/gsm_subscriber.h2
-rw-r--r--src/db.c10
-rw-r--r--src/gsm_subscriber.c12
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 */
diff --git a/src/db.c b/src/db.c
index 50459cff0..b538d5dd7 100644
--- a/src/db.c
+++ b/src/db.c
@@ -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, &quoted);
+ 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);