diff options
author | Will Thompson <will.thompson@collabora.co.uk> | 2012-02-17 17:55:21 +0000 |
---|---|---|
committer | Will Thompson <will.thompson@collabora.co.uk> | 2012-02-23 12:46:25 +0000 |
commit | ad631083a88dfdea01b2a9957eeff9594a97ed7b (patch) | |
tree | c919e56424d406e8c4f9e9be193902f598ba2a4f | |
parent | b6ff8bff994babae4afb0e00b8d388b2c37cff8b (diff) |
JingleFactory: move connection status monitoring to Mint
-rw-r--r-- | src/jingle-factory.c | 55 | ||||
-rw-r--r-- | src/jingle-mint.c | 63 |
2 files changed, 63 insertions, 55 deletions
diff --git a/src/jingle-factory.c b/src/jingle-factory.c index d6c4a5956..eadde1004 100644 --- a/src/jingle-factory.c +++ b/src/jingle-factory.c @@ -94,8 +94,6 @@ static void session_terminated_cb (GabbleJingleSession *sess, const gchar *text, GabbleJingleFactory *fac); -static void connection_status_changed_cb (GabbleConnection *conn, - guint status, guint reason, GabbleJingleFactory *self); static void connection_porter_available_cb ( GabbleConnection *conn, WockyPorter *porter, @@ -197,8 +195,6 @@ gabble_jingle_factory_constructed (GObject *obj) if (parent->constructed != NULL) parent->constructed (obj); - gabble_signal_connect_weak (priv->conn, "status-changed", - (GCallback) connection_status_changed_cb, G_OBJECT (self)); gabble_signal_connect_weak (priv->conn, "porter-available", (GCallback) connection_porter_available_cb, G_OBJECT (self)); @@ -248,57 +244,6 @@ gabble_jingle_factory_new ( } static void -connection_status_changed_cb (GabbleConnection *conn, - guint status, - guint reason, - GabbleJingleFactory *self) -{ - GabbleJingleFactoryPrivate *priv = self->priv; - - switch (status) - { - case TP_CONNECTION_STATUS_CONNECTING: - g_assert (priv->conn != NULL); - break; - - case TP_CONNECTION_STATUS_CONNECTED: - { - gchar *stun_server = NULL; - guint stun_port = 0; - - g_object_get (priv->conn, - "stun-server", &stun_server, - "stun-port", &stun_port, - NULL); - - if (stun_server != NULL) - gabble_jingle_info_take_stun_server (priv->jingle_info, - stun_server, stun_port, FALSE); - - g_object_get (priv->conn, - "fallback-stun-server", &stun_server, - "fallback-stun-port", &stun_port, - NULL); - - if (stun_server != NULL) - gabble_jingle_info_take_stun_server (priv->jingle_info, - stun_server, stun_port, TRUE); - - if (priv->conn->features & - GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO) - { - gabble_jingle_info_send_request (priv->jingle_info); - } - } - break; - - case TP_CONNECTION_STATUS_DISCONNECTED: - gabble_jingle_factory_stop (self); - break; - } -} - -static void connection_porter_available_cb ( GabbleConnection *conn, WockyPorter *porter, diff --git a/src/jingle-mint.c b/src/jingle-mint.c index aa6d08d47..dcd525794 100644 --- a/src/jingle-mint.c +++ b/src/jingle-mint.c @@ -51,6 +51,11 @@ enum PROP_CONNECTION = 1, }; +static void connection_status_changed_cb ( + GabbleConnection *conn, + guint status, + guint reason, + gpointer user_data); static void factory_new_session_cb ( GabbleJingleFactory *factory, GabbleJingleSession *session, @@ -117,6 +122,9 @@ gabble_jingle_mint_constructed (GObject *object) if (parent_class->constructed != NULL) parent_class->constructed (object); + tp_g_signal_connect_object (priv->conn, "status-changed", + (GCallback) connection_status_changed_cb, self, 0); + priv->factory = gabble_jingle_factory_new (priv->conn); tp_g_signal_connect_object (priv->factory, "new-session", (GCallback) factory_new_session_cb, self, 0); @@ -171,6 +179,61 @@ gabble_jingle_mint_new ( } static void +connection_status_changed_cb ( + GabbleConnection *conn, + guint status, + guint reason, + gpointer user_data) +{ + GabbleJingleMint *self = GABBLE_JINGLE_MINT (user_data); + GabbleJingleMintPrivate *priv = self->priv; + + switch (status) + { + case TP_CONNECTION_STATUS_CONNECTING: + g_assert (priv->conn != NULL); + break; + + case TP_CONNECTION_STATUS_CONNECTED: + { + GabbleJingleInfo *info = gabble_jingle_mint_get_info (self); + gchar *stun_server = NULL; + guint stun_port = 0; + + g_object_get (priv->conn, + "stun-server", &stun_server, + "stun-port", &stun_port, + NULL); + + if (stun_server != NULL) + gabble_jingle_info_take_stun_server (info, + stun_server, stun_port, FALSE); + + g_object_get (priv->conn, + "fallback-stun-server", &stun_server, + "fallback-stun-port", &stun_port, + NULL); + + if (stun_server != NULL) + gabble_jingle_info_take_stun_server (info, + stun_server, stun_port, TRUE); + + if (priv->conn->features & + GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO) + { + gabble_jingle_info_send_request (info); + } + } + break; + + case TP_CONNECTION_STATUS_DISCONNECTED: + if (priv->factory != NULL) + gabble_jingle_factory_stop (priv->factory); + break; + } +} + +static void factory_new_session_cb ( GabbleJingleFactory *factory, GabbleJingleSession *session, |