[Telepathy-commits] [telepathy-gabble/master] GabbleMediaFactory: stop using the connected, connecting, disconnected callbacks
Simon McVittie
simon.mcvittie at collabora.co.uk
Tue Aug 19 10:54:16 PDT 2008
20080728161027-53eee-eca7d5143f3e78fce8d561aab4bb7dc999e4701b.gz
---
src/media-factory.c | 158 +++++++++++++++++++++++++++++----------------------
1 files changed, 91 insertions(+), 67 deletions(-)
diff --git a/src/media-factory.c b/src/media-factory.c
index a0aa728..d6523cb 100644
--- a/src/media-factory.c
+++ b/src/media-factory.c
@@ -170,6 +170,10 @@ gabble_media_factory_set_property (GObject *object,
}
}
+
+static void gabble_media_factory_constructed (GObject *object);
+
+
static void
gabble_media_factory_class_init (GabbleMediaFactoryClass *gabble_media_factory_class)
{
@@ -179,6 +183,7 @@ gabble_media_factory_class_init (GabbleMediaFactoryClass *gabble_media_factory_c
g_type_class_add_private (gabble_media_factory_class,
sizeof (GabbleMediaFactoryPrivate));
+ object_class->constructed = gabble_media_factory_constructed;
object_class->dispose = gabble_media_factory_dispose;
object_class->get_property = gabble_media_factory_get_property;
@@ -696,87 +701,109 @@ gabble_media_factory_iface_close_all (TpChannelFactoryIface *iface)
}
}
+
static void
-gabble_media_factory_iface_connecting (TpChannelFactoryIface *iface)
+connection_status_changed_cb (GabbleConnection *conn,
+ guint status,
+ guint reason,
+ GabbleMediaFactory *self)
{
- GabbleMediaFactory *fac = GABBLE_MEDIA_FACTORY (iface);
- GabbleMediaFactoryPrivate *priv = GABBLE_MEDIA_FACTORY_GET_PRIVATE (fac);
+ GabbleMediaFactoryPrivate *priv = GABBLE_MEDIA_FACTORY_GET_PRIVATE (self);
- g_assert (priv->conn != NULL);
- g_assert (priv->conn->lmconn != NULL);
+ switch (status)
+ {
+ case TP_CONNECTION_STATUS_CONNECTING:
+ g_assert (priv->conn != NULL);
+ g_assert (priv->conn->lmconn != NULL);
- DEBUG ("adding callbacks");
+ DEBUG ("adding callbacks");
+ g_assert (priv->jingle_cb == NULL);
+ g_assert (priv->jingle_info_cb == NULL);
- g_assert (priv->jingle_cb == NULL);
- g_assert (priv->jingle_info_cb == NULL);
+ priv->jingle_cb = lm_message_handler_new (media_factory_jingle_cb,
+ self, NULL);
+ lm_connection_register_message_handler (priv->conn->lmconn,
+ priv->jingle_cb, LM_MESSAGE_TYPE_IQ,
+ LM_HANDLER_PRIORITY_NORMAL);
- priv->jingle_cb = lm_message_handler_new (media_factory_jingle_cb, fac,
- NULL);
- lm_connection_register_message_handler (priv->conn->lmconn, priv->jingle_cb,
- LM_MESSAGE_TYPE_IQ,
- LM_HANDLER_PRIORITY_NORMAL);
-
- priv->jingle_info_cb = lm_message_handler_new (jingle_info_iq_callback, fac,
- NULL);
- lm_connection_register_message_handler (priv->conn->lmconn,
- priv->jingle_info_cb,
- LM_MESSAGE_TYPE_IQ,
- LM_HANDLER_PRIORITY_NORMAL);
-}
+ priv->jingle_info_cb = lm_message_handler_new (
+ jingle_info_iq_callback, self, NULL);
+ lm_connection_register_message_handler (priv->conn->lmconn,
+ priv->jingle_info_cb, LM_MESSAGE_TYPE_IQ,
+ LM_HANDLER_PRIORITY_NORMAL);
-static void
-gabble_media_factory_iface_connected (TpChannelFactoryIface *iface)
-{
- GabbleMediaFactory *fac = GABBLE_MEDIA_FACTORY (iface);
- GabbleMediaFactoryPrivate *priv = GABBLE_MEDIA_FACTORY_GET_PRIVATE (fac);
- gchar *stun_server = NULL;
- guint stun_port = 0;
+ break;
- g_object_get (priv->conn,
- "stun-server", &stun_server,
- "stun-port", &stun_port,
- NULL);
+ case TP_CONNECTION_STATUS_CONNECTED:
+ {
+ gchar *stun_server = NULL;
+ guint stun_port = 0;
- if (stun_server == NULL)
- {
- priv->get_stun_from_jingle = TRUE;
- }
- else
- {
- g_free (priv->stun_server);
- priv->stun_server = stun_server;
- priv->stun_port = stun_port;
- }
+ g_object_get (priv->conn,
+ "stun-server", &stun_server,
+ "stun-port", &stun_port,
+ NULL);
- if (priv->conn->features & GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO)
- {
- jingle_info_send_request (fac);
+ if (stun_server == NULL)
+ {
+ priv->get_stun_from_jingle = TRUE;
+ }
+ else
+ {
+ g_free (priv->stun_server);
+ priv->stun_server = stun_server;
+ priv->stun_port = stun_port;
+ }
+
+ if (priv->conn->features &
+ GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO)
+ {
+ jingle_info_send_request (self);
+ }
+ }
+ break;
+
+ case TP_CONNECTION_STATUS_DISCONNECTED:
+ /* this can be called before we have ever been CONNECTING, so we need
+ * to guard it */
+ if (priv->jingle_cb != NULL)
+ {
+ DEBUG ("removing callbacks");
+ g_assert (priv->jingle_info_cb != NULL);
+
+ lm_connection_unregister_message_handler (priv->conn->lmconn,
+ priv->jingle_cb, LM_MESSAGE_TYPE_IQ);
+ lm_message_handler_unref (priv->jingle_cb);
+ priv->jingle_cb = NULL;
+
+ lm_connection_unregister_message_handler (priv->conn->lmconn,
+ priv->jingle_info_cb, LM_MESSAGE_TYPE_IQ);
+ lm_message_handler_unref (priv->jingle_info_cb);
+ priv->jingle_info_cb = NULL;
+ }
+ break;
}
}
+
static void
-gabble_media_factory_iface_disconnected (TpChannelFactoryIface *iface)
+gabble_media_factory_constructed (GObject *object)
{
- GabbleMediaFactory *fac = GABBLE_MEDIA_FACTORY (iface);
- GabbleMediaFactoryPrivate *priv = GABBLE_MEDIA_FACTORY_GET_PRIVATE (fac);
-
- DEBUG ("removing callbacks");
-
- g_assert (priv->jingle_cb != NULL);
- g_assert (priv->jingle_info_cb != NULL);
-
- lm_connection_unregister_message_handler (priv->conn->lmconn,
- priv->jingle_cb, LM_MESSAGE_TYPE_IQ);
- lm_message_handler_unref (priv->jingle_cb);
- priv->jingle_cb = NULL;
-
- lm_connection_unregister_message_handler (priv->conn->lmconn,
- priv->jingle_info_cb, LM_MESSAGE_TYPE_IQ);
- lm_message_handler_unref (priv->jingle_info_cb);
- priv->jingle_info_cb = NULL;
-
+ void (*chain_up) (GObject *) =
+ G_OBJECT_CLASS (gabble_media_factory_parent_class)->constructed;
+ GabbleMediaFactory *self = GABBLE_MEDIA_FACTORY (object);
+ GabbleMediaFactoryPrivate *priv = GABBLE_MEDIA_FACTORY_GET_PRIVATE (self);
+
+ if (chain_up != NULL)
+ chain_up (object);
+
+ /* conn is guaranteed to live longer than the factory, so this
+ * never needs disconnecting */
+ g_signal_connect (priv->conn, "status-changed",
+ (GCallback) connection_status_changed_cb, object);
}
+
static void
gabble_media_factory_iface_foreach (TpChannelFactoryIface *iface,
TpChannelFunc foreach,
@@ -847,9 +874,6 @@ gabble_media_factory_iface_init (gpointer g_iface,
TpChannelFactoryIfaceClass *klass = (TpChannelFactoryIfaceClass *) g_iface;
klass->close_all = gabble_media_factory_iface_close_all;
- klass->connected = gabble_media_factory_iface_connected;
- klass->connecting = gabble_media_factory_iface_connecting;
- klass->disconnected = gabble_media_factory_iface_disconnected;
klass->foreach = gabble_media_factory_iface_foreach;
klass->request = gabble_media_factory_iface_request;
}
--
1.5.6.3
More information about the Telepathy-commits
mailing list