diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-03-24 02:35:26 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-03-24 02:44:20 -0700 |
commit | 32b6e838c28b7948811a6470d8c0a49d5767ec69 (patch) | |
tree | 016c38119477d56a839be8afc8ee702446c02b6b /ext/unicorn/http11/http11_parser.rl | |
parent | 7110a0dc380c53433e0b76496356abe7ccfa9021 (diff) | |
download | unicorn-32b6e838c28b7948811a6470d8c0a49d5767ec69.tar.gz |
This cuts the HttpParser interface down to #execute and #reset method. HttpParser#execute will return true if it completes and false if it is not. http->nread state is kept internally so we don't have to keep track of it in Ruby; removing one parameter from #execute. HttpParser#reset is unchanged. All errors are handled through exceptions anyways, so the HttpParser#error? method stopped being useful. Also added some more unit tests to the HttpParser since I know some folks are (rightfully) uncomfortable with changing stable C code. We now have tests for incremental parsing. In summary, we have: * more test cases * less C code * simpler interfaces * small performance improvement => win \o/
Diffstat (limited to 'ext/unicorn/http11/http11_parser.rl')
-rw-r--r-- | ext/unicorn/http11/http11_parser.rl | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/ext/unicorn/http11/http11_parser.rl b/ext/unicorn/http11/http11_parser.rl index c3c4b1f..1fad2ca 100644 --- a/ext/unicorn/http11/http11_parser.rl +++ b/ext/unicorn/http11/http11_parser.rl @@ -105,9 +105,10 @@ int http_parser_init(http_parser *parser) { /** exec **/ -size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off) { +size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len) { const char *p, *pe; int cs = parser->cs; + size_t off = parser->nread; assert(off <= len && "offset past end of buffer"); |