From 52c2c6273e7c007543de776937a25827c27d0ff1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 3 Sep 2009 01:50:52 -0700 Subject: http: add HttpParser#headers? method This method determines if there are headers in the request. Simple HTTP/0.9 requests did not have headers in the request (and our responses we make should not have them, either). --- ext/unicorn_http/unicorn_http.rl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'ext') diff --git a/ext/unicorn_http/unicorn_http.rl b/ext/unicorn_http/unicorn_http.rl index 224b95a..7a0c02d 100644 --- a/ext/unicorn_http/unicorn_http.rl +++ b/ext/unicorn_http/unicorn_http.rl @@ -535,6 +535,21 @@ static VALUE HttpParser_keepalive(VALUE self) return (hp->flags & UH_FL_KEEPALIVE) == UH_FL_KEEPALIVE ? Qtrue : Qfalse; } +/** + * call-seq: + * parser.headers? => true or false + * + * This should be used to detect if a request has headers (and if + * the response will have headers as well). HTTP/0.9 requests + * should return false, all subsequent HTTP versions will return true + */ +static VALUE HttpParser_has_headers(VALUE self) +{ + struct http_parser *hp = data_get(self); + + return (hp->flags & UH_FL_HASHEADER) ? Qtrue : Qfalse; +} + /** * call-seq: * parser.filter_body(buf, data) => nil/data @@ -618,6 +633,7 @@ void Init_unicorn_http(void) rb_define_method(cHttpParser, "content_length", HttpParser_content_length, 0); rb_define_method(cHttpParser, "body_eof?", HttpParser_body_eof, 0); rb_define_method(cHttpParser, "keepalive?", HttpParser_keepalive, 0); + rb_define_method(cHttpParser, "headers?", HttpParser_has_headers, 0); /* * The maximum size a single chunk when using chunked transfer encoding. -- cgit v1.2.3-24-ge0c7