[Pkg-telepathy-commits] [telepathy-mission-control-6] 19/280: McdConnection: refuse to deal with pre-Requests connections
Simon McVittie
smcv at debian.org
Thu Mar 27 20:07:00 UTC 2014
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to branch debian
in repository telepathy-mission-control-6.
commit f301252aca8d0635929b60af5b259b3ac1c8fde5
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date: Wed Sep 25 19:38:05 2013 +0100
McdConnection: refuse to deal with pre-Requests connections
If it implements Requests, all is good; if it doesn't, just
disconnect it before it can cause trouble (e.g. new channels
turning up and not being dispatched correctly).
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69856
Reviewed-by: Xavier Claessens <xavier.claessens at collabora.co.uk>
---
src/mcd-connection.c | 143 ++++++-------------
tests/twisted/account-manager/device-idle.py | 2 +-
tests/twisted/constants.py | 1 +
tests/twisted/dispatcher/already-has-obsolete.py | 107 +--------------
tests/twisted/dispatcher/connect-for-request.py | 2 +-
.../dispatcher/dispatch-before-connected.py | 2 +-
tests/twisted/dispatcher/dispatch-obsolete.py | 152 +--------------------
tests/twisted/mctest.py | 9 --
8 files changed, 55 insertions(+), 363 deletions(-)
diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index fd582ec..c04b63c 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -174,7 +174,8 @@ static const gchar * const *presence_fallbacks[] = {
};
static void _mcd_connection_release_tp_connection (McdConnection *connection,
- McdInhibit *inhibit);
+ McdInhibit *inhibit,
+ gboolean already_signalled);
static gboolean request_channel_new_iface (McdConnection *connection,
McdChannel *channel);
@@ -488,40 +489,6 @@ _mcd_connection_request_presence (McdConnection *self,
}
static void
-on_new_channel (TpConnection *proxy, const gchar *chan_obj_path,
- const gchar *chan_type, guint handle_type, guint handle,
- gboolean suppress_handler, gpointer user_data,
- GObject *weak_object)
-{
- McdConnection *connection = MCD_CONNECTION (weak_object);
- McdConnectionPrivate *priv = user_data;
- McdChannel *channel;
-
- DEBUG ("%s (t=%s, ht=%u, h=%u, suppress=%c)",
- chan_obj_path, chan_type, handle_type, handle,
- suppress_handler ? 'T' : 'F');
-
- if (priv->dispatched_initial_channels)
- {
- channel = mcd_channel_new_from_path (proxy,
- chan_obj_path,
- chan_type, handle, handle_type);
- if (G_UNLIKELY (!channel)) return;
- mcd_operation_take_mission (MCD_OPERATION (connection),
- MCD_MISSION (channel));
-
- /* MC no longer calls RequestChannel. As a result, if suppress_handler
- * is TRUE, we know that this channel was requested "behind our back",
- * therefore we should call ObserveChannels, but refrain from calling
- * AddDispatchOperation or HandleChannels.
- *
- * We assume that channels without suppress_handler are incoming. */
- _mcd_dispatcher_add_channel (priv->dispatcher, channel,
- suppress_handler, suppress_handler);
- }
-}
-
-static void
_foreach_channel_remove (McdMission * mission, McdOperation * operation)
{
g_assert (MCD_IS_MISSION (mission));
@@ -739,7 +706,7 @@ mcd_connection_invalidated_cb (TpConnection *tp_conn,
DEBUG ("Proxy destroyed (%s)!", message);
- _mcd_connection_release_tp_connection (connection, NULL);
+ _mcd_connection_release_tp_connection (connection, NULL, FALSE);
if (priv->connected &&
priv->abort_reason != TP_CONNECTION_STATUS_REASON_REQUESTED &&
@@ -1084,65 +1051,6 @@ mcd_connection_setup_requests (McdConnection *connection)
}
static void
-list_channels_cb (TpConnection *connection,
- const GPtrArray *structs,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- McdConnection *self = MCD_CONNECTION (weak_object);
- guint i;
-
- if (error)
- {
- g_warning ("ListChannels got error: %s", error->message);
- return;
- }
-
- for (i = 0; i < structs->len; i++)
- {
- GValueArray *va = g_ptr_array_index (structs, i);
- const gchar *object_path;
- GHashTable *channel_props;
-
- object_path = g_value_get_boxed (va->values + 0);
-
- DEBUG ("%s (t=%s, ht=%u, h=%u)",
- object_path,
- g_value_get_string (va->values + 1),
- g_value_get_uint (va->values + 2),
- g_value_get_uint (va->values + 3));
-
- /* this is not the most efficient thing we could possibly do, but
- * we're on a fallback path so it's OK to be a bit slow */
- channel_props = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (channel_props, TP_IFACE_CHANNEL ".ChannelType",
- va->values + 1);
- g_hash_table_insert (channel_props, TP_IFACE_CHANNEL ".TargetHandleType",
- va->values + 2);
- g_hash_table_insert (channel_props, TP_IFACE_CHANNEL ".TargetHandle",
- va->values + 3);
- mcd_connection_found_channel (self, object_path, channel_props);
- g_hash_table_unref (channel_props);
- }
-
- self->priv->dispatched_initial_channels = TRUE;
-}
-
-static void
-mcd_connection_setup_pre_requests (McdConnection *connection)
-{
- McdConnectionPrivate *priv = connection->priv;
-
- tp_cli_connection_connect_to_new_channel
- (priv->tp_conn, on_new_channel, priv, NULL,
- (GObject *)connection, NULL);
-
- tp_cli_connection_call_list_channels (priv->tp_conn, -1,
- list_channels_cb, priv, NULL, (GObject *) connection);
-}
-
-static void
on_connection_ready (GObject *source_object, GAsyncResult *result,
gpointer user_data)
{
@@ -1162,6 +1070,28 @@ on_connection_ready (GObject *source_object, GAsyncResult *result,
if (!connection)
goto finally;
+ if (!tp_proxy_has_interface_by_id (tp_conn,
+ TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS))
+ {
+ GHashTable *asv;
+
+ DEBUG ("%s: connection manager is too old",
+ tp_proxy_get_object_path (tp_conn));
+ connection->priv->abort_reason =
+ TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED;
+ asv = tp_asv_new (
+ "debug-message", G_TYPE_STRING,
+ "Connection manager does not implement Requests interface",
+ NULL);
+ g_signal_emit (connection, signals[CONNECTION_STATUS_CHANGED], 0,
+ TP_CONNECTION_STATUS_DISCONNECTED,
+ connection->priv->abort_reason,
+ tp_conn, TP_ERROR_STR_SOFTWARE_UPGRADE_REQUIRED, asv);
+ g_hash_table_unref (asv);
+ _mcd_connection_release_tp_connection (connection, NULL, TRUE);
+ goto finally;
+ }
+
DEBUG ("connection is ready");
priv = MCD_CONNECTION_PRIV (connection);
@@ -1203,11 +1133,9 @@ _mcd_connection_start_dispatching (McdConnection *self,
self->priv->dispatching_started = TRUE;
- if (tp_proxy_has_interface_by_id (self->priv->tp_conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS))
- mcd_connection_setup_requests (self);
- else
- mcd_connection_setup_pre_requests (self);
+ g_return_if_fail (tp_proxy_has_interface_by_id (self->priv->tp_conn,
+ TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS));
+ mcd_connection_setup_requests (self);
/* FIXME: why is this here? if we need to update caps before and after *
* connected, it should be in the call_when_ready callback. */
@@ -1557,13 +1485,18 @@ _mcd_connection_finalize (GObject * object)
static void
_mcd_connection_release_tp_connection (McdConnection *connection,
- McdInhibit *inhibit)
+ McdInhibit *inhibit,
+ gboolean already_signalled)
{
McdConnectionPrivate *priv = MCD_CONNECTION_PRIV (connection);
DEBUG ("%p", connection);
- if (priv->abort_reason == TP_CONNECTION_STATUS_REASON_REQUESTED)
+ if (already_signalled)
+ {
+ DEBUG ("already emitted connection-status-changed");
+ }
+ else if (priv->abort_reason == TP_CONNECTION_STATUS_REASON_REQUESTED)
{
g_signal_emit (connection, signals[CONNECTION_STATUS_CHANGED], 0,
TP_CONNECTION_STATUS_DISCONNECTED,
@@ -1676,7 +1609,7 @@ _mcd_connection_dispose (GObject * object)
mcd_operation_foreach (MCD_OPERATION (connection),
(GFunc) _foreach_channel_remove, connection);
- _mcd_connection_release_tp_connection (connection, NULL);
+ _mcd_connection_release_tp_connection (connection, NULL, FALSE);
g_assert (priv->tp_conn == NULL);
if (priv->account)
@@ -2124,7 +2057,7 @@ mcd_connection_close (McdConnection *connection,
connection->priv->closed = TRUE;
connection->priv->abort_reason = TP_CONNECTION_STATUS_REASON_REQUESTED;
- _mcd_connection_release_tp_connection (connection, inhibit);
+ _mcd_connection_release_tp_connection (connection, inhibit, FALSE);
mcd_mission_abort (MCD_MISSION (connection));
}
@@ -2258,7 +2191,7 @@ _mcd_connection_set_tp_connection (McdConnection *connection,
}
DEBUG ("releasing old connection first");
- _mcd_connection_release_tp_connection (connection, NULL);
+ _mcd_connection_release_tp_connection (connection, NULL, FALSE);
}
g_assert (priv->tp_conn == NULL);
diff --git a/tests/twisted/account-manager/device-idle.py b/tests/twisted/account-manager/device-idle.py
index 196b6a0..434544a 100644
--- a/tests/twisted/account-manager/device-idle.py
+++ b/tests/twisted/account-manager/device-idle.py
@@ -83,7 +83,7 @@ def _create_and_enable(q, bus, mc, account_name, power_saving_supported,
params = dbus.Dictionary({"account": account_name, "password": "secrecy"},
signature='sv')
cm_name_ref, account = create_fakecm_account(q, bus, mc, params)
- conn = enable_fakecm_account(q, bus, mc, account, params, has_requests=False,
+ conn = enable_fakecm_account(q, bus, mc, account, params,
extra_interfaces=extra_interfaces,
expect_after_connect=expect_after_connect)
diff --git a/tests/twisted/constants.py b/tests/twisted/constants.py
index 9976110..6bb50c7 100644
--- a/tests/twisted/constants.py
+++ b/tests/twisted/constants.py
@@ -239,6 +239,7 @@ INVALID_HANDLE = ERROR + '.InvalidHandle'
CERT_UNTRUSTED = ERROR + '.Cert.Untrusted'
SERVICE_BUSY = ERROR + '.ServiceBusy'
SERVICE_CONFUSED = ERROR + '.ServiceConfused'
+SOFTWARE_UPGRADE_REQUIRED = ERROR + '.SoftwareUpgradeRequired'
BANNED = ERROR + '.Channel.Banned'
diff --git a/tests/twisted/dispatcher/already-has-obsolete.py b/tests/twisted/dispatcher/already-has-obsolete.py
index 8788169..abc3a3c 100644
--- a/tests/twisted/dispatcher/already-has-obsolete.py
+++ b/tests/twisted/dispatcher/already-has-obsolete.py
@@ -113,109 +113,16 @@ def test(q, bus, mc):
# Now reply to GetInterfaces and say we don't have Requests
conn.GetInterfaces(get_interfaces_call)
- q.expect('dbus-method-call',
- interface=cs.CONN, method='ListChannels', args=[],
- path=conn.object_path, handled=True)
-
- # A channel dispatch operation is created for the channel we already had
-
- e = q.expect('dbus-signal',
- path=cs.CD_PATH,
- interface=cs.CD_IFACE_OP_LIST,
- signal='NewDispatchOperation')
-
- cdo_path = e.args[0]
- cdo_properties = e.args[1]
-
- assert cdo_properties[cs.CDO + '.Account'] == account.object_path
- assert cdo_properties[cs.CDO + '.Connection'] == conn.object_path
-
- handlers = cdo_properties[cs.CDO + '.PossibleHandlers'][:]
- handlers.sort()
- assert handlers == [cs.tp_name_prefix + '.Client.Empathy',
- cs.tp_name_prefix + '.Client.Kopete'], handlers
-
- assert cs.CD_IFACE_OP_LIST in cd_props.Get(cs.CD, 'Interfaces')
- assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') ==\
- [(cdo_path, cdo_properties)]
-
- cdo = bus.get_object(cs.CD, cdo_path)
- cdo_iface = dbus.Interface(cdo, cs.CDO)
-
- # Both Observers are told about the new channel
-
- e, k = q.expect_many(
- EventPattern('dbus-method-call',
- path=empathy.object_path,
- interface=cs.OBSERVER, method='ObserveChannels',
- handled=False),
- EventPattern('dbus-method-call',
- path=kopete.object_path,
- interface=cs.OBSERVER, method='ObserveChannels',
- handled=False),
- )
- assert e.args[0] == account.object_path, e.args
- assert e.args[1] == conn.object_path, e.args
- assert e.args[3] == cdo_path, e.args
- assert e.args[4] == [], e.args # no requests satisfied
- channels = e.args[2]
- assert len(channels) == 1, channels
- assert channels[0][0] == chan.object_path, channels
-
- assert k.args == e.args
-
- # Both Observers indicate that they are ready to proceed
- q.dbus_return(k.message, signature='')
- q.dbus_return(e.message, signature='')
-
- # The Approvers are next
-
- e, k = q.expect_many(
- EventPattern('dbus-method-call',
- path=empathy.object_path,
- interface=cs.APPROVER, method='AddDispatchOperation',
- handled=False),
- EventPattern('dbus-method-call',
- path=kopete.object_path,
- interface=cs.APPROVER, method='AddDispatchOperation',
- handled=False),
- )
-
- assert len(e.args) == 3
- assert len(e.args[0]) == 1
- assert e.args[0][0][0] == chan.object_path
- assert e.args[1] == cdo_path
- assert e.args[2] == cdo_properties
- assert k.args == e.args
-
- q.dbus_return(e.message, signature='')
- q.dbus_return(k.message, signature='')
-
- # Both Approvers now have a flashing icon or something, trying to get the
- # user's attention
-
- # The user responds to Empathy first
- call_async(q, cdo_iface, 'HandleWith',
- cs.tp_name_prefix + '.Client.Empathy')
-
- # Empathy is asked to handle the channels
- e = q.expect('dbus-method-call',
- path=empathy.object_path,
- interface=cs.HANDLER, method='HandleChannels',
- handled=False)
-
- # Empathy accepts the channels
- q.dbus_return(e.message, signature='')
+ # MC shoots down the connection. Goodbye!
q.expect_many(
- EventPattern('dbus-return', method='HandleWith'),
- EventPattern('dbus-signal', interface=cs.CDO, signal='Finished'),
- EventPattern('dbus-signal', interface=cs.CD_IFACE_OP_LIST,
- signal='DispatchOperationFinished'),
+ EventPattern('dbus-signal', signal='AccountPropertyChanged',
+ predicate=lambda e:
+ e.args[0].get('ConnectionError') ==
+ cs.SOFTWARE_UPGRADE_REQUIRED),
+ EventPattern('dbus-method-call', method='Disconnect',
+ handled=True),
)
- # Now there are no more active channel dispatch operations
- assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') == []
-
if __name__ == '__main__':
exec_test(test, {})
diff --git a/tests/twisted/dispatcher/connect-for-request.py b/tests/twisted/dispatcher/connect-for-request.py
index e32b520..1163752 100644
--- a/tests/twisted/dispatcher/connect-for-request.py
+++ b/tests/twisted/dispatcher/connect-for-request.py
@@ -102,7 +102,7 @@ def test(q, bus, mc):
handled=False)
conn = SimulatedConnection(q, bus, 'fakecm', 'fakeprotocol', '_',
- 'myself', has_requests=True, has_presence=True)
+ 'myself', has_presence=True)
q.dbus_return(e.message, conn.bus_name, conn.object_path, signature='so')
diff --git a/tests/twisted/dispatcher/dispatch-before-connected.py b/tests/twisted/dispatcher/dispatch-before-connected.py
index a668c19..26cfa99 100644
--- a/tests/twisted/dispatcher/dispatch-before-connected.py
+++ b/tests/twisted/dispatcher/dispatch-before-connected.py
@@ -73,7 +73,7 @@ def test(q, bus, mc):
handled=False)
conn = SimulatedConnection(q, bus, 'fakecm', 'fakeprotocol', '_',
- 'myself', has_requests=True, has_presence=True)
+ 'myself', has_presence=True)
q.dbus_return(e.message, conn.bus_name, conn.object_path, signature='so')
diff --git a/tests/twisted/dispatcher/dispatch-obsolete.py b/tests/twisted/dispatcher/dispatch-obsolete.py
index 4431631..afe5df6 100644
--- a/tests/twisted/dispatcher/dispatch-obsolete.py
+++ b/tests/twisted/dispatcher/dispatch-obsolete.py
@@ -38,154 +38,14 @@ def test(q, bus, mc):
conn = enable_fakecm_account(q, bus, mc, account, params,
has_requests=False)
- text_fixed_properties = dbus.Dictionary({
- cs.CHANNEL + '.TargetHandleType': cs.HT_CONTACT,
- cs.CHANNEL + '.ChannelType': cs.CHANNEL_TYPE_TEXT,
- }, signature='sv')
-
- # Two clients want to observe, approve and handle channels
- empathy = SimulatedClient(q, bus, 'Empathy',
- observe=[text_fixed_properties], approve=[text_fixed_properties],
- handle=[text_fixed_properties], bypass_approval=False)
- kopete = SimulatedClient(q, bus, 'Kopete',
- observe=[text_fixed_properties], approve=[text_fixed_properties],
- handle=[text_fixed_properties], bypass_approval=False)
-
- # wait for MC to download the properties
- expect_client_setup(q, [empathy, kopete])
-
- # subscribe to the OperationList interface (MC assumes that until this
- # property has been retrieved once, nobody cares)
-
- cd = bus.get_object(cs.CD, cs.CD_PATH)
- cd_props = dbus.Interface(cd, cs.PROPERTIES_IFACE)
- assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') == []
-
- channel_properties = dbus.Dictionary(text_fixed_properties,
- signature='sv')
- channel_properties[cs.CHANNEL + '.TargetID'] = 'juliet'
- channel_properties[cs.CHANNEL + '.TargetHandle'] = \
- conn.ensure_handle(cs.HT_CONTACT, 'juliet')
- channel_properties[cs.CHANNEL + '.InitiatorID'] = 'juliet'
- channel_properties[cs.CHANNEL + '.InitiatorHandle'] = \
- conn.ensure_handle(cs.HT_CONTACT, 'juliet')
- channel_properties[cs.CHANNEL + '.Requested'] = False
- channel_properties[cs.CHANNEL + '.Interfaces'] = dbus.Array(signature='s')
-
- chan = SimulatedChannel(conn, channel_properties)
- chan.announce()
-
- # A channel dispatch operation is created
-
- e = q.expect('dbus-signal',
- path=cs.CD_PATH,
- interface=cs.CD_IFACE_OP_LIST,
- signal='NewDispatchOperation')
-
- cdo_path = e.args[0]
- cdo_properties = e.args[1]
-
- assert cdo_properties[cs.CDO + '.Account'] == account.object_path
- assert cdo_properties[cs.CDO + '.Connection'] == conn.object_path
- assert cs.CDO + '.Interfaces' in cdo_properties
-
- handlers = cdo_properties[cs.CDO + '.PossibleHandlers'][:]
- handlers.sort()
- assert handlers == [cs.tp_name_prefix + '.Client.Empathy',
- cs.tp_name_prefix + '.Client.Kopete'], handlers
-
- assert cs.CD_IFACE_OP_LIST in cd_props.Get(cs.CD, 'Interfaces')
- assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') ==\
- [(cdo_path, cdo_properties)]
-
- cdo = bus.get_object(cs.CD, cdo_path)
- cdo_iface = dbus.Interface(cdo, cs.CDO)
-
- # Both Observers are told about the new channel
-
- e, k = q.expect_many(
- EventPattern('dbus-method-call',
- path=empathy.object_path,
- interface=cs.OBSERVER, method='ObserveChannels',
- handled=False),
- EventPattern('dbus-method-call',
- path=kopete.object_path,
- interface=cs.OBSERVER, method='ObserveChannels',
- handled=False),
- )
- assert e.args[0] == account.object_path, e.args
- assert e.args[1] == conn.object_path, e.args
- assert e.args[3] == cdo_path, e.args
- assert e.args[4] == [], e.args # no requests satisfied
- channels = e.args[2]
- assert len(channels) == 1, channels
- assert channels[0][0] == chan.object_path, channels
- # the announced channel properties are some subset of what it actually has
- for key in channels[0][1]:
- assert channel_properties[key] == channels[0][1][key], key
- assert cs.CHANNEL + '.TargetHandleType' in channels[0][1]
- assert cs.CHANNEL + '.ChannelType' in channels[0][1]
- assert cs.CHANNEL + '.TargetHandle' in channels[0][1]
-
- assert k.args == e.args
-
- # Both Observers indicate that they are ready to proceed
- q.dbus_return(k.message, signature='')
- q.dbus_return(e.message, signature='')
-
- # The Approvers are next
-
- e, k = q.expect_many(
- EventPattern('dbus-method-call',
- path=empathy.object_path,
- interface=cs.APPROVER, method='AddDispatchOperation',
- handled=False),
- EventPattern('dbus-method-call',
- path=kopete.object_path,
- interface=cs.APPROVER, method='AddDispatchOperation',
- handled=False),
- )
-
- assert e.args[1:] == [cdo_path, cdo_properties]
- channels = e.args[0]
- assert len(channels) == 1, channels
- assert channels[0][0] == chan.object_path, channels
- # the announced channel properties are some subset of what it actually has
- for key in channels[0][1]:
- assert channel_properties[key] == channels[0][1][key], key
- assert cs.CHANNEL + '.TargetHandleType' in channels[0][1]
- assert cs.CHANNEL + '.ChannelType' in channels[0][1]
- assert cs.CHANNEL + '.TargetHandle' in channels[0][1]
- assert k.args == e.args
-
- q.dbus_return(e.message, signature='')
- q.dbus_return(k.message, signature='')
-
- # Both Approvers now have a flashing icon or something, trying to get the
- # user's attention
-
- # The user responds to Empathy first
- call_async(q, cdo_iface, 'HandleWith',
- cs.tp_name_prefix + '.Client.Empathy')
-
- # Empathy is asked to handle the channels
- e = q.expect('dbus-method-call',
- path=empathy.object_path,
- interface=cs.HANDLER, method='HandleChannels',
- handled=False)
-
- # Empathy accepts the channels
- q.dbus_return(e.message, signature='')
-
q.expect_many(
- EventPattern('dbus-return', method='HandleWith'),
- EventPattern('dbus-signal', interface=cs.CDO, signal='Finished'),
- EventPattern('dbus-signal', interface=cs.CD_IFACE_OP_LIST,
- signal='DispatchOperationFinished'),
+ EventPattern('dbus-signal', signal='AccountPropertyChanged',
+ predicate=lambda e:
+ e.args[0].get('ConnectionError') ==
+ cs.SOFTWARE_UPGRADE_REQUIRED),
+ EventPattern('dbus-method-call', method='Disconnect',
+ handled=True),
)
- # Now there are no more active channel dispatch operations
- assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') == []
-
if __name__ == '__main__':
exec_test(test, {})
diff --git a/tests/twisted/mctest.py b/tests/twisted/mctest.py
index de75aba..0d1bd03 100644
--- a/tests/twisted/mctest.py
+++ b/tests/twisted/mctest.py
@@ -1047,17 +1047,8 @@ def expect_fakecm_connection(q, bus, mc, account, expected_params,
expect_after_connect = list(expect_after_connect)
- if not has_requests:
- expect_after_connect.append(
- servicetest.EventPattern('dbus-method-call',
- interface=cs.CONN, method='ListChannels', args=[],
- path=conn.object_path, handled=True))
-
events = events + list(q.expect_many(*expect_after_connect))
- if not has_requests:
- del events[-1]
-
if events:
return (conn,) + tuple(events)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-mission-control-6.git
More information about the Pkg-telepathy-commits
mailing list