X-Git-Url: https://uglyman.kremlin.cc/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Finterfaces%2Fhostnamed%2Fhostnamed.c;h=4d4332bed0dac607680a00448ecbdcce47c0e6d3;hb=a622ef09a6520566359ce83a2f540cc519648307;hp=1638b31aaa3a5d4be8a972fd21c4b1a558c534c9;hpb=c992721530292cac0e5e3cbbe808e54f1ac5509c;p=systembsd.git diff --git a/src/interfaces/hostnamed/hostnamed.c b/src/interfaces/hostnamed/hostnamed.c index 1638b31..4d4332b 100644 --- a/src/interfaces/hostnamed/hostnamed.c +++ b/src/interfaces/hostnamed/hostnamed.c @@ -1,90 +1,8 @@ #include +#include "hostnamed.h" -/* testing, for now */ -static GDBusNodeInfo *spect_data = NULL; -static const gchar spect_xml[] = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; +GDBusNodeInfo *spect_data; +GMainLoop *loop; static void handle_method_call(GDBusConnection *conn, const gchar *sender, @@ -97,10 +15,14 @@ static void handle_method_call(GDBusConnection *conn, 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); + GString *xml_ret; + GVariant *xml_ret_gvar; -} + g_dbus_interface_info_generate_xml(spect_data->interfaces[0], (guint)0, xml_ret); + xml_ret_gvar = g_variant_new_string(xml_ret->str); + g_dbus_method_invocation_return_value(invc, xml_ret_gvar); +} static GVariant * handle_get_property(GDBusConnection *conn, const gchar *sender, @@ -111,8 +33,6 @@ static GVariant * handle_get_property(GDBusConnection *conn, 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; } @@ -136,6 +56,7 @@ static gboolean handle_set_property(GDBusConnection *conn, return TRUE; } +/* "hot" functions initially passed to gdbus */ static const GDBusInterfaceVTable interface_vtable = { handle_method_call, @@ -143,20 +64,23 @@ static const GDBusInterfaceVTable interface_vtable = handle_set_property }; - - +/* end method/property functions, begin bus name handlers + * TODO: these should be intertwined as to handle edge cases + * for when the system cannot immediately grab the name, as + * well as cases where the system unintendedly loses the name + */ 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 ); + 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); } @@ -166,16 +90,16 @@ static void on_name_acquired(GDBusConnection *conn, const gchar *name, gpointer static void on_name_lost(GDBusConnection *conn, const gchar *name, gpointer user_data) { g_print("lost name %s, exiting...\n", name); - exit(1); + g_main_loop_quit(loop); } -void hostnamed_init() { +/* safe call to try and start hostnamed */ +GError hostnamed_init() { guint bus_descriptor; - GError *err = NULL; - GMainLoop *loop; + GError *err = NULL; - spect_data = g_dbus_node_info_new_for_xml(spect_xml, NULL); + spect_data = g_dbus_node_info_new_for_xml(SYSTEMD_HOSTNAMED_XML, &err); bus_descriptor = g_bus_own_name(G_BUS_TYPE_SESSION, (gchar *)"org.freedesktop.hostname1", @@ -189,7 +113,7 @@ void hostnamed_init() { loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); - /* unclear */ + /* i am not sure what the system state is once g_main_loop exits */ g_bus_unown_name(bus_descriptor); g_dbus_node_info_unref(spect_data);