summaryrefslogtreecommitdiffstats
path: root/source4/samba/service.h
diff options
context:
space:
mode:
Diffstat (limited to 'source4/samba/service.h')
-rw-r--r--source4/samba/service.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/source4/samba/service.h b/source4/samba/service.h
new file mode 100644
index 0000000..35e3f51
--- /dev/null
+++ b/source4/samba/service.h
@@ -0,0 +1,111 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ SERVER SERVICE code
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __SERVICE_H__
+#define __SERVICE_H__
+
+
+#include "samba/service_stream.h"
+#include "samba/service_task.h"
+
+struct process_details {
+ unsigned int instances;
+};
+
+static const struct process_details initial_process_details = {
+ .instances = 0
+};
+
+struct service_details {
+ /*
+ * Prevent the standard process model from forking a new worker
+ * process when accepting a new connection. Do this when the service
+ * relies on shared state, or the over-head of forking would be a
+ * significant part of the response time
+ */
+ bool inhibit_fork_on_accept;
+ /*
+ * Prevent the pre-fork process model from pre-forking any worker
+ * processes. In this mode pre-fork is equivalent to standard with
+ * inhibit_fork_on_accept set.
+ */
+ bool inhibit_pre_fork;
+ /*
+ * Initialise the server task.
+ */
+ NTSTATUS (*task_init) (struct task_server *);
+ /*
+ * post fork processing this is called:
+ * - standard process model
+ * immediately after the task_init.
+ *
+ * - single process model
+ * immediately after the task_init
+ *
+ * - prefork process model, inhibit_pre_fork = true
+ * immediately after the task_init
+ *
+ * - prefork process model, inhibit_pre_fork = false
+ * after each service worker has forked. It is not run on the
+ * service master process.
+ *
+ * The post fork hook is not called in the standard model if a new
+ * process is forked on a new connection. It is instead called
+ * immediately after the task_init.
+ */
+ void (*post_fork) (struct task_server *, struct process_details *);
+ /*
+ * This is called before entering the tevent_loop_wait():
+ *
+ * Note that task_server->msg_ctx, task_server->event_ctx
+ * and maybe other fields might have changed compared to
+ * task_init()/post_fork(). The struct task_server pointer
+ * may also change!
+ *
+ * before loop processing this is called in this order:
+ * - standard process model
+ * task_init() -> post_fork() -> before_loop()
+ *
+ * - single process model
+ * task_init() -> post_fork() -> before_loop()
+ *
+ * - prefork process model, inhibit_pre_fork = true
+ * task_init() -> post_fork() -> before_loop()
+ *
+ * - prefork process model, inhibit_pre_fork = false
+ * In the service master process:
+ * task_init(master) -> before_loop(master)
+ *
+ * After each service worker has forked:
+ * post_fork(worker) -> before_loop(worker)
+ *
+ * This gives the service a chance to register messaging
+ * and/or event handlers on the correct contexts.
+ */
+ void (*before_loop) (struct task_server *);
+};
+
+NTSTATUS samba_service_init(void);
+
+#include "samba/service_proto.h"
+
+#endif /* __SERVICE_H__ */