class HTTP::Parser
Attributes
Public Class Methods
Source
# File lib/http_parser.rb, line 11 def default_header_value_type=(val) if (val != :mixed && val != :strings && val != :arrays) raise ArgumentError, "Invalid header value type" end @default_header_value_type = val end
Source
VALUE Parser_initialize(int argc, VALUE *argv, VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); VALUE default_header_value_type = Qnil; if (argc > 0 && RB_TYPE_P(argv[argc-1], T_HASH)) { ID keyword_ids[1]; keyword_ids[0] = rb_intern("default_header_value_type"); rb_get_kwargs(argv[argc-1], keyword_ids, 0, 1, &default_header_value_type); if (default_header_value_type == Qundef) { default_header_value_type = Qnil; } --argc; } if (argc == 1) { wrapper->callback_object = argv[0]; } if (argc == 2) { wrapper->callback_object = argv[0]; default_header_value_type = argv[1]; } if (default_header_value_type == Qnil) { wrapper->header_value_type = rb_iv_get(CLASS_OF(self), "@default_header_value_type"); } else { wrapper->header_value_type = default_header_value_type; } return self; }
Source
VALUE Parser_strict_p(VALUE klass) { return HTTP_PARSER_STRICT == 1 ? Qtrue : Qfalse; }
Public Instance Methods
Source
VALUE Parser_execute(VALUE self, VALUE data) { ParserWrapper *wrapper = NULL; Check_Type(data, T_STRING); char *ptr = RSTRING_PTR(data); long len = RSTRING_LEN(data); DATA_GET(self, ParserWrapper, wrapper); wrapper->stopped = Qfalse; size_t nparsed = ryah_http_parser_execute(&wrapper->parser, &settings, ptr, len); if (wrapper->parser.upgrade) { if (RTEST(wrapper->stopped) && !RTEST(wrapper->completed)) nparsed += 1; if (nparsed < len) rb_str_cat(wrapper->upgrade_data, ptr + nparsed, len - nparsed); } else if (nparsed != (size_t)len) { if (!RTEST(wrapper->stopped) && !RTEST(wrapper->completed)) rb_raise(eParserError, "Could not parse data entirely (%zu != %zu)", nparsed, len); else nparsed += 1; // error states fail on the current character } return INT2FIX(nparsed); }
Source
VALUE Parser_set_header_value_type(VALUE self, VALUE val) { if (val != Sarrays && val != Sstrings && val != Smixed) { rb_raise(rb_eArgError, "Invalid header value type"); } ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); wrapper->header_value_type = val; return wrapper->header_value_type; }
Source
VALUE Parser_http_major(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); if (wrapper->parser.http_major == 0 && wrapper->parser.http_minor == 0) return Qnil; else return INT2FIX(wrapper->parser.http_major); }
Source
VALUE Parser_http_method(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); if (wrapper->parser.type == HTTP_REQUEST) return rb_str_new2(http_method_str(wrapper->parser.method)); else return Qnil; }
Source
VALUE Parser_http_minor(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); if (wrapper->parser.http_major == 0 && wrapper->parser.http_minor == 0) return Qnil; else return INT2FIX(wrapper->parser.http_minor); }
Source
VALUE Parser_http_version(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); if (wrapper->parser.http_major == 0 && wrapper->parser.http_minor == 0) return Qnil; else return rb_ary_new3(2, INT2FIX(wrapper->parser.http_major), INT2FIX(wrapper->parser.http_minor)); }
Source
VALUE Parser_keep_alive_p(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); return http_should_keep_alive(&wrapper->parser) == 1 ? Qtrue : Qfalse; }
Source
VALUE Parser_set_on_body(VALUE self, VALUE callback) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); wrapper->on_body = callback; return callback; }
Source
VALUE Parser_set_on_headers_complete(VALUE self, VALUE callback) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); wrapper->on_headers_complete = callback; return callback; }
Source
VALUE Parser_set_on_message_begin(VALUE self, VALUE callback) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); wrapper->on_message_begin = callback; return callback; }
Source
VALUE Parser_set_on_message_complete(VALUE self, VALUE callback) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); wrapper->on_message_complete = callback; return callback; }
Source
VALUE Parser_reset(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); ParserWrapper_init(wrapper); return Qtrue; }
Source
VALUE Parser_status_code(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); if (wrapper->parser.status_code) return INT2FIX(wrapper->parser.status_code); else return Qnil; }
Source
VALUE Parser_upgrade_p(VALUE self) { ParserWrapper *wrapper = NULL; DATA_GET(self, ParserWrapper, wrapper); return wrapper->parser.upgrade ? Qtrue : Qfalse; }