📄 globals.h
字号:
/* * Boa, an http server * Copyright (C) 1995 Paul Phillips <paulp@go2net.com> * Copyright (C) 1996-2005 Larry Doolittle <ldoolitt@boa.org> * Copyright (C) 1997-2004 Jon Nelson <jnelson@boa.org> * * 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 * the Free Software Foundation; either version 1, or (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 * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *//* $Id: globals.h,v 1.65.2.29 2005/02/22 14:11:29 jnelson Exp $*/#ifndef _GLOBALS_H#define _GLOBALS_H/********************** METHODS **********************/enum HTTP_METHOD { M_GET = 1, M_HEAD, M_PUT, M_POST, M_DELETE, M_LINK, M_UNLINK, M_MOVE, M_TRACE};/******************* HTTP VERSIONS *******************/enum HTTP_VERSION { HTTP09=1, HTTP10, HTTP11 };/************** REQUEST STATUS (req->status) ***************/enum REQ_STATUS { READ_HEADER, ONE_CR, ONE_LF, TWO_CR, BODY_READ, BODY_WRITE, WRITE, PIPE_READ, PIPE_WRITE, IOSHUFFLE, DONE, TIMED_OUT, DEAD};/******************* RESPONSE CODES ******************/enum RESPONSE_CODE { R_CONTINUE = 100, R_REQUEST_OK = 200, R_CREATED, R_ACCEPTED, R_PROVISIONAL, R_NO_CONTENT, R_205, R_PARTIAL_CONTENT, R_MULTIPLE = 300, R_MOVED_PERM, R_MOVED_TEMP, R_303, R_NOT_MODIFIED, R_BAD_REQUEST = 400, R_UNAUTHORIZED, R_PAYMENT, R_FORBIDDEN, R_NOT_FOUND, R_METHOD_NA, /* method not allowed */ R_NON_ACC, /* non acceptable */ R_PROXY, /* proxy auth required */ R_REQUEST_TO, /* request timeout */ R_CONFLICT, R_GONE, R_LENGTH_REQUIRED, R_PRECONDITION_FAILED, R_REQUEST_URI_TOO_LONG = 414, R_INVALID_RANGE = 416, R_ERROR = 500, R_NOT_IMP, R_BAD_GATEWAY, R_SERVICE_UNAV, R_GATEWAY_TO, /* gateway timeout */ R_BAD_VERSION };/************* ALIAS TYPES (aliasp->type) ***************/enum ALIAS { ALIAS, SCRIPTALIAS, REDIRECT };/*********** KEEPALIVE CONSTANTS (req->keepalive) *******/enum KA_STATUS { KA_INACTIVE, KA_ACTIVE, KA_STOPPED };/********* CGI STATUS CONSTANTS (req->cgi_status) *******/enum CGI_STATUS { CGI_PARSE, CGI_BUFFER, CGI_DONE };/************** CGI TYPE (req->is_cgi) ******************/enum CGI_TYPE { NPH = 1, CGI };/**************** STRUCTURES ****************************/struct range { unsigned long start; unsigned long stop; struct range *next;};typedef struct range Range;struct mmap_entry { dev_t dev; ino_t ino; char *mmap; int use_count; off_t len;};struct request { /* pending requests */ enum REQ_STATUS status; enum KA_STATUS keepalive; /* keepalive status */ enum HTTP_VERSION http_version; enum HTTP_METHOD method; /* M_GET, M_POST, etc. */ enum RESPONSE_CODE response_status; /* R_NOT_FOUND, etc.. */ enum CGI_TYPE cgi_type; enum CGI_STATUS cgi_status; /* should pollfd_id be zeroable or no ? */#ifdef HAVE_POLL int pollfd_id;#endif char *pathname; /* pathname of requested file */ Range *ranges; /* our Ranges */ int numranges; int data_fd; /* fd of data */ unsigned long filesize; /* filesize */ unsigned long filepos; /* position in file */ unsigned long bytes_written; /* total bytes written (sans header) */ char *data_mem; /* mmapped/malloced char array */ char *logline; /* line to log file */ char *header_line; /* beginning of un or incompletely processed header line */ char *header_end; /* last known end of header, or end of processed data */ int parse_pos; /* how much have we parsed */ int buffer_start; /* where the buffer starts */ int buffer_end; /* where the buffer ends */ char *if_modified_since; /* If-Modified-Since */ time_t last_modified; /* Last-modified: */ /* CGI vars */ int cgi_env_index; /* index into array */ /* Agent and referer for logfiles */ char *header_host; char *header_user_agent; char *header_referer; char *header_ifrange; char *host; /* what we end up using for 'host', no matter the contents of header_host */ int post_data_fd; /* fd for post data tmpfile */ char *path_info; /* env variable */ char *path_translated; /* env variable */ char *script_name; /* env variable */ char *query_string; /* env variable */ char *content_type; /* env variable */ char *content_length; /* env variable */ struct mmap_entry *mmap_entry_var; /* everything **above** this line is zeroed in sanitize_request */ /* this may include 'fd' */ /* in sanitize_request with the 'new' parameter set to 1, * kacount is set to ka_max and client_stream_pos is also zeroed. * Also, time_last is set to 'NOW' */ int fd; /* client's socket fd */ time_t time_last; /* time of last succ. op. */ char local_ip_addr[BOA_NI_MAXHOST]; /* for virtualhost */ char remote_ip_addr[BOA_NI_MAXHOST]; /* after inet_ntoa */ unsigned int remote_port; /* could be used for ident */ unsigned int kacount; /* keepalive count */ int client_stream_pos; /* how much have we read... */ /* everything below this line is kept regardless */ char buffer[BUFFER_SIZE + 1]; /* generic I/O buffer */ char request_uri[MAX_HEADER_LENGTH + 1]; /* uri */ char client_stream[CLIENT_STREAM_SIZE]; /* data from client - fit or be hosed */ char *cgi_env[CGI_ENV_MAX + 4]; /* CGI environment */#ifdef ACCEPT_ON char accept[MAX_ACCEPT_LENGTH]; /* Accept: fields */#endif struct request *next; /* next */ struct request *prev; /* previous */};typedef struct request request;struct status { long requests; long errors;};extern struct status status;extern char *optarg; /* For getopt */extern request *request_ready; /* first in ready list */extern request *request_block; /* first in blocked list */extern request *request_free; /* first in free list */#ifdef HAVE_POLLextern struct pollfd *pfds;extern unsigned int pfd_len;#elseextern fd_set block_read_fdset; /* fds blocked on read */extern fd_set block_write_fdset; /* fds blocked on write */extern int max_fd;#endif/* global server variables */extern char *access_log_name;extern char *error_log_name;extern char *cgi_log_name;extern int cgi_log_fd;extern int use_localtime;extern unsigned int server_port;extern uid_t server_uid;extern gid_t server_gid;extern char *server_admin;extern char *server_root;extern char *server_name;extern char *server_ip;extern char *document_root;extern char *user_dir;extern char *directory_index;extern char *default_type;extern char *default_charset;extern char *dirmaker;extern char *mime_types;extern char *pid_file;extern char *cachedir;extern const char *tempdir;extern char *cgi_path;extern short common_cgi_env_count;extern int single_post_limit;extern int conceal_server_identity;extern int ka_timeout;extern int unsigned default_timeout;extern int unsigned ka_max;extern int sighup_flag;extern int sigchld_flag;extern int sigalrm_flag;extern int sigterm_flag;extern time_t start_time;extern int pending_requests;extern unsigned max_connections;extern int verbose_cgi_logs;extern int backlog;extern time_t current_time;extern int virtualhost;extern char *vhost_root;extern const char *default_vhost;extern unsigned total_connections;extern unsigned int system_bufsize; /* Default size of SNDBUF given by system */extern sigjmp_buf env;extern int handle_sigbus;extern unsigned int cgi_umask;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -