blob: 35a216c10018c1e7295f63948a30d167306b3acb [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 Tarreau3a816292009-07-07 10:55:49 +020064int http_wait_for_request(struct session *s, struct buffer *req, int an_bit);
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020065int http_process_req_common(struct session *s, struct buffer *req, int an_bit, struct proxy *px);
Willy Tarreau3a816292009-07-07 10:55:49 +020066int http_process_request(struct session *t, struct buffer *req, int an_bit);
67int http_process_tarpit(struct session *s, struct buffer *req, int an_bit);
68int http_process_request_body(struct session *s, struct buffer *req, int an_bit);
Willy Tarreauf5483bf2008-08-14 18:35:40 +020069int process_response(struct session *t);
Willy Tarreaubaaee002006-06-26 02:48:02 +020070
Willy Tarreau01bf8672008-12-07 18:03:29 +010071void produce_content(struct session *s, struct buffer *rep);
Willy Tarreauc0dde7a2007-01-01 21:38:07 +010072int produce_content_stats(struct session *s);
73int produce_content_stats_proxy(struct session *s, struct proxy *px);
Willy Tarreau58f10d72006-12-04 02:26:12 +010074void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010075void get_srv_from_appsession(struct session *t, const char *begin, int len);
76int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp);
77int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp);
78int apply_filters_to_request(struct session *t, struct buffer *req, struct hdr_exp *exp);
Willy Tarreaua15645d2007-03-18 16:22:39 +010079int apply_filters_to_response(struct session *t, struct buffer *rtr, struct hdr_exp *exp);
Willy Tarreau58f10d72006-12-04 02:26:12 +010080void manage_client_side_cookies(struct session *t, struct buffer *req);
Willy Tarreaua15645d2007-03-18 16:22:39 +010081void manage_server_side_cookies(struct session *t, struct buffer *rtr);
82void check_response_for_cacheability(struct session *t, struct buffer *rtr);
Willy Tarreaub2513902006-12-17 14:52:38 +010083int stats_check_uri_auth(struct session *t, struct proxy *backend);
Willy Tarreau80587432006-12-24 17:47:20 +010084void init_proto_http();
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +020085int http_find_header2(const char *name, int len,
86 const char *sol, struct hdr_idx *idx,
87 struct hdr_ctx *ctx);
Willy Tarreau55a8d0e2008-11-30 18:47:21 +010088void http_sess_log(struct session *s);
89void perform_http_redirect(struct session *s, struct stream_interface *si);
Willy Tarreau0cac36f2008-11-30 20:44:17 +010090void http_return_srv_error(struct session *s, struct stream_interface *si);
Willy Tarreau4076a152009-04-02 15:18:36 +020091void http_capture_bad_message(struct error_snapshot *es, struct session *s,
92 struct buffer *buf, struct http_msg *msg,
93 struct proxy *other_end);
Willy Tarreaubaaee002006-06-26 02:48:02 +020094
Willy Tarreaubaaee002006-06-26 02:48:02 +020095#endif /* _PROTO_PROTO_HTTP_H */
96
97/*
98 * Local variables:
99 * c-indent-level: 8
100 * c-basic-offset: 8
101 * End:
102 */