513e90378108dd38ed2f20327d26bcbd8147f99a
[samba.git] / source4 / smbd / process_model.h
1 /* 
2    Unix SMB/CIFS implementation.
3
4    process model manager - structures
5
6    Copyright (C) Andrew Tridgell 1992-2005
7    Copyright (C) James J Myers 2003 <myersjj@samba.org>
8    Copyright (C) Stefan (metze) Metzmacher 2004-2005
9    
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14    
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19    
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 */
23
24 #ifndef __PROCESS_MODEL_H__
25 #define __PROCESS_MODEL_H__
26
27 #include "lib/socket/socket.h"
28 #include "smbd/service_task.h"
29
30 /* modules can use the following to determine if the interface has changed
31  * please increment the version number after each interface change
32  * with a comment and maybe update struct process_model_critical_sizes.
33  */
34 /* version 1 - initial version - metze */
35 #define PROCESS_MODEL_VERSION 1
36
37 /* the process model operations structure - contains function pointers to 
38    the model-specific implementations of each operation */
39 struct model_ops {
40         /* the name of the process_model */
41         const char *name;
42
43         /* called at startup when the model is selected */
44         void (*model_init)(struct event_context *);
45
46         /* function to accept new connection */
47         void (*accept_connection)(struct event_context *, struct socket_context *, 
48                                   void (*)(struct event_context *, struct socket_context *, 
49                                            struct server_id , void *), 
50                                   void *);
51
52         /* function to create a task */
53         void (*new_task)(struct event_context *, 
54                          void (*)(struct event_context *, struct server_id, void *),
55                          void *);
56
57         /* function to terminate a connection or task */
58         void (*terminate)(struct event_context *, const char *reason);
59
60         /* function to set a title for the connection or task */
61         void (*set_title)(struct event_context *, const char *title);
62 };
63
64 /* this structure is used by modules to determine the size of some critical types */
65 struct process_model_critical_sizes {
66         int interface_version;
67         int sizeof_model_ops;
68 };
69
70 #include "smbd/process_model_proto.h"
71
72 #endif /* __PROCESS_MODEL_H__ */