introduce lookup of subscribers based on their extension number

This commit is contained in:
Holger Freyther 2009-02-09 23:39:20 +00:00
parent cbc7b06534
commit 9c564b85e6
3 changed files with 24 additions and 0 deletions

View File

@ -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 */

View File

@ -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;

View File

@ -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);