2006-03-14 18:03:25 +03:00
/*
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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2006-03-14 18:03:25 +03:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2006-03-14 18:03:25 +03:00
*/
# ifndef __SERVICE_H__
# define __SERVICE_H__
2017-09-14 22:09:23 +03:00
2020-11-20 17:27:17 +03:00
# include "samba/service_stream.h"
# include "samba/service_task.h"
2017-09-14 22:09:23 +03:00
2018-08-29 04:16:08 +03:00
struct process_details {
unsigned int instances ;
} ;
static const struct process_details initial_process_details = {
. instances = 0
} ;
2017-09-14 22:09:23 +03:00
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 .
*/
2018-08-23 00:35:52 +03:00
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 .
*/
2018-08-29 04:16:08 +03:00
void ( * post_fork ) ( struct task_server * , struct process_details * ) ;
2023-03-01 12:48:18 +03:00
/*
* 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 * ) ;
2017-09-14 22:09:23 +03:00
} ;
2021-08-27 14:06:00 +03:00
NTSTATUS samba_service_init ( void ) ;
2020-11-20 17:27:17 +03:00
# include "samba/service_proto.h"
2006-03-14 18:03:25 +03:00
# endif /* __SERVICE_H__ */