From 421f5a8573484b1203fceebc65aee5d011d63c63 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 8 May 2013 22:57:23 +0000 Subject: HttpParser#next? becomes response_start_sent-aware This could allow servers with persistent connection support[1] to support our check_client_connection in the future. [1] - Rainbows!/zbatery, possibly others --- ext/unicorn_http/unicorn_http.rl | 6 ++---- test/unit/test_http_parser_ng.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ext/unicorn_http/unicorn_http.rl b/ext/unicorn_http/unicorn_http.rl index 1a8003f..3529740 100644 --- a/ext/unicorn_http/unicorn_http.rl +++ b/ext/unicorn_http/unicorn_http.rl @@ -732,10 +732,8 @@ static VALUE HttpParser_parse(VALUE self) struct http_parser *hp = data_get(self); VALUE data = hp->buf; - if (HP_FL_TEST(hp, TO_CLEAR)) { - http_parser_init(hp); - rb_funcall(hp->env, id_clear, 0); - } + if (HP_FL_TEST(hp, TO_CLEAR)) + HttpParser_clear(self); http_parser_execute(hp, RSTRING_PTR(data), RSTRING_LEN(data)); if (hp->offset > MAX_HEADER_LEN) diff --git a/test/unit/test_http_parser_ng.rb b/test/unit/test_http_parser_ng.rb index 93c44bb..ab335ac 100644 --- a/test/unit/test_http_parser_ng.rb +++ b/test/unit/test_http_parser_ng.rb @@ -12,6 +12,23 @@ class HttpParserNgTest < Test::Unit::TestCase @parser = HttpParser.new end + def test_next_clear + r = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" + @parser.buf << r + @parser.parse + @parser.response_start_sent = true + assert @parser.keepalive? + assert @parser.next? + assert @parser.response_start_sent + + # persistent client makes another request: + @parser.buf << r + @parser.parse + assert @parser.keepalive? + assert @parser.next? + assert_equal false, @parser.response_start_sent + end + def test_keepalive_requests_default_constant assert_kind_of Integer, HttpParser::KEEPALIVE_REQUESTS_DEFAULT assert HttpParser::KEEPALIVE_REQUESTS_DEFAULT >= 0 -- cgit v1.2.3-24-ge0c7