diff options
author | Harald Welte <laforge@gnumonks.org> | 2008-12-27 21:34:06 +0000 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2008-12-27 21:34:06 +0000 |
commit | 75a983fab09567a59bcacf67416942f35cffe254 (patch) | |
tree | 9ffb01f8fc10efd001b6444d5574aeb8828dbf13 /src/gsm_subscriber.c | |
parent | 10b487b1c0c1a1cefa1d4114a166eca71f25bd38 (diff) |
* add database handling
* fix IMSI handling
Diffstat (limited to 'src/gsm_subscriber.c')
-rw-r--r-- | src/gsm_subscriber.c | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/src/gsm_subscriber.c b/src/gsm_subscriber.c index 6a67c49e3..fcf91ae51 100644 --- a/src/gsm_subscriber.c +++ b/src/gsm_subscriber.c @@ -20,24 +20,63 @@ * */ +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> #include <openbsc/gsm_subscriber.h> +#include <openbsc/db.h> -static struct gsm_subscriber subscr = { - .name = "Test User 1", - .tmsi = { 0x22, 0x33, 0x44, 0x55 }, -}; +struct gsm_subscriber *subscr_alloc(void) +{ + struct gsm_subscriber *s; + + s = malloc(sizeof(struct gsm_subscriber)); + if (!s) + return NULL; + + memset(s, 0, sizeof(*s)); + + return s; +} -struct gsm_subscriber *subscr_get_by_tmsi(u_int8_t *tmsi) +void subscr_free(struct gsm_subscriber *subscr) { - return &subscr; + free(subscr); } -struct gsm_subscriber *subscr_get_by_imsi(u_int8_t *imsi) + +struct gsm_subscriber *subscr_get_by_tmsi(char *tmsi) { - return &subscr; + struct gsm_subscriber *subscr = subscr_alloc(); + + strncpy(subscr->tmsi, tmsi, sizeof(subscr->tmsi)); + subscr->tmsi[sizeof(subscr->tmsi)-1] = '\0'; + + if (db_get_subscriber(GSM_SUBSCRIBER_TMSI, subscr) != 0) { + subscr_free(subscr); + subscr = NULL; + } + + return subscr; +} + +struct gsm_subscriber *subscr_get_by_imsi(char *imsi) +{ + struct gsm_subscriber *subscr = subscr_alloc(); + + strncpy(subscr->imsi, imsi, sizeof(subscr->imsi)); + subscr->imsi[sizeof(subscr->imsi)-1] = '\0'; + + if (db_get_subscriber(GSM_SUBSCRIBER_IMSI, subscr) != 0) { + subscr_free(subscr); + subscr = NULL; + } + + return subscr; } int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts) { - return 0; + return db_set_subscriber(s); } |