" </method>" \
" <method name=\"GetJob\">" \
" <arg name=\"id\" type=\"u\" direction=\"in\"/>" \
- " <arg name=\"unit\" type=\"o\" direction=\"out\"/>" \
+ " <arg name=\"job\" type=\"o\" direction=\"out\"/>" \
" </method>" \
" <method name=\"ClearJobs\"/>" \
" <method name=\"ListUnits\">" \
" <method name=\"ListJobs\">" \
" <arg name=\"jobs\" type=\"a(usssoo)\" direction=\"out\"/>" \
" </method>" \
+ " <method name=\"Subscribe\"/>" \
+ " <method name=\"Unsubscribe\"/>" \
+ " <signal name=\"UnitNew\">" \
+ " <arg name=\"id\" type=\"s\"/>" \
+ " <arg name=\"unit\" type=\"o\"/>" \
+ " </signal>" \
+ " <signal name=\"UnitRemoved\">" \
+ " <arg name=\"id\" type=\"s\"/>" \
+ " <arg name=\"unit\" type=\"o\"/>" \
+ " </signal>" \
+ " <signal name=\"JobNew\">" \
+ " <arg name=\"id\" type=\"u\"/>" \
+ " <arg name=\"job\" type=\"o\"/>" \
+ " </signal>" \
+ " <signal name=\"JobRemoved\">" \
+ " <arg name=\"id\" type=\"u\"/>" \
+ " <arg name=\"job\" type=\"o\"/>" \
+ " </signal>" \
" </interface>" \
BUS_PROPERTIES_INTERFACE \
BUS_INTROSPECTABLE_INTERFACE
DBUS_TYPE_INVALID))
goto oom;
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "GetJob")) {
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "GetJob")) {
uint32_t id;
Job *j;
DBUS_TYPE_INVALID))
goto oom;
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ClearJobs")) {
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ClearJobs")) {
manager_clear_jobs(m);
if (!(reply = dbus_message_new_method_return(message)))
goto oom;
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ListUnits")) {
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ListUnits")) {
DBusMessageIter iter, sub;
Iterator i;
Unit *u;
if (!dbus_message_iter_close_container(&iter, &sub))
goto oom;
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ListJobs")) {
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "ListJobs")) {
DBusMessageIter iter, sub;
Iterator i;
Job *j;
if (!dbus_message_iter_close_container(&iter, &sub))
goto oom;
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "Subscribe")) {
+ char *client;
+
+ if (!(client = strdup(dbus_message_get_sender(message))))
+ goto oom;
+
+ r = set_put(m->subscribed, client);
+
+ if (r < 0)
+ return bus_send_error_reply(m, message, NULL, r);
+
+ if (!(reply = dbus_message_new_method_return(message)))
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1", "Unsubscribe")) {
+ char *client;
+
+ if (!(client = set_remove(m->subscribed, (char*) dbus_message_get_sender(message))))
+ return bus_send_error_reply(m, message, NULL, -ENOENT);
+
+ free(client);
+
+ if (!(reply = dbus_message_new_method_return(message)))
+ goto oom;
+
} else if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
char *introspection = NULL;
FILE *f;