[Telepathy-commits] [telepathy-gabble/master] gabble_bytestream_ibb_close_received: wait write buffer is flushed before closing
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Tue Mar 10 04:42:31 PDT 2009
---
src/bytestream-ibb.c | 24 +++++++++++++++++++-----
1 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/bytestream-ibb.c b/src/bytestream-ibb.c
index 492cbc4..4966fb7 100644
--- a/src/bytestream-ibb.c
+++ b/src/bytestream-ibb.c
@@ -81,6 +81,7 @@ struct _GabbleBytestreamIBBPrivate
guint16 seq;
guint16 last_seq_recv;
+ LmMessage *close_iq_to_ack;
/* We can't stop receving IBB data so if user wants to block the bytestream
* we buffer them until he unblocks it. */
@@ -136,6 +137,13 @@ gabble_bytestream_ibb_dispose (GObject *object)
gabble_bytestream_iface_close (GABBLE_BYTESTREAM_IFACE (self), NULL);
}
+ if (priv->close_iq_to_ack != NULL)
+ {
+ _gabble_connection_acknowledge_set_iq (priv->conn, priv->close_iq_to_ack);
+ lm_message_unref (priv->close_iq_to_ack);
+ priv->close_iq_to_ack = NULL;
+ }
+
G_OBJECT_CLASS (gabble_bytestream_ibb_parent_class)->dispose (object);
}
@@ -367,6 +375,14 @@ send_close_stanza (GabbleBytestreamIBB *self)
GabbleBytestreamIBBPrivate *priv = GABBLE_BYTESTREAM_IBB_GET_PRIVATE (self);
LmMessage *msg;
+ if (priv->close_iq_to_ack != NULL)
+ {
+ /* We received a close IQ and just need to ACK it */
+ _gabble_connection_acknowledge_set_iq (priv->conn, priv->close_iq_to_ack);
+ lm_message_unref (priv->close_iq_to_ack);
+ priv->close_iq_to_ack = NULL;
+ }
+
DEBUG ("send IBB close stanza");
msg = lm_message_build (priv->peer_jid, LM_MESSAGE_TYPE_IQ,
@@ -926,12 +942,10 @@ gabble_bytestream_ibb_close_received (GabbleBytestreamIBB *self,
{
GabbleBytestreamIBBPrivate *priv = GABBLE_BYTESTREAM_IBB_GET_PRIVATE (self);
- DEBUG ("received IBB close stanza. Bytestream closed");
-
- g_object_set (self, "state", GABBLE_BYTESTREAM_STATE_CLOSED,
- NULL);
+ DEBUG ("received IBB close stanza. Closing bytestream");
- _gabble_connection_acknowledge_set_iq (priv->conn, iq);
+ priv->close_iq_to_ack = lm_message_ref (iq);
+ gabble_bytestream_ibb_close (GABBLE_BYTESTREAM_IFACE (self), NULL);
}
static void
--
1.5.6.5
More information about the telepathy-commits
mailing list