summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2012-02-17 17:55:21 +0000
committerWill Thompson <will.thompson@collabora.co.uk>2012-02-23 12:46:25 +0000
commitad631083a88dfdea01b2a9957eeff9594a97ed7b (patch)
treec919e56424d406e8c4f9e9be193902f598ba2a4f
parentb6ff8bff994babae4afb0e00b8d388b2c37cff8b (diff)
JingleFactory: move connection status monitoring to Mint
-rw-r--r--src/jingle-factory.c55
-rw-r--r--src/jingle-mint.c63
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,