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 13 enum { 14 BACKEND_PROXY = 0 15 ,BACKEND_CGI 16 ,BACKEND_FASTCGI 17 ,BACKEND_SCGI 18 ,BACKEND_AJP13 19 }; 20 21 typedef struct http_response_opts_t { 22 int fdfmt; 23 int backend; 24 int authorizer; 25 unsigned short local_redir; 26 unsigned short xsendfile_allow; 27 const array *xsendfile_docroot; 28 void *pdata; 29 handler_t(*parse)(request_st *, struct http_response_opts_t *, buffer *, size_t); 30 handler_t(*headers)(request_st *, struct http_response_opts_t *); 31 } http_response_opts; 32 33 typedef int (*http_response_send_1xx_cb)(request_st *r, connection *con); 34 __attribute_cold__ 35 void http_response_send_1xx_cb_set (http_response_send_1xx_cb fn, int vers); 36 int http_response_send_1xx (request_st *r); 37 38 handler_t http_response_parse_headers(request_st *r, http_response_opts *opts, buffer *hdrs); 39 handler_t http_response_read(request_st *r, http_response_opts *opts, buffer *b, fdnode *fdn); 40 41 __attribute_cold__ 42 handler_t http_response_reqbody_read_error(request_st *r, int http_status); 43 44 int http_response_buffer_append_authority(request_st *r, buffer *o); 45 int http_response_redirect_to_directory(request_st *r, int status); 46 const buffer * http_response_set_last_modified(request_st *r, time_t lmtime); 47 int http_response_handle_cachable(request_st *r, const buffer *lmod, time_t lmtime); 48 void http_response_body_clear(request_st *r, int preserve_length); 49 void http_response_reset(request_st *r); 50 void http_response_send_file (request_st *r, buffer *path); 51 void http_response_backend_done (request_st *r); 52 void http_response_backend_error (request_st *r); 53 void http_response_upgrade_read_body_unknown(request_st *r); 54 55 __attribute_cold__ 56 int http_response_omit_header(request_st *r, const data_string *ds); 57 58 void http_response_write_header(request_st *r); 59 handler_t http_response_handler(request_st *r); 60 61 __attribute_cold__ 62 void strftime_cache_reset(void); 63 64 #endif 65