+
+const char* name_id(Name *n) {
+ assert(n);
+
+ return set_first(n->meta.names);
+}
+
+void name_dump(Name *n, FILE *f) {
+
+ static const char* const state_table[_NAME_STATE_MAX] = {
+ [NAME_STUB] = "stub",
+ [NAME_LOADED] = "loaded",
+ [NAME_FAILED] = "failed"
+ };
+
+ static const char* const socket_state_table[_SOCKET_STATE_MAX] = {
+ [SOCKET_DEAD] = "dead",
+ [SOCKET_BEFORE] = "before",
+ [SOCKET_START_PRE] = "start-pre",
+ [SOCKET_START] = "start",
+ [SOCKET_START_POST] = "start-post",
+ [SOCKET_LISTENING] = "listening",
+ [SOCKET_RUNNING] = "running",
+ [SOCKET_STOP_PRE] = "stop-pre",
+ [SOCKET_STOP] = "stop",
+ [SOCKET_STOP_POST] = "stop-post",
+ [SOCKET_MAINTAINANCE] = "maintainance"
+ };
+
+ void *state;
+ char *t;
+
+ assert(n);
+
+ fprintf(f,
+ "Name %s\n"
+ "\tDescription: %s\n"
+ "\tState: %s\n",
+ name_id(n),
+ n->meta.description ? n->meta.description : name_id(n),
+ state_table[n->meta.state]);
+
+ fprintf(f, "\tNames: ");
+ SET_FOREACH(t, n->meta.names, state)
+ fprintf(f, "%s ", t);
+ fprintf(f, "\n");
+
+ switch (n->meta.type) {
+ case NAME_SOCKET: {
+ int r;
+ char *s = NULL;
+ const char *t;
+
+ if ((r = address_print(&n->socket.address, &s)) < 0)
+ t = strerror(-r);
+ else
+ t = s;
+
+ fprintf(f, "\t%s in state %s\n", t, socket_state_table[n->socket.state]);
+ free(s);
+ break;
+ }
+
+ default:
+ ;
+ }
+
+ if (n->meta.job) {
+ fprintf(f, "\t");
+ job_dump(n->meta.job, f);
+ }
+}