[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