#include "set.h"
#include "util.h"
#include "list.h"
+#include "socket-util.h"
typedef enum NameType {
NAME_SERVICE = 0,
typedef enum NameState {
NAME_STUB,
NAME_LOADED,
- NAME_FAILED
+ NAME_FAILED,
+ _NAME_STATE_MAX
} NameState;
-struct Meta {
- Manager *manager;
- NameType type;
- NameState state;
-
- char **names;
-
+typedef enum NameDependency {
/* Positive dependencies */
- Set *requires, *soft_requires, *wants, *requisite, *soft_requisite;
- Set *required_by; /* inverse of 'requires', 'soft_requires', 'requisite' and 'soft_requisite' is 'required_by' */
+ NAME_REQUIRES,
+ NAME_SOFT_REQUIRES,
+ NAME_WANTS,
+ NAME_REQUISITE,
+ NAME_SOFT_REQUISITE,
+ NAME_REQUIRED_BY, /* inverse of 'requires' and 'requisite' is 'required_by' */
+ NAME_WANTED_BY, /* inverse of 'wants', 'soft_requires' and 'soft_requisite' is 'wanted_by' */
/* Negative dependencies */
- Set *conflicts; /* inverse of 'conflicts' is 'conflicts' */
+ NAME_CONFLICTS, /* inverse of 'conflicts' is 'conflicts' */
/* Order */
- Set *before, *after; /* inverse of before is after and vice versa */
+ NAME_BEFORE, /* inverse of before is after and vice versa */
+ NAME_AFTER,
+ _NAME_DEPENDENCY_MAX
+} NameDependency;
+
+struct Meta {
+ Manager *manager;
+ NameType type;
+ NameState state;
+
+ Set *names;
+ Set *dependencies[_NAME_DEPENDENCY_MAX];
- /* Information */
char *description;
/* If there is something to do with this name, then this is
SOCKET_STOP_PRE,
SOCKET_STOP,
SOCKET_STOP_POST,
- SOCKET_MAINTAINANCE
+ SOCKET_MAINTAINANCE,
+ _SOCKET_STATE_MAX
} SocketState;
struct Socket {
Meta meta;
SocketState state;
+
+ Address address;
int *fds;
unsigned n_fds;
bool name_is_ready(Name *name);
NameType name_type_from_string(const char *n);
+bool name_is_valid(const char *n);
Name *name_new(Manager *m);
void name_free(Name *name);
int name_link(Name *name);
+int name_link_names(Name *name, bool replace);
+int name_merge(Name *name, Name *other);
+int name_sanitize(Name *n);
+int name_load(Name *name);
+const char* name_id(Name *n);
-int name_augment(Name *n);
+void name_dump(Name *n, FILE *f, const char *prefix);
#endif