aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/db.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/db.c')
-rw-r--r--openbsc/src/db.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index 543f44ce2..fb589003d 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -79,7 +79,7 @@ static char *create_stmts[] = {
"sent TIMESTAMP, "
"sender_id NUMERIC NOT NULL, "
"receiver_id NUMERIC NOT NULL, "
- "header NUMERIC, "
+ "header BLOB, "
"text TEXT NOT NULL "
")",
"CREATE TABLE IF NOT EXISTS VLR ("
@@ -230,6 +230,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, &quoted);
+ 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;
@@ -440,16 +447,20 @@ int db_sms_store(struct gsm_sms *sms)
{
dbi_result result;
char *q_text;
+ unsigned char *q_header;
dbi_conn_quote_string_copy(conn, (char *)sms->text, &q_text);
+ dbi_conn_quote_binary_copy(conn, sms->header, sms->header_len,
+ &q_header);
result = dbi_conn_queryf(conn,
"INSERT INTO SMS "
"(created,sender_id,receiver_id,header,text) VALUES "
"(datetime('now'),%llu,%llu,%s,%s)",
sms->sender->id,
sms->receiver ? sms->receiver->id : 0,
- NULL, q_text);
+ q_header, q_text);
free(q_text);
+ free(q_header);
if (!result)
return -EIO;
@@ -462,7 +473,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);
@@ -476,8 +490,21 @@ struct gsm_sms *db_sms_get_unsent(int min_id)
free(sms);
return NULL;
}
+ sms->id = dbi_result_get_ulonglong(result, "id");
+
+ 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 */
- /* FIXME: fill gsm_sms from database */
+ text = dbi_result_get_string(result, "text");
+ if (text)
+ strncpy(sms->text, text, sizeof(sms->text));
dbi_result_free(result);
return sms;