I am sorry, the previous email was sent incomplete by accident: To cut a long story short: I am doing the authentication in the "if (NULL == *con_cls)" part. If the user passed valid credentials the connection is serviced later on by returning MHD_YES (without queueing any response) otherwise the unauthorized response is generated.
Best Martin On Mon, Feb 17, 2014 at 3:23 PM, Martin Velek <martin.ve...@gmail.com> wrote: > 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 >>