From be3e3784dc435cc64f70b0afef299097f9884c1d Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 5 Jul 2009 14:06:41 +0200 Subject: [PATCH] further SMS work * implement ID based lookup of gsm_subscriber from database * look-up recipient and sender subscribers from database --- openbsc/include/openbsc/gsm_subscriber.h | 1 + openbsc/src/db.c | 25 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h index dc4f6d7a6..e8dbf87f0 100644 --- a/openbsc/include/openbsc/gsm_subscriber.h +++ b/openbsc/include/openbsc/gsm_subscriber.h @@ -42,6 +42,7 @@ enum gsm_subscriber_field { GSM_SUBSCRIBER_IMSI, GSM_SUBSCRIBER_TMSI, GSM_SUBSCRIBER_EXTENSION, + GSM_SUBSCRIBER_ID, }; enum gsm_subscriber_update_reason { diff --git a/openbsc/src/db.c b/openbsc/src/db.c index 1bcd10175..2d9974955 100644 --- a/openbsc/src/db.c +++ b/openbsc/src/db.c @@ -226,6 +226,13 @@ struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, const ); free(quoted); break; + case GSM_SUBSCRIBER_ID: + dbi_conn_quote_string_copy(conn, id, "ed); + result = dbi_conn_queryf(conn, + "SELECT * FROM Subscriber " + "WHERE id = %s ", quoted); + free(quoted); + break; default: printf("DB: Unknown query selector for Subscriber.\n"); return NULL; @@ -428,7 +435,10 @@ int db_sms_store(struct gsm_sms *sms) struct gsm_sms *db_sms_get_unsent(int min_id) { dbi_result result; + long long unsigned int sender_id, receiver_id; struct gsm_sms *sms = malloc(sizeof(*sms)); + char *text; + char buf[32]; if (!sms) { free(sms); @@ -442,8 +452,21 @@ struct gsm_sms *db_sms_get_unsent(int min_id) free(sms); return NULL; } + sms->id = dbi_result_get_ulonglong(result, "id"); - /* FIXME: fill gsm_sms from database */ + sender_id = dbi_result_get_ulonglong(result, "sender_id"); + sprintf(buf, "%llu", sender_id); + sms->sender = db_get_subscriber(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); + + /* FIXME: fill header */ + + text = dbi_result_get_string(result, "text"); + if (text) + strncpy(sms->text, text, sizeof(sms->text)); dbi_result_free(result); return sms;