[Telepathy-commits] [telepathy-mission-control/master] Add mcd_account_connection_bind_transport

Alberto Mardegan alberto.mardegan at nokia.com
Tue Feb 24 01:15:07 PST 2009


---
 src/mcd-account-connection.c |   27 +++++++++++++++++++++++++++
 src/mcd-connection-plugin.h  |    7 +++++++
 src/mcd-master.c             |   20 ++++----------------
 3 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/src/mcd-account-connection.c b/src/mcd-account-connection.c
index 1989c81..b7213ed 100644
--- a/src/mcd-account-connection.c
+++ b/src/mcd-account-connection.c
@@ -122,6 +122,33 @@ mcd_account_connection_proceed (McdAccount *account, gboolean success)
     }
 }
 
+/**
+ * mcd_account_connection_bind_transport:
+ * @account: the #McdAccount.
+ * @transport: the #McdTransport.
+ *
+ * Set @account as dependent on @transport; connectivity plugins should call
+ * this function in the callback they registered with
+ * mcd_plugin_register_account_connection(). This tells the account manager to
+ * disconnect @account when @transport goes away.
+ */
+void
+mcd_account_connection_bind_transport (McdAccount *account,
+                                       McdTransport *transport)
+{
+    g_return_if_fail (MCD_IS_ACCOUNT (account));
+
+    g_object_set_data ((GObject *)account, "transport", transport);
+}
+
+McdTransport *
+_mcd_account_connection_get_transport (McdAccount *account)
+{
+    g_return_val_if_fail (MCD_IS_ACCOUNT (account), NULL);
+
+    return g_object_get_data ((GObject *)account, "transport");
+}
+
 inline void
 _mcd_account_connection_class_init (McdAccountClass *klass)
 {
diff --git a/src/mcd-connection-plugin.h b/src/mcd-connection-plugin.h
index 4cd719f..80f3d8b 100644
--- a/src/mcd-connection-plugin.h
+++ b/src/mcd-connection-plugin.h
@@ -29,12 +29,15 @@
 #include <glib.h>
 #include <glib-object.h>
 #include "mcd-plugin.h"
+#include "mcd-transport.h"
 
 G_BEGIN_DECLS
 
 typedef void (*McdAccountConnectionFunc) (McdAccount *account, GHashTable *parameters, gpointer userdata);
 
 void mcd_account_connection_proceed (McdAccount *account, gboolean success);
+void mcd_account_connection_bind_transport (McdAccount *account,
+                                            McdTransport *transport);
 
 #define MCD_ACCOUNT_CONNECTION_PRIORITY_POLICY 10000
 #define MCD_ACCOUNT_CONNECTION_PRIORITY_TRANSPORT 20000
@@ -45,6 +48,10 @@ void mcd_plugin_register_account_connection (McdPlugin *plugin,
 					     gint priority,
 					     gpointer userdata);
 
+/* not exported */
+G_GNUC_INTERNAL
+McdTransport *_mcd_account_connection_get_transport (McdAccount *account);
+
 G_END_DECLS
 
 #endif /* __MCD_CONNECTION_PLUGIN_H__ */
diff --git a/src/mcd-master.c b/src/mcd-master.c
index 77552d9..534e3fc 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -129,18 +129,6 @@ typedef struct {
 static McdMaster *default_master = NULL;
 
 
-static inline void
-set_account_transport (McdAccount *account, McdTransport *transport)
-{
-    g_object_set_data ((GObject *)account, "transport", transport);
-}
-
-static inline McdTransport *
-get_account_transport (McdAccount *account)
-{
-    return g_object_get_data ((GObject *)account, "transport");
-}
-
 static void
 check_account_transport (gpointer key, gpointer value, gpointer userdata)
 {
@@ -166,7 +154,7 @@ check_account_transport (gpointer key, gpointer value, gpointer userdata)
 	g_debug ("conditions matched");
         _mcd_account_request_connection (account);
         if (g_hash_table_size (conditions) > 0)
-            set_account_transport (account, td->transport);
+            mcd_account_connection_bind_transport (account, td->transport);
     }
     g_hash_table_unref (conditions);
 }
@@ -195,7 +183,7 @@ disconnect_account_transport (gpointer key, gpointer value, gpointer userdata)
     McdAccount *account = MCD_ACCOUNT (value);
     TransportData *td = userdata;
 
-    if (td->transport == get_account_transport (account))
+    if (td->transport == _mcd_account_connection_get_transport (account))
     {
         McdConnection *connection;
 
@@ -204,7 +192,7 @@ disconnect_account_transport (gpointer key, gpointer value, gpointer userdata)
         connection = mcd_account_get_connection (account);
         if (connection)
             mcd_connection_close (connection);
-	set_account_transport (account, NULL);
+	mcd_account_connection_bind_transport (account, NULL);
 
         /* it may be that there is another transport to which the account can
          * reconnect */
@@ -1324,7 +1312,7 @@ _mcd_master_account_conditions_satisfied (McdMaster *master,
                     mcd_transport_plugin_check_conditions (plugin, transport,
                                                            conditions))
                 {
-                    set_account_transport (account, transport);
+                    mcd_account_connection_bind_transport (account, transport);
                     ret = TRUE;
                     goto finish;
                 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list