some broken callback sorcery added by zilti on Tue Nov 22 18:31:27 2016
(import scheme) (import chicken) (import posix) (require 'foreign) (require-extension srfi-18) (define send-response (foreign-lambda* int ((c-pointer connection) (int status) (c-string page)) "struct MHD_Response * response; int ret; response = MHD_create_response_from_buffer (strlen(page), (void*) page, MHD_RESPMEM_PERSISTENT); ret = MHD_queue_response (connection, status, response); C_return(ret);")) (define http-daemon (foreign-safe-lambda* c-pointer (((function int (c-pointer c-pointer c-string c-string c-string c-string size_t pointer-vector)) handler) (int port)) "struct MHD_Daemon * daemon; daemon = calloc(1, sizeof(struct MHD_Daemon)); daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, port, NULL, NULL, &handler, NULL, MHD_OPTION_END); C_return(daemon);")) (define kill-http-daemon (foreign-lambda* void ((c-pointer daemon)) "MHD_stop_daemon (daemon); free(daemon);")) (define-external (answer_to_connection (c-pointer cls) (c-pointer connection) (c-string url) (c-string method) (c-string version) (c-string upload-data) (size_t upload-data-size) (pointer-vector con-cls)) int (let ((page "<html><body>Hello Browser!</body></html>")) (send-response connection (foreign-value "MHD_HTTP_OK" int) page))) (http-daemon answer_to_connection 8080) (sleep 20)