blob: 298d30d074acec514fc074cd605f9869d0c0b33d [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 Tarreaua15645d2007-03-18 16:22:39 +01005 Copyright (C) 2000-2007 Willy Tarreau - w@1wt.eu
Willy Tarreaubaaee002006-06-26 02:48:02 +02006
7 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);
61int process_session(struct task *t);
62int process_cli(struct session *t);
63int process_srv(struct session *t);
64
Willy Tarreau0f772532006-12-23 20:51:41 +010065void client_retnclose(struct session *s, const struct chunk *msg);
66void client_return(struct session *s, const struct chunk *msg);
Willy Tarreaubaaee002006-06-26 02:48:02 +020067void srv_close_with_err(struct session *t, int err, int finst,
Willy Tarreau0f772532006-12-23 20:51:41 +010068 int status, const struct chunk *msg);
Willy Tarreaubaaee002006-06-26 02:48:02 +020069
70int produce_content(struct session *s);
Willy Tarreauc0dde7a2007-01-01 21:38:07 +010071int produce_content_stats(struct session *s);
72int produce_content_stats_proxy(struct session *s, struct proxy *px);
Willy Tarreau58f10d72006-12-04 02:26:12 +010073void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
Willy Tarreau8d5d7f22007-01-21 19:16:41 +010074void get_srv_from_appsession(struct session *t, const char *begin, int len);
75int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp);
76int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp);
77int apply_filters_to_request(struct session *t, struct buffer *req, struct hdr_exp *exp);
Willy Tarreaua15645d2007-03-18 16:22:39 +010078int apply_filters_to_response(struct session *t, struct buffer *rtr, struct hdr_exp *exp);
Willy Tarreau58f10d72006-12-04 02:26:12 +010079void manage_client_side_cookies(struct session *t, struct buffer *req);
Willy Tarreaua15645d2007-03-18 16:22:39 +010080void manage_server_side_cookies(struct session *t, struct buffer *rtr);
81void check_response_for_cacheability(struct session *t, struct buffer *rtr);
Willy Tarreaub2513902006-12-17 14:52:38 +010082int stats_check_uri_auth(struct session *t, struct proxy *backend);
Willy Tarreau80587432006-12-24 17:47:20 +010083void init_proto_http();
Willy Tarreaubaaee002006-06-26 02:48:02 +020084
Willy Tarreau3d300592007-03-18 18:34:41 +010085/* used to clear the cookie flags when a transaction failed on the server
86 * designed by the cookie. We clear the CK_VALID bit and set the CK_DOWN.
87 */
88static inline void http_flush_cookie_flags(struct http_txn *txn)
89{
90 if ((txn->flags & TX_CK_MASK) == TX_CK_VALID)
91 txn->flags ^= (TX_CK_VALID | TX_CK_DOWN);
92}
93
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 */