Add: g_at_chat_cancel_all function
authorDenis Kenzior <denkenz@gmail.com>
Wed, 2 Dec 2009 21:28:44 +0000 (15:28 -0600)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 3 Dec 2009 01:16:21 +0000 (02:16 +0100)
This will cancel all commands currently queued.

gatchat/gatchat.c
gatchat/gatchat.h

index df65906..54e6434 100644 (file)
@@ -1219,6 +1219,33 @@ gboolean g_at_chat_cancel(GAtChat *chat, guint id)
        return TRUE;
 }
 
+gboolean g_at_chat_cancel_all(GAtChat *chat)
+{
+       int n = 0;
+       struct at_command *c;
+
+       if (chat == NULL || chat->command_queue == NULL)
+               return FALSE;
+
+       while ((c = g_queue_peek_nth(chat->command_queue, n)) != NULL) {
+               if (c->id == 0) {
+                       n += 1;
+                       continue;
+               }
+
+               if (n == 0 && chat->cmd_bytes_written > 0) {
+                       c->callback = NULL;
+                       n += 1;
+                       continue;
+               }
+
+               at_command_destroy(c);
+               g_queue_remove(chat->command_queue, c);
+       }
+
+       return TRUE;
+}
+
 static struct at_notify *at_notify_create(GAtChat *chat, const char *prefix,
                                                gboolean pdu)
 {
index 249c8cf..8fffda6 100644 (file)
@@ -118,6 +118,7 @@ guint g_at_chat_send_pdu_listing(GAtChat *chat, const char *cmd,
                                gpointer user_data, GDestroyNotify notify);
 
 gboolean g_at_chat_cancel(GAtChat *chat, guint id);
+gboolean g_at_chat_cancel_all(GAtChat *chat);
 
 guint g_at_chat_register(GAtChat *chat, const char *prefix,
                                GAtNotifyFunc func, gboolean expect_pdu,