X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=uhttpd.h;h=1c82d76cd3f98a9c00f97be50b1817da4d035848;hb=ae3fe30b6a1d4a45a34b3a896e9a4997c5da500f;hp=b289a24edc817b52934c5c49d69c26b512c46c3c;hpb=4fb73b3febd0b368bee39c361dd58d56fb1829ca;p=oweals%2Fuhttpd.git diff --git a/uhttpd.h b/uhttpd.h index b289a24..1c82d76 100644 --- a/uhttpd.h +++ b/uhttpd.h @@ -31,7 +31,7 @@ #include #ifdef HAVE_UBUS #include -#include +#include #endif #ifdef HAVE_TLS #include @@ -52,6 +52,7 @@ struct config { const char *file; const char *error_handler; const char *cgi_prefix; + const char *cgi_docroot_path; const char *cgi_path; const char *lua_handler; const char *lua_prefix; @@ -67,6 +68,7 @@ struct config { int http_keepalive; int script_timeout; int ubus_noauth; + int ubus_cors; }; struct auth_realm { @@ -80,6 +82,7 @@ enum http_method { UH_HTTP_MSG_GET, UH_HTTP_MSG_POST, UH_HTTP_MSG_HEAD, + UH_HTTP_MSG_OPTIONS, }; enum http_version { @@ -118,6 +121,7 @@ enum client_state { CLIENT_STATE_DATA, CLIENT_STATE_DONE, CLIENT_STATE_CLOSE, + CLIENT_STATE_CLEANUP, }; struct interpreter { @@ -151,6 +155,8 @@ struct relay { bool process_done; bool error; + bool skip_data; + int ret; int header_ofs; @@ -223,6 +229,7 @@ struct dispatch { struct client { struct list_head list; + int refcount; int id; struct ustream *us; @@ -236,6 +243,7 @@ struct client { enum client_state state; bool tls; + int http_code; struct http_request request; struct uh_addr srv_addr, peer_addr; @@ -298,4 +306,18 @@ bool uh_create_process(struct client *cl, struct path_info *pi, char *url, int uh_plugin_init(const char *name); void uh_plugin_post_init(void); +static inline void uh_client_ref(struct client *cl) +{ + cl->refcount++; +} + +static inline void uh_client_unref(struct client *cl) +{ + if (--cl->refcount) + return; + + if (cl->state == CLIENT_STATE_CLEANUP) + ustream_state_change(cl->us); +} + #endif