|
Packit Service |
b23acc |
// SPDX-License-Identifier: GPL-2.0+
|
|
Packit Service |
b23acc |
/*
|
|
Packit Service |
b23acc |
* Copyright (C) 2018 Red Hat, Inc.
|
|
Packit Service |
b23acc |
*/
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#ifndef __NM_DBUS_UTILS_H__
|
|
Packit Service |
b23acc |
#define __NM_DBUS_UTILS_H__
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/*****************************************************************************/
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
struct _NMDBusInterfaceInfoExtended;
|
|
Packit Service |
b23acc |
struct _NMDBusMethodInfoExtended;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
struct _NMDBusPropertyInfoExtendedBase {
|
|
Packit Service |
b23acc |
GDBusPropertyInfo _parent;
|
|
Packit Service |
b23acc |
const char *property_name;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* Whether the properties needs to be notified on the legacy
|
|
Packit Service |
b23acc |
* PropertyChanged signal. This is only to preserve API, new
|
|
Packit Service |
b23acc |
* properties should not use this. */
|
|
Packit Service |
b23acc |
bool include_in_legacy_property_changed;
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
struct _NMDBusPropertyInfoExtendedReadWritable {
|
|
Packit Service |
b23acc |
struct _NMDBusPropertyInfoExtendedBase _base;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* this is the polkit permission type for authenticating setting
|
|
Packit Service |
b23acc |
* the property. */
|
|
Packit Service |
b23acc |
const char *permission;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* this is the audit operation type for writing the property. */
|
|
Packit Service |
b23acc |
const char *audit_op;
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
typedef struct {
|
|
Packit Service |
b23acc |
union {
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
GDBusPropertyInfo _parent;
|
|
Packit Service |
b23acc |
struct _NMDBusPropertyInfoExtendedBase _base;
|
|
Packit Service |
b23acc |
struct _NMDBusPropertyInfoExtendedReadWritable writable;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* duplicate the base structure in the union, so that the common fields
|
|
Packit Service |
b23acc |
* are accessible directly in the parent struct. */
|
|
Packit Service |
b23acc |
struct {
|
|
Packit Service |
b23acc |
GDBusPropertyInfo parent;
|
|
Packit Service |
b23acc |
const char *property_name;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* Whether the properties needs to be notified on the legacy
|
|
Packit Service |
b23acc |
* PropertyChanged signal. This is only to preserve API, new
|
|
Packit Service |
b23acc |
* properties should not use this. */
|
|
Packit Service |
b23acc |
bool include_in_legacy_property_changed;
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
} NMDBusPropertyInfoExtended;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
G_STATIC_ASSERT (G_STRUCT_OFFSET (NMDBusPropertyInfoExtended, property_name) == G_STRUCT_OFFSET (struct _NMDBusPropertyInfoExtendedBase, property_name));
|
|
Packit Service |
b23acc |
G_STATIC_ASSERT (G_STRUCT_OFFSET (NMDBusPropertyInfoExtended, include_in_legacy_property_changed) == G_STRUCT_OFFSET (struct _NMDBusPropertyInfoExtendedBase, include_in_legacy_property_changed));
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_FULL(m_name, m_signature, m_property_name, m_include_in_legacy_property_changed) \
|
|
Packit Service |
b23acc |
((GDBusPropertyInfo *) &((const struct _NMDBusPropertyInfoExtendedBase) { \
|
|
Packit Service |
b23acc |
._parent = { \
|
|
Packit Service |
b23acc |
.ref_count = -1, \
|
|
Packit Service |
b23acc |
.name = m_name, \
|
|
Packit Service |
b23acc |
.signature = m_signature, \
|
|
Packit Service |
b23acc |
.flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE, \
|
|
Packit Service |
b23acc |
}, \
|
|
Packit Service |
b23acc |
.property_name = m_property_name, \
|
|
Packit Service |
b23acc |
.include_in_legacy_property_changed = m_include_in_legacy_property_changed, \
|
|
Packit Service |
b23acc |
}))
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE(m_name, m_signature, m_property_name) \
|
|
Packit Service |
b23acc |
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_FULL (m_name, m_signature, m_property_name, FALSE)
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* define a legacy property. Do not use for new code. */
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L(m_name, m_signature, m_property_name) \
|
|
Packit Service |
b23acc |
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_FULL (m_name, m_signature, m_property_name, TRUE)
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_FULL(m_name, m_signature, m_property_name, m_permission, m_audit_op, m_include_in_legacy_property_changed) \
|
|
Packit Service |
b23acc |
((GDBusPropertyInfo *) &((const struct _NMDBusPropertyInfoExtendedReadWritable) { \
|
|
Packit Service |
b23acc |
._base = { \
|
|
Packit Service |
b23acc |
._parent = { \
|
|
Packit Service |
b23acc |
.ref_count = -1, \
|
|
Packit Service |
b23acc |
.name = m_name, \
|
|
Packit Service |
b23acc |
.signature = m_signature, \
|
|
Packit Service |
b23acc |
.flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, \
|
|
Packit Service |
b23acc |
}, \
|
|
Packit Service |
b23acc |
.property_name = m_property_name, \
|
|
Packit Service |
b23acc |
.include_in_legacy_property_changed = m_include_in_legacy_property_changed, \
|
|
Packit Service |
b23acc |
}, \
|
|
Packit Service |
b23acc |
.permission = m_permission, \
|
|
Packit Service |
b23acc |
.audit_op = m_audit_op, \
|
|
Packit Service |
b23acc |
}))
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE(m_name, m_signature, m_property_name, m_permission, m_audit_op) \
|
|
Packit Service |
b23acc |
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_FULL (m_name, m_signature, m_property_name, m_permission, m_audit_op, FALSE)
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* define a legacy property. Do not use for new code. */
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_L(m_name, m_signature, m_property_name, m_permission, m_audit_op) \
|
|
Packit Service |
b23acc |
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_FULL (m_name, m_signature, m_property_name, m_permission, m_audit_op, TRUE)
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
typedef struct _NMDBusMethodInfoExtended {
|
|
Packit Service |
b23acc |
GDBusMethodInfo parent;
|
|
Packit Service |
b23acc |
void (*handle) (NMDBusObject *obj,
|
|
Packit Service |
b23acc |
const struct _NMDBusInterfaceInfoExtended *interface_info,
|
|
Packit Service |
b23acc |
const struct _NMDBusMethodInfoExtended *method_info,
|
|
Packit Service |
b23acc |
GDBusConnection *connection,
|
|
Packit Service |
b23acc |
const char *sender,
|
|
Packit Service |
b23acc |
GDBusMethodInvocation *invocation,
|
|
Packit Service |
b23acc |
GVariant *parameters);
|
|
Packit Service |
b23acc |
bool allow_during_shutdown;
|
|
Packit Service |
b23acc |
} NMDBusMethodInfoExtended;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DEFINE_DBUS_METHOD_INFO_EXTENDED(parent_, ...) \
|
|
Packit Service |
b23acc |
((GDBusMethodInfo *) (&((const NMDBusMethodInfoExtended) { \
|
|
Packit Service |
b23acc |
.parent = parent_, \
|
|
Packit Service |
b23acc |
__VA_ARGS__ \
|
|
Packit Service |
b23acc |
})))
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
typedef struct _NMDBusInterfaceInfoExtended {
|
|
Packit Service |
b23acc |
GDBusInterfaceInfo parent;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/* Whether the interface has a legacy property changed signal (@nm_signal_info_property_changed_legacy).
|
|
Packit Service |
b23acc |
* New interfaces should not use this. */
|
|
Packit Service |
b23acc |
bool legacy_property_changed:1;
|
|
Packit Service |
b23acc |
} NMDBusInterfaceInfoExtended;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
extern const GDBusSignalInfo nm_signal_info_property_changed_legacy;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#define NM_DBUS_INTERFACE_INFOS(...) \
|
|
Packit Service |
b23acc |
({ \
|
|
Packit Service |
b23acc |
static const NMDBusInterfaceInfoExtended *const _interface_infos[] = { \
|
|
Packit Service |
b23acc |
__VA_ARGS__, \
|
|
Packit Service |
b23acc |
NULL, \
|
|
Packit Service |
b23acc |
}; \
|
|
Packit Service |
b23acc |
_interface_infos; \
|
|
Packit Service |
b23acc |
});
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/*****************************************************************************/
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
GDBusPropertyInfo *nm_dbus_utils_interface_info_lookup_property (const GDBusInterfaceInfo *interface_info,
|
|
Packit Service |
b23acc |
const char *property_name,
|
|
Packit Service |
b23acc |
guint *property_idx);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
GDBusMethodInfo *nm_dbus_utils_interface_info_lookup_method (const GDBusInterfaceInfo *interface_info,
|
|
Packit Service |
b23acc |
const char *method_name);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
GVariant *nm_dbus_utils_get_property (GObject *obj,
|
|
Packit Service |
b23acc |
const char *signature,
|
|
Packit Service |
b23acc |
const char *property_name);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/*****************************************************************************/
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
struct CList;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
const char **nm_dbus_utils_get_paths_for_clist (const struct CList *lst_head,
|
|
Packit Service |
b23acc |
gssize lst_len,
|
|
Packit Service |
b23acc |
guint member_offset,
|
|
Packit Service |
b23acc |
gboolean expect_all_exported);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_utils_g_value_set_object_path (GValue *value, gpointer object);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_utils_g_value_set_object_path_still_exported (GValue *value, gpointer object);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_utils_g_value_set_object_path_from_hash (GValue *value,
|
|
Packit Service |
b23acc |
GHashTable *hash,
|
|
Packit Service |
b23acc |
gboolean expect_all_exported);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
/*****************************************************************************/
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
typedef struct {
|
|
Packit Service |
b23acc |
union {
|
|
Packit Service |
b23acc |
gpointer const obj;
|
|
Packit Service |
b23acc |
gpointer _obj;
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
GObject *_notify_target;
|
|
Packit Service |
b23acc |
const GParamSpec *_notify_pspec;
|
|
Packit Service |
b23acc |
gulong _notify_signal_id;
|
|
Packit Service |
b23acc |
union {
|
|
Packit Service |
b23acc |
const bool visible;
|
|
Packit Service |
b23acc |
bool _visible;
|
|
Packit Service |
b23acc |
};
|
|
Packit Service |
b23acc |
} NMDBusTrackObjPath;
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_track_obj_path_init (NMDBusTrackObjPath *track,
|
|
Packit Service |
b23acc |
GObject *target,
|
|
Packit Service |
b23acc |
const GParamSpec *pspec);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_track_obj_path_deinit (NMDBusTrackObjPath *track);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_track_obj_path_notify (const NMDBusTrackObjPath *track);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
const char *nm_dbus_track_obj_path_get (const NMDBusTrackObjPath *track);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
void nm_dbus_track_obj_path_set (NMDBusTrackObjPath *track,
|
|
Packit Service |
b23acc |
gpointer obj,
|
|
Packit Service |
b23acc |
gboolean visible);
|
|
Packit Service |
b23acc |
|
|
Packit Service |
b23acc |
#endif /* __NM_DBUS_UTILS_H__ */
|