/* * webkernel.h * * A small embeddable web server. * * Header file. * * Author: Dario Rodriguez dario@softhome.net * This library is licensed on the terms of the GNU LGPL v2+ */ #ifndef WEBKERNEL_H #define WEBKERNEL_H #include <sys/select.h> #include "sbuf.h" #include "socklib.h" typedef void wk; typedef enum wk_event { wke_init=0, wke_fini, wke_connected, wke_closed, } wk_event; typedef struct wk_uri { char *method; char *protocol; char *path; char *query; char *headers; void *uriuserptr; } wk_uri; typedef enum wk_error { wkerr_notfound=404, wkerr_internal=500, wkerr_notimplemented=501, } wk_error; typedef enum wk_action { wkact_finished=0, wkact_continuation, } wk_action; wk *wk_init(int serverfd, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/),wk_action (*callback_post)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); void wk_free(wk *web); wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_closed */ int wk_service(wk *web); /* To be called after sselelect_wait() but before sselect_getXXX() */ int wk_serve_cookieadd(wk *web, int connid, char *cookiename, char *value, char *domain, int maxage, char *attributes); int wk_serve_etagset(wk *web, int connid, char *etag); int wk_serve_generic_headers(wk *web, int connid, int datalen, const char *mime, int *etagnotmodified); int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); int wk_serve_file(wk *web, int connid, char *filename, const char *mime); int wk_serve_error(wk *web, int connid, wk_error wkerror); int wk_serve_redirect(wk *web, int connid, char *newlocation); int wk_writestr(wk *web, int connid, const char *str); int wk_write(wk *web, int connid, const void *data, int datalen); int wk_close(wk *web, int connid); char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); char *wk_uri_getvar(wk_uri *wkuri, char *varname, int *len); char *wk_uri_copyvar(wk_uri *uri, char *varname, char *dest, int destlen); char *wk_uri_getcookie(wk_uri *uri, char *cookiename, int *len); char *wk_uri_copycookie(wk_uri *uri, char *cookiename, char *dest, int destlen); int wk_post_addvalid(wk *web, int connid, char *varname, char *tofile); char *wk_post_get(wk *web, int connid, char *varname, int *isfile); const char *mime_getdefault(const char *filename, const char *defaultmime); int uri_urldecode(char *component); /* simple decoder for url-encoded strings. In-place substitution, outputs UTF-8 data */ int wk_sbufacquire(wk *web); sbuf *wk_sbufget(wk *web, int sbufid); int wk_sbufrelease(wk *web, int sbufid); #endif