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

Annotation of /hydra/src/globals.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (hide annotations)
Wed Sep 25 06:42:34 2002 UTC (21 years, 6 months ago) by nmav
Branch: MAIN
Changes since 1.7: +15 -13 lines
File MIME type: text/plain
Cleanups. Added support for 3 argument options in the grammar (I'll probably rewrite it soon). Changed the Alias, ScriptAlias and Redirect options, to use the virtual hosting stuff.

1 nmav 1.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 nmav 1.8 /* $Id: globals.h,v 1.7 2002/09/24 21:47:26 nmav Exp $*/
24 nmav 1.1
25     #ifndef _GLOBALS_H
26     #define _GLOBALS_H
27    
28     #include <gnutls/gnutls.h>
29    
30     typedef struct {
31     int socket;
32 nmav 1.3 int secure; /* ssl or not. NOTE: 0 or 1. Nothing else. */
33 nmav 1.5 int port;
34 nmav 1.1 int pending_requests;
35     } socket_type;
36    
37     struct mmap_entry {
38     dev_t dev;
39     ino_t ino;
40     char *mmap;
41     int use_count;
42     size_t len;
43     int available;
44 nmav 1.2 int times_used;
45 nmav 1.1 };
46    
47 nmav 1.8 struct alias {
48     char *fakename; /* URI path to file */
49     char *realname; /* Actual path to file */
50     int type; /* ALIAS, SCRIPTALIAS, REDIRECT */
51     int fake_len; /* strlen of fakename */
52     int real_len; /* strlen of realname */
53     struct alias *next;
54     };
55    
56     typedef struct alias alias;
57    
58 nmav 1.6 typedef struct _virthost {
59     char *ip; /* This virthost will be visible in this IP */
60     char *host; /* The hostname of the virtual host */
61     char* document_root; /* The document root of this virtual host */
62     char* user_dir; /* The user dir of this virtual host */
63     int user_dir_len; /* strlen of user_dir */
64     int ip_len; /* strlen of IP */
65     int host_len; /* strlen of hostname */
66     int document_root_len; /* strlen of document root */
67 nmav 1.8 alias *alias_hashtable[ALIAS_HASHTABLE_SIZE]; /* aliases in this virthost */
68 nmav 1.6 struct _virthost *next;
69     } virthost;
70    
71 nmav 1.1 struct request { /* pending requests */
72     int fd; /* client's socket fd */
73     GNUTLS_STATE ssl_state;
74     int secure; /* whether ssl or not */
75     int alert_to_send; /* in SEND_ALERT state */
76    
77     int status; /* see #defines.h */
78     time_t time_last; /* time of last succ. op. */
79     char *pathname; /* pathname of requested file */
80 nmav 1.4 size_t range_start; /* send file from byte ... */
81     size_t range_stop; /* to byte */
82     size_t pipe_range_stop; /* This is used only if the file is sent by the pipe_read() method.
83     * Indicates how many bytes to send from a file (actually a copy of range_stop,
84     * but it is modified. */
85 nmav 1.1 int simple; /* simple request? */
86     int keepalive; /* keepalive status */
87     int kacount; /* keepalive count */
88    
89     int data_fd; /* fd of data */
90     unsigned long filesize; /* filesize */
91     unsigned long filepos; /* position in file */
92     char *data_mem; /* mmapped/malloced char array */
93     int method; /* M_GET, M_POST, etc. */
94    
95     char *logline; /* line to log file */
96    
97     char *header_line; /* beginning of un or incompletely processed header line */
98     char *header_end; /* last known end of header, or end of processed data */
99     int parse_pos; /* how much have we parsed */
100     int client_stream_pos; /* how much have we read... */
101    
102     int buffer_start; /* where the buffer starts */
103     int buffer_end; /* where the buffer ends */
104    
105     char *http_version; /* HTTP/?.? of req */
106     int response_status; /* R_NOT_FOUND etc. */
107    
108     char *if_modified_since; /* If-Modified-Since */
109     time_t last_modified; /* Last-modified: */
110    
111     char local_ip_addr[NI_MAXHOST]; /* for virtualhost */
112 nmav 1.8 char *hostname;
113 nmav 1.7 char document_root[MAX_PATH_LENGTH + 1];
114 nmav 1.8 char user_dir[MAX_USER_DIR_LENGTH + 1];
115 nmav 1.1
116     /* CGI vars */
117    
118     int remote_port; /* could be used for ident */
119    
120     char remote_ip_addr[NI_MAXHOST]; /* after inet_ntoa */
121    
122     int is_cgi; /* true if CGI/NPH */
123     int cgi_status;
124     int cgi_env_index; /* index into array */
125    
126     /* Agent and referer for logfiles */
127     char *header_user_agent;
128     char *header_referer;
129    
130     int post_data_fd; /* fd for post data tmpfile */
131    
132     char *path_info; /* env variable */
133     char *path_translated; /* env variable */
134     char *script_name; /* env variable */
135     char *query_string; /* env variable */
136     char *content_type; /* env variable */
137     char *content_length; /* env variable */
138    
139     struct mmap_entry *mmap_entry_var;
140    
141     struct request *next; /* next */
142     struct request *prev; /* previous */
143    
144     /* everything below this line is kept regardless */
145     char buffer[BUFFER_SIZE + 1]; /* generic I/O buffer */
146     char request_uri[MAX_HEADER_LENGTH + 1]; /* uri */
147     char client_stream[CLIENT_STREAM_SIZE]; /* data from client - fit or be hosed */
148     char *cgi_env[CGI_ENV_MAX + 4]; /* CGI environment */
149    
150     #ifdef ACCEPT_ON
151     char accept[MAX_ACCEPT_LENGTH]; /* Accept: fields */
152     #endif
153     };
154    
155     typedef struct request request;
156    
157     struct status {
158     long requests;
159     long errors;
160     };
161    
162    
163     extern char *optarg; /* For getopt */
164     extern FILE *yyin; /* yacc input */
165    
166     extern request **_request_ready; /* first in ready list */
167     extern request **_request_block; /* first in blocked list */
168     extern request **_request_free; /* first in free list */
169    
170     typedef struct {
171     #ifdef ENABLE_SMP
172     pthread_t tid;
173     #endif
174     request* request_ready;
175     request* request_block;
176     request* request_free;
177     socket_type server_s[2];
178     fd_set block_read_fdset;
179     fd_set block_write_fdset;
180     struct timeval req_timeout;
181     int sighup_flag; /* 1 => signal has happened, needs attention */
182     int sigchld_flag; /* 1 => signal has happened, needs attention */
183     int sigalrm_flag; /* 1 => signal has happened, needs attention */
184     int sigusr1_flag; /* 1 => signal has happened, needs attention */
185     int sigterm_flag; /* lame duck mode */
186    
187     int max_fd;
188    
189     int sockbufsize;
190     struct status status;
191     int total_connections;
192    
193     /* for SIGBUS handling */
194     jmp_buf env;
195     int handle_sigbus;
196    
197     } server_params;
198    
199     /* global server variables */
200    
201     extern char *access_log_name;
202     extern char *error_log_name;
203     extern char *cgi_log_name;
204     extern int cgi_log_fd;
205     extern int use_localtime;
206 nmav 1.5
207     extern int boa_ssl;
208 nmav 1.1
209     extern int server_port;
210     extern int ssl_port;
211     extern uid_t server_uid;
212     extern gid_t server_gid;
213     extern char *server_admin;
214     extern char *server_root;
215     extern char *server_name;
216     extern char *server_ip;
217     extern int max_fd;
218     extern int devnullfd;
219    
220     extern char *directory_index;
221     extern char *default_type;
222     extern char *dirmaker;
223     extern char *mime_types;
224     extern char *cachedir;
225    
226 nmav 1.6 extern char *default_document_root;
227 nmav 1.7 extern int default_document_root_size;
228 nmav 1.6
229 nmav 1.1 extern char *tempdir;
230    
231     extern char *cgi_path;
232     extern int single_post_limit;
233    
234     extern int ka_timeout;
235     extern int ka_max;
236    
237     extern int sighup_flag;
238     extern int sigchld_flag;
239     extern int sigalrm_flag;
240     extern int sigusr1_flag;
241     extern int sigterm_flag;
242     extern time_t start_time;
243    
244     extern int pending_requests;
245     extern long int max_connections;
246    
247     extern int verbose_cgi_logs;
248    
249     extern int backlog;
250     extern time_t current_time;
251    
252    
253     #endif

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26