/* GDBus - GLib D-Bus Library * * Copyright (C) 2008-2010 Red Hat, Inc. * * SPDX-License-Identifier: LGPL-2.1-or-later * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, see . * * Author: David Zeuthen */ #include "config.h" #include "gdbusobject.h" #include "gdbusinterface.h" #include "glibintl.h" /** * GDBusInterface: * * Base type for D-Bus interfaces. * * The `GDBusInterface` type is the base type for D-Bus interfaces both * on the service side (see [class@Gio.DBusInterfaceSkeleton]) and client side * (see [class@Gio.DBusProxy]). * * Since: 2.30 */ typedef GDBusInterfaceIface GDBusInterfaceInterface; G_DEFINE_INTERFACE (GDBusInterface, g_dbus_interface, G_TYPE_OBJECT) static void g_dbus_interface_default_init (GDBusInterfaceIface *iface) { } /* ---------------------------------------------------------------------------------------------------- */ /** * g_dbus_interface_get_info: * @interface_: An exported D-Bus interface. * * Gets D-Bus introspection information for the D-Bus interface * implemented by @interface_. * * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. * * Since: 2.30 */ GDBusInterfaceInfo * g_dbus_interface_get_info (GDBusInterface *interface_) { g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_info (interface_); } /** * g_dbus_interface_get_object: (skip) * @interface_: An exported D-Bus interface * * Gets the #GDBusObject that @interface_ belongs to, if any. * * It is not safe to use the returned object if @interface_ or * the returned object is being used from other threads. See * g_dbus_interface_dup_object() for a thread-safe alternative. * * Returns: (nullable) (transfer none): A #GDBusObject or %NULL. The returned * reference belongs to @interface_ and should not be freed. * * Since: 2.30 */ GDBusObject * g_dbus_interface_get_object (GDBusInterface *interface_) { g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_); } /** * g_dbus_interface_dup_object: (rename-to g_dbus_interface_get_object) * @interface_: An exported D-Bus interface. * * Gets the #GDBusObject that @interface_ belongs to, if any. * * Returns: (nullable) (transfer full): A #GDBusObject or %NULL. The returned * reference should be freed with g_object_unref(). * * Since: 2.32 */ GDBusObject * g_dbus_interface_dup_object (GDBusInterface *interface_) { GDBusObject *ret; g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); if (G_LIKELY (G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object != NULL)) { ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object (interface_); } else { g_warning ("No dup_object() vfunc on type %s - using get_object() in a way that is not thread-safe.", g_type_name_from_instance ((GTypeInstance *) interface_)); ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_); if (ret != NULL) g_object_ref (ret); } return ret; } /** * g_dbus_interface_set_object: * @interface_: An exported D-Bus interface. * @object: (nullable): A #GDBusObject or %NULL. * * Sets the #GDBusObject for @interface_ to @object. * * Note that @interface_ will hold a weak reference to @object. * * Since: 2.30 */ void g_dbus_interface_set_object (GDBusInterface *interface_, GDBusObject *object) { g_return_if_fail (G_IS_DBUS_INTERFACE (interface_)); g_return_if_fail (object == NULL || G_IS_DBUS_OBJECT (object)); G_DBUS_INTERFACE_GET_IFACE (interface_)->set_object (interface_, object); }