blob: 175eb04794406306e4e25b0492bd056260f97a6f [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 Tarreaubaaee002006-06-26 02:48:02 +020061int process_cli(struct session *t);
Willy Tarreaufa7e1022008-10-19 07:30:41 +020062int process_srv_data(struct session *t);
63int process_srv_conn(struct session *t);
Willy Tarreau59234e92008-11-30 23:51:27 +010064int http_process_request(struct session *t, struct buffer *req);
Willy Tarreau60b85b02008-11-30 23:28:40 +010065int http_process_tarpit(struct session *s, struct buffer *req);
Willy Tarreaud34af782008-11-30 23:36:37 +010066int http_process_request_body(struct session *s, struct buffer *req);
Willy Tarreauf5483bf2008-08-14 18:35:40 +020067int process_response(struct session *t);
Willy Tarreaubaaee002006-06-26 02:48:02 +020068
Willy Tarreau01bf8672008-12-07 18:03:29 +010069void produce_content(struct session *s, struct buffer *rep);
Willy Tarreauc0dde7a2007-01-01 21:38:07 +010070int produce_content_stats(struct session *s);
71int produce_content_stats_proxy(struct session *s, struct proxy *px);
Willy Tarreau58f10d72006-12-04 02:26:12 +010072void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010073void get_srv_from_appsession(struct session *t, const char *begin, int len);
74int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp);
75int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp);
76int apply_filters_to_request(struct session *t, struct buffer *req, struct hdr_exp *exp);
Willy Tarreaua15645d2007-03-18 16:22:39 +010077int apply_filters_to_response(struct session *t, struct buffer *rtr, struct hdr_exp *exp);
Willy Tarreau58f10d72006-12-04 02:26:12 +010078void manage_client_side_cookies(struct session *t, struct buffer *req);
Willy Tarreaua15645d2007-03-18 16:22:39 +010079void manage_server_side_cookies(struct session *t, struct buffer *rtr);
80void check_response_for_cacheability(struct session *t, struct buffer *rtr);
Willy Tarreaub2513902006-12-17 14:52:38 +010081int stats_check_uri_auth(struct session *t, struct proxy *backend);
Willy Tarreau80587432006-12-24 17:47:20 +010082void init_proto_http();
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +020083int http_find_header2(const char *name, int len,
84 const char *sol, struct hdr_idx *idx,
85 struct hdr_ctx *ctx);
Willy Tarreau55a8d0e2008-11-30 18:47:21 +010086void http_sess_log(struct session *s);
87void perform_http_redirect(struct session *s, struct stream_interface *si);
Willy Tarreau0cac36f2008-11-30 20:44:17 +010088void http_return_srv_error(struct session *s, struct stream_interface *si);
Willy Tarreau4076a152009-04-02 15:18:36 +020089void http_capture_bad_message(struct error_snapshot *es, struct session *s,
90 struct buffer *buf, struct http_msg *msg,
91 struct proxy *other_end);
Willy Tarreaubaaee002006-06-26 02:48:02 +020092
Willy Tarreaubaaee002006-06-26 02:48:02 +020093#endif /* _PROTO_PROTO_HTTP_H */
94
95/*
96 * Local variables:
97 * c-indent-level: 8
98 * c-basic-offset: 8
99 * End:
100 */