diff options
Diffstat (limited to 'request.c')
-rw-r--r-- | request.c | 49 |
1 files changed, 16 insertions, 33 deletions
@@ -13,7 +13,6 @@ #include "http.h" static const int REQUEST_DATA_SIZE = 4096; -static const int MAX_HEADERS = 30; /// Allocates and initializes request structure. /// \return Pointer to initialized request or NULL in case of an error @@ -54,11 +53,6 @@ void free_request(lua_State * L, struct request * request) free(request->data); } - if (NULL != request->headerv) - { - free(request->headerv); - } - luaL_unref(L, LUA_REGISTRYINDEX, request->reference); free(request); @@ -246,16 +240,9 @@ int parse_step_version(struct request * request) /// \return -1 if an error has occured, 0 if too little data available or total number of bytes processed int parse_step_header_name(struct request * request) { - if (NULL == request->headerv) + if (0 == lua_istable(request->lua, -1)) { - request->headerv = malloc(sizeof(struct header) * MAX_HEADERS); - request->headerc = 0; - memset(request->headerv, 0, sizeof(struct header) * MAX_HEADERS); - - if (NULL == request->headerv) - { - return -1; - } + lua_newtable(request->lua); } // TODO: Check for the header section end without backtracking. @@ -275,11 +262,11 @@ int parse_step_header_name(struct request * request) request->position = position; - if (0 >= request->headerv[request->headerc].name.start) + if (0 >= request->temp.start) { - request->headerv[request->headerc].name.start = read_until_word(request); + request->temp.start = read_until_word(request); - if (0 == request->headerv[request->headerc].name.start) + if (0 == request->temp.start) { return 0; } @@ -292,13 +279,13 @@ int parse_step_header_name(struct request * request) return 0; } - request->headerv[request->headerc].name.length = request->position - request->headerv[request->headerc].name.start; - request->step = parse_step_header_value; + request->temp.length = request->position - request->temp.start; + + lua_pushlstring(request->lua, request->data + request->temp.start, request->temp.length); // Skip ':' request->position++; - - return parse_step_header_value(request); + PROCEED_TO(parse_step_header_value); } /// Parses and verifies value of a single header from the request. @@ -306,11 +293,11 @@ int parse_step_header_name(struct request * request) /// \return -1 if an error has occured, 0 if too little data available or total number of bytes processed int parse_step_header_value(struct request * request) { - if (0 >= request->headerv[request->headerc].value.start) + if (0 >= request->temp.start) { - request->headerv[request->headerc].value.start = read_until_word(request); + request->temp.start = read_until_word(request); - if (0 == request->headerv[request->headerc].value.start) + if (0 == request->temp.start) { return 0; } @@ -323,14 +310,10 @@ int parse_step_header_value(struct request * request) return 0; } - request->headerv[request->headerc].value.length = request->position - request->headerv[request->headerc].value.start; - request->step = parse_step_header_name; - request->headerc++; + request->temp.length = request->position - request->temp.start; - if (MAX_HEADERS == request->headerc) - { - return -1; - } + lua_pushlstring(request->lua, request->data + request->temp.start, request->temp.length); + lua_rawset(request->lua, -3); - return parse_step_header_name(request); + PROCEED_TO(parse_step_header_name); } |