telepathy-mission-control: Remove the concept of binding accounts to transports

Simon McVittie smcv at kemper.freedesktop.org
Wed Sep 4 05:38:35 PDT 2013


Module: telepathy-mission-control
Branch: master
Commit: 957795838715b3b95f2bf8bc116b2328bf6a2881
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=957795838715b3b95f2bf8bc116b2328bf6a2881

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Thu Aug 29 15:38:53 2013 +0100

Remove the concept of binding accounts to transports

We only have one transport now, so there are two options: either the
account is a special one that "needs dispatch" and also bypasses the
transport check (in practice this means cellular accounts), or it is
connected via the Internet.

Binding accounts to transports never made a vast amount of sense. If we
have many parallel Internet connections (e.g. wired + wifi + cellular +
VPN), Mission Control can't know which one a Connection is relying on -
only the connection manager can know that - so we have to err on the
side of disconnecting everything on a connectivity change anyway.

A possible refinement in future Tp versions would be a way for a CM
to tell MC "this connection does its own connectivity-monitoring,
so don't kick it when we get disconnected". For now, we assume that
everything needs the Internet, unless it's one of the accounts that
wouldn't previously have been bound to a connection (i.e.
_mcd_account_needs_dispatch() returns FALSE).

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=68712
Signed-off-by: Simon McVittie <simon.mcvittie at collabora.co.uk>
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 src/kludge-transport.c      |    2 -
 src/mcd-account-priv.h      |    2 -
 src/mcd-account.c           |   54 +-----------------------------------------
 src/mcd-connection-plugin.h |    2 -
 src/mcd-master.c            |   20 +++++----------
 5 files changed, 9 insertions(+), 71 deletions(-)

diff --git a/src/kludge-transport.c b/src/kludge-transport.c
index 4a0dd9c..47b6cc0 100644
--- a/src/kludge-transport.c
+++ b/src/kludge-transport.c
@@ -196,7 +196,6 @@ monitor_state_changed_cb (
        */
       DEBUG ("telling %s to %s", mcd_account_get_unique_name (account),
           connected ? "proceed" : "give up");
-      mcd_account_connection_bind_transport (account, (McdTransport *) self);
       mcd_account_connection_proceed_with_reason (account, connected,
           connected ? TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED
                     : TP_CONNECTION_STATUS_REASON_NETWORK_ERROR);
@@ -223,7 +222,6 @@ mcd_kludge_transport_account_connection_cb (
 
   if (mcd_connectivity_monitor_is_online (priv->minotaur))
     {
-      mcd_account_connection_bind_transport (account, (McdTransport *) self);
       mcd_account_connection_proceed (account, TRUE);
     }
   else if (g_hash_table_lookup (priv->pending_accounts, account) == NULL)
diff --git a/src/mcd-account-priv.h b/src/mcd-account-priv.h
index e80eb99..9063b1a 100644
--- a/src/mcd-account-priv.h
+++ b/src/mcd-account-priv.h
@@ -121,8 +121,6 @@ _mcd_account_write_conf (McdAccount *account)
 G_GNUC_INTERNAL void _mcd_account_connection_begin (McdAccount *account,
                                                     gboolean user_initiated);
 G_GNUC_INTERNAL void _mcd_account_connection_class_init (McdAccountClass *klass);
-G_GNUC_INTERNAL McdTransport *_mcd_account_connection_get_transport
-    (McdAccount *account);
 
 extern const McdDBusProp account_channelrequests_properties[];
 
diff --git a/src/mcd-account.c b/src/mcd-account.c
index 5faf104..012367f 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -128,7 +128,6 @@ struct _McdAccountPrivate
     McdStorage *storage;
     TpDBusDaemon *dbus_daemon;
 
-    McdTransport *transport;
     McdAccountConnectionContext *connection_context;
     GKeyFile *keyfile;		/* configuration file */
     McpAccountStorage *storage_plugin;
@@ -175,6 +174,8 @@ struct _McdAccountPrivate
     gboolean setting_avatar;
 
     gboolean hidden;
+    /* In addition to affecting dispatching, this flag also makes this
+     * account bypass connectivity checks. */
     gboolean always_dispatch;
 
     /* These fields are used to cache the changed properties */
@@ -5016,7 +5017,6 @@ _mcd_account_set_connection (McdAccount *account, McdConnection *connection)
     else
     {
         priv->conn_status = TP_CONNECTION_STATUS_DISCONNECTED;
-        priv->transport = NULL;
     }
 }
 
@@ -5041,56 +5041,6 @@ _mcd_account_set_has_been_online (McdAccount *account)
     }
 }
 
-/**
- * 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));
-
-    if (transport == account->priv->transport)
-    {
-        DEBUG ("account %s transport remains %p",
-               account->priv->unique_name, transport);
-    }
-    else if (transport == NULL)
-    {
-        DEBUG ("unbinding account %s from transport %p",
-               account->priv->unique_name, account->priv->transport);
-        account->priv->transport = NULL;
-    }
-    else if (account->priv->transport == NULL)
-    {
-        DEBUG ("binding account %s to transport %p",
-               account->priv->unique_name, transport);
-
-        account->priv->transport = transport;
-    }
-    else
-    {
-        DEBUG ("disallowing migration of account %s from transport %p to %p",
-               account->priv->unique_name, account->priv->transport,
-               transport);
-    }
-}
-
-McdTransport *
-_mcd_account_connection_get_transport (McdAccount *account)
-{
-    g_return_val_if_fail (MCD_IS_ACCOUNT (account), NULL);
-
-    return account->priv->transport;
-}
-
 McdAccountConnectionContext *
 _mcd_account_get_connection_context (McdAccount *self)
 {
diff --git a/src/mcd-connection-plugin.h b/src/mcd-connection-plugin.h
index 3ab255b..1e070e4 100644
--- a/src/mcd-connection-plugin.h
+++ b/src/mcd-connection-plugin.h
@@ -37,8 +37,6 @@ G_BEGIN_DECLS
 void mcd_account_connection_proceed (McdAccount *account, gboolean success);
 void mcd_account_connection_proceed_with_reason
     (McdAccount *account, gboolean success, TpConnectionStatusReason reason);
-void mcd_account_connection_bind_transport (McdAccount *account,
-                                            McdTransport *transport);
 gboolean mcd_account_connection_is_user_initiated (McdAccount *account);
 
 #define MCD_ACCOUNT_CONNECTION_PRIORITY_POLICY 10000
diff --git a/src/mcd-master.c b/src/mcd-master.c
index b5b8f7b..7d1dca0 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -152,7 +152,6 @@ mcd_master_transport_connected (McdMaster *master, McdTransportPlugin *plugin,
         DEBUG ("account %s would like to connect",
                mcd_account_get_unique_name (account));
         _mcd_account_connect_with_auto_presence (account, FALSE);
-        mcd_account_connection_bind_transport (account, transport);
     }
 }
 
@@ -174,7 +173,13 @@ mcd_master_transport_disconnected (McdMaster *master, McdTransportPlugin *plugin
     {
         McdAccount *account = MCD_ACCOUNT (v);
 
-        if (transport == _mcd_account_connection_get_transport (account))
+        if (_mcd_account_needs_dispatch (account))
+        {
+            /* special treatment for cellular accounts */
+            DEBUG ("account %s is always dispatched and does not need a "
+                   "transport", mcd_account_get_unique_name (account));
+        }
+        else
         {
             McdConnection *connection;
 
@@ -183,16 +188,6 @@ mcd_master_transport_disconnected (McdMaster *master, McdTransportPlugin *plugin
             connection = mcd_account_get_connection (account);
             if (connection)
                 mcd_connection_close (connection);
-            mcd_account_connection_bind_transport (account, NULL);
-
-            /* it may be that there is another transport to which the account
-             * can reconnect */
-            if (_mcd_master_account_replace_transport (master, account))
-            {
-                DEBUG ("conditions matched");
-                _mcd_account_connect_with_auto_presence (account, FALSE);
-            }
-
         }
     }
 }
@@ -615,7 +610,6 @@ _mcd_master_account_replace_transport (McdMaster *master,
             if (status != MCD_TRANSPORT_STATUS_CONNECTED)
                 continue;
 
-            mcd_account_connection_bind_transport (account, transport);
             connected = TRUE;
             break;
         }



More information about the telepathy-commits mailing list