smsutil: status_report_expiration

This commit is contained in:
Petteri Tikander 2010-09-10 17:28:19 +03:00 committed by Denis Kenzior
parent b7f1733fe4
commit df058085ea
2 changed files with 49 additions and 5 deletions

View File

@ -2961,10 +2961,55 @@ void status_report_assembly_add_fragment(
}
void status_report_assembly_expire(struct status_report_assembly *assembly,
time_t before, GFunc foreach_func,
gpointer data)
time_t before)
{
/*TODO*/
GHashTable *id_table;
GHashTableIter iter_addr, iter_node;
struct sms_address addr;
char *straddr;
gpointer key;
unsigned int msg_id;
struct id_table_node *node;
g_hash_table_iter_init(&iter_addr, assembly->assembly_table);
/*
* Go through different addresses. Each address can relate to
* 1-n msg_ids.
*/
while (g_hash_table_iter_next(&iter_addr, (gpointer) &straddr,
(gpointer) &id_table)) {
sms_address_from_string(&addr, straddr);
g_hash_table_iter_init(&iter_node, id_table);
/* Go through different messages. */
while (g_hash_table_iter_next(&iter_node, &key,
(gpointer) &node)) {
msg_id = *(unsigned int *) key;
/*
* If message is expired, removed it from the
* hash-table and remove the backup-file
*/
if (node->expiration <= before) {
g_hash_table_iter_remove(&iter_node);
sr_assembly_remove_fragment_backup(
assembly->imsi,
node,
&addr,
msg_id);
}
}
/*
* If all messages are removed, remove address
* from the hash-table.
*/
if (g_hash_table_size(id_table) == 0)
g_hash_table_iter_remove(&iter_addr);
}
}
static inline GSList *sms_list_append(GSList *l, const struct sms *in)

View File

@ -513,8 +513,7 @@ void status_report_assembly_add_fragment(struct status_report_assembly
unsigned char mr, time_t expiration,
unsigned char total_mrs);
void status_report_assembly_expire(struct status_report_assembly *assembly,
time_t before, GFunc foreach_func,
gpointer data);
time_t before);
GSList *sms_text_prepare(const char *utf8, guint16 ref,
gboolean use_16bit, int *ref_offset,