chiark / gitweb /
systemadm: fix signed comparison issue
[elogind.git] / manager.h
index 88b8509cfe1c50679c456d894e2c9b086c8f4e16..ea4e0a4c6f4a9b15e65685dcd9c745058c309a3f 100644 (file)
--- a/manager.h
+++ b/manager.h
@@ -3,10 +3,31 @@
 #ifndef foomanagerhfoo
 #define foomanagerhfoo
 
+/***
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
 #include <stdbool.h>
 #include <inttypes.h>
 #include <stdio.h>
 
+#include <dbus/dbus.h>
+
 typedef struct Manager Manager;
 typedef enum WatchType WatchType;
 typedef struct Watch Watch;
@@ -16,13 +37,21 @@ enum WatchType {
         WATCH_SIGNAL,
         WATCH_FD,
         WATCH_TIMER,
-        WATCH_MOUNT
+        WATCH_MOUNT,
+        WATCH_UDEV,
+        WATCH_DBUS_WATCH,
+        WATCH_DBUS_TIMEOUT
 };
 
 struct Watch {
         int fd;
         WatchType type;
-        union Unit *unit;
+        bool fd_is_dupped;
+        union {
+                union Unit *unit;
+                DBusWatch *bus_watch;
+                DBusTimeout *bus_timeout;
+        } data;
 };
 
 #include "unit.h"
@@ -30,6 +59,7 @@ struct Watch {
 #include "hashmap.h"
 #include "list.h"
 #include "set.h"
+#include "dbus.h"
 
 #define SPECIAL_DEFAULT_TARGET "default.target"
 #define SPECIAL_SYSLOG_SERVICE "syslog.service"
@@ -66,6 +96,10 @@ struct Manager {
         bool dispatching_load_queue:1;
         bool dispatching_run_queue:1;
 
+        bool is_init:1;
+
+        bool request_bus_dispatch:1;
+
         Hashmap *watch_pids;  /* pid => Unit object n:1 */
 
         int epoll_fd;
@@ -74,10 +108,15 @@ struct Manager {
 
         /* Data specific to the device subsystem */
         struct udev* udev;
+        struct udev_monitor* udev_monitor;
+        Watch udev_watch;
 
         /* Data specific to the mount subsystem */
         FILE *proc_self_mountinfo;
         Watch mount_watch;
+
+        /* Data specific to the D-Bus subsystem */
+        DBusConnection *bus;
 };
 
 Manager* manager_new(void);
@@ -88,6 +127,9 @@ int manager_coldplug(Manager *m);
 Job *manager_get_job(Manager *m, uint32_t id);
 Unit *manager_get_unit(Manager *m, const char *name);
 
+int manager_get_unit_from_dbus_path(Manager *m, const char *s, Unit **_u);
+int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
+
 int manager_load_unit(Manager *m, const char *path_or_name, Unit **_ret);
 int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool force, Job **_ret);