add ud_hdr_ind to SMS table

we also implement verification of the database schema number by
using the 'Meta' table.
This commit is contained in:
Harald Welte 2009-08-09 19:03:42 +02:00
parent 1a6f79818e
commit d0b7b7719f
1 changed files with 45 additions and 9 deletions

View File

@ -44,7 +44,7 @@ static char *create_stmts[] = {
"INSERT OR IGNORE INTO Meta "
"(key, value) "
"VALUES "
"('revision', '1')",
"('revision', '2')",
"CREATE TABLE IF NOT EXISTS Subscriber ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"created TIMESTAMP NOT NULL, "
@ -87,6 +87,7 @@ static char *create_stmts[] = {
"status_rep_req INTEGER NOT NULL, "
"protocol_id INTEGER NOT NULL, "
"data_coding_scheme INTEGER NOT NULL, "
"ud_hdr_ind INTEGER NOT NULL, "
"dest_addr TEXT, "
"user_data BLOB, " /* TP-UD */
/* additional data, interpreted from SMS */
@ -108,6 +109,30 @@ void db_error_func(dbi_conn conn, void* data) {
printf("DBI: %s\n", msg);
}
static int check_db_revision(void)
{
dbi_result result;
const char *rev;
result = dbi_conn_query(conn,
"SELECT value FROM Meta WHERE key='revision'");
if (!result)
return -EINVAL;
if (!dbi_result_next_row(result)) {
dbi_result_free(result);
return -EINVAL;
}
rev = dbi_result_get_string(result, "value");
if (!rev || atoi(rev) != 2) {
dbi_result_free(result);
return -EINVAL;
}
dbi_result_free(result);
return 0;
}
int db_init(const char *name) {
dbi_initialize(NULL);
conn = dbi_conn_new("sqlite3");
@ -132,16 +157,25 @@ int db_init(const char *name) {
dbi_conn_set_option(conn, "sqlite3_dbdir", dirname(db_dirname));
dbi_conn_set_option(conn, "dbname", basename(db_basename));
if (dbi_conn_connect(conn) < 0) {
free(db_dirname);
free(db_basename);
db_dirname = db_basename = NULL;
return 1;
if (dbi_conn_connect(conn) < 0)
goto out_err;
if (check_db_revision() < 0) {
fprintf(stderr, "Database schema revision invalid, "
"please update your database schema\n");
goto out_err;
}
return 0;
out_err:
free(db_dirname);
free(db_basename);
db_dirname = db_basename = NULL;
return -1;
}
int db_prepare() {
dbi_result result;
int i;
@ -478,13 +512,15 @@ int db_sms_store(struct gsm_sms *sms)
"INSERT INTO SMS "
"(created, sender_id, receiver_id, valid_until, "
"reply_path_req, status_rep_req, protocol_id, "
"data_coding_scheme, dest_addr, user_data, text) VALUES "
"data_coding_scheme, ud_hdr_ind, dest_addr, "
"user_data, text) VALUES "
"(datetime('now'), %llu, %llu, %u, "
"%u, %u, %u, %u, %s, %s, %s)",
"%u, %u, %u, %u, %u, %s, %s, %s)",
sms->sender->id,
sms->receiver ? sms->receiver->id : 0, validity_timestamp,
sms->reply_path_req, sms->status_rep_req, sms->protocol_id,
sms->data_coding_scheme, q_daddr, q_udata, q_text);
sms->data_coding_scheme, sms->ud_hdr_ind,
q_daddr, q_udata, q_text);
free(q_text);
free(q_daddr);
free(q_udata);