Hi, because this email is not an answer to Your question, please consider it like a hint, not advice.
You are not obligated to return only MHD_YES in "if (NULL == *con_cls)". You may also return MHD_NO or even process the connection. According to my stack trace, Thread [12] 4230 [core: 1] (Suspended : Breakpoint) AccessHandlerCallback() at http_server.c:303 0x43a281 call_connection_handler() at connection.c:1,303 0x43042a MHD_connection_handle_idle() at connection.c:2,207 0x431baa MHD_run_from_select() at daemon.c:1,814 0x43498c MHD_select() at daemon.c:1,909 0x434e15 MHD_select_thread() at daemon.c:2,417 0x434e7e rtos_mhd_thread_wrapper() at platform.h:168 0x4327a6 ITaskStartup() at rtos_pthread.c:228 0x40895c start_thread() at pthread_create.c:308 0x7ffff76c0e9a clone() at clone.S:112 0x7ffff70f83fd <...more frames...> the connection_handler is called after MHD_CONNECTION_HEADERS_PROCESSED (the first call). At this time, the *upload_data_size is equal to zero even if the TCP packet contains data following (behind) the end mark of HTTP headers. I am using this checking in my url handler: // New connection? if (NULL == *con_cls) { // Data should never be greater than zero because of first call. assert((*upload_data_size) == 0); // Default behavior for authentication is OK. ret = MHD_YES; // get username and password user = MHD_basic_auth_get_username_password(connection, &pass); // check if it is valid if (false == credentials_check) { ret = generate_unauthorized_response(connection, authentification_failed_size_, (void *)authentification_failed_page_, MHD_RESPMEM_PERSISTENT); // Return value. return ret; } else { *con_cls = Something; } } // already authenticated .... On Mon, Feb 17, 2014 at 2:13 PM, Sebastian Hammerl <list-libmicroht...@omoco.de> wrote: > Hi, > > Am 17.02.2014 13:58, schrieb Christian Grothoff: > >> if (*upload_data_size > 0) >> { >> *upload_data_size = 0; // consume >> return MHD_YES; >> } > > > that did it! > > > Thank you very much, > Sebastian >