#include // HTTP request handler enum MHD_Result handle_request(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) { (void)version; (void)upload_data; (void)upload_data_size; (void)con_cls; struct MHD_Response *response; enum MHD_Result ret; if (strcmp(url, "/slider") == 0 && strcmp(method, "GET") == 0) { const char *value_str = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value"); if (value_str) { int value = atoi(value_str); handle_slider_change(cls, value); } response = MHD_create_response_from_buffer(0, "", MHD_RESPMEM_PERSISTENT); ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return ret; } if (strcmp(url, "/button") == 0 && strcmp(method, "GET") == 0) { handle_button_click(cls); response = MHD_create_response_from_buffer(0, "", MHD_RESPMEM_PERSISTENT); ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return ret; } response = MHD_create_response_from_buffer(strlen(html_content), (void *)html_content, MHD_RESPMEM_PERSISTENT); ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return ret; } // Start the HTTP server server = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION, HTTP_PORT, NULL, NULL, &handle_request, (void *)synth, MHD_OPTION_END); if (server == NULL) { fprintf(stderr, "Failed to start server\n"); return; } MHD_stop_daemon(server);