#include /* testing, for now */ static GDBusNodeInfo *spect_data = NULL; static const gchar spect_xml[] = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void handle_method_call(GDBusConnection *conn, const gchar *sender, const gchar *obj_path, const gchar *interf_name, const gchar *method_name, GVariant *params, GDBusMethodInvocation *invc, gpointer usrdat) { g_printf("%s wants to call %s, at %s with interface %s\n", sender, method_name, obj_path, interf_name); g_dbus_method_invocation_return_value(invc, &spect_xml); } static GVariant * handle_get_property(GDBusConnection *conn, const gchar *sender, const gchar *obj_path, const gchar *interf_name, const gchar *prop_name, GError **err, gpointer usr_data) { GVariant *ret; ret = g_variant_new_string(""); g_snprintf(ret, 100, "%s touched property %s at %s", sender, prop_name, obj_path); return ret; } static gboolean handle_set_property(GDBusConnection *conn, const gchar *sender, const gchar *obj_path, const gchar *interf_name, const gchar *prop_name, GVariant *val, GError **err, gpointer usr_data) { g_dbus_connection_emit_signal(conn, NULL, obj_path, "org.freedesktop.DBus.Properties", "PropertiesChanged", NULL, /* incorrect */ NULL); return TRUE; } static const GDBusInterfaceVTable interface_vtable = { handle_method_call, handle_get_property, handle_set_property }; static void on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) { g_print("got bus, name: %s\n", name); guint reg_id; reg_id = g_dbus_connection_register_object (conn, "/org/freedesktop/hostname1", spect_data->interfaces[0], &interface_vtable, NULL, NULL, NULL ); g_assert(reg_id > 0); } static void on_name_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) { g_print("got name %s\n", name); } static void on_name_lost(GDBusConnection *conn, const gchar *name, gpointer user_data) { g_print("lost name %s, exiting...\n", name); exit(1); } void hostnamed_init() { guint bus_descriptor; GError *err = NULL; GMainLoop *loop; spect_data = g_dbus_node_info_new_for_xml(spect_xml, NULL); bus_descriptor = g_bus_own_name(G_BUS_TYPE_SESSION, (gchar *)"org.freedesktop.hostname1", G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, on_name_acquired, on_name_lost, NULL, NULL); loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); /* unclear */ g_bus_unown_name(bus_descriptor); g_dbus_node_info_unref(spect_data); }