+ if (0 == strcasecmp (meth, MHD_HTTP_METHOD_POST))
+ {
+ if (0 != *upload_data_size)
+ {
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Invoking POST processor\n");
+ MHD_post_process (ctask->post_handler,
+ upload_data, *upload_data_size);
+ *upload_data_size = 0;
+ if ((GNUNET_NO == ctask->is_httppost) &&
+ (GNUNET_NO == ctask->curl_running))
+ {
+ curl_easy_setopt (ctask->curl, CURLOPT_POST, 1);
+ curl_easy_setopt (ctask->curl, CURLOPT_READFUNCTION,
+ &post_read_callback);
+ curl_easy_setopt (ctask->curl, CURLOPT_READDATA, ctask);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "MHD: Adding new curl task for %s\n", ctask->host);
+
+ GNUNET_GNS_get_authority (gns_handle,
+ ctask->host,
+ &process_get_authority,
+ ctask);
+ ctask->ready_to_queue = GNUNET_NO;
+ ctask->fin = GNUNET_NO;
+ ctask->curl_running = GNUNET_YES;
+ }
+ return MHD_YES;
+ }
+ else if (GNUNET_NO == ctask->post_done)
+ {
+ if (GNUNET_YES == ctask->is_httppost)
+ {
+ for (upload_data_iter = ctask->upload_data_head;
+ NULL != upload_data_iter;
+ upload_data_iter = upload_data_iter->next)
+ {
+ i = 0;
+ if (NULL != upload_data_iter->filename)
+ {
+ forms[i].option = CURLFORM_FILENAME;
+ forms[i].value = upload_data_iter->filename;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Adding filename %s\n",
+ forms[i].value);
+ i++;
+ }
+ if (NULL != upload_data_iter->content_type)
+ {
+ forms[i].option = CURLFORM_CONTENTTYPE;
+ forms[i].value = upload_data_iter->content_type;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Adding content type %s\n",
+ forms[i].value);
+ i++;
+ }
+ forms[i].option = CURLFORM_PTRCONTENTS;
+ forms[i].value = upload_data_iter->value;
+ forms[i+1].option = CURLFORM_END;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Adding formdata for %s (len=%lld)\n",
+ upload_data_iter->key,
+ upload_data_iter->total_bytes);
+
+ curl_formadd(&ctask->httppost, &ctask->httppost_last,
+ CURLFORM_COPYNAME, upload_data_iter->key,
+ CURLFORM_CONTENTSLENGTH, upload_data_iter->total_bytes,
+ CURLFORM_ARRAY, forms,
+ CURLFORM_END);
+ }
+ curl_easy_setopt (ctask->curl, CURLOPT_HTTPPOST,
+ ctask->httppost);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "MHD: Adding new curl task for %s\n", ctask->host);
+
+ GNUNET_GNS_get_authority (gns_handle,
+ ctask->host,
+ &process_get_authority,
+ ctask);
+ ctask->ready_to_queue = GNUNET_YES;
+ ctask->fin = GNUNET_NO;
+ ctask->curl_running = GNUNET_YES;
+ ctask->post_done = GNUNET_YES;
+ return MHD_YES;
+ }
+
+ fin_post = GNUNET_malloc (sizeof (struct ProxyUploadData));
+ GNUNET_CONTAINER_DLL_insert_tail (ctask->upload_data_head,
+ ctask->upload_data_tail,
+ fin_post);
+ ctask->post_done = GNUNET_YES;
+ return MHD_YES;
+ }
+ }