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, request_st *r); 12 int http_response_write_header(request_st *r); 13 14 typedef struct http_cgi_opts_t { 15 int authorizer; 16 int break_scriptfilename_for_php; 17 const buffer *docroot; 18 const 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 const array *xsendfile_docroot; 36 void *pdata; 37 handler_t(*parse)(request_st *, struct http_response_opts_t *, buffer *, size_t); 38 handler_t(*headers)(request_st *, 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(request_st *r, http_cgi_opts *opts, http_cgi_header_append_cb cb, void *vdata); 43 44 handler_t http_response_parse_headers(request_st *r, http_response_opts *opts, buffer *hdrs); 45 handler_t http_response_read(request_st *r, http_response_opts *opts, buffer *b, fdnode *fdn); 46 handler_t http_response_prepare(request_st *r); 47 48 __attribute_cold__ 49 handler_t http_response_comeback(request_st *r); 50 51 int http_response_redirect_to_directory(request_st *r, int status); 52 int http_response_handle_cachable(request_st *r, const buffer *mtime); 53 void http_response_body_clear(request_st *r, int preserve_length); 54 void http_response_send_file (request_st *r, buffer *path); 55 void http_response_backend_done (request_st *r); 56 void http_response_backend_error (request_st *r); 57 void http_response_upgrade_read_body_unknown(request_st *r); 58 59 __attribute_cold__ 60 void strftime_cache_reset(void); 61 62 const buffer * strftime_cache_get(time_t last_mod); 63 #endif 64