aboutsummaryrefslogtreecommitdiff
path: root/src/request.c
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2019-11-27 21:33:06 +0300
committerAleksey Veresov <aleksey@veresov.pro>2019-11-27 21:33:06 +0300
commitea25abb295d9b4fbaf0ac23af8ffe71247970f1b (patch)
tree67cba7b2e5f2c759eaa816de51bd35f3b32d1421 /src/request.c
parent88081d9a4376b1ee4feed3bc843c46096e087b1e (diff)
downloadmagi-ea25abb295d9b4fbaf0ac23af8ffe71247970f1b.tar
magi-ea25abb295d9b4fbaf0ac23af8ffe71247970f1b.tar.xz
magi-ea25abb295d9b4fbaf0ac23af8ffe71247970f1b.zip
.
Diffstat (limited to 'src/request.c')
-rw-r--r--src/request.c51
1 files changed, 45 insertions, 6 deletions
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 <stdio.h>
#include <stdlib.h>
+#include <string.h>
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)
{