From ea25abb295d9b4fbaf0ac23af8ffe71247970f1b Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Wed, 27 Nov 2019 21:33:06 +0300 Subject: . --- src/request.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) (limited to 'src/request.c') diff --git a/src/request.c b/src/request.c index 2d9625e..4a1464a 100644 --- a/src/request.c +++ b/src/request.c @@ -3,21 +3,60 @@ #include "cookie.h" #include "file.h" #include "param.h" +#include #include +#include void magi_request_setup(struct magi_request * request) { if (request) { - request->file_callback = 0; - request->file_callback_userdata = 0; - request->file_callback_addon_len_max = 64; - request->max_cookies_size = 0; - request->max_http_params_size = 0; - request->max_params_size = 0; + request->file_callback = 0; + request->file_callback_userdata = 0; + request->file_callback_addon_max = 64; + request->cookies_max = 1024 * 8; + request->url_params_max = 1024 * 2; + request->http_params_max = 1024 * 16; + request->params_max = 0; } } +static void tempfiles(struct magi_file * file, + char * addon, + int addon_len, + int is_addon_last, + struct magi_tempfiles * table) +{ + int pos; + for (pos = 0; pos != table->count; ++pos) { + if (!strcmp(table->param_names[pos], file->param_name)) { + static FILE * f = 0; + static int left; + int min; + if (!f) { + const char * loc = table->locations[pos]; + f = fopen(loc, "wb"); + left = table->maximums[pos]; + } + min = left < addon_len ? left : addon_len; + fwrite(addon, 1, min, f); + left -= min; + if (is_addon_last) { + fclose(f); + f = 0; + } + return; + } + } +} + +void magi_request_setup_tempfiles(struct magi_request * request, + struct magi_tempfiles * table) +{ + request->file_callback = tempfiles; + request->file_callback_userdata = table; +} + static void request_free(struct magi_request * request) { -- cgit v1.2.3