blob: 0fcbea65c89778845a2913057c242432071a1f88 [file] [log] [blame]
Willy Tarreaubaaee002006-06-26 02:48:02 +02001/*
2 include/proto/proto_http.h
3 This file contains HTTP protocol definitions.
4
Willy Tarreauc65a3ba2008-08-11 23:42:50 +02005 Copyright (C) 2000-2008 Willy Tarreau - w@1wt.eu
Willy Tarreau55a8d0e2008-11-30 18:47:21 +01006
Willy Tarreaubaaee002006-06-26 02:48:02 +02007 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation, version 2.1
10 exclusively.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/
21
22#ifndef _PROTO_PROTO_HTTP_H
23#define _PROTO_PROTO_HTTP_H
24
Willy Tarreaue3ba5f02006-06-29 18:54:54 +020025#include <common/config.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020026#include <types/proto_http.h>
27#include <types/session.h>
28#include <types/task.h>
29
Willy Tarreau58f10d72006-12-04 02:26:12 +010030/*
31 * some macros used for the request parsing.
32 * from RFC2616:
33 * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010034 * SEP = one of the 17 defined separators or SP or HT
35 * LWS = CR, LF, SP or HT
36 * SPHT = SP or HT. Use this macro and not a boolean expression for best speed.
37 * CRLF = CR or LF. Use this macro and not a boolean expression for best speed.
38 * token = any CHAR except CTL or SEP. Use this macro and not a boolean expression for best speed.
Willy Tarreau4b89ad42007-03-04 18:13:58 +010039 *
40 * added for ease of use:
41 * ver_token = 'H', 'P', 'T', '/', '.', and digits.
Willy Tarreau58f10d72006-12-04 02:26:12 +010042 */
Willy Tarreau58f10d72006-12-04 02:26:12 +010043
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010044extern const char http_is_ctl[256];
45extern const char http_is_sep[256];
46extern const char http_is_lws[256];
47extern const char http_is_spht[256];
48extern const char http_is_crlf[256];
49extern const char http_is_token[256];
Willy Tarreau4b89ad42007-03-04 18:13:58 +010050extern const char http_is_ver_token[256];
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010051
52#define HTTP_IS_CTL(x) (http_is_ctl[(unsigned char)(x)])
53#define HTTP_IS_SEP(x) (http_is_sep[(unsigned char)(x)])
54#define HTTP_IS_LWS(x) (http_is_lws[(unsigned char)(x)])
55#define HTTP_IS_SPHT(x) (http_is_spht[(unsigned char)(x)])
56#define HTTP_IS_CRLF(x) (http_is_crlf[(unsigned char)(x)])
57#define HTTP_IS_TOKEN(x) (http_is_token[(unsigned char)(x)])
Willy Tarreau4b89ad42007-03-04 18:13:58 +010058#define HTTP_IS_VER_TOKEN(x) (http_is_ver_token[(unsigned char)(x)])
Willy Tarreaubaaee002006-06-26 02:48:02 +020059
60int event_accept(int fd);
Willy Tarreau0c303ee2008-07-07 00:09:58 +020061void process_session(struct task *t, int *next);
Willy Tarreaubaaee002006-06-26 02:48:02 +020062int process_cli(struct session *t);
Willy Tarreaufa7e1022008-10-19 07:30:41 +020063int process_srv_data(struct session *t);
64int process_srv_conn(struct session *t);
Willy Tarreauc65a3ba2008-08-11 23:42:50 +020065int process_request(struct session *t);
Willy Tarreauf5483bf2008-08-14 18:35:40 +020066int process_response(struct session *t);
Willy Tarreaubaaee002006-06-26 02:48:02 +020067
Willy Tarreau0f772532006-12-23 20:51:41 +010068void client_retnclose(struct session *s, const struct chunk *msg);
69void client_return(struct session *s, const struct chunk *msg);
Willy Tarreaubaaee002006-06-26 02:48:02 +020070void srv_close_with_err(struct session *t, int err, int finst,
Willy Tarreau0f772532006-12-23 20:51:41 +010071 int status, const struct chunk *msg);
Willy Tarreaubaaee002006-06-26 02:48:02 +020072
73int produce_content(struct session *s);
Willy Tarreauc0dde7a2007-01-01 21:38:07 +010074int produce_content_stats(struct session *s);
75int produce_content_stats_proxy(struct session *s, struct proxy *px);
Willy Tarreau58f10d72006-12-04 02:26:12 +010076void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010077void get_srv_from_appsession(struct session *t, const char *begin, int len);
78int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp);
79int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp);
80int apply_filters_to_request(struct session *t, struct buffer *req, struct hdr_exp *exp);
Willy Tarreaua15645d2007-03-18 16:22:39 +010081int apply_filters_to_response(struct session *t, struct buffer *rtr, struct hdr_exp *exp);
Willy Tarreau58f10d72006-12-04 02:26:12 +010082void manage_client_side_cookies(struct session *t, struct buffer *req);
Willy Tarreaua15645d2007-03-18 16:22:39 +010083void manage_server_side_cookies(struct session *t, struct buffer *rtr);
84void check_response_for_cacheability(struct session *t, struct buffer *rtr);
Willy Tarreaub2513902006-12-17 14:52:38 +010085int stats_check_uri_auth(struct session *t, struct proxy *backend);
Willy Tarreau80587432006-12-24 17:47:20 +010086void init_proto_http();
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +020087int http_find_header2(const char *name, int len,
88 const char *sol, struct hdr_idx *idx,
89 struct hdr_ctx *ctx);
Willy Tarreau55a8d0e2008-11-30 18:47:21 +010090void http_sess_log(struct session *s);
91void perform_http_redirect(struct session *s, struct stream_interface *si);
92void return_srv_error(struct session *s, int err_type);
Willy Tarreaubaaee002006-06-26 02:48:02 +020093
Willy Tarreaubaaee002006-06-26 02:48:02 +020094#endif /* _PROTO_PROTO_HTTP_H */
95
96/*
97 * Local variables:
98 * c-indent-level: 8
99 * c-basic-offset: 8
100 * End:
101 */