parent
769b6d2dbd
commit
33e2f8e272
52
README.md
52
README.md
|
@ -74,13 +74,10 @@ Select package libuhttpd in menuconfig and compile new image.
|
||||||
```
|
```
|
||||||
#include <uhttpd.h>
|
#include <uhttpd.h>
|
||||||
|
|
||||||
//#define EXAMPLE_SSL
|
|
||||||
|
|
||||||
#define port 8000
|
|
||||||
|
|
||||||
static void hello_action(struct uh_client *cl)
|
static void hello_action(struct uh_client *cl)
|
||||||
{
|
{
|
||||||
int body_len = 0;
|
int body_len = 0;
|
||||||
|
|
||||||
cl->send_header(cl, 200, "OK", -1);
|
cl->send_header(cl, 200, "OK", -1);
|
||||||
cl->append_header(cl, "Myheader", "Hello");
|
cl->append_header(cl, "Myheader", "Hello");
|
||||||
cl->header_end(cl);
|
cl->header_end(cl);
|
||||||
|
@ -95,9 +92,42 @@ static void hello_action(struct uh_client *cl)
|
||||||
cl->request_done(cl);
|
cl->request_done(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void usage(const char *prog)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Usage: %s [option]\n"
|
||||||
|
" -p port # Default port is 8080\n"
|
||||||
|
" -s # SSl on\n"
|
||||||
|
" -v # verbose\n", prog);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct uh_server *srv = NULL;
|
struct uh_server *srv = NULL;
|
||||||
|
int verbose = false;
|
||||||
|
int ssl = false;
|
||||||
|
int port = 8080;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "p:vs")) != -1) {
|
||||||
|
switch (opt)
|
||||||
|
{
|
||||||
|
case 'p':
|
||||||
|
port = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
ssl = true;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = true;
|
||||||
|
break;
|
||||||
|
default: /* '?' */
|
||||||
|
usage(argv[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!verbose)
|
||||||
|
ulog_threshold(LOG_ERR);
|
||||||
|
|
||||||
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
||||||
|
|
||||||
|
@ -107,14 +137,16 @@ int main(int argc, char **argv)
|
||||||
if (!srv)
|
if (!srv)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
uh_log_debug("Listen on: *:%d", port);
|
#if (!UHTTPD_SSL_SUPPORT)
|
||||||
|
if (ssl)
|
||||||
#ifdef EXAMPLE_SSL
|
uh_log_debug("SSl is not compiled in");
|
||||||
#if (UHTTPD_SSL_SUPPORT)
|
#else
|
||||||
if (srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
if (ssl && srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
||||||
goto done;
|
goto done;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
uh_log_debug("Listen on: %s *:%d", srv->ssl ? "https" : "http", port);
|
||||||
|
|
||||||
srv->add_action(srv, "/hello", hello_action);
|
srv->add_action(srv, "/hello", hello_action);
|
||||||
|
|
||||||
uloop_run();
|
uloop_run();
|
||||||
|
|
52
README_ZH.md
52
README_ZH.md
|
@ -75,13 +75,10 @@ Select package libuhttpd in menuconfig and compile new image.
|
||||||
```
|
```
|
||||||
#include <uhttpd.h>
|
#include <uhttpd.h>
|
||||||
|
|
||||||
//#define EXAMPLE_SSL
|
|
||||||
|
|
||||||
#define port 8000
|
|
||||||
|
|
||||||
static void hello_action(struct uh_client *cl)
|
static void hello_action(struct uh_client *cl)
|
||||||
{
|
{
|
||||||
int body_len = 0;
|
int body_len = 0;
|
||||||
|
|
||||||
cl->send_header(cl, 200, "OK", -1);
|
cl->send_header(cl, 200, "OK", -1);
|
||||||
cl->append_header(cl, "Myheader", "Hello");
|
cl->append_header(cl, "Myheader", "Hello");
|
||||||
cl->header_end(cl);
|
cl->header_end(cl);
|
||||||
|
@ -96,9 +93,42 @@ static void hello_action(struct uh_client *cl)
|
||||||
cl->request_done(cl);
|
cl->request_done(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void usage(const char *prog)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Usage: %s [option]\n"
|
||||||
|
" -p port # Default port is 8080\n"
|
||||||
|
" -s # SSl on\n"
|
||||||
|
" -v # verbose\n", prog);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct uh_server *srv = NULL;
|
struct uh_server *srv = NULL;
|
||||||
|
int verbose = false;
|
||||||
|
int ssl = false;
|
||||||
|
int port = 8080;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "p:vs")) != -1) {
|
||||||
|
switch (opt)
|
||||||
|
{
|
||||||
|
case 'p':
|
||||||
|
port = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
ssl = true;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = true;
|
||||||
|
break;
|
||||||
|
default: /* '?' */
|
||||||
|
usage(argv[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!verbose)
|
||||||
|
ulog_threshold(LOG_ERR);
|
||||||
|
|
||||||
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
||||||
|
|
||||||
|
@ -108,14 +138,16 @@ int main(int argc, char **argv)
|
||||||
if (!srv)
|
if (!srv)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
uh_log_debug("Listen on: *:%d", port);
|
#if (!UHTTPD_SSL_SUPPORT)
|
||||||
|
if (ssl)
|
||||||
#ifdef EXAMPLE_SSL
|
uh_log_debug("SSl is not compiled in");
|
||||||
#if (UHTTPD_SSL_SUPPORT)
|
#else
|
||||||
if (srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
if (ssl && srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
||||||
goto done;
|
goto done;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
uh_log_debug("Listen on: %s *:%d", srv->ssl ? "https" : "http", port);
|
||||||
|
|
||||||
srv->add_action(srv, "/hello", hello_action);
|
srv->add_action(srv, "/hello", hello_action);
|
||||||
|
|
||||||
uloop_run();
|
uloop_run();
|
||||||
|
|
|
@ -17,10 +17,6 @@
|
||||||
|
|
||||||
#include <uhttpd.h>
|
#include <uhttpd.h>
|
||||||
|
|
||||||
//#define EXAMPLE_SSL
|
|
||||||
|
|
||||||
#define port 8000
|
|
||||||
|
|
||||||
static void hello_action(struct uh_client *cl)
|
static void hello_action(struct uh_client *cl)
|
||||||
{
|
{
|
||||||
int body_len = 0;
|
int body_len = 0;
|
||||||
|
@ -39,9 +35,42 @@ static void hello_action(struct uh_client *cl)
|
||||||
cl->request_done(cl);
|
cl->request_done(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void usage(const char *prog)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Usage: %s [option]\n"
|
||||||
|
" -p port # Default port is 8080\n"
|
||||||
|
" -s # SSl on\n"
|
||||||
|
" -v # verbose\n", prog);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct uh_server *srv = NULL;
|
struct uh_server *srv = NULL;
|
||||||
|
int verbose = false;
|
||||||
|
int ssl = false;
|
||||||
|
int port = 8080;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "p:vs")) != -1) {
|
||||||
|
switch (opt)
|
||||||
|
{
|
||||||
|
case 'p':
|
||||||
|
port = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
ssl = true;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
verbose = true;
|
||||||
|
break;
|
||||||
|
default: /* '?' */
|
||||||
|
usage(argv[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!verbose)
|
||||||
|
ulog_threshold(LOG_ERR);
|
||||||
|
|
||||||
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
uh_log_debug("libuhttpd version: %s", UHTTPD_VERSION_STRING);
|
||||||
|
|
||||||
|
@ -51,14 +80,15 @@ int main(int argc, char **argv)
|
||||||
if (!srv)
|
if (!srv)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
uh_log_debug("Listen on: *:%d", port);
|
#if (!UHTTPD_SSL_SUPPORT)
|
||||||
|
if (ssl)
|
||||||
#ifdef EXAMPLE_SSL
|
uh_log_debug("SSl is not compiled in");
|
||||||
#if (UHTTPD_SSL_SUPPORT)
|
#else
|
||||||
if (srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
if (ssl && srv->ssl_init(srv, "server-key.pem", "server-cert.pem") < 0)
|
||||||
goto done;
|
goto done;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
uh_log_debug("Listen on: %s *:%d", srv->ssl ? "https" : "http", port);
|
||||||
|
|
||||||
srv->add_action(srv, "/hello", hello_action);
|
srv->add_action(srv, "/hello", hello_action);
|
||||||
|
|
||||||
|
|
|
@ -14,16 +14,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${LIBUBOX_INCLUDE_DIR})
|
||||||
set(EXTRA_LIBS ${LIBUBOX_LIBRARY} dl)
|
set(EXTRA_LIBS ${LIBUBOX_LIBRARY} dl)
|
||||||
set(SOURCE_FILES uhttpd.c client.c log.c utils.c file.c action.c)
|
set(SOURCE_FILES uhttpd.c client.c log.c utils.c file.c action.c)
|
||||||
|
|
||||||
set(UHTTPD_DEBUG_CONFIG 0)
|
|
||||||
option(UHTTPD_DEBUG "Turn on debug" OFF)
|
|
||||||
if(UHTTPD_DEBUG)
|
|
||||||
set(UHTTPD_DEBUG_CONFIG 1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(UHTTPD_SSL_SUPPORT_CONFIG 1)
|
set(UHTTPD_SSL_SUPPORT_CONFIG 1)
|
||||||
option(UHTTPD_SSL_SUPPORT "SSL support" ON)
|
option(UHTTPD_SSL_SUPPORT "SSL support" ON)
|
||||||
|
|
||||||
|
|
||||||
if(UHTTPD_SSL_SUPPORT)
|
if(UHTTPD_SSL_SUPPORT)
|
||||||
list(APPEND SOURCE_FILES uh_ssl.c)
|
list(APPEND SOURCE_FILES uh_ssl.c)
|
||||||
else()
|
else()
|
||||||
|
@ -57,5 +50,4 @@ install(
|
||||||
message("")
|
message("")
|
||||||
message(STATUS "UHTTPD_VERSION: ${UHTTPD_VERSION_MAJOR}.${UHTTPD_VERSION_MINOR}.${UHTTPD_VERSION_PATCH}")
|
message(STATUS "UHTTPD_VERSION: ${UHTTPD_VERSION_MAJOR}.${UHTTPD_VERSION_MINOR}.${UHTTPD_VERSION_PATCH}")
|
||||||
message(STATUS "UHTTPD_SSL_SUPPORT: ${UHTTPD_SSL_SUPPORT}")
|
message(STATUS "UHTTPD_SSL_SUPPORT: ${UHTTPD_SSL_SUPPORT}")
|
||||||
message(STATUS "UHTTPD_DEBUG: ${UHTTPD_DEBUG}")
|
|
||||||
message("")
|
message("")
|
||||||
|
|
|
@ -213,8 +213,6 @@ static void client_free(struct uh_client *cl)
|
||||||
kvlist_free(&cl->request.var);
|
kvlist_free(&cl->request.var);
|
||||||
kvlist_free(&cl->request.header);
|
kvlist_free(&cl->request.header);
|
||||||
cl->srv->nclients--;
|
cl->srv->nclients--;
|
||||||
|
|
||||||
uh_log_debug("client_free: %s:%d", inet_ntoa(cl->peer_addr.sin_addr), cl->peer_addr.sin_port);
|
|
||||||
free(cl);
|
free(cl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,11 +278,6 @@ static int client_parse_request(struct uh_client *cl, char *data)
|
||||||
if (req->version < UH_HTTP_VER_1_1)
|
if (req->version < UH_HTTP_VER_1_1)
|
||||||
cl->connection_close = true;
|
cl->connection_close = true;
|
||||||
|
|
||||||
uh_log_debug("http path: %s", kvlist_get(&req->url, "path"));
|
|
||||||
uh_log_debug("http query: %s", kvlist_get(&req->url, "query"));
|
|
||||||
uh_log_debug("http method: %s", http_methods[h_method]);
|
|
||||||
uh_log_debug("http version: %s", http_versions[h_version]);
|
|
||||||
|
|
||||||
return CLIENT_STATE_HEADER;
|
return CLIENT_STATE_HEADER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,6 @@
|
||||||
#define UHTTPD_VERSION_PATCH @UHTTPD_VERSION_PATCH@
|
#define UHTTPD_VERSION_PATCH @UHTTPD_VERSION_PATCH@
|
||||||
#define UHTTPD_VERSION_STRING "@UHTTPD_VERSION_MAJOR@.@UHTTPD_VERSION_MINOR@.@UHTTPD_VERSION_PATCH@"
|
#define UHTTPD_VERSION_STRING "@UHTTPD_VERSION_MAJOR@.@UHTTPD_VERSION_MINOR@.@UHTTPD_VERSION_PATCH@"
|
||||||
|
|
||||||
#define UHTTPD_DEBUG @UHTTPD_DEBUG_CONFIG@
|
|
||||||
|
|
||||||
#define UHTTPD_SSL_SUPPORT @UHTTPD_SSL_SUPPORT_CONFIG@
|
#define UHTTPD_SSL_SUPPORT @UHTTPD_SSL_SUPPORT_CONFIG@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -398,12 +398,6 @@ bool handle_file_request(struct uh_client *cl, const char *path)
|
||||||
if (!pi)
|
if (!pi)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uh_log_debug("pi->root: %s", pi->root);
|
|
||||||
uh_log_debug("pi->phys: %s", pi->phys);
|
|
||||||
uh_log_debug("pi->name: %s", pi->name);
|
|
||||||
uh_log_debug("pi->info: %s", pi->info);
|
|
||||||
uh_log_debug("pi->redirected: %d", pi->redirected);
|
|
||||||
|
|
||||||
if (pi->redirected)
|
if (pi->redirected)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
15
src/log.c
15
src/log.c
|
@ -17,29 +17,22 @@
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
void __uh_log(const char *filename, int line, int priority, const char *format, ...)
|
void __uh_log(const char *filename, int line, int priority, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
static char buf[128];
|
static char buf[128];
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "(%s:%d) ", filename, line);
|
snprintf(buf, sizeof(buf), "(%s:%d) ", filename, line);
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, fmt);
|
||||||
vsnprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), format, ap);
|
vsnprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
if (priority == LOG_ERR && errno > 0) {
|
if (priority == LOG_ERR && errno > 0) {
|
||||||
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ":%s", strerror(errno));
|
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ":%s", strerror(errno));
|
||||||
errno = 0;
|
errno = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
syslog(priority, "%s", buf);
|
|
||||||
|
|
||||||
#if (UHTTPD_DEBUG)
|
ulog(priority, "%s\n", buf);
|
||||||
fprintf(stderr, "%s\n", buf);
|
|
||||||
#else
|
|
||||||
if (priority == LOG_ERR)
|
|
||||||
fprintf(stderr, "%s\n", buf);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
src/log.h
18
src/log.h
|
@ -18,25 +18,21 @@
|
||||||
#ifndef _LOG_H
|
#ifndef _LOG_H
|
||||||
#define _LOG_H
|
#define _LOG_H
|
||||||
|
|
||||||
#include <syslog.h>
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <libubox/ulog.h>
|
||||||
|
|
||||||
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use the syslog output log and include the name and number of rows at the call
|
* Use the syslog output log and include the name and number of rows at the call
|
||||||
*/
|
*/
|
||||||
#define uh_log(priority, format...) __uh_log(__FILENAME__, __LINE__, priority, format)
|
#define uh_log(priority, fmt...) __uh_log(__FILENAME__, __LINE__, priority, fmt)
|
||||||
|
|
||||||
#if (UHTTPD_DEBUG)
|
#define uh_log_debug(fmt...) uh_log(LOG_DEBUG, fmt)
|
||||||
#define uh_log_debug(format...) uh_log(LOG_DEBUG, format)
|
#define uh_log_info(fmt...) uh_log(LOG_INFO, fmt)
|
||||||
#else
|
#define uh_log_err(fmt...) uh_log(LOG_ERR, fmt)
|
||||||
#define uh_log_debug(format...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define uh_log_info(format...) uh_log(LOG_INFO, format)
|
void __uh_log(const char *filename, int line, int priority, const char *fmt, ...);
|
||||||
#define uh_log_err(format...) uh_log(LOG_ERR, format)
|
|
||||||
|
|
||||||
void __uh_log(const char *filename, int line, int priority, const char *format, ...);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue