#ifndef PROTO_H #define PROTO_H #include "flags.h" #include "../config.h" #include "../pcre/pcre.h" #include "../pcre/pcreposix.h" #ifdef HAVE_POLL #include #endif #if defined(HAVE_GZOPEN) && defined(HAVE_ZLIB_H) #define HAVE_ZLIB 1 #endif #include "compat.h" #include "settings.h" #include "types.h" #include "macros.h" #undef strncpy #define strncpy(a,b,c) dont_use_strncpy() #undef strncat #define strncat(a,b,c) dont_use_strncat() /* main.c */ void config(); int config_load(int, char *); int config_save(char *); int process_new(CONNECTION *); void process_entry(CONNECTION *); void mainloop(); void show_help(char **); int pid_check(char *); /* mem.c */ void *xmalloc(int size); void *xrealloc(void *, int); void xfree(void *); /* xml.c */ XML_LIST *xml_load(XML_LIST *, char *); XML_LIST *xml_list_add(XML_LIST *, char *, int); void xml_list_free(XML_LIST *); XML_LIST *xml_section(XML_LIST *, char *); int xml_save(XML_LIST *, char *); /* access.c */ ACCESS_LIST *access_load(ACCESS_LIST *, XML_LIST *); void access_free(ACCESS_LIST *); void access_ll_free(struct ACCESS_LIST_LIST *); int access_check(ACCESS_LIST *, CONNECTION *, char *, char *); XML_LIST *access_xml(ACCESS_LIST *, XML_LIST *); void access_ll_insert(struct ACCESS_LIST_LIST *, char *, char *, char *, char *, char *, char *); struct ACCESS_LIST_LIST *access_ll_new(struct ACCESS_LIST_LIST *); struct ACCESS_LIST_LIST *access_ll_delete(struct ACCESS_LIST_LIST *); /* header.c */ HEADER *header_new(); HEADER_LIST *header_load(HEADER_LIST *, XML_LIST *); XML_LIST *header_xml(HEADER_LIST *, XML_LIST *); void header_free(HEADER_LIST *); void header_ll_free(struct HEADER_LIST_LIST *); void header_ll_insert(struct HEADER_LIST_LIST *, char *, char *, char *, char *); struct HEADER_LIST_LIST *header_ll_new(struct HEADER_LIST_LIST *); struct HEADER_LIST_LIST *header_ll_delete(struct HEADER_LIST_LIST *); struct HTTP_HEADER_LIST *header_list_insert(struct HTTP_HEADER_LIST *, char *, char *); struct HTTP_HEADER_LIST *header_list_dup(struct HTTP_HEADER_LIST *); HEADER *http_header_parse_request(char *); HEADER *http_header_parse_response(char *); HEADER *http_header_dup(HEADER *); void http_header_list_parse(HEADER *, char *); void http_header_free(HEADER *); void http_header_list_free(struct HTTP_HEADER_LIST *); struct HTTP_HEADER_LIST *header_filter(HEADER_LIST *, CONNECTION *); char *header_get(CONNECTION *, int, int); void header_send(HEADER *, CONNECTION *, int, int); int bad_header(char *, int); struct url_command_t **url_command_parse(char *); char *url_command_create(struct url_command_t **); void url_command_free(struct url_command_t **); char *url_command_add(CONNECTION *, char *); /* filter.c */ FILTER_LIST *filter_load(FILTER_LIST *, XML_LIST *); void filter_free(FILTER_LIST *); void filter_ll_free(struct FILTER_LIST_LIST *); XML_LIST *filter_xml(FILTER_LIST *, XML_LIST *); struct FILTER_LIST_LIST *filter_check(FILTER_LIST *, CONNECTION *); FILEBUF *filter_get(FILTER_LIST *, char *); void filter_ll_insert(struct FILTER_LIST_LIST *, char *, char *, char *, char *); struct FILTER_LIST_LIST *filter_ll_delete(struct FILTER_LIST_LIST *); struct FILTER_LIST_LIST *filter_ll_new(struct FILTER_LIST_LIST *); /* cookies.c */ COOKIE_LIST *cookie_load(COOKIE_LIST *, XML_LIST *); XML_LIST *cookie_xml(COOKIE_LIST *, XML_LIST *); void cookie_free(COOKIE_LIST *); void cookie_ll_free(struct COOKIE_LIST_LIST *); void cookie_ll_insert(struct COOKIE_LIST_LIST *, char *, char *, char *); struct COOKIE_LIST_LIST *cookie_ll_new(struct COOKIE_LIST_LIST *); struct COOKIE_LIST_LIST *cookie_ll_delete(struct COOKIE_LIST_LIST *); int cookie_check(COOKIE_LIST *, int, CONNECTION *); /* misc.c */ char *s_strncpy(char *, char *, size_t); char *s_strncat(char *, char *, size_t); char *s_strcasestr(char *, char *); void filebuf_free(FILEBUF *); char *code_to_error(int); char *xstrdup(char *); char *xstrndup(char *, int); char *error_to_template(int); void hostent_free(HOSTENT *); int isip(char *); void string_tolower(char *); FILEBUF *filebuf_new(); void filebuf_add(FILEBUF *, const char *, int); void filebuf_resize(FILEBUF *, int); void filebuf_addf(FILEBUF *, const char *, ...); void filebuf_replace(FILEBUF *, int, int, char *); void filebuf_shorten(FILEBUF *); int filebuf_gzip(FILEBUF *); int filebuf_ungzip(FILEBUF *); char *string_to_html(char *, int); int filebuf_save(FILEBUF *, char *); char *url_encode(char *, int); char *url_decode(char *, int); char *string_to_xml(char *); char **string_break(char *, char); int filebuf_read(FILEBUF *, char *); /* base64.c */ void to64frombits(unsigned char *, const unsigned char *, int); int from64tobits(char *, const char *); /* regexp.c */ regex_t *reg_compile(char *, int); void reg_free(regex_t *); int reg_exec(regex_t *, char *); regex_sub_t *reg_sub_compile(char *, int); regmatch_sub_t *reg_sub_exec(regex_sub_t *, char *); char *reg_sub_parse(regmatch_sub_t *, char *); void reg_sub_match_free(regmatch_sub_t *); void reg_sub_free(regex_sub_t *); void reg_replace(FILEBUF *, regex_sub_t *, char *); void string_replace(FILEBUF *, char *, char *); /* network.c */ void net_init(); int net_listen(int, char *); CONNECTION *net_accept(int); void net_close(CONNECTION *); void net_listen_closeall(); int net_connect(char *, int); int net_proxy(CONNECTION *, int); int net_transfer(CONNECTION *, int, int); NETWORK *network_load(NETWORK *, XML_LIST *); XML_LIST *network_xml(NETWORK *, XML_LIST *); void network_free(NETWORK *); void listen_list_insert(struct LISTEN_LIST *, char *, char *); struct LISTEN_LIST *listen_list_delete(struct LISTEN_LIST *); struct LISTEN_LIST *listen_list_new(struct LISTEN_LIST *); void network_check(NETWORK *); void net_filebuf_read(FILEBUF *, CONNECTION *, int, int); int net_filebuf_send(FILEBUF *, CONNECTION *, int); int net_socks4(CONNECTION *, char *, int); int putsock(SOCKET *, char *, ...); HOSTENT *net_dns(char *); /* socket.c */ SOCKET *sock_new(int); void sock_close(SOCKET *); int sock_read(SOCKET *, void *, int); int sock_write(SOCKET *, void *, int); int sock_getline(SOCKET *, char *, int); void sock_flush(SOCKET *); void sock_resize(SOCKET *, int, int); void sock_clear(SOCKET *, int); /* protocol.c */ int protocol_start(CONNECTION *); int protocol_reconnect(CONNECTION *); int protocol_http(CONNECTION *); int protocol_connect(CONNECTION *); unsigned int next_chunksize(CONNECTION *, int); FILEBUF *http_transfer_filebuf(CONNECTION *, int); void http_transfer_discard(CONNECTION *, int); void http_transfer(CONNECTION *, int); int proxy_authenticate(CONNECTION *); int send_ntlm_response(CONNECTION *); int send_basic_response(CONNECTION *); /* template.c */ TEMPLATES *templates_load(TEMPLATES *, XML_LIST *); XML_LIST *templates_xml(TEMPLATES *, XML_LIST *); void templates_free(TEMPLATES *); void templates_list_free(struct TEMPLATE_LIST *); void template_list_insert(struct TEMPLATE_LIST *, char *, char *, char *, char *, char *, char *); struct TEMPLATE_LIST *template_list_new(struct TEMPLATE_LIST *); struct TEMPLATE_LIST *template_list_delete(struct TEMPLATE_LIST *); FILEBUF *template_get(TEMPLATES *, CONNECTION *, char *); int template_send(TEMPLATES *, char *, CONNECTION *, int); /* rewrite.c */ REWRITE_LIST *rewrite_load(REWRITE_LIST *, XML_LIST *); XML_LIST *rewrite_xml(REWRITE_LIST *, XML_LIST *); void rewrite_free(REWRITE_LIST *); void rewrite_list_free(struct REWRITE_LIST_LIST *); int rewrite_do(REWRITE_LIST *, CONNECTION *, FILEBUF *, int, int); void rewrite_list_insert(struct REWRITE_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *); struct REWRITE_LIST_LIST *rewrite_list_delete(struct REWRITE_LIST_LIST *); struct REWRITE_LIST_LIST *rewrite_list_new(struct REWRITE_LIST_LIST *); /* log.c */ void putlog(int, char *, ...); void logbuffer_add(LOGBUFFER *, char *); void logbuffer_clear(LOGBUFFER *); void logbuffer_resize(LOGBUFFER *, int); /* signal.c */ void signal_setup(); /* compat.c */ HOSTENT *p_gethostbyname(char *); int p_poll(struct pollfd *, int, int); int p_setenv(char *, char *, int); void p_clearenv(); /* external.c */ EXTERNAL *external_load(EXTERNAL *, XML_LIST *); XML_LIST *external_xml(EXTERNAL *, XML_LIST *); void external_free(EXTERNAL *); void external_list_free(struct EXTERNAL_LIST_LIST *); void external_list_insert(struct EXTERNAL_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *); struct EXTERNAL_LIST_LIST *external_list_delete(struct EXTERNAL_LIST_LIST *); struct EXTERNAL_LIST_LIST *external_list_new(struct EXTERNAL_LIST_LIST *); struct EXTERNAL_LIST_LIST *external_find(EXTERNAL *, CONNECTION *); FILEBUF *external_exec(CONNECTION *, char *, FILEBUF *, int); char *external_getmime(FILEBUF *); char *env_header_format(char *, char *); /* mime.c */ MIME_LIST *mime_load(MIME_LIST *, XML_LIST *); XML_LIST *mime_xml(MIME_LIST *, XML_LIST *); void mime_free(MIME_LIST *); void mime_ll_free(struct MIME_LIST_LIST *); void mime_ll_insert(struct MIME_LIST_LIST *, char *, char *, char *, char *, char *); struct MIME_LIST_LIST *mime_ll_delete(struct MIME_LIST_LIST *); struct MIME_LIST_LIST *mime_ll_new(struct MIME_LIST_LIST *); struct MIME_LIST_LIST *mime_check(MIME_LIST *, CONNECTION *); /* hash.c */ unsigned int hash_key(int, char *); HASH_TABLE *hash_create(int); void hash_insert(HASH_TABLE *, char *, void *); void hash_purge(HASH_TABLE *, char *); char *hash_search(HASH_TABLE *, char *); void hash_destroy(HASH_TABLE *); int hash_expire(HASH_TABLE *, unsigned int); /* redirect.c */ REDIRECT_LIST *redirect_load(REDIRECT_LIST *, XML_LIST *); XML_LIST *redirect_xml(REDIRECT_LIST *, XML_LIST *); struct REDIRECT_LIST_LIST *redirect_list_new(struct REDIRECT_LIST_LIST *); void redirect_list_insert(struct REDIRECT_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *); void redirect_free(REDIRECT_LIST *); void redirect_list_free(struct REDIRECT_LIST_LIST *); struct REDIRECT_LIST_LIST *redirect_list_delete(struct REDIRECT_LIST_LIST *); int redirect_do(REDIRECT_LIST *, CONNECTION *, int); /* forward.c */ FORWARD_LIST *forward_load(FORWARD_LIST *, XML_LIST *); XML_LIST *forward_xml(FORWARD_LIST *, XML_LIST *); struct FORWARD_LIST_LIST *forward_list_new(struct FORWARD_LIST_LIST *); void forward_list_insert(struct FORWARD_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *, char *, char *, char *); struct FORWARD_LIST_LIST *forward_list_delete(struct FORWARD_LIST_LIST *); void forward_list_free(struct FORWARD_LIST_LIST *); void forward_free(FORWARD_LIST *); int forward_do(FORWARD_LIST *, CONNECTION *); /* keywords.c */ KEYWORD_LIST *keyword_load(KEYWORD_LIST *, XML_LIST *); XML_LIST *keyword_xml(KEYWORD_LIST *, XML_LIST *); struct KEYWORD_LIST_LIST *keyword_list_new(struct KEYWORD_LIST_LIST *); void keyword_list_insert(struct KEYWORD_LIST_LIST *, char *, char *, char *, char *, char *, char *); struct KEYWORD_LIST_LIST *keyword_list_delete(struct KEYWORD_LIST_LIST *); void keyword_list_free(struct KEYWORD_LIST_LIST *); void keyword_free(KEYWORD_LIST *); int keyword_check(KEYWORD_LIST *, CONNECTION *, FILEBUF *, int); /* interface.c */ struct cgi_args_t *cgi_parse_request(char *); void cgi_args_free(struct cgi_args_t *); void interface_handle_request(CONNECTION *); void interface_page_connections(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_dnscache(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_headers(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_save(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_load(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_log(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_filter(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_filter_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_filter_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_header(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_header_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_header_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_access(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_access_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_access_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_rewrite(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_rewrite_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_rewrite_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_mime(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_mime_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_mime_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_cookies(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_cookies_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_cookies_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_external(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_external_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_external_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_templates(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_templates_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_templates_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_network(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_redirect(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_redirect_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_redirect_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_forward(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_forward_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_forward_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_keywords(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_keywords_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *); void interface_page_config_keywords_action(FILEBUF *, struct cgi_args_t *, CONNECTION *); void filter_check_show(CONNECTION *); void mime_check_show(CONNECTION *); void score_show(CONNECTION *, int); #endif /* PROTO_H */