[Telepathy-commits] [telepathy-salut/master] Added a "cancelled" boolean to the GibberOobFileTransfer object to keep track of whether the transfer has been cancelled.

Jonny Lamb jonny.lamb at collabora.co.uk
Fri Nov 21 03:46:18 PST 2008


20080805170323-8ed0e-3452caec9c48299f64fda05a10f4ec7d27c661ac.gz
---
 lib/gibber/gibber-oob-file-transfer.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index e87edd9..c67fc30 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -54,6 +54,8 @@ struct _GibberOobFileTransferPrivate
   GIOChannel *channel;
   /* Current number of transferred bytes */
   guint64 transferred_bytes;
+  /* whether the transfer has been cancelled */
+  gboolean cancelled;
 };
 
 static void
@@ -231,6 +233,10 @@ http_client_chunk_cb (SoupMessage *msg,
 {
   GibberOobFileTransfer *self = user_data;
 
+  /* Don't write anything if it's been cancelled */
+  if (self->priv->cancelled)
+    return;
+
   /* FIXME make async */
   g_io_channel_write_chars (self->priv->channel, msg->response.body,
       msg->response.length, NULL, NULL);
@@ -561,8 +567,8 @@ http_server_wrote_chunk_cb (SoupMessage *msg,
 {
   GibberOobFileTransfer *self = user_data;
 
-  DEBUG("Chunk written, adding a watch to get more input");
-  if (self->priv->channel)
+  DEBUG("Chunk written, adding a watch to get more input (%s)", self->priv->cancelled ? "cancelled" : "not cancelled");
+  if (self->priv->channel && !self->priv->cancelled)
     {
       g_io_add_watch (self->priv->channel, G_IO_IN | G_IO_HUP,
           input_channel_readable_cb, self);
@@ -593,6 +599,9 @@ gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
   GibberXmppNode *error_node;
   GibberXmppNode *error_desc;
 
+  if (self->priv->cancelled)
+    return;
+
   stanza = gibber_xmpp_stanza_new ("iq");
   gibber_xmpp_node_set_attribute (stanza->node, "type", "error");
   gibber_xmpp_node_set_attribute (stanza->node, "from", ft->self_id);
@@ -623,6 +632,9 @@ gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
     }
 
   gibber_file_transfer_send_stanza (ft, stanza, NULL);
+
+  self->priv->cancelled = TRUE;
+  g_signal_emit_by_name (self, "canceled");
 }
 
 static void
-- 
1.5.6.5




More information about the Telepathy-commits mailing list