diff options
Diffstat (limited to 'openbsc/src/db.c')
-rw-r--r-- | openbsc/src/db.c | 33 |
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, "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; @@ -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; |