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:
parent
1a6f79818e
commit
d0b7b7719f
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue