summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-11-05 17:06:21 -0600
committerDenis Kenzior <denkenz@gmail.com>2009-11-05 17:06:21 -0600
commita4189db20f408f409a6d07108795b11d42e9e9ae (patch)
tree8104a79743b275852b80027347d6fe2267c5ccca /src
parent55425238b0fce98859d34471162b3272136a2643 (diff)
downloadofono-a4189db20f408f409a6d07108795b11d42e9e9ae.tar.bz2
Add basic state saving for SMS atom
Message ID and Reference number for concatenated messages should be persisted.
Diffstat (limited to 'src')
-rw-r--r--src/sms.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/sms.c b/src/sms.c
index d5eb874e..c43d61ca 100644
--- a/src/sms.c
+++ b/src/sms.c
@@ -35,6 +35,7 @@
#include "common.h"
#include "util.h"
#include "smsutil.h"
+#include "storage.h"
#define uninitialized_var(x) x = x
@@ -42,6 +43,9 @@
#define SMS_MANAGER_FLAG_CACHED 0x1
+#define SETTINGS_STORE "sms"
+#define SETTINGS_GROUP "Settings"
+
#define TXQ_MAX_RETRIES 4
static gboolean tx_next(gpointer user_data);
@@ -61,6 +65,8 @@ struct ofono_sms {
struct ofono_message_waiting *mw;
unsigned int mw_watch;
struct ofono_sim *sim;
+ GKeyFile *settings;
+ char *imsi;
const struct ofono_sms_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -866,6 +872,19 @@ static void sms_remove(struct ofono_atom *atom)
sms->txq = NULL;
}
+ if (sms->settings) {
+ g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
+ "NextMessageId", sms->next_msg_id);
+ g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
+ "NextReference", sms->ref);
+
+ storage_close(sms->imsi, SETTINGS_STORE, sms->settings, TRUE);
+
+ g_free(sms->imsi);
+ sms->imsi = NULL;
+ sms->settings = NULL;
+ }
+
g_free(sms);
}
@@ -920,6 +939,24 @@ static void mw_watch(struct ofono_atom *atom,
sms->mw = __ofono_atom_get_data(atom);
}
+static void sms_load_settings(struct ofono_sms *sms, const char *imsi)
+{
+ sms->settings = storage_open(imsi, SETTINGS_STORE);
+
+ if (sms->settings == NULL)
+ return;
+
+ sms->imsi = g_strdup(imsi);
+
+ sms->next_msg_id = g_key_file_get_integer(sms->settings, SETTINGS_GROUP,
+ "NextMessageId", NULL);
+ sms->ref = g_key_file_get_integer(sms->settings, SETTINGS_GROUP,
+ "NextReference", NULL);
+
+ if (sms->ref >= 65536)
+ sms->ref = 1;
+
+}
void ofono_sms_register(struct ofono_sms *sms)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -962,6 +999,8 @@ void ofono_sms_register(struct ofono_sms *sms)
sms->sim = __ofono_atom_get_data(sim_atom);
imsi = ofono_sim_get_imsi(sms->sim);
sms->assembly = sms_assembly_new(imsi);
+
+ sms_load_settings(sms, imsi);
} else
sms->assembly = sms_assembly_new(NULL);