34394eef0cc26773ae891dd431bd6bcd1d0f0437
[middleman.git] / include / proto.h
1 #ifndef PROTO_H
2 #define PROTO_H
3
4 #include "flags.h"
5 #include "../config.h"
6 #include "../pcre/pcre.h"
7 #include "../pcre/pcreposix.h"
8
9 #ifdef HAVE_POLL
10 #include <sys/poll.h>
11 #endif
12
13 #if defined(HAVE_GZOPEN) && defined(HAVE_ZLIB_H)
14 #define HAVE_ZLIB 1
15 #endif
16
17 #include "compat.h"
18 #include "settings.h"
19 #include "types.h"
20 #include "macros.h"
21
22 #undef strncpy
23 #define strncpy(a,b,c) dont_use_strncpy()
24 #undef strncat
25 #define strncat(a,b,c) dont_use_strncat()
26
27 /* main.c */
28 void config();
29 int config_load(int, char *);
30 int config_save(char *);
31 int process_new(CONNECTION *);
32 void process_entry(CONNECTION *);
33 void mainloop();
34 void show_help(char **);
35 int pid_check(char *);
36
37 /* mem.c */
38 void *xmalloc(int size);
39 void *xrealloc(void *, int);
40 void xfree(void *);
41
42 /* xml.c */
43 XML_LIST *xml_load(XML_LIST *, char *);
44 XML_LIST *xml_list_add(XML_LIST *, char *, int);
45 void xml_list_free(XML_LIST *);
46 XML_LIST *xml_section(XML_LIST *, char *);
47 int xml_save(XML_LIST *, char *);
48
49 /* access.c */
50 ACCESS_LIST *access_load(ACCESS_LIST *, XML_LIST *);
51 void access_free(ACCESS_LIST *);
52 void access_ll_free(struct ACCESS_LIST_LIST *);
53 int access_check(ACCESS_LIST *, CONNECTION *, char *, char *);
54 XML_LIST *access_xml(ACCESS_LIST *, XML_LIST *);
55 void access_ll_insert(struct ACCESS_LIST_LIST *, char *, char *, char *, char *, char *, char *);
56 struct ACCESS_LIST_LIST *access_ll_new(struct ACCESS_LIST_LIST *);
57 struct ACCESS_LIST_LIST *access_ll_delete(struct ACCESS_LIST_LIST *);
58
59 /* header.c */
60 HEADER *header_new();
61 HEADER_LIST *header_load(HEADER_LIST *, XML_LIST *);
62 XML_LIST *header_xml(HEADER_LIST *, XML_LIST *);
63 void header_free(HEADER_LIST *);
64 void header_ll_free(struct HEADER_LIST_LIST *);
65 void header_ll_insert(struct HEADER_LIST_LIST *, char *, char *, char *, char *);
66 struct HEADER_LIST_LIST *header_ll_new(struct HEADER_LIST_LIST *);
67 struct HEADER_LIST_LIST *header_ll_delete(struct HEADER_LIST_LIST *);
68 struct HTTP_HEADER_LIST *header_list_insert(struct HTTP_HEADER_LIST *, char *, char *);
69 struct HTTP_HEADER_LIST *header_list_dup(struct HTTP_HEADER_LIST *);
70 HEADER *http_header_parse_request(char *);
71 HEADER *http_header_parse_response(char *);
72 HEADER *http_header_dup(HEADER *);
73 void http_header_list_parse(HEADER *, char *);
74 void http_header_free(HEADER *);
75 void http_header_list_free(struct HTTP_HEADER_LIST *);
76 struct HTTP_HEADER_LIST *header_filter(HEADER_LIST *, CONNECTION *);
77 char *header_get(CONNECTION *, int, int);
78 void header_send(HEADER *, CONNECTION *, int, int);
79 int bad_header(char *, int);
80 struct url_command_t **url_command_parse(char *);
81 char *url_command_create(struct url_command_t **);
82 void url_command_free(struct url_command_t **);
83 char *url_command_add(CONNECTION *, char *);
84
85 /* filter.c */
86 FILTER_LIST *filter_load(FILTER_LIST *, XML_LIST *);
87 void filter_free(FILTER_LIST *);
88 void filter_ll_free(struct FILTER_LIST_LIST *);
89 XML_LIST *filter_xml(FILTER_LIST *, XML_LIST *);
90 struct FILTER_LIST_LIST *filter_check(FILTER_LIST *, CONNECTION *);
91 FILEBUF *filter_get(FILTER_LIST *, char *);
92 void filter_ll_insert(struct FILTER_LIST_LIST *, char *, char *, char *, char *);
93 struct FILTER_LIST_LIST *filter_ll_delete(struct FILTER_LIST_LIST *);
94 struct FILTER_LIST_LIST *filter_ll_new(struct FILTER_LIST_LIST *);
95
96 /* cookies.c */
97 COOKIE_LIST *cookie_load(COOKIE_LIST *, XML_LIST *);
98 XML_LIST *cookie_xml(COOKIE_LIST *, XML_LIST *);
99 void cookie_free(COOKIE_LIST *);
100 void cookie_ll_free(struct COOKIE_LIST_LIST *);
101 void cookie_ll_insert(struct COOKIE_LIST_LIST *, char *, char *, char *);
102 struct COOKIE_LIST_LIST *cookie_ll_new(struct COOKIE_LIST_LIST *);
103 struct COOKIE_LIST_LIST *cookie_ll_delete(struct COOKIE_LIST_LIST *);
104 int cookie_check(COOKIE_LIST *, int, CONNECTION *);
105
106 /* misc.c */
107 char *s_strncpy(char *, char *, size_t);
108 char *s_strncat(char *, char *, size_t);
109 char *s_strcasestr(char *, char *);
110 void filebuf_free(FILEBUF *);
111 char *code_to_error(int);
112 char *xstrdup(char *);
113 char *xstrndup(char *, int);
114 char *error_to_template(int);
115 void hostent_free(HOSTENT *);
116 int isip(char *);
117 void string_tolower(char *);
118 FILEBUF *filebuf_new();
119 void filebuf_add(FILEBUF *, const char *, int);
120 void filebuf_resize(FILEBUF *, int);
121 void filebuf_addf(FILEBUF *, const char *, ...);
122 void filebuf_replace(FILEBUF *, int, int, char *);
123 void filebuf_shorten(FILEBUF *);
124 int filebuf_gzip(FILEBUF *);
125 int filebuf_ungzip(FILEBUF *);
126 char *string_to_html(char *, int);
127 int filebuf_save(FILEBUF *, char *);
128 char *url_encode(char *, int);
129 char *url_decode(char *, int);
130 char *string_to_xml(char *);
131 char **string_break(char *, char);
132 int filebuf_read(FILEBUF *, char *);
133
134 /* base64.c */
135 void to64frombits(unsigned char *, const unsigned char *, int);
136 int from64tobits(char *, const char *);
137
138 /* regexp.c */
139 regex_t *reg_compile(char *, int);
140 void reg_free(regex_t *);
141 int reg_exec(regex_t *, char *);
142 regex_sub_t *reg_sub_compile(char *, int);
143 regmatch_sub_t *reg_sub_exec(regex_sub_t *, char *);
144 char *reg_sub_parse(regmatch_sub_t *, char *);
145 void reg_sub_match_free(regmatch_sub_t *);
146 void reg_sub_free(regex_sub_t *);
147 void reg_replace(FILEBUF *, regex_sub_t *, char *);
148 void string_replace(FILEBUF *, char *, char *);
149
150 /* network.c */
151 void net_init();
152 int net_listen(int, char *);
153 CONNECTION *net_accept(int);
154 void net_close(CONNECTION *);
155 void net_listen_closeall();
156 int net_connect(char *, int);
157 int net_proxy(CONNECTION *, int);
158 int net_transfer(CONNECTION *, int, int);
159 NETWORK *network_load(NETWORK *, XML_LIST *);
160 XML_LIST *network_xml(NETWORK *, XML_LIST *);
161 void network_free(NETWORK *);
162 void listen_list_insert(struct LISTEN_LIST *, char *, char *);
163 struct LISTEN_LIST *listen_list_delete(struct LISTEN_LIST *);
164 struct LISTEN_LIST *listen_list_new(struct LISTEN_LIST *);
165 void network_check(NETWORK *);
166 void net_filebuf_read(FILEBUF *, CONNECTION *, int, int);
167 int net_filebuf_send(FILEBUF *, CONNECTION *, int);
168 int net_socks4(CONNECTION *, char *, int);
169 int putsock(SOCKET *, char *, ...);
170 HOSTENT *net_dns(char *);
171
172 /* socket.c */
173 SOCKET *sock_new(int);
174 void sock_close(SOCKET *);
175 int sock_read(SOCKET *, void *, int);
176 int sock_write(SOCKET *, void *, int);
177 int sock_getline(SOCKET *, char *, int);
178 void sock_flush(SOCKET *);
179 void sock_resize(SOCKET *, int, int);
180 void sock_clear(SOCKET *, int);
181
182 /* protocol.c */
183 int protocol_start(CONNECTION *);
184 int protocol_reconnect(CONNECTION *);
185 int protocol_http(CONNECTION *);
186 int protocol_connect(CONNECTION *);
187 unsigned int next_chunksize(CONNECTION *, int);
188 FILEBUF *http_transfer_filebuf(CONNECTION *, int);
189 void http_transfer_discard(CONNECTION *, int);
190 void http_transfer(CONNECTION *, int);
191 int proxy_authenticate(CONNECTION *);
192 int send_ntlm_response(CONNECTION *);
193 int send_basic_response(CONNECTION *);
194
195 /* template.c */
196 TEMPLATES *templates_load(TEMPLATES *, XML_LIST *);
197 XML_LIST *templates_xml(TEMPLATES *, XML_LIST *);
198 void templates_free(TEMPLATES *);
199 void templates_list_free(struct TEMPLATE_LIST *);
200 void template_list_insert(struct TEMPLATE_LIST *, char *, char *, char *, char *, char *, char *);
201 struct TEMPLATE_LIST *template_list_new(struct TEMPLATE_LIST *);
202 struct TEMPLATE_LIST *template_list_delete(struct TEMPLATE_LIST *);
203 FILEBUF *template_get(TEMPLATES *, CONNECTION *, char *);
204 int template_send(TEMPLATES *, char *, CONNECTION *, int);
205
206 /* rewrite.c */
207 REWRITE_LIST *rewrite_load(REWRITE_LIST *, XML_LIST *);
208 XML_LIST *rewrite_xml(REWRITE_LIST *, XML_LIST *);
209 void rewrite_free(REWRITE_LIST *);
210 void rewrite_list_free(struct REWRITE_LIST_LIST *);
211 int rewrite_do(REWRITE_LIST *, CONNECTION *, FILEBUF *, int, int);
212 void rewrite_list_insert(struct REWRITE_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *);
213 struct REWRITE_LIST_LIST *rewrite_list_delete(struct REWRITE_LIST_LIST *);
214 struct REWRITE_LIST_LIST *rewrite_list_new(struct REWRITE_LIST_LIST *);
215
216 /* log.c */
217 void putlog(int, char *, ...);
218 void logbuffer_add(LOGBUFFER *, char *);
219 void logbuffer_clear(LOGBUFFER *);
220 void logbuffer_resize(LOGBUFFER *, int);
221
222 /* signal.c */
223 void signal_setup();
224
225 /* compat.c */
226 HOSTENT *p_gethostbyname(char *);
227 int p_poll(struct pollfd *, int, int);
228 int p_setenv(char *, char *, int);
229 void p_clearenv();
230
231 /* external.c */
232 EXTERNAL *external_load(EXTERNAL *, XML_LIST *);
233 XML_LIST *external_xml(EXTERNAL *, XML_LIST *);
234 void external_free(EXTERNAL *);
235 void external_list_free(struct EXTERNAL_LIST_LIST *);
236 void external_list_insert(struct EXTERNAL_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *);
237 struct EXTERNAL_LIST_LIST *external_list_delete(struct EXTERNAL_LIST_LIST *);
238 struct EXTERNAL_LIST_LIST *external_list_new(struct EXTERNAL_LIST_LIST *);
239 struct EXTERNAL_LIST_LIST *external_find(EXTERNAL *, CONNECTION *);
240 FILEBUF *external_exec(CONNECTION *, char *, FILEBUF *, int);
241 char *external_getmime(FILEBUF *);
242 char *env_header_format(char *, char *);
243
244 /* mime.c */
245 MIME_LIST *mime_load(MIME_LIST *, XML_LIST *);
246 XML_LIST *mime_xml(MIME_LIST *, XML_LIST *);
247 void mime_free(MIME_LIST *);
248 void mime_ll_free(struct MIME_LIST_LIST *);
249 void mime_ll_insert(struct MIME_LIST_LIST *, char *, char *, char *, char *, char *);
250 struct MIME_LIST_LIST *mime_ll_delete(struct MIME_LIST_LIST *);
251 struct MIME_LIST_LIST *mime_ll_new(struct MIME_LIST_LIST *);
252 struct MIME_LIST_LIST *mime_check(MIME_LIST *, CONNECTION *);
253
254 /* hash.c */
255 unsigned int hash_key(int, char *);
256 HASH_TABLE *hash_create(int);
257 void hash_insert(HASH_TABLE *, char *, void *);
258 void hash_purge(HASH_TABLE *, char *);
259 char *hash_search(HASH_TABLE *, char *);
260 void hash_destroy(HASH_TABLE *);
261 int hash_expire(HASH_TABLE *, unsigned int);
262
263 /* redirect.c */
264 REDIRECT_LIST *redirect_load(REDIRECT_LIST *, XML_LIST *);
265 XML_LIST *redirect_xml(REDIRECT_LIST *, XML_LIST *);
266 struct REDIRECT_LIST_LIST *redirect_list_new(struct REDIRECT_LIST_LIST *);
267 void redirect_list_insert(struct REDIRECT_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *);
268 void redirect_free(REDIRECT_LIST *);
269 void redirect_list_free(struct REDIRECT_LIST_LIST *);
270 struct REDIRECT_LIST_LIST *redirect_list_delete(struct REDIRECT_LIST_LIST *);
271 int redirect_do(REDIRECT_LIST *, CONNECTION *, int);
272
273 /* forward.c */
274 FORWARD_LIST *forward_load(FORWARD_LIST *, XML_LIST *);
275 XML_LIST *forward_xml(FORWARD_LIST *, XML_LIST *);
276 struct FORWARD_LIST_LIST *forward_list_new(struct FORWARD_LIST_LIST *);
277 void forward_list_insert(struct FORWARD_LIST_LIST *, char *, char *, char *, char *, char *, char *, char *, char *, char *, char *);
278 struct FORWARD_LIST_LIST *forward_list_delete(struct FORWARD_LIST_LIST *);
279 void forward_list_free(struct FORWARD_LIST_LIST *);
280 void forward_free(FORWARD_LIST *);
281 int forward_do(FORWARD_LIST *, CONNECTION *);
282
283 /* keywords.c */
284 KEYWORD_LIST *keyword_load(KEYWORD_LIST *, XML_LIST *);
285 XML_LIST *keyword_xml(KEYWORD_LIST *, XML_LIST *);
286 struct KEYWORD_LIST_LIST *keyword_list_new(struct KEYWORD_LIST_LIST *);
287 void keyword_list_insert(struct KEYWORD_LIST_LIST *, char *, char *, char *, char *, char *, char *);
288 struct KEYWORD_LIST_LIST *keyword_list_delete(struct KEYWORD_LIST_LIST *);
289 void keyword_list_free(struct KEYWORD_LIST_LIST *);
290 void keyword_free(KEYWORD_LIST *);
291 int keyword_check(KEYWORD_LIST *, CONNECTION *, FILEBUF *, int);
292
293 /* interface.c */
294 struct cgi_args_t *cgi_parse_request(char *);
295 void cgi_args_free(struct cgi_args_t *);
296 void interface_handle_request(CONNECTION *);
297 void interface_page_connections(FILEBUF *, struct cgi_args_t *, CONNECTION *);
298 void interface_page_dnscache(FILEBUF *, struct cgi_args_t *, CONNECTION *);
299 void interface_page_headers(FILEBUF *, struct cgi_args_t *, CONNECTION *);
300 void interface_page_save(FILEBUF *, struct cgi_args_t *, CONNECTION *);
301 void interface_page_load(FILEBUF *, struct cgi_args_t *, CONNECTION *);
302 void interface_page_log(FILEBUF *, struct cgi_args_t *, CONNECTION *);
303 void interface_page_config(FILEBUF *, struct cgi_args_t *, CONNECTION *);
304 void interface_page_config_filter(FILEBUF *, struct cgi_args_t *, CONNECTION *);
305 void interface_page_config_filter_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
306 void interface_page_config_filter_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
307 void interface_page_config_header(FILEBUF *, struct cgi_args_t *, CONNECTION *);
308 void interface_page_config_header_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
309 void interface_page_config_header_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
310 void interface_page_config_access(FILEBUF *, struct cgi_args_t *, CONNECTION *);
311 void interface_page_config_access_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
312 void interface_page_config_access_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
313 void interface_page_config_rewrite(FILEBUF *, struct cgi_args_t *, CONNECTION *);
314 void interface_page_config_rewrite_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
315 void interface_page_config_rewrite_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
316 void interface_page_config_mime(FILEBUF *, struct cgi_args_t *, CONNECTION *);
317 void interface_page_config_mime_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
318 void interface_page_config_mime_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
319 void interface_page_config_cookies(FILEBUF *, struct cgi_args_t *, CONNECTION *);
320 void interface_page_config_cookies_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
321 void interface_page_config_cookies_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
322 void interface_page_config_external(FILEBUF *, struct cgi_args_t *, CONNECTION *);
323 void interface_page_config_external_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
324 void interface_page_config_external_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
325 void interface_page_config_templates(FILEBUF *, struct cgi_args_t *, CONNECTION *);
326 void interface_page_config_templates_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
327 void interface_page_config_templates_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
328 void interface_page_config_network(FILEBUF *, struct cgi_args_t *, CONNECTION *);
329 void interface_page_config_redirect(FILEBUF *, struct cgi_args_t *, CONNECTION *);
330 void interface_page_config_redirect_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
331 void interface_page_config_redirect_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
332 void interface_page_config_forward(FILEBUF *, struct cgi_args_t *, CONNECTION *);
333 void interface_page_config_forward_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
334 void interface_page_config_forward_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
335 void interface_page_config_keywords(FILEBUF *, struct cgi_args_t *, CONNECTION *);
336 void interface_page_config_keywords_dialog(FILEBUF *, struct cgi_args_t *, CONNECTION *);
337 void interface_page_config_keywords_action(FILEBUF *, struct cgi_args_t *, CONNECTION *);
338 void filter_check_show(CONNECTION *);
339 void mime_check_show(CONNECTION *);
340 void score_show(CONNECTION *, int);
341
342 #endif                          /* PROTO_H */