1 #ifndef _BASE_H_ 2 #define _BASE_H_ 3 #include "first.h" 4 5 #include <sys/types.h> 6 #include <sys/time.h> 7 8 #if defined(__APPLE__) && defined(__MACH__) 9 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 10 #include <time.h> 11 #endif 12 #endif 13 14 #include "base_decls.h" 15 #include "buffer.h" 16 #include "array.h" 17 #include "chunk.h" 18 #include "http_kv.h" 19 #include "request.h" 20 #include "sock_addr.h" 21 22 struct fdevents; /* declaration */ 23 24 25 struct connection { 26 27 request_st request; 28 29 int fd; /* the FD for this connection */ 30 int ndx; /* reverse mapping to server->connection[ndx] */ 31 fdnode *fdn; /* fdevent (fdnode *) object */ 32 33 /* fd states */ 34 signed char is_readable; 35 signed char is_writable; 36 char is_ssl_sock; 37 char traffic_limit_reached; 38 39 chunkqueue *write_queue; /* a large queue for low-level write ( HTTP response ) [ file, mem ] */ 40 chunkqueue *read_queue; /* a small queue for low-level read ( HTTP request ) [ mem ] */ 41 42 off_t bytes_written; /* used by mod_accesslog, mod_rrd */ 43 off_t bytes_written_cur_second; /* used by mod_accesslog, mod_rrd */ 44 off_t bytes_read; /* used by mod_accesslog, mod_rrd */ 45 46 int (* network_write)(struct connection *con, chunkqueue *cq, off_t max_bytes); 47 int (* network_read)(struct connection *con, chunkqueue *cq, off_t max_bytes); 48 49 server *srv; 50 void *plugin_slots; 51 void *config_data_base; 52 53 sock_addr dst_addr; 54 buffer *dst_addr_buf; 55 struct server_socket *srv_socket; /* reference to the server-socket */ 56 57 /* timestamps */ 58 time_t read_idle_ts; 59 time_t close_timeout_ts; 60 time_t write_request_ts; 61 62 time_t connection_start; 63 uint32_t request_count; /* number of requests handled in this connection */ 64 int keep_alive_idle; /* remember max_keep_alive_idle from config */ 65 66 uint16_t proto_default_port; 67 }; 68 69 typedef struct { 70 connection **ptr; 71 uint32_t size; 72 uint32_t used; 73 } connections; 74 75 typedef struct { 76 void *ptr; 77 uint32_t used; 78 uint32_t size; 79 } buffer_plugin; 80 81 typedef struct { 82 /*(used sparsely, if at all, after config at startup)*/ 83 84 uint32_t max_request_field_size; 85 unsigned char log_state_handling; 86 unsigned char log_request_header_on_error; 87 unsigned char http_header_strict; 88 unsigned char http_host_strict; 89 unsigned char http_host_normalize; 90 unsigned char http_method_get_body; 91 unsigned char high_precision_timestamps; 92 unsigned short http_url_normalize; 93 94 unsigned short max_worker; 95 unsigned short max_fds; 96 unsigned short max_conns; 97 unsigned short port; 98 99 unsigned int upload_temp_file_size; 100 array *upload_tempdirs; 101 102 unsigned char dont_daemonize; 103 unsigned char preflight_check; 104 unsigned char enable_cores; 105 unsigned char compat_module_load; 106 unsigned char config_deprecated; 107 unsigned char config_unsupported; 108 unsigned char systemd_socket_activation; 109 unsigned char errorlog_use_syslog; 110 const buffer *syslog_facility; 111 const buffer *bindhost; 112 const buffer *changeroot; 113 const buffer *username; 114 const buffer *groupname; 115 const buffer *network_backend; 116 const char *event_handler; 117 buffer *pid_file; 118 buffer *modules_dir; 119 array *modules; 120 array *config_touched; 121 array empty_array; 122 } server_config; 123 124 typedef struct server_socket { 125 sock_addr addr; 126 int fd; 127 128 unsigned short is_ssl; 129 unsigned short sidx; 130 131 fdnode *fdn; 132 server *srv; 133 buffer *srv_token; 134 } server_socket; 135 136 typedef struct { 137 server_socket **ptr; 138 139 uint32_t size; 140 uint32_t used; 141 } server_socket_array; 142 143 struct server { 144 void *plugin_slots; 145 array *config_context; 146 147 struct fdevents *ev; 148 int (* network_backend_write)(int fd, chunkqueue *cq, off_t max_bytes, log_error_st *errh); 149 handler_t (* request_env)(request_st *r); 150 151 /* buffers */ 152 buffer *tmp_buf; 153 154 connections conns; 155 connections joblist; 156 connections fdwaitqueue; 157 158 /* counters */ 159 int con_opened; 160 int con_read; 161 int con_written; 162 int con_closed; 163 164 int max_fds; /* max possible fds */ 165 int max_fds_lowat;/* low watermark */ 166 int max_fds_hiwat;/* high watermark */ 167 int cur_fds; /* currently used fds */ 168 int sockets_disabled; 169 170 uint32_t max_conns; 171 172 log_error_st *errh; 173 174 time_t loadts; 175 double loadavg[3]; 176 177 /* members used at start-up or rarely used */ 178 179 server_config srvconf; 180 void *config_data_base; 181 182 server_socket_array srv_sockets; 183 server_socket_array srv_sockets_inherited; 184 buffer_plugin plugins; 185 186 time_t startup_ts; 187 188 uid_t uid; 189 gid_t gid; 190 pid_t pid; 191 int stdin_fd; 192 }; 193 194 195 #endif 196