aboutsummaryrefslogtreecommitdiff
path: root/src/request.c
diff options
context:
space:
mode:
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)
{