1 #ifndef _RESPONSE_H_ 2 #define _RESPONSE_H_ 3 #include "first.h" 4 5 #include "base_decls.h" 6 #include "buffer.h" 7 #include "array.h" 8 9 #include <time.h> 10 11 int http_response_parse(server *srv, connection *con); 12 int http_response_write_header(server *srv, connection *con); 13 14 typedef struct http_cgi_opts_t { 15 int authorizer; 16 int break_scriptfilename_for_php; 17 buffer *docroot; 18 buffer *strip_request_uri; 19 } http_cgi_opts; 20 21 enum { 22 BACKEND_UNSET = 0, 23 BACKEND_PROXY, 24 BACKEND_CGI, 25 BACKEND_FASTCGI, 26 BACKEND_SCGI 27 }; 28 29 typedef struct http_response_opts_t { 30 int fdfmt; 31 int backend; 32 int authorizer; 33 unsigned short local_redir; 34 unsigned short xsendfile_allow; 35 array *xsendfile_docroot; 36 void *pdata; 37 handler_t(*parse)(server *, connection *, struct http_response_opts_t *, buffer *, size_t); 38 handler_t(*headers)(server *, connection *, struct http_response_opts_t *); 39 } http_response_opts; 40 41 typedef int (*http_cgi_header_append_cb)(void *vdata, const char *k, size_t klen, const char *v, size_t vlen); 42 int http_cgi_headers(server *srv, connection *con, http_cgi_opts *opts, http_cgi_header_append_cb cb, void *vdata); 43 44 handler_t http_response_parse_headers(server *srv, connection *con, http_response_opts *opts, buffer *hdrs); 45 handler_t http_response_read(server *srv, connection *con, http_response_opts *opts, buffer *b, fdnode *fdn); 46 handler_t http_response_prepare(server *srv, connection *con); 47 int http_response_buffer_append_authority(server *srv, connection *con, buffer *b); 48 int http_response_redirect_to_directory(server *srv, connection *con, int status); 49 int http_response_handle_cachable(server *srv, connection *con, buffer * mtime); 50 void http_response_body_clear(connection *con, int preserve_length); 51 void http_response_send_file (server *srv, connection *con, buffer *path); 52 void http_response_backend_done (server *srv, connection *con); 53 void http_response_backend_error (server *srv, connection *con); 54 void http_response_upgrade_read_body_unknown(server *srv, connection *con); 55 56 buffer * strftime_cache_get(server *srv, time_t last_mod); 57 #endif 58