28 #define HTTP_PARSER_VERSION_MAJOR 2
29 #define HTTP_PARSER_VERSION_MINOR 5
30 #define HTTP_PARSER_VERSION_PATCH 0
32 #include <sys/types.h>
33 #if defined(_WIN32) && !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER<1600)
36 typedef __int8 int8_t;
37 typedef unsigned __int8 uint8_t;
38 typedef __int16 int16_t;
39 typedef unsigned __int16 uint16_t;
40 typedef __int32 int32_t;
41 typedef unsigned __int32 uint32_t;
42 typedef __int64 int64_t;
43 typedef unsigned __int64 uint64_t;
51 #ifndef HTTP_PARSER_STRICT
52 # define HTTP_PARSER_STRICT 1
62 #ifndef HTTP_MAX_HEADER_SIZE
63 # define HTTP_MAX_HEADER_SIZE (80*1024)
88 #define HTTP_METHOD_MAP(XX) \
89 XX(0, DELETE, DELETE) \
95 XX(5, CONNECT, CONNECT) \
96 XX(6, OPTIONS, OPTIONS) \
101 XX(10, MKCOL, MKCOL) \
103 XX(12, PROPFIND, PROPFIND) \
104 XX(13, PROPPATCH, PROPPATCH) \
105 XX(14, SEARCH, SEARCH) \
106 XX(15, UNLOCK, UNLOCK) \
108 XX(16, REPORT, REPORT) \
109 XX(17, MKACTIVITY, MKACTIVITY) \
110 XX(18, CHECKOUT, CHECKOUT) \
111 XX(19, MERGE, MERGE) \
113 XX(20, MSEARCH, M-SEARCH) \
114 XX(21, NOTIFY, NOTIFY) \
115 XX(22, SUBSCRIBE, SUBSCRIBE) \
116 XX(23, UNSUBSCRIBE, UNSUBSCRIBE) \
118 XX(24, PATCH, PATCH) \
119 XX(25, PURGE, PURGE) \
121 XX(26, MKCALENDAR, MKCALENDAR) \
125 #define XX(num, name, string) HTTP_##name = num,
150 #define HTTP_ERRNO_MAP(XX) \
155 XX(CB_message_begin, "the on_message_begin callback failed") \
156 XX(CB_url, "the on_url callback failed") \
157 XX(CB_header_field, "the on_header_field callback failed") \
158 XX(CB_header_value, "the on_header_value callback failed") \
159 XX(CB_headers_complete, "the on_headers_complete callback failed") \
160 XX(CB_body, "the on_body callback failed") \
161 XX(CB_message_complete, "the on_message_complete callback failed") \
162 XX(CB_status, "the on_status callback failed") \
163 XX(CB_chunk_header, "the on_chunk_header callback failed") \
164 XX(CB_chunk_complete, "the on_chunk_complete callback failed") \
167 XX(INVALID_EOF_STATE, "stream ended at an unexpected time") \
168 XX(HEADER_OVERFLOW, \
169 "too many header bytes seen; overflow detected") \
170 XX(CLOSED_CONNECTION, \
171 "data received after completed connection: close message") \
172 XX(INVALID_VERSION, "invalid HTTP version") \
173 XX(INVALID_STATUS, "invalid HTTP status code") \
174 XX(INVALID_METHOD, "invalid HTTP method") \
175 XX(INVALID_URL, "invalid URL") \
176 XX(INVALID_HOST, "invalid host") \
177 XX(INVALID_PORT, "invalid port") \
178 XX(INVALID_PATH, "invalid path") \
179 XX(INVALID_QUERY_STRING, "invalid query string") \
180 XX(INVALID_FRAGMENT, "invalid fragment") \
181 XX(LF_EXPECTED, "LF character expected") \
182 XX(INVALID_HEADER_TOKEN, "invalid character in header") \
183 XX(INVALID_CONTENT_LENGTH, \
184 "invalid character in content-length header") \
185 XX(INVALID_CHUNK_SIZE, \
186 "invalid character in chunk size header") \
187 XX(INVALID_CONSTANT, "invalid constant string") \
188 XX(INVALID_INTERNAL_STATE, "encountered unexpected internal state")\
189 XX(STRICT, "strict mode assertion failed") \
190 XX(PAUSED, "parser is paused") \
191 XX(UNKNOWN, "an unknown error occurred")
195 #define HTTP_ERRNO_GEN(n, s) HPE_##n,
199 #undef HTTP_ERRNO_GEN
203 #define HTTP_PARSER_ERRNO(p) ((enum http_errno) (p)->http_errno)
int(* http_cb)(http_parser *)
#define HTTP_ERRNO_MAP(XX)
http_data_cb on_header_field
http_cb on_headers_complete
unsigned short http_minor
const char * http_method_str(enum http_method m)
#define HTTP_METHOD_MAP(XX)
void http_parser_pause(http_parser *parser, int paused)
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
unsigned int header_state
#define XX(num, name, string)
size_t http_parser_execute(http_parser *parser, const http_parser_settings *settings, const char *data, size_t len)
unsigned short http_major
READ-ONLY.
int http_parser_parse_url(const char *buf, size_t buflen, int is_connect, struct http_parser_url *u)
struct http_parser_url::@3 field_data[UF_MAX]
http_data_cb on_header_value
void http_parser_settings_init(http_parser_settings *settings)
#define HTTP_ERRNO_GEN(n, s)
http_cb on_chunk_complete
int(* http_data_cb)(http_parser *, const char *at, size_t length)
const char * http_errno_name(enum http_errno err)
int http_should_keep_alive(const http_parser *parser)
const char * http_errno_description(enum http_errno err)
int http_body_is_final(const http_parser *parser)
unsigned int type
PRIVATE.
http_cb on_message_complete
void http_parser_init(http_parser *parser, enum http_parser_type type)
unsigned long http_parser_version(void)