Remove the HTTP_PARSER_DEBUG macro for two reasons: * It changes the size of struct http_parser, resulting in spurious memory corruption bugs if part of your application is built with HTTP_PARSER_DEBUG=1 and other parts with HTTP_PARSER_DEBUG=0. * It's a debugging tool for maintainers. It should never have been exposed in the API in the first place.
- Uses more standard $CFLAGS and $CPPFLAGS variables to populate the set of flags to build with. - Allow extending compilation and linking flags with $CPPFLAGS_DEBUG_EXTRA, $CPPFLAGS_FAST_EXTRA, $CFLAGS_DEBUG_EXTRA, and $CFLAGS_FAST_EXTRA. Closes #40.
- Add http_errno enum w/ values for many parsing error conditions. Stash this in http_parser.state if the 0x80 bit is set. - Report line numbers on error generation if the (new) HTTP_PARSER_DEBUG cpp symbol is set. Increases http_parser struct size by 8 bytes in this case. - Add http_errno_*() methods to help turning errno values into human-readable messages.
- Add IS_ALPHA(), IS_NUM(), IS_HOST_CHAR(), etc. macros for determining membership in a character class. HTTP_PARSER_STRICT causes some of these definitions to change. - Support '_' character in hostnames in non-strict mode. - Support leading digits in hostnames when the method is HTTP_CONNECT. - Don't re-define HTTP_PARSER_STRICT in http_parser.h if it's already defined. - Tweak Makefile to run non-strict-mode unit tests. Rearrange non-strict mode unit tests in test.c. - Add test_fast to .gitignore. Fixes #44
Heap allocate parser in tests, to get errors with valgrind.
Trashing the old Ragel parser (which was based on Mongrel) because it's proving difficult to get the control I need in end-of-message cases. Replacing this with a hand written parser using a couple tricks borrowed from NGINX. The new parser will be much more work to write, but should prove faster and allow for better hacking.
Changed skip_body() from a function to a marco. This is rather hacky and should be dealt with better in the future. Also add handling for callback on_message_begin.
Instead of returning a boolean and calling assert() in main(), test.c now calls assert() as soon as possible. This will require gdb to know what is failing but that was probably already true before and this way uses a lot less code. I also added a conditional to the parser which, perhaps, splits input more efficiently into request and responses. I'm playing around with this and it will likely change again in the future.
And much more: * Begin the framework for parsing HTTP responses * Modify the test code with the new layout * Remove EBB_ prefix and use just HTTP_ * Start simple new Makefile Currently the test passes but it is only checking HTTP requests. I get the feeling that it is much slower than before, although I have no solid evidence for this.