+ if (0 == strcasecmp (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA,
+ ctask->post_type))
+ {
+ ctask->is_httppost = GNUNET_YES;
+ /* new part */
+ if (0 == off)
+ {
+ pdata = GNUNET_malloc (sizeof (struct ProxyUploadData));
+ pdata->key = strdup (key);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Copied %lld\n");
+
+ if (NULL != filename)
+ {
+ pdata->filename = strdup (filename);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Filename %s\n", filename);
+ }
+
+ if (NULL != content_type)
+ {
+ pdata->content_type = strdup (content_type);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Content-Type %s\n", content_type);
+ }
+
+ pdata->value = GNUNET_malloc (size);
+ pdata->total_bytes = size;
+ memcpy (pdata->value, data, size);
+ GNUNET_CONTAINER_DLL_insert_tail (ctask->upload_data_head,
+ ctask->upload_data_tail,
+ pdata);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Copied %lld bytes of POST Data\n", size);
+ return MHD_YES;
+ }
+
+ pdata = ctask->upload_data_tail;
+ new_value = GNUNET_malloc (size + pdata->total_bytes);
+ memcpy (new_value, pdata->value, pdata->total_bytes);
+ memcpy (new_value+off, data, size);
+ GNUNET_free (pdata->value);
+ pdata->value = new_value;
+ pdata->total_bytes += size;
+
+ return MHD_YES;
+
+ }
+
+ if (0 != strcasecmp (MHD_HTTP_POST_ENCODING_FORM_URLENCODED,
+ ctask->post_type))
+ {
+ return MHD_NO;
+ }
+
+ ctask->is_httppost = GNUNET_NO;
+
+ if (NULL != ctask->curl)
+ curl_easy_pause (ctask->curl, CURLPAUSE_CONT);
+
+ if (0 == off)
+ {
+ /* a key */
+ pdata = GNUNET_malloc (sizeof (struct ProxyUploadData));
+ enc = escape_to_urlenc (key);
+ pdata->value = GNUNET_malloc (strlen (enc) + 3);
+ if (NULL != ctask->upload_data_head)
+ {
+ pdata->value[0] = '&';
+ memcpy (pdata->value+1, enc, strlen (enc));
+ }
+ else
+ memcpy (pdata->value, enc, strlen (enc));
+ pdata->value[strlen (pdata->value)] = '=';
+ pdata->bytes_left = strlen (pdata->value);
+ pdata->total_bytes = pdata->bytes_left;
+ GNUNET_free (enc);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Escaped POST key: '%s'\n",
+ pdata->value);
+
+ GNUNET_CONTAINER_DLL_insert_tail (ctask->upload_data_head,
+ ctask->upload_data_tail,
+ pdata);
+ }
+
+ /* a value */
+ pdata = GNUNET_malloc (sizeof (struct ProxyUploadData));
+ enc = escape_to_urlenc (data);
+ pdata->value = GNUNET_malloc (strlen (enc) + 1);
+ memcpy (pdata->value, enc, strlen (enc));
+ pdata->bytes_left = strlen (pdata->value);
+ pdata->total_bytes = pdata->bytes_left;
+ GNUNET_free (enc);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Escaped POST value: '%s'\n",
+ pdata->value);
+
+ GNUNET_CONTAINER_DLL_insert_tail (ctask->upload_data_head,
+ ctask->upload_data_tail,
+ pdata);