[telepathy-salut/master] factor out handle_tube_channel_request
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Jun 26 07:28:18 PDT 2009
---
src/salut-muc-manager.c | 107 +++++++++++++++++++++++++++--------------------
1 files changed, 62 insertions(+), 45 deletions(-)
diff --git a/src/salut-muc-manager.c b/src/salut-muc-manager.c
index 8050974..c66d2c6 100644
--- a/src/salut-muc-manager.c
+++ b/src/salut-muc-manager.c
@@ -730,6 +730,66 @@ create_tubes_channel (SalutMucManager *self,
}
static gboolean
+handle_tube_channel_request (SalutMucManager *self,
+ gpointer request_token,
+ GHashTable *request_properties,
+ gboolean require_new,
+ TpHandle handle,
+ GError **error)
+{
+ SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (self);
+ TpBaseConnection *base_conn = (TpBaseConnection *) priv->connection;
+ SalutMucChannel *text_chan;
+ SalutTubesChannel *tubes_chan;
+ SalutTubeIface *new_channel;
+ GHashTable *channels;
+ GSList *request_tokens;
+ gboolean announce_text = FALSE, announce_tubes = FALSE;
+
+ tubes_chan = g_hash_table_lookup (priv->tubes_channels,
+ GUINT_TO_POINTER (handle));
+ if (tubes_chan == NULL)
+ {
+ tubes_chan = create_tubes_channel (self, handle,
+ base_conn->self_handle, NULL, FALSE, &announce_text,
+ FALSE, error);
+ if (tubes_chan == NULL)
+ return FALSE;
+ announce_tubes = TRUE;
+ }
+
+ g_assert (tubes_chan != NULL);
+ new_channel = salut_tubes_channel_tube_request (tubes_chan, request_token,
+ request_properties, require_new);
+ g_assert (new_channel != NULL);
+
+ /* announce channels */
+ channels = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL, NULL);
+
+ if (announce_text)
+ {
+ text_chan = g_hash_table_lookup (priv->text_channels,
+ GINT_TO_POINTER (handle));
+ g_assert (text_chan != NULL);
+ g_hash_table_insert (channels, text_chan, NULL);
+ }
+
+ if (announce_tubes)
+ {
+ g_hash_table_insert (channels, tubes_chan, NULL);
+ }
+
+ request_tokens = g_slist_prepend (NULL, request_token);
+ g_hash_table_insert (channels, new_channel, request_tokens);
+ tp_channel_manager_emit_new_channels (self, channels);
+
+ g_hash_table_destroy (channels);
+ g_slist_free (request_tokens);
+ return TRUE;
+}
+
+static gboolean
salut_muc_manager_request (SalutMucManager *self,
gpointer request_token,
GHashTable *request_properties,
@@ -830,10 +890,6 @@ salut_muc_manager_request (SalutMucManager *self,
else if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE))
{
const gchar *service;
- SalutTubeIface *new_channel;
- GHashTable *channels;
- GSList *request_tokens;
- gboolean announce_text = FALSE, announce_tubes = FALSE;
if (tp_channel_manager_asv_has_unknown_properties (request_properties,
muc_tubes_channel_fixed_properties,
@@ -852,47 +908,8 @@ salut_muc_manager_request (SalutMucManager *self,
goto error;
}
- tubes_chan = g_hash_table_lookup (priv->tubes_channels,
- GUINT_TO_POINTER (handle));
- if (tubes_chan == NULL)
- {
- tubes_chan = create_tubes_channel (self, handle,
- base_conn->self_handle, NULL, FALSE, &announce_text,
- FALSE, &error);
- if (tubes_chan == NULL)
- goto error;
- announce_tubes = TRUE;
- }
-
- g_assert (tubes_chan != NULL);
- new_channel = salut_tubes_channel_tube_request (tubes_chan, request_token,
- request_properties, require_new);
- g_assert (new_channel != NULL);
-
- /* announce channels */
- channels = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL, NULL);
-
- if (announce_text)
- {
- text_chan = g_hash_table_lookup (priv->text_channels,
- GINT_TO_POINTER (handle));
- g_assert (text_chan != NULL);
- g_hash_table_insert (channels, text_chan, NULL);
- }
-
- if (announce_tubes)
- {
- g_hash_table_insert (channels, tubes_chan, NULL);
- }
-
- request_tokens = g_slist_prepend (NULL, request_token);
- g_hash_table_insert (channels, new_channel, request_tokens);
- tp_channel_manager_emit_new_channels (self, channels);
-
- g_hash_table_destroy (channels);
- g_slist_free (request_tokens);
- return TRUE;
+ return handle_tube_channel_request (self, request_token,
+ request_properties, require_new, handle, &error);
}
else
{
--
1.5.6.5
More information about the telepathy-commits
mailing list