blob: 72a5e3cc0770f6d2d47a14c00956d2334c0c3c81 [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 Tarreaubaaee002006-06-26 02:48:02 +020068int produce_content(struct session *s);
Willy Tarreauc0dde7a2007-01-01 21:38:07 +010069int produce_content_stats(struct session *s);
70int produce_content_stats_proxy(struct session *s, struct proxy *px);
Willy Tarreau58f10d72006-12-04 02:26:12 +010071void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010072void get_srv_from_appsession(struct session *t, const char *begin, int len);
73int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp);
74int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp);
75int apply_filters_to_request(struct session *t, struct buffer *req, struct hdr_exp *exp);
Willy Tarreaua15645d2007-03-18 16:22:39 +010076int apply_filters_to_response(struct session *t, struct buffer *rtr, struct hdr_exp *exp);
Willy Tarreau58f10d72006-12-04 02:26:12 +010077void manage_client_side_cookies(struct session *t, struct buffer *req);
Willy Tarreaua15645d2007-03-18 16:22:39 +010078void manage_server_side_cookies(struct session *t, struct buffer *rtr);
79void check_response_for_cacheability(struct session *t, struct buffer *rtr);
Willy Tarreaub2513902006-12-17 14:52:38 +010080int stats_check_uri_auth(struct session *t, struct proxy *backend);
Willy Tarreau80587432006-12-24 17:47:20 +010081void init_proto_http();
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +020082int http_find_header2(const char *name, int len,
83 const char *sol, struct hdr_idx *idx,
84 struct hdr_ctx *ctx);
Willy Tarreau55a8d0e2008-11-30 18:47:21 +010085void http_sess_log(struct session *s);
86void perform_http_redirect(struct session *s, struct stream_interface *si);
Willy Tarreau0cac36f2008-11-30 20:44:17 +010087void http_return_srv_error(struct session *s, struct stream_interface *si);
Willy Tarreaubaaee002006-06-26 02:48:02 +020088
Willy Tarreaubaaee002006-06-26 02:48:02 +020089#endif /* _PROTO_PROTO_HTTP_H */
90
91/*
92 * Local variables:
93 * c-indent-level: 8
94 * c-basic-offset: 8
95 * End:
96 */