All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v2 1/4] sms_util: status_report_expiration
@ 2010-09-10 14:28 Petteri Tikander
  2010-09-10 14:28 ` [RFC PATCH v2 2/4] unit: Add unit test for status report expiration Petteri Tikander
  2010-09-10 15:49 ` [RFC PATCH v2 1/4] sms_util: status_report_expiration Denis Kenzior
  0 siblings, 2 replies; 7+ messages in thread
From: Petteri Tikander @ 2010-09-10 14:28 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2418 bytes --]

---
 src/smsutil.c |   51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 src/smsutil.h |    3 +--
 2 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/src/smsutil.c b/src/smsutil.c
index 0de420b..ae8f1ef 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -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)
diff --git a/src/smsutil.h b/src/smsutil.h
index 3c6b3ae..0e0ddf4 100644
--- a/src/smsutil.h
+++ b/src/smsutil.h
@@ -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,
-- 
1.6.3.3



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-09-10 19:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-10 14:28 [RFC PATCH v2 1/4] sms_util: status_report_expiration Petteri Tikander
2010-09-10 14:28 ` [RFC PATCH v2 2/4] unit: Add unit test for status report expiration Petteri Tikander
2010-09-10 14:28   ` [RFC PATCH v2 3/4] sms_util: remove unused parameter Petteri Tikander
2010-09-10 14:28     ` [RFC PATCH v2 4/4] sms_util: fix status report backuping to support uint msg_id Petteri Tikander
2010-09-10 15:49 ` [RFC PATCH v2 1/4] sms_util: status_report_expiration Denis Kenzior
2010-09-10 17:39   ` Petteri Tikander
2010-09-10 19:24   ` Aki Niemi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.