@@ -63,6 +63,17 @@ typedef unsigned __int64 uint64_t;
6363# define HTTP_MAX_HEADER_SIZE (80*1024)
6464#endif
6565
66+ /* Maximium uri size allowed. If the macro is not defined
67+ * before including this header then the default is used. To
68+ * change the maximum uri size, define the macro in the build
69+ * environment (e.g. -DHTTP_MAX_URL_SIZE=<value>). To remove
70+ * the effective limit on the size of the uri, define the macro
71+ * to a very large number (e.g. -DHTTP_MAX_URL_SIZE=0x7fffffff)
72+ */
73+ #ifndef HTTP_MAX_URL_SIZE
74+ # define HTTP_MAX_URL_SIZE (80*1024)
75+ #endif
76+
6677typedef struct http_parser http_parser ;
6778typedef struct http_parser_settings http_parser_settings ;
6879
@@ -160,53 +171,53 @@ enum http_status
160171
161172
162173/* Request Methods */
163- #define HTTP_METHOD_MAP (XX ) \
164- XX(0, DELETE, DELETE) \
165- XX(1, GET, GET) \
166- XX(2, HEAD, HEAD) \
167- XX(3, POST, POST) \
168- XX(4, PUT, PUT) \
169- /* pathological */ \
170- XX (5 , CONNECT , CONNECT ) \
171- XX (6 , OPTIONS , OPTIONS ) \
172- XX (7 , TRACE , TRACE ) \
173- /* WebDAV */ \
174- XX (8 , COPY , COPY ) \
175- XX (9 , LOCK , LOCK ) \
176- XX (10 , MKCOL , MKCOL ) \
177- XX (11 , MOVE , MOVE ) \
178- XX (12 , PROPFIND , PROPFIND ) \
179- XX (13 , PROPPATCH , PROPPATCH ) \
180- XX (14 , SEARCH , SEARCH ) \
181- XX (15 , UNLOCK , UNLOCK ) \
182- XX (16 , BIND , BIND ) \
183- XX (17 , REBIND , REBIND ) \
184- XX (18 , UNBIND , UNBIND ) \
185- XX (19 , ACL , ACL ) \
186- /* subversion */ \
187- XX (20 , REPORT , REPORT ) \
188- XX (21 , MKACTIVITY , MKACTIVITY ) \
189- XX (22 , CHECKOUT , CHECKOUT ) \
190- XX (23 , MERGE , MERGE ) \
191- /* upnp */ \
192- XX (24 , MSEARCH , M - SEARCH ) \
193- XX (25 , NOTIFY , NOTIFY ) \
194- XX (26 , SUBSCRIBE , SUBSCRIBE ) \
195- XX (27 , UNSUBSCRIBE , UNSUBSCRIBE ) \
196- /* RFC-5789 */ \
197- XX (28 , PATCH , PATCH ) \
198- XX (29 , PURGE , PURGE ) \
199- /* CalDAV */ \
200- XX (30 , MKCALENDAR , MKCALENDAR ) \
201- /* RFC-2068, section 19.6.1.2 */ \
202- XX (31 , LINK , LINK ) \
203- XX (32 , UNLINK , UNLINK ) \
204- /* icecast */ \
205- XX (33 , SOURCE , SOURCE ) \
174+ #define HTTP_METHOD_MAP (XX ) \
175+ XX(0, DELETE, DELETE, 6) \
176+ XX(1, GET, GET, 3) \
177+ XX(2, HEAD, HEAD, 4) \
178+ XX(3, POST, POST, 4) \
179+ XX(4, PUT, PUT, 3) \
180+ /* pathological */ \
181+ XX (5 , CONNECT , CONNECT , 7 ) \
182+ XX (6 , OPTIONS , OPTIONS , 7 ) \
183+ XX (7 , TRACE , TRACE , 5 ) \
184+ /* WebDAV */ \
185+ XX (8 , COPY , COPY , 4 ) \
186+ XX (9 , LOCK , LOCK , 4 ) \
187+ XX (10 , MKCOL , MKCOL , 5 ) \
188+ XX (11 , MOVE , MOVE , 4 ) \
189+ XX (12 , PROPFIND , PROPFIND , 8 ) \
190+ XX (13 , PROPPATCH , PROPPATCH , 9 ) \
191+ XX (14 , SEARCH , SEARCH , 6 ) \
192+ XX (15 , UNLOCK , UNLOCK , 6 ) \
193+ XX (16 , BIND , BIND , 4 ) \
194+ XX (17 , REBIND , REBIND , 6 ) \
195+ XX (18 , UNBIND , UNBIND , 6 ) \
196+ XX (19 , ACL , ACL , 3 ) \
197+ /* subversion */ \
198+ XX (20 , REPORT , REPORT , 6 ) \
199+ XX (21 , MKACTIVITY , MKACTIVITY , 10 ) \
200+ XX (22 , CHECKOUT , CHECKOUT , 8 ) \
201+ XX (23 , MERGE , MERGE , 5 ) \
202+ /* upnp */ \
203+ XX (24 , MSEARCH , M - SEARCH , 7 ) \
204+ XX (25 , NOTIFY , NOTIFY , 6 ) \
205+ XX (26 , SUBSCRIBE , SUBSCRIBE , 9 ) \
206+ XX (27 , UNSUBSCRIBE , UNSUBSCRIBE , 11 ) \
207+ /* RFC-5789 */ \
208+ XX (28 , PATCH , PATCH , 5 ) \
209+ XX (29 , PURGE , PURGE , 5 ) \
210+ /* CalDAV */ \
211+ XX (30 , MKCALENDAR , MKCALENDAR , 10 ) \
212+ /* RFC-2068, section 19.6.1.2 */ \
213+ XX (31 , LINK , LINK , 4 ) \
214+ XX (32 , UNLINK , UNLINK , 6 ) \
215+ /* icecast */ \
216+ XX (33 , SOURCE , SOURCE , 6 ) \
206217
207218enum http_method
208219 {
209- #define XX(num, name, string) HTTP_##name = num,
220+ #define XX(num, name, string, length ) HTTP_##name = num,
210221 HTTP_METHOD_MAP (XX )
211222#undef XX
212223 };
@@ -252,6 +263,8 @@ enum flags
252263 XX (INVALID_EOF_STATE , "stream ended at an unexpected time" ) \
253264 XX (HEADER_OVERFLOW , \
254265 "too many header bytes seen; overflow detected" ) \
266+ XX (URL_OVERFLOW , \
267+ "too many url bytes seen; overflow detected" ) \
255268 XX (CLOSED_CONNECTION , \
256269 "data received after completed connection: close message" ) \
257270 XX (INVALID_VERSION , "invalid HTTP version" ) \
@@ -433,6 +446,9 @@ int http_body_is_final(const http_parser *parser);
433446/* Change the maximum header size provided at compile time. */
434447void http_parser_set_max_header_size (uint32_t size );
435448
449+ /* Change the maximum uri size provided at compile time. */
450+ void http_parser_set_max_uri_size (uint32_t size );
451+
436452#ifdef __cplusplus
437453}
438454#endif
0 commit comments