/[hydra]/hydra/src/globals.h
ViewVC logotype

Contents of /hydra/src/globals.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.20 - (show annotations)
Mon Sep 30 18:18:52 2002 UTC (21 years, 6 months ago) by nmav
Branch: MAIN
CVS Tags: hydra_0_0_6, hydra_0_0_4, hydra_0_0_5
Changes since 1.19: +2 -2 lines
File MIME type: text/plain
Some cleanups in server version string generation.

1 /*
2 * Boa, an http server
3 * Copyright (C) 1995 Paul Phillips <paulp@go2net.com>
4 * Some changes Copyright (C) 1996,97 Larry Doolittle <ldoolitt@jlab.org>
5 * Some changes Copyright (C) 1997 Jon Nelson <jnelson@boa.org>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 1, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 *
21 */
22
23 /* $Id: globals.h,v 1.19 2002/09/30 17:16:54 nmav Exp $*/
24
25 #ifndef _GLOBALS_H
26 #define _GLOBALS_H
27
28 #ifdef ENABLE_SSL
29 # include <gnutls/gnutls.h>
30 #endif
31
32 typedef struct {
33 int socket;
34 int secure; /* ssl or not. NOTE: 0 or 1. Nothing else. */
35 int port;
36 int pending_requests;
37 } socket_type;
38
39 struct mmap_entry {
40 dev_t dev;
41 ino_t ino;
42 char *mmap;
43 int use_count;
44 size_t len;
45 int available;
46 int times_used;
47 };
48
49 typedef struct {
50 hic_shutdown_func shutdown;
51 hic_init_func init;
52 hic_request_func request;
53 void *dl_handle;
54 char* sym_prefix; /* ie. "_php" */
55 char* content_type; /* ie. "application/x-httpd-php" */
56 int content_type_len;
57 } hic_module_st;
58
59 struct alias {
60 char *fakename; /* URI path to file */
61 char *realname; /* Actual path to file */
62 int type; /* ALIAS, SCRIPTALIAS, REDIRECT */
63 int fake_len; /* strlen of fakename */
64 int real_len; /* strlen of realname */
65 struct alias *next;
66 };
67
68 typedef struct alias alias;
69
70 typedef struct _virthost {
71 char *ip; /* This virthost will be visible in this IP */
72 char *host; /* The hostname of the virtual host */
73 char* document_root; /* The document root of this virtual host */
74 char* user_dir; /* The user dir of this virtual host */
75 int user_dir_len; /* strlen of user_dir */
76 int ip_len; /* strlen of IP */
77 int host_len; /* strlen of hostname */
78 int document_root_len; /* strlen of document root */
79 alias *alias_hashtable[ALIAS_HASHTABLE_SIZE]; /* aliases in this virthost */
80 struct _virthost *next;
81 } virthost;
82
83 struct request { /* pending requests */
84 int fd; /* client's socket fd */
85 #ifdef ENABLE_SSL
86 GNUTLS_STATE ssl_state;
87 #endif
88 int secure; /* whether ssl or not */
89 int alert_to_send; /* in SEND_ALERT state */
90
91 int status; /* see #defines.h */
92 time_t time_last; /* time of last succ. op. */
93 char *pathname; /* pathname of requested file */
94 size_t range_start; /* send file from byte ... */
95 size_t range_stop; /* to byte */
96 size_t pipe_range_stop; /* This is used only if the file is sent by the pipe_read() method.
97 * Indicates how many bytes to send from a file (actually a copy of range_stop,
98 * but it is modified. */
99 int simple; /* simple request? */
100 int keepalive; /* keepalive status */
101 int kacount; /* keepalive count */
102
103 int data_fd; /* fd of data */
104 unsigned long filesize; /* filesize */
105 unsigned long filepos; /* position in file */
106 char *data_mem; /* mmapped/malloced char array */
107 int method; /* M_GET, M_POST, etc. */
108
109 char *logline; /* line to log file */
110
111 char *header_line; /* beginning of un or incompletely processed header line */
112 char *header_end; /* last known end of header, or end of processed data */
113 int parse_pos; /* how much have we parsed */
114 int client_stream_pos; /* how much have we read... */
115
116 int buffer_start; /* where the buffer starts */
117 int buffer_end; /* where the buffer ends */
118
119 char *http_version; /* HTTP/?.? of req */
120 int response_status; /* R_NOT_FOUND etc. */
121
122 char *if_modified_since; /* If-Modified-Since */
123 time_t last_modified; /* Last-modified: */
124
125 char *if_none_match_etag;
126 char *if_match_etag;
127 char *if_range_etag; /* These are the Etags sent by the client
128 * In If-* requests.
129 */
130 int if_types; /* If-Match, If-None-Match, If-Range
131 * and OR of the MATCH_* definitions.
132 */
133
134 char local_ip_addr[NI_MAXHOST]; /* for virtualhost */
135 char *hostname;
136 char document_root[MAX_PATH_LENGTH + 1];
137 char user_dir[MAX_USER_DIR_LENGTH + 1];
138
139 /* CGI vars */
140
141 int remote_port; /* could be used for ident */
142
143 char remote_ip_addr[NI_MAXHOST]; /* after inet_ntoa */
144
145 int is_cgi; /* true if CGI/NPH */
146 int cgi_status;
147 int cgi_env_index; /* index into array */
148
149 /* Agent and referer for logfiles */
150 char *header_user_agent;
151 char *header_referer;
152
153 int post_data_fd; /* fd for post data tmpfile */
154
155 char *path_info; /* env variable */
156 char *path_translated; /* env variable */
157 char *script_name; /* env variable */
158 char *query_string; /* env variable */
159 char *content_type; /* env variable */
160 char *content_length; /* env variable */
161
162 struct mmap_entry *mmap_entry_var;
163
164 struct request *next; /* next */
165 struct request *prev; /* previous */
166
167 /* everything below this line is kept regardless */
168 char buffer[BUFFER_SIZE + 1]; /* generic I/O buffer */
169 char request_uri[MAX_HEADER_LENGTH + 1]; /* uri */
170 char client_stream[CLIENT_STREAM_SIZE]; /* data from client - fit or be hosed */
171 char *cgi_env[CGI_ENV_MAX + 4]; /* CGI environment */
172
173 #ifdef ACCEPT_ON
174 char accept[MAX_ACCEPT_LENGTH]; /* Accept: fields */
175 #endif
176 };
177
178 typedef struct request request;
179
180 struct status {
181 long requests;
182 long errors;
183 };
184
185
186 extern char *optarg; /* For getopt */
187 extern FILE *yyin; /* yacc input */
188
189 typedef struct {
190 #ifdef ENABLE_SMP
191 pthread_t tid;
192 #endif
193 request* request_ready;
194 request* request_block;
195 request* request_free;
196 socket_type server_s[2];
197 fd_set block_read_fdset;
198 fd_set block_write_fdset;
199 struct timeval req_timeout;
200 int sighup_flag; /* 1 => signal has happened, needs attention */
201 int sigchld_flag; /* 1 => signal has happened, needs attention */
202 int sigalrm_flag; /* 1 => signal has happened, needs attention */
203 int sigusr1_flag; /* 1 => signal has happened, needs attention */
204 int sigterm_flag; /* lame duck mode */
205
206 int max_fd;
207
208 int sockbufsize;
209 struct status status;
210 int total_connections;
211
212 /* for SIGBUS handling */
213 jmp_buf env;
214 int handle_sigbus;
215
216 } server_params;
217
218 /* HIC request stuff
219 */
220 typedef struct _hic_request {
221 struct _hic_request *next;
222 struct _hic_request *prev;
223 hic_stuff command;
224 } hic_request;
225
226 /* parameters passed to a hic thread */
227 typedef struct {
228 #ifdef ENABLE_SMP
229 pthread_t tid;
230 pthread_mutex_t lock;
231 #endif
232 int sigchld_flag; /* 1 => signal has happened, needs attention */
233 hic_request* request_head;
234 } hic_params;
235
236 /* global server variables */
237
238 extern char *access_log_name;
239 extern char *error_log_name;
240 extern char *cgi_log_name;
241 extern int cgi_log_fd;
242 extern int use_localtime;
243
244 extern int max_files_cache;
245 extern int max_file_size_cache;
246
247 extern int boa_ssl;
248
249 extern int server_port;
250 extern int ssl_port;
251 extern uid_t server_uid;
252 extern gid_t server_gid;
253 extern char *server_admin;
254 extern char *server_root;
255 extern char *server_name;
256 extern char *server_ip;
257 extern int max_fd;
258 extern int devnullfd;
259
260 extern char *default_type;
261 extern char *default_charset;
262 extern char *dirmaker;
263 extern char *mime_types;
264 extern char *cachedir;
265
266 extern char *default_document_root;
267 extern int default_document_root_size;
268
269 extern char *tempdir;
270 extern int tempdir_len;
271
272 extern char *cgi_path;
273 extern int single_post_limit;
274
275 extern int ka_timeout;
276 extern int ka_max;
277
278 extern time_t start_time;
279
280 extern int max_server_threads;
281 extern int max_hic_threads;
282
283 extern int pending_requests;
284 extern long int max_connections;
285
286 extern int verbose_cgi_logs;
287
288 extern int backlog;
289 extern time_t current_time;
290
291 /* Global stuff that is shared by all threads.
292 * Use with extreme care, or don't use.
293 */
294 extern server_params *global_server_params;
295 extern int global_server_params_size;
296
297 #ifdef ENABLE_HIC
298 extern hic_params *global_hic_params;
299 extern int global_hic_params_size;
300 #endif
301
302 /* These contain a string of the form: "Server: Hydra/0.0.x\r\n"
303 */
304 extern char boa_tls_version[];
305 extern char boa_version[];
306
307 #endif

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26