From 8b4e17bfbc92205fbeaeffee3783e5eceb65d0bf Mon Sep 17 00:00:00 2001 From: jow Date: Mon, 28 May 2012 00:52:24 +0000 Subject: [package] uhttpd: - rewrite large parts of the server, use uloop event driven structure - support concurrent requests and make the upper limit configurable - implement initial version of HTTP-to-ubus JSON proxy and session.* namespace - add compile time support for debug information - code style changes - bump package revision git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31931 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/uhttpd/src/uhttpd.h | 89 +++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 23 deletions(-) (limited to 'package/uhttpd/src/uhttpd.h') diff --git a/package/uhttpd/src/uhttpd.h b/package/uhttpd/src/uhttpd.h index c03d1ae65..8fa3f219b 100644 --- a/package/uhttpd/src/uhttpd.h +++ b/package/uhttpd/src/uhttpd.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,9 @@ #include #include +#include +#include + #ifdef HAVE_LUA #include @@ -50,6 +54,12 @@ #define SOL_TCP 6 #endif +#ifdef DEBUG +#define D(...) fprintf(stderr, __VA_ARGS__) +#else +#define D(...) +#endif + #define UH_LIMIT_MSGHEAD 4096 #define UH_LIMIT_HEADERS 64 @@ -60,10 +70,14 @@ #define UH_HTTP_MSG_HEAD 1 #define UH_HTTP_MSG_POST 2 +#define UH_SOCK_CLIENT 0 +#define UH_SOCK_SERVER 1 + struct listener; struct client; struct interpreter; struct http_request; +struct uh_ubus_state; struct config { char docroot[PATH_MAX]; @@ -76,6 +90,7 @@ struct config { int network_timeout; int rfc1918_filter; int tcp_keepalive; + int max_requests; #ifdef HAVE_CGI char *cgi_prefix; #endif @@ -85,9 +100,17 @@ struct config { lua_State *lua_state; lua_State * (*lua_init) (const struct config *conf); void (*lua_close) (lua_State *L); - void (*lua_request) (struct client *cl, struct http_request *req, lua_State *L); + bool (*lua_request) (struct client *cl, lua_State *L); +#endif +#ifdef HAVE_UBUS + char *ubus_prefix; + char *ubus_socket; + void *ubus_state; + struct uh_ubus_state * (*ubus_init) (const struct config *conf); + void (*ubus_close) (struct uh_ubus_state *state); + bool (*ubus_request) (struct client *cl, struct uh_ubus_state *state); #endif -#if defined(HAVE_CGI) || defined(HAVE_LUA) +#if defined(HAVE_CGI) || defined(HAVE_LUA) || defined(HAVE_UBUS) int script_timeout; #endif #ifdef HAVE_TLS @@ -100,13 +123,30 @@ struct config { void (*tls_free) (struct listener *l); int (*tls_accept) (struct client *c); void (*tls_close) (struct client *c); - int (*tls_recv) (struct client *c, void *buf, int len); - int (*tls_send) (struct client *c, void *buf, int len); + int (*tls_recv) (struct client *c, char *buf, int len); + int (*tls_send) (struct client *c, const char *buf, int len); #endif }; +struct http_request { + int method; + float version; + int redirect_status; + char *url; + char *headers[UH_LIMIT_HEADERS]; + struct auth_realm *realm; +}; + +struct http_response { + int statuscode; + char *statusmsg; + char *headers[UH_LIMIT_HEADERS]; +}; + struct listener { + struct uloop_fd fd; int socket; + int n_clients; struct sockaddr_in6 addr; struct config *conf; #ifdef HAVE_TLS @@ -116,16 +156,34 @@ struct listener { }; struct client { - int socket; - int peeklen; - char peekbuf[UH_LIMIT_MSGHEAD]; +#ifdef HAVE_TLS + SSL *tls; +#endif + struct uloop_fd fd; + struct uloop_process proc; + struct uloop_timeout timeout; + bool (*cb)(struct client *); + void *priv; + bool dispatched; + bool dead; + struct { + char buf[UH_LIMIT_MSGHEAD]; + char *ptr; + int len; + } httpbuf; struct listener *server; + struct http_request request; + struct http_response response; struct sockaddr_in6 servaddr; struct sockaddr_in6 peeraddr; + struct client *next; +}; + +struct client_light { #ifdef HAVE_TLS SSL *tls; #endif - struct client *next; + struct uloop_fd fd; }; struct auth_realm { @@ -135,21 +193,6 @@ struct auth_realm { struct auth_realm *next; }; -struct http_request { - int method; - float version; - int redirect_status; - char *url; - char *headers[UH_LIMIT_HEADERS]; - struct auth_realm *realm; -}; - -struct http_response { - int statuscode; - char *statusmsg; - char *headers[UH_LIMIT_HEADERS]; -}; - #ifdef HAVE_CGI struct interpreter { char path[PATH_MAX]; -- cgit v1.2.3