summaryrefslogtreecommitdiff
path: root/uhttpd.h
diff options
context:
space:
mode:
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-03-25 15:46:16 +0000
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-03-25 15:46:16 +0000
commitb195c512dd67bae675f26c8414a64031a5edf60f (patch)
tree687ebb01535a5762cfe308c8c9f71412711c9d21 /uhttpd.h
downloaduhttpd-b195c512dd67bae675f26c8414a64031a5edf60f.tar.gz
[package] add uhttpd (moved from LuCI trunk)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk/package/uhttpd/src@20428 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'uhttpd.h')
-rw-r--r--uhttpd.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/uhttpd.h b/uhttpd.h
new file mode 100644
index 0000000..bb08afa
--- /dev/null
+++ b/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
+