2005-05-26 05:06:32 +04:00
/*
Unix SMB / CIFS implementation .
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-05-26 05:06:32 +04:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-05-26 05:06:32 +04:00
*/
2010-11-14 19:36:51 +03:00
# ifndef __WEB_SERVER_H__
# define __WEB_SERVER_H__
2005-05-26 05:06:32 +04:00
# include "smbd/process_model.h"
2008-09-21 20:45:09 +04:00
struct websrv_context ;
2008-05-24 20:13:30 +04:00
struct web_server_data {
struct tls_params * tls_params ;
2008-09-21 20:45:09 +04:00
void ( * http_process_input ) ( struct web_server_data * wdata ,
struct websrv_context * web ) ;
2009-02-02 12:13:43 +03:00
void * private_data ;
2011-05-12 14:38:03 +04:00
struct task_server * task ;
2008-05-24 20:13:30 +04:00
} ;
2008-09-21 18:53:29 +04:00
struct http_header {
char * name ;
char * value ;
struct http_header * prev , * next ;
} ;
2005-05-26 05:06:32 +04:00
/*
context of one open web connection
*/
struct websrv_context {
2005-05-27 04:29:58 +04:00
struct task_server * task ;
2005-05-26 05:06:32 +04:00
struct stream_connection * conn ;
2008-09-21 20:45:09 +04:00
struct websrv_request_input {
2007-08-27 22:10:19 +04:00
bool tls_detect ;
bool tls_first_char ;
2005-05-27 15:57:14 +04:00
uint8_t first_byte ;
2005-05-26 05:06:32 +04:00
DATA_BLOB partial ;
2007-08-27 22:10:19 +04:00
bool end_of_headers ;
2005-05-26 05:06:32 +04:00
char * url ;
unsigned content_length ;
2007-08-27 22:10:19 +04:00
bool post_request ;
2008-09-21 18:53:29 +04:00
struct http_header * headers ;
2005-05-26 05:06:32 +04:00
} input ;
2008-09-21 20:45:09 +04:00
struct websrv_request_output {
2007-08-27 22:10:19 +04:00
bool output_pending ;
2005-05-26 05:06:32 +04:00
DATA_BLOB content ;
2008-09-21 20:45:09 +04:00
bool headers_sent ;
2005-05-26 05:06:32 +04:00
unsigned nsent ;
} output ;
2005-05-27 04:29:58 +04:00
struct session_data * session ;
2005-05-26 05:06:32 +04:00
} ;
2005-05-27 04:29:58 +04:00
2010-11-14 19:36:51 +03:00
bool wsgi_initialize ( struct web_server_data * wdata ) ;
void http_error ( struct websrv_context * web , const char * status , const char * info ) ;
void websrv_output_headers ( struct websrv_context * web , const char * status , struct http_header * headers ) ;
2012-11-24 23:44:08 +04:00
void websrv_output ( struct websrv_context * web , const void * data , size_t length ) ;
2010-11-14 19:36:51 +03:00
NTSTATUS http_parse_header ( struct websrv_context * web , const char * line ) ;
2005-05-27 04:29:58 +04:00
2010-11-14 19:36:51 +03:00
# endif /* __WEB_SERVER_H__ */