From 4458162a943a432b5f8517182e2ee7aab2590f85 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 3 Oct 2008 13:01:57 -0400 Subject: Initital server code. Includes test monitor task. --- server/service.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 server/service.c (limited to 'server/service.c') diff --git a/server/service.c b/server/service.c new file mode 100644 index 00000000..dd2e0fd0 --- /dev/null +++ b/server/service.c @@ -0,0 +1,95 @@ +/* + Based on: + SERVER SERVICE code from samba4 + + Copyright (C) Andrew Tridgell 2003-2005 + Copyright (C) Stefan (metze) Metzmacher 2004 + + This program 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 3 of the License, or + (at your option) any later version. + + This program 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 this program. If not, see . +*/ + +#include +#include "util/util.h" +#include "../talloc/talloc.h" +#include "../events/events.h" +#include "service.h" + +/* + a linked list of registered servers +*/ +static struct registered_server { + struct registered_server *next, *prev; + const char *service_name; + void (*task_init)(struct task_server *); +} *registered_servers; + +/* + register a server service. +*/ +int register_server_service(const char *name, + void (*task_init)(struct task_server *)) +{ + struct registered_server *srv; + srv = talloc(talloc_autofree_context(), struct registered_server); + if (NULL == srv) return RES_NOMEM; + srv->service_name = name; + srv->task_init = task_init; + DLIST_ADD_END(registered_servers, srv, struct registered_server *); + return RES_SUCCESS; +} + + +/* + initialise a server service +*/ +static int server_service_init(const char *name, struct event_context *ev) +{ + struct registered_server *srv; + for (srv=registered_servers; srv; srv=srv->next) { + if (strcasecmp(name, srv->service_name) == 0) { + return task_server_startup(ev, + srv->service_name, + srv->task_init); + } + } + return RES_INVALID_DATA; +} + + +/* + startup all of our server services +*/ +int server_service_startup(struct event_context *event_ctx, + const char **server_services) +{ + int i; + + if (!server_services) { + DEBUG(0,("server_service_startup: no endpoint servers configured\n")); + return RES_INVALID_DATA; + } + + for (i = 0; server_services[i]; i++) { + int status; + + status = server_service_init(server_services[i], event_ctx); + if (status != RES_SUCCESS) { + DEBUG(0,("Failed to start service '%s'\n", + server_services[i])); + return status; + } + } + + return RES_SUCCESS; +} -- cgit