From 19c3d9088600c1f2c08e7d77cf91ac1c288d7ff6 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 27 Jul 2023 14:20:20 -0700 Subject: [PATCH] libsysprof: add more accessors for dbus message info --- .../sysprof-document-dbus-message.c | 147 +++++++++++++++++- .../sysprof-document-dbus-message.h | 30 ++-- 2 files changed, 166 insertions(+), 11 deletions(-) diff --git a/src/libsysprof/sysprof-document-dbus-message.c b/src/libsysprof/sysprof-document-dbus-message.c index d234807e..bd587442 100644 --- a/src/libsysprof/sysprof-document-dbus-message.c +++ b/src/libsysprof/sysprof-document-dbus-message.c @@ -38,12 +38,18 @@ struct _SysprofDocumentDBusMessageClass enum { PROP_0, + PROP_DESTINATION, + PROP_FLAGS, + PROP_INTERFACE, + PROP_MEMBER, PROP_MESSAGE, PROP_MESSAGE_LENGTH, PROP_MESSAGE_TYPE, - PROP_SERIAL, + PROP_PATH, + PROP_REPLY_SERIAL, + PROP_SIGNATURE, PROP_SENDER, - PROP_DESTINATION, + PROP_SERIAL, N_PROPS }; @@ -71,6 +77,10 @@ sysprof_document_dbus_message_get_property (GObject *object, switch (prop_id) { + case PROP_FLAGS: + g_value_set_flags (value, sysprof_document_dbus_message_get_flags (self)); + break; + case PROP_MESSAGE: g_value_take_object (value, sysprof_document_dbus_message_dup_message (self)); break; @@ -79,6 +89,10 @@ sysprof_document_dbus_message_get_property (GObject *object, g_value_set_uint (value, sysprof_document_dbus_message_get_message_length (self)); break; + case PROP_REPLY_SERIAL: + g_value_set_uint (value, sysprof_document_dbus_message_get_reply_serial (self)); + break; + case PROP_SERIAL: g_value_set_uint (value, sysprof_document_dbus_message_get_serial (self)); break; @@ -95,6 +109,22 @@ sysprof_document_dbus_message_get_property (GObject *object, g_value_set_enum (value, sysprof_document_dbus_message_get_message_type (self)); break; + case PROP_INTERFACE: + g_value_set_string (value, sysprof_document_dbus_message_get_interface (self)); + break; + + case PROP_PATH: + g_value_set_string (value, sysprof_document_dbus_message_get_path (self)); + break; + + case PROP_MEMBER: + g_value_set_string (value, sysprof_document_dbus_message_get_member (self)); + break; + + case PROP_SIGNATURE: + g_value_set_string (value, sysprof_document_dbus_message_get_signature (self)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -121,6 +151,11 @@ sysprof_document_dbus_message_class_init (SysprofDocumentDBusMessageClass *klass G_TYPE_DBUS_MESSAGE, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_REPLY_SERIAL] = + g_param_spec_uint ("reply-serial", NULL, NULL, + 0, G_MAXUINT, 0, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_SERIAL] = g_param_spec_uint ("serial", NULL, NULL, 0, G_MAXUINT, 0, @@ -136,12 +171,38 @@ sysprof_document_dbus_message_class_init (SysprofDocumentDBusMessageClass *klass NULL, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_INTERFACE] = + g_param_spec_string ("interface", NULL, NULL, + NULL, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + properties[PROP_PATH] = + g_param_spec_string ("path", NULL, NULL, + NULL, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + properties[PROP_MEMBER] = + g_param_spec_string ("member", NULL, NULL, + NULL, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + properties[PROP_SIGNATURE] = + g_param_spec_string ("signature", NULL, NULL, + NULL, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_MESSAGE_TYPE] = g_param_spec_enum ("message-type", NULL, NULL, G_TYPE_DBUS_MESSAGE_TYPE, G_DBUS_MESSAGE_TYPE_INVALID, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_FLAGS] = + g_param_spec_flags ("flags", NULL, NULL, + G_TYPE_DBUS_MESSAGE_FLAGS, + 0, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_properties (object_class, N_PROPS, properties); } @@ -222,6 +283,32 @@ sysprof_document_dbus_message_dup_message (SysprofDocumentDBusMessage *self) return self->message ? g_object_ref (self->message) : NULL; } +GDBusMessageFlags +sysprof_document_dbus_message_get_flags (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), 0); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return 0; + + return g_dbus_message_get_flags (message); +} + +guint +sysprof_document_dbus_message_get_reply_serial (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), 0); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return 0; + + return g_dbus_message_get_reply_serial (message); +} + guint sysprof_document_dbus_message_get_serial (SysprofDocumentDBusMessage *self) { @@ -263,6 +350,62 @@ sysprof_document_dbus_message_get_destination (SysprofDocumentDBusMessage *self) return g_dbus_message_get_destination (message); } +const char * +sysprof_document_dbus_message_get_interface (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), NULL); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return NULL; + + /* Safe because of self->message */ + return g_dbus_message_get_interface (message); +} + +const char * +sysprof_document_dbus_message_get_member (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), NULL); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return NULL; + + /* Safe because of self->message */ + return g_dbus_message_get_member (message); +} + +const char * +sysprof_document_dbus_message_get_path (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), NULL); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return NULL; + + /* Safe because of self->message */ + return g_dbus_message_get_path (message); +} + +const char * +sysprof_document_dbus_message_get_signature (SysprofDocumentDBusMessage *self) +{ + g_autoptr(GDBusMessage) message = NULL; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_DBUS_MESSAGE (self), NULL); + + if (!(message = sysprof_document_dbus_message_dup_message (self))) + return NULL; + + /* Safe because of self->message */ + return g_dbus_message_get_signature (message); +} + GDBusMessageType sysprof_document_dbus_message_get_message_type (SysprofDocumentDBusMessage *self) { diff --git a/src/libsysprof/sysprof-document-dbus-message.h b/src/libsysprof/sysprof-document-dbus-message.h index 6072feb1..24032a32 100644 --- a/src/libsysprof/sysprof-document-dbus-message.h +++ b/src/libsysprof/sysprof-document-dbus-message.h @@ -35,22 +35,34 @@ typedef struct _SysprofDocumentDBusMessage SysprofDocumentDBusMessage; typedef struct _SysprofDocumentDBusMessageClass SysprofDocumentDBusMessageClass; SYSPROF_AVAILABLE_IN_ALL -GType sysprof_document_dbus_message_get_type (void) G_GNUC_CONST; +GType sysprof_document_dbus_message_get_type (void) G_GNUC_CONST; SYSPROF_AVAILABLE_IN_ALL -guint sysprof_document_dbus_message_get_message_length (SysprofDocumentDBusMessage *self); +guint sysprof_document_dbus_message_get_message_length (SysprofDocumentDBusMessage *self); SYSPROF_AVAILABLE_IN_ALL -const guint8 *sysprof_document_dbus_message_get_message_data (SysprofDocumentDBusMessage *self, - guint *length); +const guint8 *sysprof_document_dbus_message_get_message_data (SysprofDocumentDBusMessage *self, + guint *length); SYSPROF_AVAILABLE_IN_ALL -GDBusMessage *sysprof_document_dbus_message_dup_message (SysprofDocumentDBusMessage *self); +GDBusMessage *sysprof_document_dbus_message_dup_message (SysprofDocumentDBusMessage *self); SYSPROF_AVAILABLE_IN_ALL -guint sysprof_document_dbus_message_get_serial (SysprofDocumentDBusMessage *self); +guint sysprof_document_dbus_message_get_serial (SysprofDocumentDBusMessage *self); SYSPROF_AVAILABLE_IN_ALL -const char *sysprof_document_dbus_message_get_destination (SysprofDocumentDBusMessage *self); +guint sysprof_document_dbus_message_get_reply_serial (SysprofDocumentDBusMessage *self); SYSPROF_AVAILABLE_IN_ALL -const char *sysprof_document_dbus_message_get_sender (SysprofDocumentDBusMessage *self); +const char *sysprof_document_dbus_message_get_destination (SysprofDocumentDBusMessage *self); SYSPROF_AVAILABLE_IN_ALL -GDBusMessageType sysprof_document_dbus_message_get_message_type (SysprofDocumentDBusMessage *self); +const char *sysprof_document_dbus_message_get_sender (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +GDBusMessageType sysprof_document_dbus_message_get_message_type (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +const char *sysprof_document_dbus_message_get_interface (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +const char *sysprof_document_dbus_message_get_path (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +const char *sysprof_document_dbus_message_get_member (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +const char *sysprof_document_dbus_message_get_signature (SysprofDocumentDBusMessage *self); +SYSPROF_AVAILABLE_IN_ALL +GDBusMessageFlags sysprof_document_dbus_message_get_flags (SysprofDocumentDBusMessage *self); G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofDocumentDBusMessage, g_object_unref)