Added handle member to statserv_control.
[yaz-moved-to-github.git] / include / yaz / statserv.h
1 /*
2  * Copyright (c) 1995-2000, Index Data.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation, in whole or in part, for any purpose, is hereby granted,
6  * provided that:
7  *
8  * 1. This copyright and permission notice appear in all copies of the
9  * software and its documentation. Notices of copyright or attribution
10  * which appear at the beginning of any file must remain unchanged.
11  *
12  * 2. The name of Index Data or the individual authors may not be used to
13  * endorse or promote products derived from this software without specific
14  * prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
18  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19  * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
20  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
21  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
22  * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  *
26  * $Log: statserv.h,v $
27  * Revision 1.4  2000-03-15 12:59:49  adam
28  * Added handle member to statserv_control.
29  *
30  * Revision 1.3  2000/03/14 09:06:11  adam
31  * Added POSIX threads support for frontend server.
32  *
33  * Revision 1.2  2000/02/28 11:20:06  adam
34  * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL.
35  *
36  * Revision 1.1  1999/11/30 13:47:11  adam
37  * Improved installation. Moved header files to include/yaz.
38  *
39  * Revision 1.17  1999/07/06 12:17:15  adam
40  * Added option -1 that runs server once (for profiling purposes).
41  *
42  * Revision 1.16  1999/06/10 11:45:30  adam
43  * Added bend_start, bend_stop handlers and removed pre_init.
44  * Handlers bend_start/bend_stop are called when service/daemon is
45  * started/stopped.
46  *
47  * Revision 1.15  1999/04/16 14:45:55  adam
48  * Added interface for tcpd wrapper for access control.
49  *
50  * Revision 1.14  1999/02/02 13:57:32  adam
51  * Uses preprocessor define WIN32 instead of WINDOWS to build code
52  * for Microsoft WIN32.
53  *
54  * Revision 1.13  1998/02/10 10:28:56  adam
55  * Added app_name, service_dependencies, service_display_name and
56  * options_func. options_func allows us to specify a different function
57  * to interogate the command line arguments. The other members allow us
58  * to pass the full service details accross to the service manager (CW).
59  *
60  * Revision 1.??? 1997/12/18   Chas
61  * Added app_name, service_dependencies, service_display_name and 
62  * options_func. options_func allows us to specify a different function 
63  * to interogate the command line arguments. The other members allow us
64  * to pass the full service details accross to the service manager.
65  *
66  * Revision 1.12  1997/11/07 13:31:47  adam
67  * Added NT Service name part of statserv_options_block. Moved NT
68  * service utility to server library.
69  *
70  * Revision 1.11  1997/10/27 14:03:01  adam
71  * Added new member to statserver_options_block, pre_init, which
72  * specifies a callback to be invoked after command line parsing and
73  * before the server listens for the first time.
74  *
75  * Revision 1.10  1997/09/01 09:31:26  adam
76  * Removed definition statserv_remove to eventl.h. (A hack really).
77  *
78  * Revision 1.9  1997/09/01 08:49:53  adam
79  * New windows NT/95 port using MSV5.0. To export DLL functions the
80  * YAZ_EXPORT modifier was added. Defined in yconfig.h.
81  *
82  * Revision 1.8  1997/05/14 06:53:51  adam
83  * C++ support.
84  *
85  * Revision 1.7  1995/09/29 17:12:12  quinn
86  * Smallish
87  *
88  * Revision 1.6  1995/09/27  15:02:53  quinn
89  * Modified function heads & prototypes.
90  *
91  * Revision 1.5  1995/06/19  12:38:31  quinn
92  * Reorganized include-files. Added small features.
93  *
94  * Revision 1.4  1995/06/15  07:45:08  quinn
95  * Moving to v3.
96  *
97  * Revision 1.3  1995/05/16  08:50:38  quinn
98  * License, documentation, and memory fixes
99  *
100  *
101  */
102
103 #ifndef STATSERVER_H
104 #define STATSERVER_H
105
106 #include <yaz/yconfig.h>
107 #include <yaz/odr.h>
108 #include <yaz/oid.h>
109
110 YAZ_BEGIN_CDECL
111     
112 typedef struct statserv_options_block
113 {
114     int dynamic;                  /* fork on incoming requests */
115     int threads;                  /* use threads */
116     int one_shot;                 /* one session then exit(1) */
117     int loglevel;                 /* desired logging-level */
118     char apdufile[ODR_MAXNAME+1]; /* file for pretty-printed PDUs */
119     char logfile[ODR_MAXNAME+1];  /* file for diagnostic output */
120     char default_listen[1024];    /* 0 == no default listen */
121     enum oid_proto default_proto; /* PROTO_SR or PROTO_Z3950 */
122     int idle_timeout;             /* how many minutes to wait before closing */
123     int maxrecordsize;            /* maximum value for negotiation */
124     char configname[ODR_MAXNAME+1];  /* given to the backend in bend_init */
125     char setuid[ODR_MAXNAME+1];     /* setuid to this user after binding */
126     void (*bend_start)(struct statserv_options_block *p);
127     void (*bend_stop)(struct statserv_options_block *p);
128     int (*options_func)(int argc, char **argv);
129     int (*check_ip)(void *cd, const char *addr, int len, int type);
130     char daemon_name[128];
131     int inetd;                    /* Do we use the inet deamon or not */
132
133     void *handle;                 /* Handle */
134 #ifdef WIN32
135     /* We only have these members for the windows version */
136     /* They seemed a bit large to have them there in general */
137     char service_name[128];         /* NT Service Name */
138     char app_name[128];             /* Application Name */
139     char service_dependencies[128]; /* The services we are dependent on */
140     char service_display_name[128]; /* The service display name */
141 #endif /* WIN32 */
142 } statserv_options_block;
143     
144 int statserv_main(int argc, char **argv);
145 int statserv_start(int argc, char **argv);
146 void statserv_closedown(void);
147 statserv_options_block *statserv_getcontrol(void);
148 void statserv_setcontrol(statserv_options_block *block);
149
150 int check_ip_tcpd(void *cd, const char *addr, int len, int type);
151
152 YAZ_END_CDECL
153
154 #endif