From d33ccd21e167a190db5f15af040a27124a6a8fc6 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Wed, 2 Dec 2009 15:28:44 -0600 Subject: [PATCH] Add: g_at_chat_cancel_all function This will cancel all commands currently queued. --- gatchat/gatchat.c | 27 +++++++++++++++++++++++++++ gatchat/gatchat.h | 1 + 2 files changed, 28 insertions(+) diff --git a/gatchat/gatchat.c b/gatchat/gatchat.c index df65906..54e6434 100644 --- a/gatchat/gatchat.c +++ b/gatchat/gatchat.c @@ -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) { diff --git a/gatchat/gatchat.h b/gatchat/gatchat.h index 249c8cf..8fffda6 100644 --- a/gatchat/gatchat.h +++ b/gatchat/gatchat.h @@ -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, -- 2.7.4