(require-extension bind)
(foreign-declare #<<EOF
#include <event.h>
#include <evhttp.h>
EOF
)
(bind-opaque-type _evhttp_request (c-pointer "struct evhttp_request"))
(bind-opaque-type _evbuffer (c-pointer "struct evbuffer"))
(bind-opaque-type _evhttp (c-pointer "struct evhttp"))
(bind-opaque-type _event_base (c-pointer "struct event_base"))
(bind "___safe _event_base event_init();")
(bind "___safe void event_dispatch();")
(bind "___safe int event_dispatch();")
(bind "___safe _evbuffer evbuffer_new();")
(bind "___safe int evbuffer_add_printf(_evbuffer, const char*);")
(bind "___safe _evhttp evhttp_start(const char*, unsigned short);")
(bind "___safe void evhttp_free(_evhttp);")
(bind "___safe void evhttp_send_reply(_evhttp_request, int, const char*, _evbuffer);")
(bind "___safe void evhttp_set_gencb(_evhttp, void (*)(_evhttp_request, ___scheme_value), ___scheme_value);")
(display "evented loaded\n")
(define (hello-world-page req)
(let ((buf (evbuffer_new)))
(evbuffer_add_printf buf "hello world")
(evhttp_send_reply req 200 "OK" buf)))
(define-external (request_handler (_evhttp_request req)
(scheme-object handler))
void
(handler req))
(event_init)
(let ((httpd (evhttp_start "0.0.0.0" 8080)))
(evhttp_set_gencb httpd #$request_handler hello-world-page)
(event_dispatch)
(evhttp_free httpd))
address@hidden ~/Development/cc csc -o evented -levent evented.scm && ./evented
evented.c: In function ‘stub187’:
evented.c:66: warning: passing argument 2 of ‘evhttp_set_gencb’ from incompatible pointer type
evented.c:66: warning: passing argument 3 of ‘evhttp_set_gencb’ makes pointer from integer without a cast
evented.c: In function ‘stub104’:
evented.c:115: warning: format not a string literal and no format arguments
evented loaded
Error: call of non-procedure: #<invalid forwarded object>
Call history:
##sys#gc
g27
##sys#make-c-string
g111112
evented.scm:27: evhttp_send_reply
##sys#gc
##sys#make-c-string
g27
g171172
evented.scm:32: handler <--