If you have uploaded a file and later try to upload it again you will get the error:
Internal application error, closing connection.
It is a bit hard to debug (or just I am lack of such expirience), but as far I can tell
the overall picture looks like that:
1. answer_to_connection() -> MHD_post_process().
2. MHD_post_process() -> iterate_post().
3. iterate_post() returns MHD_NO because the file exists.
4. MHD_post_process() returns MHD_NO too.
5. now we call send_page(connection, postprocerror, MHD_HTTP_BAD_REQUEST):
if (MHD_post_process (con_info->postprocessor, upload_data, *upload_data_size)
!= MHD_YES)
{
return send_page (connection,
postprocerror, MHD_HTTP_BAD_REQUEST);
}
6. inside of send_page() the MHD_queue_response() returns MHD_NO (why???).
7. the same status returned by answer_to_connection().
8. answer_to_connection() in the end calls process_request_body() [connection.c]
and the next code prints out the error above:
/**
* Call the handler of the application for this
* connection. Handles chunking of the upload
* as well as normal uploads.
*
* @param connection connection we're processing
*/
static void
process_request_body (struct MHD_Connection *connection)
{
...
if (MHD_NO ==
connection->daemon->default_handler (connection->daemon->default_handler_cls,
connection,
connection->url,
connection->method,
connection->version,
buffer_head,
&processed,
&connection->client_context))
{
/* serious internal error, close connection */
CONNECTION_CLOSE_ERROR (connection,
"Internal application error, closing connection.\n");
return;
}
I found out why MHD_queue_response() returns MHD_NO:
int
MHD_queue_response (struct MHD_Connection *connection,
unsigned int status_code,
struct MHD_Response *response)
{
struct MHD_Daemon *daemon;
if ( (NULL == connection) ||
(NULL == response) ||
(NULL != connection->response) ||
( (MHD_CONNECTION_HEADERS_PROCESSED != connection->state) &&
(MHD_CONNECTION_FOOTERS_RECEIVED != connection->state) ) )
return MHD_NO;
The connection->state is set to MHD_CONNECTION_CONTINUE_SENT.
Any thoughts how to fix this?
Tested on:
1. GNU/Linux, libmicrohttp 0.9.50
2. Window 7 64-bit, libmicrohttp 0.9.51, 32-bit (downloaded from ftp).
3. Window 7 64-bit, libmicrohttp 0.9.52, 32-bit built under MSVS 2015.
Thanks!
--
With Best Regards,
Vitaliy V. Tokarev