static void send_dbus_reply (CockpitDBusJson1 *self, const gchar *cookie, GVariant *result, GError *error) { cleanup_unref_object JsonBuilder *builder = NULL; builder = prepare_builder ("call-reply"); json_builder_begin_object (builder); json_builder_set_member_name (builder, "cookie"); json_builder_add_string_value (builder, cookie); if (result == NULL) { gchar *error_name; error_name = g_dbus_error_get_remote_error (error); g_dbus_error_strip_remote_error (error); json_builder_set_member_name (builder, "error_name"); json_builder_add_string_value (builder, error_name != NULL ? error_name : ""); json_builder_set_member_name (builder, "error_message"); json_builder_add_string_value (builder, error->message); g_free (error_name); } else { json_builder_set_member_name (builder, "result"); _json_builder_add_gvariant (builder, result); } json_builder_end_object (builder); write_builder (self, builder); }
static void on_interface_proxy_properties_changed (GDBusObjectManager *manager, GDBusObjectProxy *object_proxy, GDBusProxy *interface_proxy, GVariant *changed_properties, const gchar * const *invalidated_properties, gpointer user_data) { CockpitDBusJson1 *self = user_data; cleanup_unref_object JsonBuilder *builder = prepare_builder ("interface-properties-changed"); json_builder_begin_object (builder); json_builder_set_member_name (builder, "objpath"); json_builder_add_string_value (builder, g_dbus_object_get_object_path (G_DBUS_OBJECT (object_proxy))); json_builder_set_member_name (builder, "iface_name"); json_builder_add_string_value (builder, g_dbus_proxy_get_interface_name (interface_proxy)); /* It's a bit of a waste to send all properties - would be cheaper to just * send @changed_properties and @invalidated_properties. But this is simpler. */ json_builder_set_member_name (builder, "iface"); json_builder_begin_object (builder); add_interface (builder, G_DBUS_INTERFACE (interface_proxy), changed_properties); json_builder_end_object (builder); json_builder_end_object (builder); write_builder (self, builder); }
static void on_object_removed (GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { CockpitDBusJson1 *self = user_data; cleanup_unref_object JsonBuilder *builder = prepare_builder ("object-removed"); json_builder_begin_array (builder); json_builder_add_string_value (builder, g_dbus_object_get_object_path (object)); json_builder_end_array (builder); write_builder (self, builder); }
static void on_object_added (GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { CockpitDBusJson1 *self = user_data; cleanup_unref_object JsonBuilder *builder = prepare_builder ("object-added"); json_builder_begin_object (builder); json_builder_set_member_name (builder, "object"); json_builder_begin_object (builder); add_object (builder, object); json_builder_end_object (builder); json_builder_end_object (builder); write_builder (self, builder); }
static void on_interface_removed (GDBusObjectManager *manager, GDBusObject *object, GDBusInterface *interface, gpointer user_data) { CockpitDBusJson1 *self = user_data; cleanup_unref_object JsonBuilder *builder = prepare_builder ("interface-removed"); json_builder_begin_object (builder); json_builder_set_member_name (builder, "objpath"); json_builder_add_string_value (builder, g_dbus_object_get_object_path (object)); json_builder_set_member_name (builder, "iface_name"); json_builder_add_string_value (builder, g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface))); json_builder_end_object (builder); write_builder (self, builder); }
static void send_seed (CockpitDBusJson1 *self) { cleanup_unref_object JsonBuilder *builder = json_builder_new (); json_builder_begin_object (builder); json_builder_set_member_name (builder, "command"); json_builder_add_string_value (builder, "seed"); json_builder_set_member_name (builder, "options"); json_builder_begin_object (builder); json_builder_set_member_name (builder, "byteorder"); if (G_BYTE_ORDER == G_LITTLE_ENDIAN) json_builder_add_string_value (builder, "le"); else if (G_BYTE_ORDER == G_BIG_ENDIAN) json_builder_add_string_value (builder, "be"); else json_builder_add_string_value (builder, ""); json_builder_end_object (builder); json_builder_set_member_name (builder, "data"); json_builder_begin_object (builder); GList *objects = g_dbus_object_manager_get_objects (self->object_manager); for (GList *l = objects; l != NULL; l = l->next) { GDBusObject *object = G_DBUS_OBJECT (l->data); json_builder_set_member_name (builder, g_dbus_object_get_object_path (object)); json_builder_begin_object (builder); add_object (builder, object); json_builder_end_object (builder); } g_list_foreach (objects, (GFunc)g_object_unref, NULL); g_list_free (objects); json_builder_end_object (builder); write_builder (self, builder); }
static void on_interface_proxy_signal (GDBusObjectManager *manager, GDBusObjectProxy *object_proxy, GDBusProxy *interface_proxy, gchar *sender_name, gchar *signal_name, GVariant *parameters, gpointer user_data) { CockpitDBusJson1 *self = user_data; cleanup_unref_object JsonBuilder *builder = prepare_builder ("interface-signal"); GVariantIter iter; GVariant *child; json_builder_begin_object (builder); json_builder_set_member_name (builder, "objpath"); json_builder_add_string_value (builder, g_dbus_object_get_object_path (G_DBUS_OBJECT (object_proxy))); json_builder_set_member_name (builder, "iface_name"); json_builder_add_string_value (builder, g_dbus_proxy_get_interface_name (interface_proxy)); json_builder_set_member_name (builder, "signal_name"); json_builder_add_string_value (builder, signal_name); json_builder_set_member_name (builder, "args"); json_builder_begin_array (builder); g_variant_iter_init (&iter, parameters); while ((child = g_variant_iter_next_value (&iter)) != NULL) { _json_builder_add_gvariant (builder, child); g_variant_unref (child); } json_builder_end_array (builder); json_builder_end_object (builder); write_builder (self, builder); }
static void on_connection_signal (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { CockpitDBusJson *self = user_data; gs_unref_object JsonBuilder *builder = prepare_builder ("interface-signal"); GVariantIter iter; GVariant *child; json_builder_begin_object (builder); json_builder_set_member_name (builder, "objpath"); json_builder_add_string_value (builder, object_path); json_builder_set_member_name (builder, "iface_name"); json_builder_add_string_value (builder, interface_name); json_builder_set_member_name (builder, "signal_name"); json_builder_add_string_value (builder, signal_name); json_builder_set_member_name (builder, "args"); json_builder_begin_array (builder); g_variant_iter_init (&iter, parameters); while ((child = g_variant_iter_next_value (&iter)) != NULL) { build_json (builder, child); g_variant_unref (child); } json_builder_end_array (builder); json_builder_end_object (builder); write_builder (self, builder); }