1 1.73 martin /* $NetBSD: bozohttpd.h,v 1.73 2022/09/12 10:30:39 martin Exp $ */ 2 1.3 tls 3 1.20 mrg /* $eterna: bozohttpd.h,v 1.39 2011/11/18 09:21:15 mrg Exp $ */ 4 1.1 tls 5 1.1 tls /* 6 1.72 mrg * Copyright (c) 1997-2022 Matthew R. Green 7 1.1 tls * All rights reserved. 8 1.1 tls * 9 1.1 tls * Redistribution and use in source and binary forms, with or without 10 1.1 tls * modification, are permitted provided that the following conditions 11 1.1 tls * are met: 12 1.1 tls * 1. Redistributions of source code must retain the above copyright 13 1.1 tls * notice, this list of conditions and the following disclaimer. 14 1.1 tls * 2. Redistributions in binary form must reproduce the above copyright 15 1.1 tls * notice, this list of conditions and the following disclaimer and 16 1.1 tls * dedication in the documentation and/or other materials provided 17 1.1 tls * with the distribution. 18 1.1 tls * 19 1.1 tls * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 1.1 tls * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 1.1 tls * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 1.1 tls * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 1.1 tls * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 24 1.1 tls * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 1.1 tls * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26 1.1 tls * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 1.1 tls * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 1.1 tls * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 1.1 tls * SUCH DAMAGE. 30 1.1 tls * 31 1.1 tls */ 32 1.65 mrg #ifndef BOZOHTTPD_H_ 33 1.65 mrg #define BOZOHTTPD_H_ 1 34 1.12 mrg 35 1.27 mrg #include "netbsd_queue.h" 36 1.12 mrg 37 1.58 mrg #include <stdbool.h> 38 1.62 jruoho #include <stdio.h> 39 1.59 mrg #include <signal.h> 40 1.58 mrg 41 1.1 tls #include <sys/stat.h> 42 1.5 mrg 43 1.30 mbalmer #ifndef NO_LUA_SUPPORT 44 1.30 mbalmer #include <lua.h> 45 1.30 mbalmer #endif 46 1.62 jruoho 47 1.62 jruoho #ifndef NO_BLOCKLIST_SUPPORT 48 1.62 jruoho #include <blocklist.h> 49 1.62 jruoho void pfilter_notify(const int, const int); 50 1.62 jruoho #endif 51 1.1 tls 52 1.36 mrg /* QNX provides a lot of NetBSD things in nbutil.h */ 53 1.37 mrg #ifdef HAVE_NBUTIL_H 54 1.36 mrg #include <nbutil.h> 55 1.36 mrg #endif 56 1.36 mrg 57 1.8 mrg /* lots of "const" but gets free()'ed etc at times, sigh */ 58 1.8 mrg 59 1.1 tls /* headers */ 60 1.12 mrg typedef struct bozoheaders { 61 1.4 rtr /*const*/ char *h_header; 62 1.1 tls /*const*/ char *h_value; /* this gets free()'ed etc at times */ 63 1.12 mrg SIMPLEQ_ENTRY(bozoheaders) h_next; 64 1.12 mrg } bozoheaders_t; 65 1.44 elric SIMPLEQ_HEAD(qheaders, bozoheaders); 66 1.1 tls 67 1.30 mbalmer #ifndef NO_LUA_SUPPORT 68 1.30 mbalmer typedef struct lua_handler { 69 1.30 mbalmer const char *name; 70 1.30 mbalmer int ref; 71 1.30 mbalmer SIMPLEQ_ENTRY(lua_handler) h_next; 72 1.30 mbalmer } lua_handler_t; 73 1.30 mbalmer 74 1.30 mbalmer typedef struct lua_state_map { 75 1.30 mbalmer const char *script; 76 1.30 mbalmer const char *prefix; 77 1.30 mbalmer lua_State *L; 78 1.30 mbalmer SIMPLEQ_HEAD(, lua_handler) handlers; 79 1.30 mbalmer SIMPLEQ_ENTRY(lua_state_map) s_next; 80 1.30 mbalmer } lua_state_map_t; 81 1.30 mbalmer #endif 82 1.30 mbalmer 83 1.12 mrg typedef struct bozo_content_map_t { 84 1.12 mrg const char *name; /* postfix of file */ 85 1.12 mrg const char *type; /* matching content-type */ 86 1.12 mrg const char *encoding; /* matching content-encoding */ 87 1.12 mrg const char *encoding11; /* matching content-encoding (HTTP/1.1) */ 88 1.12 mrg const char *cgihandler; /* optional CGI handler */ 89 1.12 mrg } bozo_content_map_t; 90 1.12 mrg 91 1.12 mrg /* this struct holds the bozo constants */ 92 1.12 mrg typedef struct bozo_consts_t { 93 1.12 mrg const char *http_09; /* "HTTP/0.9" */ 94 1.12 mrg const char *http_10; /* "HTTP/1.0" */ 95 1.12 mrg const char *http_11; /* "HTTP/1.1" */ 96 1.12 mrg const char *text_plain; /* "text/plain" */ 97 1.12 mrg } bozo_consts_t; 98 1.12 mrg 99 1.12 mrg /* this structure encapsulates all the bozo flags and control vars */ 100 1.12 mrg typedef struct bozohttpd_t { 101 1.12 mrg char *rootdir; /* root directory */ 102 1.12 mrg int numeric; /* avoid gethostby*() */ 103 1.12 mrg char *virtbase; /* virtual directory base */ 104 1.12 mrg int unknown_slash; /* unknown vhosts go to normal slashdir */ 105 1.12 mrg int logstderr; /* log to stderr (even if not tty) */ 106 1.73 martin int nolog; /* do not log anything */ 107 1.12 mrg int background; /* drop into daemon mode */ 108 1.12 mrg int foreground; /* keep daemon mode in foreground */ 109 1.18 jmmv char *pidfile; /* path to the pid file, if any */ 110 1.12 mrg size_t page_size; /* page size */ 111 1.12 mrg char *slashdir; /* www slash directory */ 112 1.12 mrg char *bindport; /* bind port; default "http" */ 113 1.12 mrg char *bindaddress; /* address for binding - INADDR_ANY */ 114 1.12 mrg int debug; /* debugging level */ 115 1.12 mrg char *virthostname; /* my name */ 116 1.12 mrg const char *server_software;/* our brand :-) */ 117 1.12 mrg const char *index_html; /* our home page */ 118 1.12 mrg const char *public_html; /* ~user/public_html page */ 119 1.12 mrg int enable_users; /* enable public_html */ 120 1.38 shm int enable_cgi_users; /* use the cgi handler */ 121 1.12 mrg int *sock; /* bound sockets */ 122 1.12 mrg int nsock; /* number of above */ 123 1.12 mrg struct pollfd *fds; /* current poll fd set */ 124 1.12 mrg int request_times; /* # times a request was processed */ 125 1.12 mrg int dir_indexing; /* handle directories */ 126 1.61 jmcneill const char *dir_readme; /* include README footer in indexes */ 127 1.12 mrg int hide_dots; /* hide .* */ 128 1.12 mrg int process_cgi; /* use the cgi handler */ 129 1.12 mrg char *cgibin; /* cgi-bin directory */ 130 1.59 mrg unsigned ssl_timeout; /* ssl timeout */ 131 1.51 mrg unsigned initial_timeout;/* first line timeout */ 132 1.51 mrg unsigned header_timeout; /* header lines timeout */ 133 1.51 mrg unsigned request_timeout;/* total session timeout */ 134 1.70 mrg char *ssl_min_proto; /* minimum ssl protocol level */ 135 1.30 mbalmer #ifndef NO_LUA_SUPPORT 136 1.30 mbalmer int process_lua; /* use the Lua handler */ 137 1.30 mbalmer SIMPLEQ_HEAD(, lua_state_map) lua_states; 138 1.30 mbalmer #endif 139 1.12 mrg void *sslinfo; /* pointer to ssl struct */ 140 1.12 mrg int dynamic_content_map_size;/* size of dyn cont map */ 141 1.12 mrg bozo_content_map_t *dynamic_content_map;/* dynamic content map */ 142 1.12 mrg size_t mmapsz; /* size of region to mmap */ 143 1.12 mrg char *getln_buffer; /* space for getln buffer */ 144 1.12 mrg ssize_t getln_buflen; /* length of allocated space */ 145 1.12 mrg char *errorbuf; /* no dynamic allocation allowed */ 146 1.12 mrg bozo_consts_t consts; /* various constants */ 147 1.12 mrg } bozohttpd_t; 148 1.12 mrg 149 1.12 mrg /* bozo_httpreq_t */ 150 1.12 mrg typedef struct bozo_httpreq_t { 151 1.12 mrg bozohttpd_t *hr_httpd; 152 1.12 mrg int hr_method; 153 1.1 tls #define HTTP_GET 0x01 154 1.1 tls #define HTTP_POST 0x02 155 1.1 tls #define HTTP_HEAD 0x03 156 1.1 tls #define HTTP_OPTIONS 0x04 /* not supported */ 157 1.1 tls #define HTTP_PUT 0x05 /* not supported */ 158 1.1 tls #define HTTP_DELETE 0x06 /* not supported */ 159 1.1 tls #define HTTP_TRACE 0x07 /* not supported */ 160 1.1 tls #define HTTP_CONNECT 0x08 /* not supported */ 161 1.1 tls const char *hr_methodstr; 162 1.24 martin char *hr_virthostname; /* server name (if not identical 163 1.24 martin to hr_httpd->virthostname) */ 164 1.66 mrg char *hr_file_free; /* pointer to file buffer to free() */ 165 1.66 mrg char *hr_file; /* pointer into file buffer */ 166 1.14 mrg char *hr_oldfile; /* if we added an index_html */ 167 1.29 mbalmer char *hr_query; 168 1.32 mrg char *hr_host; /* HTTP/1.1 Host: or virtual hostname, 169 1.32 mrg possibly including a port number */ 170 1.38 shm #ifndef NO_USER_SUPPORT 171 1.38 shm char *hr_user; /* username if we hit userdir request */ 172 1.38 shm #endif /* !NO_USER_SUPPORT */ 173 1.1 tls const char *hr_proto; 174 1.1 tls const char *hr_content_type; 175 1.1 tls const char *hr_content_length; 176 1.1 tls const char *hr_allow; 177 1.1 tls const char *hr_referrer; 178 1.5 mrg const char *hr_range; 179 1.7 joerg const char *hr_if_modified_since; 180 1.21 elric const char *hr_accept_encoding; 181 1.5 mrg int hr_have_range; 182 1.5 mrg off_t hr_first_byte_pos; 183 1.5 mrg off_t hr_last_byte_pos; 184 1.8 mrg /*const*/ char *hr_remotehost; 185 1.8 mrg /*const*/ char *hr_remoteaddr; 186 1.8 mrg /*const*/ char *hr_serverport; 187 1.1 tls #ifdef DO_HTPASSWD 188 1.9 mrg /*const*/ char *hr_authrealm; 189 1.9 mrg /*const*/ char *hr_authuser; 190 1.9 mrg /*const*/ char *hr_authpass; 191 1.1 tls #endif 192 1.44 elric struct qheaders hr_headers; 193 1.44 elric struct qheaders hr_replheaders; 194 1.50 mrg unsigned hr_nheaders; 195 1.50 mrg size_t hr_header_bytes; 196 1.12 mrg } bozo_httpreq_t; 197 1.1 tls 198 1.24 martin /* helper to access the "active" host name from a httpd/request pair */ 199 1.24 martin #define BOZOHOST(HTTPD,REQUEST) ((REQUEST)->hr_virthostname ? \ 200 1.24 martin (REQUEST)->hr_virthostname : \ 201 1.24 martin (HTTPD)->virthostname) 202 1.24 martin 203 1.12 mrg /* structure to hold string based (name, value) pairs with preferences */ 204 1.12 mrg typedef struct bozoprefs_t { 205 1.41 mrg size_t size; /* size of the two arrays */ 206 1.41 mrg size_t count; /* # of entries in arrays */ 207 1.12 mrg char **name; /* names of each entry */ 208 1.12 mrg char **value; /* values for the name entries */ 209 1.12 mrg } bozoprefs_t; 210 1.1 tls 211 1.60 mrg /* sun2 has a tiny VA range */ 212 1.60 mrg #ifdef __mc68010__ 213 1.60 mrg #ifndef BOZO_WRSZ 214 1.60 mrg #define BOZO_WRSZ (16 * 1024) 215 1.60 mrg #endif 216 1.60 mrg #ifndef BOZO_MMAPSZ 217 1.60 mrg #define BOZO_MMAPSZ (BOZO_WRSZ * 4) 218 1.60 mrg #endif 219 1.60 mrg #endif 220 1.60 mrg 221 1.28 pooka /* by default write in upto 64KiB chunks, and mmap in upto 64MiB chunks */ 222 1.28 pooka #ifndef BOZO_WRSZ 223 1.12 mrg #define BOZO_WRSZ (64 * 1024) 224 1.28 pooka #endif 225 1.28 pooka #ifndef BOZO_MMAPSZ 226 1.12 mrg #define BOZO_MMAPSZ (BOZO_WRSZ * 1024) 227 1.28 pooka #endif 228 1.1 tls 229 1.50 mrg /* only allow this many total headers bytes */ 230 1.50 mrg #define BOZO_HEADERS_MAX_SIZE (16 * 1024) 231 1.50 mrg 232 1.69 mrg #define BOZO_MINBUFSIZE (4 * 1024) 233 1.69 mrg 234 1.1 tls /* debug flags */ 235 1.1 tls #define DEBUG_NORMAL 1 236 1.1 tls #define DEBUG_FAT 2 237 1.1 tls #define DEBUG_OBESE 3 238 1.1 tls #define DEBUG_EXPLODING 4 239 1.1 tls 240 1.1 tls #define strornull(x) ((x) ? (x) : "<null>") 241 1.1 tls 242 1.48 christos #if (defined(__GNUC__) && __GNUC__ >= 3) || defined(__lint__) 243 1.22 joerg #define BOZO_PRINTFLIKE(x,y) __attribute__((__format__(__printf__, x,y))) 244 1.22 joerg #define BOZO_DEAD __attribute__((__noreturn__)) 245 1.55 mrg #define BOZO_CHECKRET __attribute__((__warn_unused_result__)) 246 1.49 christos #else 247 1.49 christos #define BOZO_PRINTFLIKE(x,y) 248 1.49 christos #define BOZO_DEAD 249 1.55 mrg #define BOZO_CHECKRET 250 1.22 joerg #endif 251 1.22 joerg 252 1.54 mrg #ifdef NO_DEBUG 253 1.54 mrg #define debug(x) 254 1.54 mrg #define have_debug (0) 255 1.54 mrg #else 256 1.22 joerg void debug__(bozohttpd_t *, int, const char *, ...) BOZO_PRINTFLIKE(3, 4); 257 1.1 tls #define debug(x) debug__ x 258 1.53 mrg #define have_debug (1) 259 1.17 mrg #endif /* NO_DEBUG */ 260 1.1 tls 261 1.64 mrg #define BOZO_HTTP_PORT "80" 262 1.64 mrg #define BOZO_HTTPS_PORT "443" 263 1.64 mrg 264 1.55 mrg /* 265 1.55 mrg * bozohttpd special files. avoid serving these out. 266 1.55 mrg * 267 1.55 mrg * When you add some .bz* file, make sure to also check it in 268 1.55 mrg * bozo_check_special_files() 269 1.55 mrg */ 270 1.55 mrg 271 1.55 mrg #ifndef REDIRECT_FILE 272 1.55 mrg #define REDIRECT_FILE ".bzredirect" 273 1.55 mrg #endif 274 1.55 mrg #ifndef ABSREDIRECT_FILE 275 1.55 mrg #define ABSREDIRECT_FILE ".bzabsredirect" 276 1.55 mrg #endif 277 1.55 mrg #ifndef REMAP_FILE 278 1.55 mrg #define REMAP_FILE ".bzremap" 279 1.55 mrg #endif 280 1.55 mrg #ifndef AUTH_FILE 281 1.55 mrg #define AUTH_FILE ".htpasswd" 282 1.55 mrg #endif 283 1.55 mrg 284 1.55 mrg /* be sure to always return this error up */ 285 1.14 mrg int bozo_http_error(bozohttpd_t *, int, bozo_httpreq_t *, const char *); 286 1.1 tls 287 1.58 mrg int bozo_check_special_files(bozo_httpreq_t *, const char *, bool) BOZO_CHECKRET; 288 1.12 mrg char *bozo_http_date(char *, size_t); 289 1.41 mrg void bozo_print_header(bozo_httpreq_t *, struct stat *, const char *, 290 1.41 mrg const char *); 291 1.38 shm char *bozo_escape_rfc3986(bozohttpd_t *httpd, const char *url, int absolute); 292 1.25 mrg char *bozo_escape_html(bozohttpd_t *httpd, const char *url); 293 1.45 mrg int bozo_decode_url_percent(bozo_httpreq_t *, char *); 294 1.1 tls 295 1.42 mrg /* these are similar to libc functions, no underscore here */ 296 1.42 mrg void bozowarn(bozohttpd_t *, const char *, ...) 297 1.42 mrg BOZO_PRINTFLIKE(2, 3); 298 1.42 mrg void bozoerr(bozohttpd_t *, int, const char *, ...) 299 1.42 mrg BOZO_PRINTFLIKE(3, 4) 300 1.42 mrg BOZO_DEAD; 301 1.42 mrg void bozoasprintf(bozohttpd_t *, char **, const char *, ...) 302 1.42 mrg BOZO_PRINTFLIKE(3, 4); 303 1.41 mrg char *bozodgetln(bozohttpd_t *, int, ssize_t *, ssize_t (*)(bozohttpd_t *, 304 1.41 mrg int, void *, size_t)); 305 1.5 mrg char *bozostrnsep(char **, const char *, ssize_t *); 306 1.12 mrg void *bozomalloc(bozohttpd_t *, size_t); 307 1.12 mrg void *bozorealloc(bozohttpd_t *, void *, size_t); 308 1.41 mrg char *bozostrdup(bozohttpd_t *, bozo_httpreq_t *, const char *); 309 1.1 tls 310 1.39 christos #define bozo_noop do { /* nothing */ } while (/*CONSTCOND*/0) 311 1.39 christos 312 1.65 mrg #define have_core (1) 313 1.52 mrg 314 1.1 tls /* ssl-bozo.c */ 315 1.12 mrg #ifdef NO_SSL_SUPPORT 316 1.52 mrg #define bozo_ssl_set_opts(w, x, y) bozo_noop 317 1.56 mrg #define bozo_ssl_set_ciphers(w, x) bozo_noop 318 1.52 mrg #define bozo_ssl_init(x) bozo_noop 319 1.52 mrg #define bozo_ssl_accept(x) (0) 320 1.63 spz #define bozo_ssl_shutdown(x) bozo_noop 321 1.52 mrg #define bozo_ssl_destroy(x) bozo_noop 322 1.52 mrg #define have_ssl (0) 323 1.12 mrg #else 324 1.14 mrg void bozo_ssl_set_opts(bozohttpd_t *, const char *, const char *); 325 1.39 christos void bozo_ssl_set_ciphers(bozohttpd_t *, const char *); 326 1.14 mrg void bozo_ssl_init(bozohttpd_t *); 327 1.33 mrg int bozo_ssl_accept(bozohttpd_t *); 328 1.63 spz void bozo_ssl_shutdown(bozohttpd_t *); 329 1.14 mrg void bozo_ssl_destroy(bozohttpd_t *); 330 1.52 mrg #define have_ssl (1) 331 1.1 tls #endif 332 1.1 tls 333 1.1 tls 334 1.1 tls /* auth-bozo.c */ 335 1.1 tls #ifdef DO_HTPASSWD 336 1.34 shm void bozo_auth_init(bozo_httpreq_t *); 337 1.14 mrg int bozo_auth_check(bozo_httpreq_t *, const char *); 338 1.14 mrg void bozo_auth_cleanup(bozo_httpreq_t *); 339 1.14 mrg int bozo_auth_check_headers(bozo_httpreq_t *, char *, char *, ssize_t); 340 1.14 mrg void bozo_auth_check_401(bozo_httpreq_t *, int); 341 1.14 mrg void bozo_auth_cgi_setenv(bozo_httpreq_t *, char ***); 342 1.14 mrg int bozo_auth_cgi_count(bozo_httpreq_t *); 343 1.12 mrg #else 344 1.52 mrg #define bozo_auth_init(x) bozo_noop 345 1.52 mrg #define bozo_auth_check(x, y) (0) 346 1.52 mrg #define bozo_auth_cleanup(x) bozo_noop 347 1.52 mrg #define bozo_auth_check_headers(y, z, a, b) (0) 348 1.52 mrg #define bozo_auth_check_401(x, y) bozo_noop 349 1.52 mrg #define bozo_auth_cgi_setenv(x, y) bozo_noop 350 1.52 mrg #define bozo_auth_cgi_count(x) (0) 351 1.1 tls #endif /* DO_HTPASSWD */ 352 1.1 tls 353 1.1 tls 354 1.1 tls /* cgi-bozo.c */ 355 1.12 mrg #ifdef NO_CGIBIN_SUPPORT 356 1.56 mrg #define bozo_cgi_setbin(h,s) bozo_noop 357 1.52 mrg #define bozo_process_cgi(h) (0) 358 1.52 mrg #define have_cgibin (0) 359 1.1 tls #else 360 1.14 mrg void bozo_cgi_setbin(bozohttpd_t *, const char *); 361 1.14 mrg void bozo_setenv(bozohttpd_t *, const char *, const char *, char **); 362 1.14 mrg int bozo_process_cgi(bozo_httpreq_t *); 363 1.52 mrg #define have_cgibin (1) 364 1.1 tls #endif /* NO_CGIBIN_SUPPORT */ 365 1.1 tls 366 1.1 tls 367 1.30 mbalmer /* lua-bozo.c */ 368 1.30 mbalmer #ifdef NO_LUA_SUPPORT 369 1.52 mrg #define bozo_process_lua(h) (0) 370 1.56 mrg #define bozo_add_lua_map(h,s,t) bozo_noop 371 1.52 mrg #define have_lua (0) 372 1.30 mbalmer #else 373 1.30 mbalmer void bozo_add_lua_map(bozohttpd_t *, const char *, const char *); 374 1.30 mbalmer int bozo_process_lua(bozo_httpreq_t *); 375 1.52 mrg #define have_lua (1) 376 1.30 mbalmer #endif /* NO_LUA_SUPPORT */ 377 1.30 mbalmer 378 1.30 mbalmer 379 1.1 tls /* daemon-bozo.c */ 380 1.12 mrg #ifdef NO_DAEMON_MODE 381 1.39 christos #define bozo_daemon_init(x) bozo_noop 382 1.52 mrg #define bozo_daemon_fork(x) (0) 383 1.39 christos #define bozo_daemon_closefds(x) bozo_noop 384 1.52 mrg #define have_daemon_mode (0) 385 1.12 mrg #else 386 1.14 mrg void bozo_daemon_init(bozohttpd_t *); 387 1.14 mrg int bozo_daemon_fork(bozohttpd_t *); 388 1.14 mrg void bozo_daemon_closefds(bozohttpd_t *); 389 1.52 mrg #define have_daemon_mode (1) 390 1.1 tls #endif /* NO_DAEMON_MODE */ 391 1.1 tls 392 1.1 tls 393 1.1 tls /* tilde-luzah-bozo.c */ 394 1.12 mrg #ifdef NO_USER_SUPPORT 395 1.52 mrg #define bozo_user_transform(x) (0) 396 1.51 mrg #define bozo_user_free(x) /* nothing */ 397 1.52 mrg #define have_user (0) 398 1.8 mrg #else 399 1.38 shm int bozo_user_transform(bozo_httpreq_t *); 400 1.51 mrg #define bozo_user_free(x) free(x) 401 1.52 mrg #define have_user (1) 402 1.1 tls #endif /* NO_USER_SUPPORT */ 403 1.1 tls 404 1.1 tls 405 1.1 tls /* dir-index-bozo.c */ 406 1.12 mrg #ifdef NO_DIRINDEX_SUPPORT 407 1.52 mrg #define bozo_dir_index(a, b, c) (0) 408 1.52 mrg #define have_dirindex (0) 409 1.1 tls #else 410 1.12 mrg int bozo_dir_index(bozo_httpreq_t *, const char *, int); 411 1.52 mrg #define have_dirindex (1) 412 1.1 tls #endif /* NO_DIRINDEX_SUPPORT */ 413 1.1 tls 414 1.1 tls 415 1.1 tls /* content-bozo.c */ 416 1.14 mrg const char *bozo_content_type(bozo_httpreq_t *, const char *); 417 1.14 mrg const char *bozo_content_encoding(bozo_httpreq_t *, const char *); 418 1.14 mrg bozo_content_map_t *bozo_match_content_map(bozohttpd_t *, const char *, int); 419 1.14 mrg bozo_content_map_t *bozo_get_content_map(bozohttpd_t *, const char *); 420 1.54 mrg #ifdef NO_DYNAMIC_CONTENT 421 1.56 mrg #define bozo_add_content_map_mime(h,s,t,u,v) bozo_noop 422 1.54 mrg #define have_dynamic_content (0) 423 1.54 mrg #else 424 1.41 mrg void bozo_add_content_map_mime(bozohttpd_t *, const char *, const char *, 425 1.41 mrg const char *, const char *); 426 1.52 mrg #define have_dynamic_content (1) 427 1.1 tls #endif 428 1.12 mrg 429 1.56 mrg /* additional cgi-bozo.c */ 430 1.56 mrg #if have_cgibin && have_dynamic_content 431 1.56 mrg void bozo_add_content_map_cgi(bozohttpd_t *, const char *, const char *); 432 1.56 mrg #else 433 1.56 mrg #define bozo_add_content_map_cgi(h,s,t) 434 1.56 mrg #endif 435 1.56 mrg 436 1.12 mrg /* I/O */ 437 1.57 christos int bozo_printf(bozohttpd_t *, const char *, ...) BOZO_PRINTFLIKE(2, 3); 438 1.12 mrg ssize_t bozo_read(bozohttpd_t *, int, void *, size_t); 439 1.12 mrg ssize_t bozo_write(bozohttpd_t *, int, const void *, size_t); 440 1.12 mrg int bozo_flush(bozohttpd_t *, FILE *); 441 1.12 mrg 442 1.12 mrg /* misc */ 443 1.12 mrg int bozo_init_httpd(bozohttpd_t *); 444 1.41 mrg int bozo_init_prefs(bozohttpd_t *, bozoprefs_t *); 445 1.12 mrg int bozo_set_defaults(bozohttpd_t *, bozoprefs_t *); 446 1.12 mrg int bozo_setup(bozohttpd_t *, bozoprefs_t *, const char *, const char *); 447 1.67 mrg void bozo_cleanup(bozohttpd_t *, bozoprefs_t *); 448 1.12 mrg bozo_httpreq_t *bozo_read_request(bozohttpd_t *); 449 1.12 mrg void bozo_process_request(bozo_httpreq_t *); 450 1.12 mrg void bozo_clean_request(bozo_httpreq_t *); 451 1.51 mrg int bozo_set_timeout(bozohttpd_t *, bozoprefs_t *, const char *, const char *); 452 1.44 elric bozoheaders_t *addmerge_reqheader(bozo_httpreq_t *, const char *, 453 1.44 elric const char *, ssize_t); 454 1.44 elric bozoheaders_t *addmerge_replheader(bozo_httpreq_t *, const char *, 455 1.44 elric const char *, ssize_t); 456 1.12 mrg 457 1.12 mrg /* variables */ 458 1.41 mrg int bozo_set_pref(bozohttpd_t *, bozoprefs_t *, const char *, const char *); 459 1.12 mrg char *bozo_get_pref(bozoprefs_t *, const char *); 460 1.12 mrg 461 1.46 agc int bozo_get_version(char */*buf*/, size_t /*size*/); 462 1.46 agc 463 1.59 mrg extern volatile sig_atomic_t bozo_timeout_hit; 464 1.59 mrg 465 1.65 mrg #endif /* BOZOHTTPD_H_ */ 466