[Telepathy-commits] [telepathy-gabble/master] conn-requests: segregate channel factories and channel managers
Simon McVittie
simon.mcvittie at collabora.co.uk
Wed Aug 20 06:06:13 PDT 2008
20080729161705-53eee-75cf89c369ac890be7054418b01b368739b8e895.gz
---
src/conn-requests.c | 40 ++++++++++++++++++++++++++--------------
src/connection.c | 6 ++++--
src/connection.h | 1 +
3 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/src/conn-requests.c b/src/conn-requests.c
index 3f6fc22..4667f66 100644
--- a/src/conn-requests.c
+++ b/src/conn-requests.c
@@ -314,10 +314,10 @@ conn_requests_request_channel (TpSvcConnection *iface,
type, handle_type, handle, suppress_handler);
g_ptr_array_add (self->channel_requests, request);
- for (i = 0; i < self->channel_managers->len; i++)
+ for (i = 0; i < self->channel_factories->len; i++)
{
TpChannelFactoryIface *factory = g_ptr_array_index (
- self->channel_managers, i);
+ self->channel_factories, i);
TpChannelFactoryRequestStatus cur_status;
TpChannelIface *chan = NULL;
@@ -410,7 +410,7 @@ connection_status_changed (GabbleConnection *self,
if (status == TP_CONNECTION_STATUS_DISCONNECTED)
{
/* trigger close_all on all channel factories */
- g_ptr_array_foreach (self->channel_managers,
+ g_ptr_array_foreach (self->channel_factories,
(GFunc) tp_channel_factory_iface_close_all, NULL);
if (self->channel_requests->len > 0)
@@ -426,19 +426,19 @@ connection_status_changed (GabbleConnection *self,
{
case TP_CONNECTION_STATUS_CONNECTING:
self->has_tried_connection = TRUE;
- g_ptr_array_foreach (self->channel_managers,
+ g_ptr_array_foreach (self->channel_factories,
(GFunc) tp_channel_factory_iface_connecting, NULL);
break;
case TP_CONNECTION_STATUS_CONNECTED:
self->has_tried_connection = TRUE;
- g_ptr_array_foreach (self->channel_managers,
+ g_ptr_array_foreach (self->channel_factories,
(GFunc) tp_channel_factory_iface_connected, NULL);
break;
case TP_CONNECTION_STATUS_DISCONNECTED:
if (self->has_tried_connection)
- g_ptr_array_foreach (self->channel_managers,
+ g_ptr_array_foreach (self->channel_factories,
(GFunc) tp_channel_factory_iface_disconnected, NULL);
break;
@@ -491,12 +491,13 @@ conn_requests_list_channels (TpSvcConnection *iface,
context);
/* I think on average, each factory will have 2 channels :D */
- values = g_ptr_array_sized_new (self->channel_managers->len * 2);
+ values = g_ptr_array_sized_new (self->channel_factories->len * 2
+ + self->channel_managers->len * 2);
- for (i = 0; i < self->channel_managers->len; i++)
+ for (i = 0; i < self->channel_factories->len; i++)
{
TpChannelFactoryIface *factory = g_ptr_array_index
- (self->channel_managers, i);
+ (self->channel_factories, i);
tp_channel_factory_iface_foreach (factory,
list_channel_factory_foreach_one, values);
@@ -546,25 +547,36 @@ gabble_conn_requests_init (GabbleConnection *self)
self->channel_requests = g_ptr_array_new ();
+ g_assert (self->channel_factories != NULL);
g_assert (self->channel_managers != NULL);
- for (i = 0; i < self->channel_managers->len; i++)
+ for (i = 0; i < self->channel_factories->len; i++)
{
- GObject *manager = g_ptr_array_index (self->channel_managers, i);
+ GObject *factory = g_ptr_array_index (self->channel_factories, i);
- g_assert (TP_IS_CHANNEL_FACTORY_IFACE (manager));
+ g_assert (TP_IS_CHANNEL_FACTORY_IFACE (factory));
- g_signal_connect (manager, "new-channel",
+ g_signal_connect (factory, "new-channel",
(GCallback) connection_new_channel_cb, self);
- g_signal_connect (manager, "channel-error",
+ g_signal_connect (factory, "channel-error",
(GCallback) connection_channel_error_cb, self);
}
+
+ g_assert (self->channel_managers->len == 0);
}
void
gabble_conn_requests_dispose (GabbleConnection *self)
{
+ if (self->channel_factories != NULL)
+ {
+ g_ptr_array_foreach (self->channel_factories, (GFunc) g_object_unref,
+ NULL);
+ g_ptr_array_free (self->channel_factories, TRUE);
+ self->channel_factories = NULL;
+ }
+
if (self->channel_managers != NULL)
{
g_ptr_array_foreach (self->channel_managers, (GFunc) g_object_unref,
diff --git a/src/connection.c b/src/connection.c
index f0faccf..9fec211 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -211,8 +211,10 @@ _gabble_connection_create_channel_factories (TpBaseConnection *conn)
self->private_tubes_factory = gabble_private_tubes_factory_new (self);
g_ptr_array_add (channel_factories, self->private_tubes_factory);
- /* Temporary hack for requestotron support */
- self->channel_managers = channel_factories;
+ /* Temporary hack for requestotron support - divert the channel factories
+ * and channel managers to somewhere under our control */
+ self->channel_factories = channel_factories;
+ self->channel_managers = g_ptr_array_sized_new (0);
channel_factories = g_ptr_array_sized_new (0);
return channel_factories;
diff --git a/src/connection.h b/src/connection.h
index 21ee6b3..65af30c 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -145,6 +145,7 @@ struct _GabbleConnection {
GHashTable *avatar_requests;
/* temporary, for requestotron support */
+ GPtrArray *channel_factories;
GPtrArray *channel_managers;
GPtrArray *channel_requests;
gboolean has_tried_connection;
--
1.5.6.3
More information about the Telepathy-commits
mailing list