[Telepathy-commits] [telepathy-salut/master] Send iq offer only 1 time
Alban Crequy
alban.crequy at collabora.co.uk
Tue Nov 25 03:59:10 PST 2008
20080424150218-a41c0-c88977311240702d9fa54b8bdb9f0db99e6fe47a.gz
---
src/salut-tubes-channel.c | 2 +-
src/tube-dbus.c | 1 +
src/tube-iface.c | 9 +++++++++
src/tube-iface.h | 5 +++++
src/tube-stream.c | 19 +++++++++++++++++++
5 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/src/salut-tubes-channel.c b/src/salut-tubes-channel.c
index f29773c..2e2f58a 100644
--- a/src/salut-tubes-channel.c
+++ b/src/salut-tubes-channel.c
@@ -1787,7 +1787,7 @@ _send_channel_iq_tube (gpointer key,
NULL);
DEBUG ("called for tube id %d", tube_id);
- if (state == TP_TUBE_STATE_REMOTE_PENDING)
+ if (salut_tube_iface_offer_needed(tube))
{
GError *error = NULL;
diff --git a/src/tube-dbus.c b/src/tube-dbus.c
index a45fa3c..d594697 100644
--- a/src/tube-dbus.c
+++ b/src/tube-dbus.c
@@ -1210,6 +1210,7 @@ tube_iface_init (gpointer g_iface,
SalutTubeIfaceClass *klass = (SalutTubeIfaceClass *) g_iface;
klass->accept = salut_tube_dbus_accept;
+ klass->offer_needed = NULL;
klass->close = salut_tube_dbus_close;
klass->add_bytestream = salut_tube_dbus_add_bytestream;
}
diff --git a/src/tube-iface.c b/src/tube-iface.c
index 0762037..63b02c9 100644
--- a/src/tube-iface.c
+++ b/src/tube-iface.c
@@ -33,6 +33,15 @@ salut_tube_iface_accept (SalutTubeIface *self,
return virtual_method (self, error);
}
+gboolean
+salut_tube_iface_offer_needed (SalutTubeIface *self)
+{
+ gboolean (*virtual_method)(SalutTubeIface *) =
+ SALUT_TUBE_IFACE_GET_CLASS (self)->offer_needed;
+ g_assert (virtual_method != NULL);
+ return virtual_method (self);
+}
+
void
salut_tube_iface_close (SalutTubeIface *self)
{
diff --git a/src/tube-iface.h b/src/tube-iface.h
index db55ae3..6e0af49 100644
--- a/src/tube-iface.h
+++ b/src/tube-iface.h
@@ -33,6 +33,7 @@ struct _SalutTubeIfaceClass {
GTypeInterface parent;
gboolean (*accept) (SalutTubeIface *tube, GError **error);
+ gboolean (*offer_needed) (SalutTubeIface *tube);
void (*close) (SalutTubeIface *tube);
void (*add_bytestream) (SalutTubeIface *tube,
GibberBytestreamIface *bytestream);
@@ -51,6 +52,10 @@ GType salut_tube_iface_get_type (void);
(G_TYPE_INSTANCE_GET_INTERFACE ((obj), SALUT_TYPE_TUBE_IFACE,\
SalutTubeIfaceClass))
+/* return TRUE if the <iq> to offer the tube has never been sent */
+gboolean
+salut_tube_iface_offer_needed (SalutTubeIface *tube);
+
gboolean
salut_tube_iface_accept (SalutTubeIface *tube, GError **error);
diff --git a/src/tube-stream.c b/src/tube-stream.c
index 68b1ac3..a6dfbea 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -131,6 +131,8 @@ struct _SalutTubeStreamPrivate
guint listen_io_channel_source_id;
gboolean closed;
+ gboolean offer_needed;
+
gboolean dispose_has_run;
};
@@ -815,6 +817,7 @@ salut_tube_stream_init (SalutTubeStream *self)
priv->access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
priv->access_control_param = NULL;
priv->closed = FALSE;
+ priv->offer_needed = FALSE;
priv->dispose_has_run = FALSE;
}
@@ -1096,6 +1099,7 @@ salut_tube_stream_constructor (GType type,
if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
{
/* Private tube */
+ priv->offer_needed = TRUE;
priv->state = TP_TUBE_STATE_REMOTE_PENDING;
}
else
@@ -1305,6 +1309,20 @@ salut_tube_stream_accept (SalutTubeIface *tube,
}
/**
+ * salut_tube_stream_offer_needed
+ *
+ * Implements salut_tube_iface_offer_needed on SalutTubeIface
+ */
+static gboolean
+salut_tube_stream_offer_needed (SalutTubeIface *tube)
+{
+ SalutTubeStream *self = SALUT_TUBE_STREAM (tube);
+ SalutTubeStreamPrivate *priv = SALUT_TUBE_STREAM_GET_PRIVATE (self);
+
+ return priv->offer_needed;
+}
+
+/**
* salut_tube_stream_close
*
* Implements salut_tube_iface_close on SalutTubeIface
@@ -1611,6 +1629,7 @@ tube_iface_init (gpointer g_iface,
SalutTubeIfaceClass *klass = (SalutTubeIfaceClass *) g_iface;
klass->accept = salut_tube_stream_accept;
+ klass->offer_needed = salut_tube_stream_offer_needed;
klass->close = salut_tube_stream_close;
klass->add_bytestream = salut_tube_stream_add_bytestream;
}
--
1.5.6.5
More information about the Telepathy-commits
mailing list