[telepathy-mission-control/master] McdDispatcher: remove support for old-style filters

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Apr 13 04:20:14 PDT 2009


As Alberto requested by email.
---
 .../tmpl/mcd-dispatcher-context.sgml               |   35 ---
 src/mcd-dispatcher-context.h                       |   17 --
 src/mcd-dispatcher.c                               |  255 +-------------------
 3 files changed, 3 insertions(+), 304 deletions(-)

diff --git a/doc/reference/libmissioncontrol-server/tmpl/mcd-dispatcher-context.sgml b/doc/reference/libmissioncontrol-server/tmpl/mcd-dispatcher-context.sgml
index 1b130cc..dfa71e3 100644
--- a/doc/reference/libmissioncontrol-server/tmpl/mcd-dispatcher-context.sgml
+++ b/doc/reference/libmissioncontrol-server/tmpl/mcd-dispatcher-context.sgml
@@ -97,41 +97,6 @@ mcd-dispatcher-context
 @priority: 
 @user_data: 
 
-<!-- ##### FUNCTION mcd_dispatcher_register_filter ##### -->
-<para>
-
-</para>
-
- at dispatcher: 
- at filter: 
- at channel_type_quark: 
- at filter_flags: 
- at priority: 
- at user_data: 
-
-
-<!-- ##### FUNCTION mcd_dispatcher_unregister_filter ##### -->
-<para>
-
-</para>
-
- at dispatcher: 
- at filter: 
- at channel_type_quark: 
- at filter_flags: 
-
-
-<!-- ##### FUNCTION mcd_dispatcher_register_filters ##### -->
-<para>
-
-</para>
-
- at dispatcher: 
- at filters: 
- at channel_type_quark: 
- at filter_flags: 
-
-
 <!-- ##### FUNCTION mcd_dispatcher_context_get_dispatcher ##### -->
 <para>
 
diff --git a/src/mcd-dispatcher-context.h b/src/mcd-dispatcher-context.h
index d8751a8..133a745 100644
--- a/src/mcd-dispatcher-context.h
+++ b/src/mcd-dispatcher-context.h
@@ -65,23 +65,6 @@ void mcd_dispatcher_add_filter (McdDispatcher *dispatcher,
 void mcd_dispatcher_add_filters (McdDispatcher *dispatcher,
                                  const McdFilter *filters);
 
-void mcd_dispatcher_register_filter (McdDispatcher *dispatcher,
-				     McdFilterFunc filter,
-				     GQuark channel_type_quark,
-				     guint filter_flags,
-				     guint priority,
-				     gpointer user_data);
-
-void mcd_dispatcher_unregister_filter (McdDispatcher *dispatcher,
-				       McdFilterFunc filter,
-				       GQuark channel_type_quark,
-				       guint filter_flags);
-
-void mcd_dispatcher_register_filters (McdDispatcher *dispatcher,
-				      McdFilter *filters,
-				      GQuark channel_type_quark,
-				      guint filter_flags) G_GNUC_DEPRECATED;
-
 /* Context API section
  *
  * The use of gpointer is intentional; we want to make accessing the
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 9f95c81..0b1e949 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -198,7 +198,6 @@ struct _McdDispatcherPrivate
     /* Dispatching contexts */
     GList *contexts;
 
-    GData *interface_filters;
     TpDBusDaemon *dbus_daemon;
 
     /* Channel handlers */
@@ -226,12 +225,6 @@ struct _McdDispatcherPrivate
     
 };
 
-struct iface_chains_t
-{
-    GList *chain_in;
-    GList *chain_out;
-};
-
 struct cancel_call_data
 {
     DBusGProxy *handler_proxy;
@@ -405,47 +398,6 @@ tp_ch_handle_channel_2_async (DBusGProxy *proxy,
 				    G_TYPE_INVALID);
 }
 
-/* REGISTRATION/DEREGISTRATION of filters*/
-
-/* A convenience function for acquiring the chain for particular channel
-type and filter flag combination. */
-
-static GList *
-_mcd_dispatcher_get_filter_chain (McdDispatcher * dispatcher,
-				  GQuark channel_type_quark,
-				  guint filter_flags)
-{
-    McdDispatcherPrivate *priv = dispatcher->priv;
-    struct iface_chains_t *iface_chains;
-    GList *filter_chain = NULL;
-
-    iface_chains =
-	(struct iface_chains_t *)
-	g_datalist_id_get_data (&(priv->interface_filters), channel_type_quark);
-
-    if (iface_chains == NULL)
-    {
-        DEBUG ("No chains for interface %s",
-               g_quark_to_string (channel_type_quark));
-    }
-    else
-	switch (filter_flags)
-	{
-	case MCD_FILTER_IN:
-	    filter_chain = iface_chains->chain_in;
-	    break;
-	case MCD_FILTER_OUT:
-	    filter_chain = iface_chains->chain_out;
-	    break;
-
-	default:
-	    g_warning ("Unsupported filter flag value");
-	    break;
-	}
-
-    return filter_chain;
-}
-
 static GList *
 chain_add_filter (GList *chain,
 		  McdFilterFunc filter,
@@ -465,170 +417,6 @@ chain_add_filter (GList *chain,
     return g_list_insert_before (chain, elem, filter_data);
 }
 
-static GList *
-chain_remove_filter (GList *chain, McdFilterFunc func)
-{
-    GList *elem, *new_chain = NULL;
-
-    /* since in-place modification of a list is error prone (especially if the
-     * same filter has been registered in the same chain with different
-     * priorities), we build a new list with the remaining elements */
-    for (elem = chain; elem; elem = elem->next)
-    {
-	if (((McdFilter *)elem->data)->func == func)
-	    g_slice_free (McdFilter, elem->data);
-	else
-	    new_chain = g_list_append (new_chain, elem->data);
-    }
-    g_list_free (chain);
-
-    return new_chain;
-}
-
-static void
-free_filter_chains (struct iface_chains_t *chains)
-{
-    GList *list;
-    if (chains->chain_in)
-    {
-        for (list = chains->chain_in; list != NULL; list = list->next)
-            g_slice_free (McdFilter, list->data);
-	g_list_free (chains->chain_in);
-    }
-    if (chains->chain_out)
-    {
-        for (list = chains->chain_out; list != NULL; list = list->next)
-            g_slice_free (McdFilter, list->data);
-	g_list_free (chains->chain_out);
-    }
-    g_free (chains);
-}
-
-/**
- * mcd_dispatcher_register_filter:
- * @dispatcher: The #McdDispatcher.
- * @filter: the filter function to be registered.
- * @channel_type_quark: Quark indicating the channel type.
- * @filter_flags: The flags for the filter, such as incoming/outgoing.
- * @priority: The priority of the filter.
- *
- * Indicates to Mission Control that we want to register a filter for a unique
- * combination of channel type/filter flags.
- */
-void
-mcd_dispatcher_register_filter (McdDispatcher *dispatcher,
-			       	McdFilterFunc filter,
-				GQuark channel_type_quark,
-				guint filter_flags, guint priority,
-				gpointer user_data)
-{
-    McdDispatcherPrivate *priv = dispatcher->priv;
-    struct iface_chains_t *iface_chains = NULL;
-
-    /* Check if the interface already has stored data, otherwise create it */
-
-    if (!(iface_chains = g_datalist_id_get_data (&(priv->interface_filters),
-						 channel_type_quark)))
-    {
-	iface_chains = g_new0 (struct iface_chains_t, 1);
-	g_datalist_id_set_data_full (&(priv->interface_filters),
-				     channel_type_quark, iface_chains,
-				     (GDestroyNotify)free_filter_chains);
-    }
-
-    switch (filter_flags)
-    {
-    case MCD_FILTER_IN:
-	iface_chains->chain_in = chain_add_filter (iface_chains->chain_in,
-						   filter, priority, user_data);
-	break;
-    case MCD_FILTER_OUT:
-	iface_chains->chain_out = chain_add_filter (iface_chains->chain_out,
-						    filter, priority, user_data);
-	break;
-    default:
-	g_warning ("Unknown filter flag value!");
-    }
-}
-
-/**
- * mcd_dispatcher_unregister_filter:
- * @dispatcher: The #McdDispatcher.
- * @filter: the filter function to be registered.
- * @channel_type_quark: Quark indicating the channel type.
- * @filter_flags: The flags for the filter, such as incoming/outgoing.
- *
- * Indicates to Mission Control that we will not want to have a filter
- * for particular unique channel type/filter flags combination anymore.
- */
-void
-mcd_dispatcher_unregister_filter (McdDispatcher * dispatcher,
-				  McdFilterFunc filter,
-				  GQuark channel_type_quark,
-				  guint filter_flags)
-{
-    McdDispatcherPrivate *priv = dispatcher->priv;
-
-    /* First, do we have anything registered for that channel type? */
-    struct iface_chains_t *chains =
-	(struct iface_chains_t *)
-	g_datalist_id_get_data (&(priv->interface_filters),
-				channel_type_quark);
-    if (chains == NULL)
-    {
-	g_warning ("Attempting to unregister from an empty filter chain");
-	return;
-    }
-
-    switch (filter_flags)
-    {
-    case MCD_FILTER_IN:
-	/* No worries about memory leaks, as these are function pointers */
-	chains->chain_in = chain_remove_filter(chains->chain_in, filter);
-	break;
-    case MCD_FILTER_OUT:
-	chains->chain_out = chain_remove_filter(chains->chain_out, filter);
-	break;
-    default:
-	g_warning ("Unknown filter flag value!");
-    }
-
-    /* Both chains are empty? We may as well free the struct then */
-
-    if (chains->chain_in == NULL && chains->chain_out == NULL)
-    {
-	/* ? Should we dlclose the plugin as well..? */
-	g_datalist_id_remove_data (&(priv->interface_filters),
-				   channel_type_quark);
-    }
-}
-
-/**
- * mcd_dispatcher_register_filters:
- * @dispatcher: The #McdDispatcher.
- * @filters: a zero-terminated array of #McdFilter elements.
- * @channel_type_quark: Quark indicating the channel type.
- * @filter_flags: The flags for the filter, such as incoming/outgoing.
- *
- * Convenience function to register a batch of filters at once.
- */
-void
-mcd_dispatcher_register_filters (McdDispatcher *dispatcher,
-				 McdFilter *filters,
-				 GQuark channel_type_quark,
-				 guint filter_flags)
-{
-    McdFilter *filter;
-
-    g_return_if_fail (filters != NULL);
-
-    for (filter = filters; filter->func != NULL; filter++)
-	mcd_dispatcher_register_filter (dispatcher, filter->func,
-				       	channel_type_quark,
-					filter_flags, filter->priority,
-					filter->user_data);
-}
-
 /* Returns # of times particular channel type  has been used */
 gint
 mcd_dispatcher_get_channel_type_usage (McdDispatcher * dispatcher,
@@ -1780,10 +1568,9 @@ _mcd_dispatcher_enter_state_machine (McdDispatcher *dispatcher,
 {
     McdDispatcherContext *context;
     McdDispatcherPrivate *priv;
-    GList *chain, *list;
+    GList *list;
     McdChannel *channel;
     McdAccount *account;
-    guint n_channels;
 
     g_return_if_fail (MCD_IS_DISPATCHER (dispatcher));
     g_return_if_fail (channels != NULL);
@@ -1798,42 +1585,13 @@ _mcd_dispatcher_enter_state_machine (McdDispatcher *dispatcher,
 
     priv = dispatcher->priv;
 
-    /* old-style filters cannot probably handle more than one channel; so,
-     * invoke them only if we have one single channel to dispatch. */
-    n_channels = g_list_length (channels);
-    if (n_channels == 1)
-    {
-        GQuark chan_type_quark;
-        gint filter_flags;
-
-        channel = MCD_CHANNEL (channels->data);
-        chan_type_quark = mcd_channel_get_channel_type_quark (channel);
-
-        filter_flags = requested ? MCD_FILTER_OUT: MCD_FILTER_IN;
-        chain = _mcd_dispatcher_get_filter_chain (dispatcher,
-                                                  chan_type_quark,
-                                                  filter_flags);
-    }
-    else
-    {
-        DEBUG ("%u channels to dispatch, filters disabled", n_channels);
-        chain = NULL;
-    }
-
-    /* invoke in-process channel filters */
-    /* FIXME: once old-style filters support is removed, we'll just have:
-     *
-     *  chain = priv->filters
-     */
-    chain = g_list_concat (chain, priv->filters);
-
     /* Preparing and filling the context */
     context = g_new0 (McdDispatcherContext, 1);
     context->ref_count = 1;
     context->dispatcher = dispatcher;
     context->account = account;
     context->channels = channels;
-    context->chain = chain;
+    context->chain = priv->filters;
     priv->contexts = g_list_prepend (priv->contexts, context);
     if (!requested)
     {
@@ -1863,7 +1621,7 @@ _mcd_dispatcher_enter_state_machine (McdDispatcher *dispatcher,
                                 context);
     }
 
-    if (chain)
+    if (priv->filters != NULL)
     {
         DEBUG ("entering state machine for context %p", context);
 
@@ -2021,11 +1779,6 @@ _mcd_dispatcher_dispose (GObject * object)
 	priv->dbus_daemon = NULL;
     }
 
-    if (priv->interface_filters)
-    {
-	g_datalist_clear (&priv->interface_filters);
-	priv->interface_filters = NULL;
-    }
     G_OBJECT_CLASS (mcd_dispatcher_parent_class)->dispose (object);
 }
 
@@ -2812,8 +2565,6 @@ mcd_dispatcher_init (McdDispatcher * dispatcher)
                                         McdDispatcherPrivate);
     dispatcher->priv = priv;
 
-    g_datalist_init (&(priv->interface_filters));
-
     priv->operation_list_active = FALSE;
 
     priv->channel_handler_hash = mcd_get_channel_handlers ();
-- 
1.5.6.5




More information about the telepathy-commits mailing list