diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-03-25 15:46:16 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-03-25 15:46:16 +0000 |
commit | 169642253f6861ebe356386428692e93126a9df7 (patch) | |
tree | e37d2109b8adb553e746e9a0d705fd0547e0adc5 /package/uhttpd/src/uhttpd.h | |
parent | 61326faa6035870a8db702dcf7b6e83cc5676f47 (diff) | |
download | upstream-169642253f6861ebe356386428692e93126a9df7.tar.gz upstream-169642253f6861ebe356386428692e93126a9df7.tar.bz2 upstream-169642253f6861ebe356386428692e93126a9df7.zip |
add uhttpd (moved from LuCI trunk)
SVN-Revision: 20428
Diffstat (limited to 'package/uhttpd/src/uhttpd.h')
-rw-r--r-- | package/uhttpd/src/uhttpd.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/package/uhttpd/src/uhttpd.h b/package/uhttpd/src/uhttpd.h new file mode 100644 index 0000000000..bb08afa1a1 --- /dev/null +++ b/package/uhttpd/src/uhttpd.h @@ -0,0 +1,133 @@ +/* + * uhttpd - Tiny single-threaded httpd - Main header + * + * Copyright (C) 2010 Jo-Philipp Wich <xm@subsignal.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _UHTTPD_ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/select.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <linux/limits.h> +#include <netdb.h> +#include <ctype.h> + +#include <dlfcn.h> + + +#ifdef HAVE_LUA +#include <lua.h> +#endif + +#ifdef HAVE_TLS +#include <openssl/ssl.h> +#endif + + +#define UH_LIMIT_MSGHEAD 4096 +#define UH_LIMIT_HEADERS 64 + +#define UH_LIMIT_LISTENERS 16 +#define UH_LIMIT_CLIENTS 64 +#define UH_LIMIT_AUTHREALMS 8 + +#define UH_HTTP_MSG_GET 0 +#define UH_HTTP_MSG_HEAD 1 +#define UH_HTTP_MSG_POST 2 + +struct listener; +struct client; +struct http_request; + +struct config { + char docroot[PATH_MAX]; + char *realm; + char *file; +#ifdef HAVE_CGI + char *cgi_prefix; +#endif +#ifdef HAVE_LUA + char *lua_prefix; + char *lua_handler; + lua_State * (*lua_init) (const char *handler); + void (*lua_close) (lua_State *L); + void (*lua_request) (struct client *cl, struct http_request *req, lua_State *L); +#endif +#ifdef HAVE_TLS + char *cert; + char *key; + SSL_CTX *tls; + SSL_CTX * (*tls_init) (void); + int (*tls_cert) (SSL_CTX *c, const char *file); + int (*tls_key) (SSL_CTX *c, const char *file); + void (*tls_free) (struct listener *l); + void (*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); +#endif +}; + +struct listener { + int socket; + struct sockaddr_in6 addr; + struct config *conf; +#ifdef HAVE_TLS + SSL_CTX *tls; +#endif +}; + +struct client { + int socket; + int peeklen; + char peekbuf[UH_LIMIT_MSGHEAD]; + struct listener *server; + struct sockaddr_in6 servaddr; + struct sockaddr_in6 peeraddr; +#ifdef HAVE_TLS + SSL *tls; +#endif +}; + +struct auth_realm { + char path[PATH_MAX]; + char user[32]; + char pass[128]; +}; + +struct http_request { + int method; + float version; + char *url; + char *headers[UH_LIMIT_HEADERS]; + struct auth_realm *realm; +}; + +struct http_response { + int statuscode; + char *statusmsg; + char *headers[UH_LIMIT_HEADERS]; +}; + +#endif + |