hostnamed implementation coming along, implements introspectable now. had to switch...
authorkremlin <ian@kremlin.cc>
Fri, 30 May 2014 09:19:07 +0000 (04:19 -0500)
committerkremlin <ian@kremlin.cc>
Fri, 30 May 2014 09:19:07 +0000 (04:19 -0500)
out.bin.core [new file with mode: 0644]
src/main.c
src/modules/hostnamed/hostnamed.c

diff --git a/out.bin.core b/out.bin.core
new file mode 100644 (file)
index 0000000..d338c07
Binary files /dev/null and b/out.bin.core differ
index 8ba890714434b4a2285953854ff04766f222aa10..a51b30d84f76fd2b5689ceee737a0d2e52a8a8ca 100644 (file)
@@ -2,12 +2,7 @@
 #include "modules/hostnamed/hostnamed.c"
 
 int main() {
-       GMainLoop *loop;
-       
        hostnamed_init();
        
-       loop = g_main_loop_new(NULL, FALSE);
-       g_main_loop_run(loop);
-
        return 0;
 }
index 2897882ed85c6a967c65a5b247d2c131c323c396..1638b31aaa3a5d4be8a972fd21c4b1a558c534c9 100644 (file)
@@ -1,4 +1,3 @@
-/* #include <glib-2.0/glib.h> */
 #include <gio/gio.h>
 
 /* testing, for now */
@@ -87,11 +86,56 @@ static const gchar spect_xml[] =
                " </interface>"
                "</node>";
 
-static void handle_method_call() {}
-static GVariant * handle_get_property() {return NULL;}
-static gboolean handle_set_property() {return FALSE;}
+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;
+}
 
-/* TODO: what's this guy do */
 static const GDBusInterfaceVTable interface_vtable =
 {
   handle_method_call,
@@ -104,7 +148,6 @@ static const GDBusInterfaceVTable interface_vtable =
 static void on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) {
        g_print("got bus, name: %s\n", name);
        
-       spect_data = g_dbus_node_info_new_for_xml(spect_xml, NULL);
        guint reg_id;
 
        reg_id = g_dbus_connection_register_object (conn,
@@ -122,15 +165,19 @@ 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\n", name);
+       g_print("lost name %s, exiting...\n", name);
+       exit(1);
 }
 
 void hostnamed_init() {
 
        guint bus_descriptor;
        GError *err = NULL;
-       
-       bus_descriptor = g_bus_own_name(G_BUS_TYPE_SYSTEM,
+       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,
@@ -138,6 +185,13 @@ void hostnamed_init() {
                                                    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);
+}