static void
handle_method_call (GDBusConnection       *connection,
                    const gchar           *sender,
                    const gchar           *object_path,
                    const gchar           *interface_name,
                    const gchar           *method_name,
                    GVariant              *parameters,
                    GDBusMethodInvocation *invocation,
                    gpointer               user_data)
{
  guint method_id;
  method_id = lookup_method_id_from_method_name (method_name);
  switch (method_id)
    {
    case __GET_CAL_METHOD:
      {
	EGdbusCalFactory *object = E_GDBUS_CAL_FACTORY (user_data);
	gboolean handled;
	const gchar *arg_source;
	guint arg_type;
	g_variant_get (parameters,
                       "(&su)",
		       &arg_source,
		       &arg_type);
	g_signal_emit (object,
		       signals[method_id],
		       0, invocation, arg_source, arg_type, &handled);
	if (!handled)
	  goto not_implemented;
      }
      break;

    default:
not_implemented:
      g_dbus_method_invocation_return_error (invocation,
					     G_DBUS_ERROR,
					     G_DBUS_ERROR_NOT_SUPPORTED,
                                             "Method `%s' is not implemented",
					     method_name);
      break;
    }
};
static void
handle_method_call (GDBusConnection *connection,
                    const gchar *sender,
                    const gchar *object_path,
                    const gchar *interface_name,
                    const gchar *method_name,
                    GVariant *parameters,
                    GDBusMethodInvocation *invocation,
                    gpointer user_data)
{
	guint method_id, method_type;

	method_id = lookup_method_id_from_method_name (method_name);
	method_type = lookup_method_type_from_method_name (method_name);

	g_return_if_fail (method_id != 0);
	g_return_if_fail (method_type != 0);

	e_gdbus_stub_handle_method_call (user_data, invocation, parameters, method_name, signals[method_id], method_type);
}