chiark / gitweb /
automount: implement automount unit type
[elogind.git] / dbus-unit.c
index f48433b60bc16cabe3de97f5b624dd758128c556..6bccec14a71fef7eee247b60cf3e81a388fe099d 100644 (file)
@@ -49,7 +49,8 @@ static const char introspection[] =
         "  <property name=\"Description\" type=\"s\" access=\"read\"/>"
         "  <property name=\"LoadState\" type=\"s\" access=\"read\"/>"
         "  <property name=\"ActiveState\" type=\"s\" access=\"read\"/>"
-        "  <property name=\"LoadPath\" type=\"s\" access=\"read\"/>"
+        "  <property name=\"SubState\" type=\"s\" access=\"read\"/>"
+        "  <property name=\"FragmentPath\" type=\"s\" access=\"read\"/>"
         "  <property name=\"ActiveEnterTimestamp\" type=\"t\" access=\"read\"/>"
         "  <property name=\"ActiveExitTimestamp\" type=\"t\" access=\"read\"/>"
         "  <property name=\"CanReload\" type=\"b\" access=\"read\"/>"
@@ -60,23 +61,6 @@ static const char introspection[] =
         BUS_INTROSPECTABLE_INTERFACE
         "</node>";
 
-static int bus_unit_append_id(Manager *m, DBusMessageIter *i, const char *property, void *data) {
-        Unit *u = data;
-        const char *id;
-
-        assert(m);
-        assert(i);
-        assert(property);
-        assert(u);
-
-        id = unit_id(u);
-
-        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &id))
-                return -ENOMEM;
-
-        return 0;
-}
-
 static int bus_unit_append_description(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
         const char *d;
@@ -94,7 +78,9 @@ static int bus_unit_append_description(Manager *m, DBusMessageIter *i, const cha
         return 0;
 }
 
-static int bus_unit_append_load_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_unit_append_load_state, unit_load_state, UnitLoadState);
+
+static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
         const char *state;
 
@@ -103,7 +89,7 @@ static int bus_unit_append_load_state(Manager *m, DBusMessageIter *i, const char
         assert(property);
         assert(u);
 
-        state = unit_load_state_to_string(u->meta.load_state);
+        state = unit_active_state_to_string(unit_active_state(u));
 
         if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &state))
                 return -ENOMEM;
@@ -111,7 +97,7 @@ static int bus_unit_append_load_state(Manager *m, DBusMessageIter *i, const char
         return 0;
 }
 
-static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+static int bus_unit_append_sub_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
         const char *state;
 
@@ -120,7 +106,7 @@ static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const ch
         assert(property);
         assert(u);
 
-        state = unit_active_state_to_string(unit_active_state(u));
+        state = unit_sub_state_to_string(u);
 
         if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &state))
                 return -ENOMEM;
@@ -213,11 +199,12 @@ static int bus_unit_append_job(Manager *m, DBusMessageIter *i, const char *prope
 static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusMessage *message) {
 
         const BusProperty properties[] = {
-                { "org.freedesktop.systemd1.Unit", "Id",                   bus_unit_append_id,           "s",    u                               },
+                { "org.freedesktop.systemd1.Unit", "Id",                   bus_property_append_string,   "s",    u->meta.id                      },
                 { "org.freedesktop.systemd1.Unit", "Description",          bus_unit_append_description,  "s",    u                               },
-                { "org.freedesktop.systemd1.Unit", "LoadState",            bus_unit_append_load_state,   "s",    u                               },
+                { "org.freedesktop.systemd1.Unit", "LoadState",            bus_unit_append_load_state,   "s",    &u->meta.load_state             },
                 { "org.freedesktop.systemd1.Unit", "ActiveState",          bus_unit_append_active_state, "s",    u                               },
-                { "org.freedesktop.systemd1.Unit", "LoadPath",             bus_property_append_string,   "s",    u->meta.load_path               },
+                { "org.freedesktop.systemd1.Unit", "SubState",             bus_unit_append_sub_state,    "s",    u                               },
+                { "org.freedesktop.systemd1.Unit", "FragmentPath",         bus_property_append_string,   "s",    u->meta.fragment_path           },
                 { "org.freedesktop.systemd1.Unit", "ActiveEnterTimestamp", bus_property_append_uint64,   "t",    &u->meta.active_enter_timestamp },
                 { "org.freedesktop.systemd1.Unit", "ActiveExitTimestamp",  bus_property_append_uint64,   "t",    &u->meta.active_exit_timestamp  },
                 { "org.freedesktop.systemd1.Unit", "CanReload",            bus_unit_append_can_reload,   "b",    u                               },
@@ -278,7 +265,7 @@ static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusMessage *message
         }
 
         if (reply) {
-                if (!dbus_connection_send(m->bus, reply, NULL))
+                if (!dbus_connection_send(m->api_bus, reply, NULL))
                         goto oom;
 
                 dbus_message_unref(reply);
@@ -349,21 +336,19 @@ void bus_unit_send_change_signal(Unit *u) {
                 if (!(m = dbus_message_new_signal(p, "org.freedesktop.systemd1.Unit", "Changed")))
                         goto oom;
         } else {
-                const char *id;
                 /* Send a new signal */
 
                 if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1", "UnitNew")))
                         goto oom;
 
-                id = unit_id(u);
                 if (!dbus_message_append_args(m,
-                                              DBUS_TYPE_STRING, &id,
+                                              DBUS_TYPE_STRING, &u->meta.id,
                                               DBUS_TYPE_OBJECT_PATH, &p,
                                               DBUS_TYPE_INVALID))
                         goto oom;
         }
 
-        if (!dbus_connection_send(u->meta.manager->bus, m, NULL))
+        if (!dbus_connection_send(u->meta.manager->api_bus, m, NULL))
                 goto oom;
 
         free(p);
@@ -385,7 +370,6 @@ oom:
 void bus_unit_send_removed_signal(Unit *u) {
         char *p = NULL;
         DBusMessage *m = NULL;
-        const char *id;
 
         assert(u);
 
@@ -398,14 +382,13 @@ void bus_unit_send_removed_signal(Unit *u) {
         if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1", "UnitRemoved")))
                 goto oom;
 
-        id = unit_id(u);
         if (!dbus_message_append_args(m,
-                                      DBUS_TYPE_STRING, &id,
+                                      DBUS_TYPE_STRING, &u->meta.id,
                                       DBUS_TYPE_OBJECT_PATH, &p,
                                       DBUS_TYPE_INVALID))
                 goto oom;
 
-        if (!dbus_connection_send(u->meta.manager->bus, m, NULL))
+        if (!dbus_connection_send(u->meta.manager->api_bus, m, NULL))
                 goto oom;
 
         free(p);