diff options
author | Lucas De Marchi <lucas.demarchi@profusion.mobi> | 2011-01-28 00:39:56 -0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-01-28 16:14:41 -0600 |
commit | f55447a39ecb221fb19ca1fcb57538f4655105cf (patch) | |
tree | 0940f283007fc86781b7e8876a95502548ce737d /src | |
parent | 8305ddf32146abb9ecbfb41c1420762c397706bb (diff) | |
download | ofono-f55447a39ecb221fb19ca1fcb57538f4655105cf.tar.bz2 |
sms: delete sent sms messages from backup
Based on patch from Kristen Carlson Accardi <kristen@linux.intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/sms.c | 8 | ||||
-rw-r--r-- | src/smsutil.c | 47 | ||||
-rw-r--r-- | src/smsutil.h | 6 |
3 files changed, 61 insertions, 0 deletions
@@ -571,6 +571,11 @@ static void tx_finished(const struct ofono_error *error, int mr, void *data) goto next_q; } + if (entry->flags & OFONO_SMS_SUBMIT_FLAG_EXPOSE_DBUS) + sms_tx_backup_remove(sms->imsi, entry->id, entry->flags, + ofono_uuid_to_str(&entry->uuid), + entry->cur_pdu); + entry->cur_pdu += 1; entry->retry = 0; @@ -607,6 +612,9 @@ next_q: if (entry->flags & OFONO_SMS_SUBMIT_FLAG_EXPOSE_DBUS) { enum message_state ms; + sms_tx_backup_free(sms->imsi, entry->id, entry->flags, + ofono_uuid_to_str(&entry->uuid)); + if (ok) ms = MESSAGE_STATE_SENT; else diff --git a/src/smsutil.c b/src/smsutil.c index 3e5b7cd0..db6881ea 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -3172,6 +3172,53 @@ gboolean sms_tx_backup_store(const char *imsi, unsigned long id, return TRUE; } +void sms_tx_backup_free(const char *imsi, unsigned long id, + unsigned long flags, const char *uuid) +{ + char *path; + struct dirent **entries; + int len; + + path = g_strdup_printf(SMS_TX_BACKUP_PATH_DIR, + imsi, id, flags, uuid); + + len = scandir(path, &entries, NULL, versionsort); + + if (len < 0) + return; + + /* skip '..' and '.' entries */ + while (len-- > 2) { + struct dirent *dir = entries[len]; + char *file = g_strdup_printf("%s/%s", path, dir->d_name); + + unlink(file); + g_free(file); + + g_free(entries[len]); + } + + g_free(entries[1]); + g_free(entries[0]); + g_free(entries); + + rmdir(path); + g_free(path); +} + +void sms_tx_backup_remove(const char *imsi, unsigned long id, + unsigned long flags, const char *uuid, + guint8 seq) +{ + char *path; + + path = g_strdup_printf(SMS_TX_BACKUP_PATH_FILE, + imsi, id, flags, uuid, seq); + unlink(path); + + g_free(path); +} + static inline GSList *sms_list_append(GSList *l, const struct sms *in) { struct sms *sms; diff --git a/src/smsutil.h b/src/smsutil.h index 2ae35d7f..615b380c 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -521,6 +521,12 @@ gboolean sms_tx_backup_store(const char *imsi, unsigned long id, unsigned long flags, const char *uuid, guint8 seq, const unsigned char *pdu, int pdu_len, int tpdu_len); +void sms_tx_backup_remove(const char *imsi, unsigned long id, + unsigned long flags, const char *uuid, + guint8 seq); +void sms_tx_backup_free(const char *imsi, unsigned long id, + unsigned long flags, const char *uuid); + GSList *sms_text_prepare(const char *to, const char *utf8, guint16 ref, gboolean use_16bit, gboolean use_delivery_reports); |