#include #include #include #include #include "class.h" #include "interface/class.h" #include "interface/stream_reader.h" #include "http/request/parser.h" #include "http/message/queue.h" #include "http/request.h" static void ctor(void * _this, va_list * params) { HttpRequestParser this = _this; this->request_queue = new(HttpMessageQueue); this->buffer = malloc(HTTP_REQUEST_PARSER_READ_CHUNK); this->buffer[0] = 0; } static void dtor(void * _this) { HttpRequestParser this = _this; free(this->buffer); delete(&(this->request_queue)); if (NULL != this->cur_request) delete(&(this->cur_request)); } static void _clone(void * _this, void * _base) { HttpRequestParser this = _this; HttpRequestParser base = _base; size_t chunks; /** * every parser has its own queue... */ this->request_queue = new(HttpMessageQueue); this->buffer_used = base->buffer_used; chunks = this->buffer_used / HTTP_REQUEST_PARSER_READ_CHUNK; chunks++; this->buffer = malloc(chunks * HTTP_REQUEST_PARSER_READ_CHUNK); memcpy(this->buffer, base->buffer, this->buffer_used); } INIT_IFACE(Class, ctor, dtor, _clone); INIT_IFACE(StreamReader, (fptr_streamReaderRead)httpRequestParserRead); CREATE_CLASS(HttpRequestParser, NULL, IFACE(Class), IFACE(StreamReader)); // vim: set ts=4 sw=4: