From b49630e515c73581137f63feb529340a900e7681 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Wed, 7 Mar 2018 07:05:39 +0800 Subject: [PATCH] minimal: add Wall and cleanups --- .../minimal-http-client/CMakeLists.txt | 6 +- .../minimal-http-client/minimal-http-client.c | 16 +-- .../minimal-http-server-smp/CMakeLists.txt | 18 +++ .../minimal-http-server-smp/README.md | 19 ++++ .../minimal-http-server-smp/favicon.ico | Bin 0 -> 1406 bytes .../minimal-http-server-smp/index.html | 9 ++ .../libwebsockets.org-logo.png | Bin 0 -> 7029 bytes .../minimal-http-server-smp.c | 105 ++++++++++++++++++ .../minimal-http-server/CMakeLists.txt | 6 +- .../minimal-ws-server-pmd-bulk/CMakeLists.txt | 4 + .../protocol_lws_minimal_pmd_bulk.c | 58 +--------- .../minimal-ws-server-pmd/CMakeLists.txt | 6 +- .../protocol_lws_minimal.c | 5 +- .../minimal-ws-server-ring/CMakeLists.txt | 6 +- .../protocol_lws_minimal.c | 6 +- .../minimal-ws-server/CMakeLists.txt | 6 +- .../minimal-ws-server/protocol_lws_minimal.c | 7 +- test-apps/test-server-http.c | 6 +- test-apps/test-server-pthreads.c | 2 +- 19 files changed, 203 insertions(+), 82 deletions(-) create mode 100644 minimal-examples/minimal-http-server-smp/CMakeLists.txt create mode 100644 minimal-examples/minimal-http-server-smp/README.md create mode 100644 minimal-examples/minimal-http-server-smp/favicon.ico create mode 100644 minimal-examples/minimal-http-server-smp/index.html create mode 100644 minimal-examples/minimal-http-server-smp/libwebsockets.org-logo.png create mode 100644 minimal-examples/minimal-http-server-smp/minimal-http-server-smp.c diff --git a/minimal-examples/minimal-http-client/CMakeLists.txt b/minimal-examples/minimal-http-client/CMakeLists.txt index 6c1a206c..5d6d2649 100644 --- a/minimal-examples/minimal-http-client/CMakeLists.txt +++ b/minimal-examples/minimal-http-client/CMakeLists.txt @@ -1,10 +1,12 @@ cmake_minimum_required(VERSION 2.8) -project(lws-minimal-http-client C) - set(SAMP lws-minimal-http-client) set(SRCS minimal-http-client.c) +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + add_executable(${SAMP} ${SRCS}) target_link_libraries(${SAMP} -lwebsockets) diff --git a/minimal-examples/minimal-http-client/minimal-http-client.c b/minimal-examples/minimal-http-client/minimal-http-client.c index 07fd6461..45348c1d 100644 --- a/minimal-examples/minimal-http-client/minimal-http-client.c +++ b/minimal-examples/minimal-http-client/minimal-http-client.c @@ -21,8 +21,6 @@ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - const char *p = in; - switch (reason) { /* because we are protocols[0] ... */ @@ -36,11 +34,15 @@ callback_http(struct lws *wsi, enum lws_callback_reasons reason, case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ - while (len--) - if (*p < 0x7f) - putchar(*p++); - else - putchar('.'); + { + const char *p = in; + + while (len--) + if (*p < 0x7f) + putchar(*p++); + else + putchar('.'); + } #endif return 0; /* don't passthru */ diff --git a/minimal-examples/minimal-http-server-smp/CMakeLists.txt b/minimal-examples/minimal-http-server-smp/CMakeLists.txt new file mode 100644 index 00000000..8dcdc847 --- /dev/null +++ b/minimal-examples/minimal-http-server-smp/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 2.8) +include(CheckIncludeFile) + +set(SAMP lws-minimal-http-server-smp) +set(SRCS minimal-http-server-smp.c) + +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + +CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) +if (NOT LWS_HAVE_PTHREAD_H) + message(FATAL_ERROR "smp support requires pthreads") +endif() + +add_executable(${SAMP} ${SRCS}) +target_link_libraries(${SAMP} -lwebsockets -lpthread) + diff --git a/minimal-examples/minimal-http-server-smp/README.md b/minimal-examples/minimal-http-server-smp/README.md new file mode 100644 index 00000000..62102843 --- /dev/null +++ b/minimal-examples/minimal-http-server-smp/README.md @@ -0,0 +1,19 @@ +# lws minimal http server with multithreaded service + +## build + +``` + $ cmake . && make +``` + +## usage + +``` + $ ./lws-minimal-http-server-smp +[2018/03/07 17:44:20:2409] USER: LWS minimal http server SMP | visit http://localhost:7681 +[2018/03/07 17:44:20:2410] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on +[2018/03/07 17:44:20:2411] NOTICE: Service threads: 10 +``` + +Visit http://localhost:7681 and use ab or other testing tools + diff --git a/minimal-examples/minimal-http-server-smp/favicon.ico b/minimal-examples/minimal-http-server-smp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c0cc2e3dff34012ba3d4a7848a7ed17579788ec5 GIT binary patch literal 1406 zcmZQzU<5(|0R}M0U}azs1F|%L7$l?s#Ec9aKoZP=&`9i!<^REA8>%80(yxAC$j<-A zkb5S8;qL6446ipNFl>5#fuVR6L=8goC~GtXMnhmYga9MSfQgBTk&TUw5$JocUP63y z3phA97+G0a8QIy{!BT|y==xb$SQt4uIT@LmnZZ(o_~`mk`Tv1M8w?+DXJCL~kQj^& JqOtKoVgQl$ETjMc literal 0 HcmV?d00001 diff --git a/minimal-examples/minimal-http-server-smp/index.html b/minimal-examples/minimal-http-server-smp/index.html new file mode 100644 index 00000000..004e31d1 --- /dev/null +++ b/minimal-examples/minimal-http-server-smp/index.html @@ -0,0 +1,9 @@ + + + +
+ + Hello from the minimal http server SMP example. + + + diff --git a/minimal-examples/minimal-http-server-smp/libwebsockets.org-logo.png b/minimal-examples/minimal-http-server-smp/libwebsockets.org-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2060a10c936a0959f2a5c3a6b7fa60ac324f1a95 GIT binary patch literal 7029 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 + * + * This file is made available under the Creative Commons CC0 1.0 + * Universal Public Domain Dedication. + * + * This demonstrates a minimal multithreaded http server you can make with lws. + * + * To keep it simple, it serves stuff in the directory it was started in. + * You can change that by changing mount.origin. + * + * Also for simplicity the number of threads is set in the code... note that + * the real number of threads possible is decided by the LWS_MAX_SMP that lws + * was configured with, by default that is 1. Lws will limit the number of + * requested threads to the number possible. + */ + +#include +#include +#include + +#define COUNT_THREADS 10 + +static struct lws_context *context; +static int interrupted; + +static const struct lws_http_mount mount = { + /* .mount_next */ NULL, /* linked-list "next" */ + /* .mountpoint */ "/", /* mountpoint URL */ + /* .origin */ ".", /* serve from dir */ + /* .def */ "index.html", /* default filename */ + /* .protocol */ NULL, + /* .cgienv */ NULL, + /* .extra_mimetypes */ NULL, + /* .interpret */ NULL, + /* .cgi_timeout */ 0, + /* .cache_max_age */ 0, + /* .auth_mask */ 0, + /* .cache_reusable */ 0, + /* .cache_revalidate */ 0, + /* .cache_intermediaries */ 0, + /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ + /* .mountpoint_len */ 1, /* char count */ + /* .basic_auth_login_file */ NULL, +}; + +void *thread_service(void *threadid) +{ + while (lws_service_tsi(context, 50, (int)(lws_intptr_t)threadid) >= 0 && + !interrupted) + ; + + pthread_exit(NULL); +} + +void sigint_handler(int sig) +{ + interrupted = 1; +} + +int main(int argc, char **argv) +{ + pthread_t pthread_service[COUNT_THREADS]; + struct lws_context_creation_info info; + void *retval; + int n = 0; + + signal(SIGINT, sigint_handler); + + memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ + info.port = 7681; + info.mounts = &mount; + info.count_threads = COUNT_THREADS; + + lws_set_log_level(LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_USER + /* | LLL_INFO */ /* | LLL_DEBUG */, NULL); + + lwsl_user("LWS minimal http server SMP | visit http://localhost:7681\n"); + + context = lws_create_context(&info); + if (!context) { + lwsl_err("lws init failed\n"); + return 1; + } + + lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); + + /* start all the service threads */ + + for (n = 0; n < lws_get_count_threads(context); n++) + if (pthread_create(&pthread_service[n], NULL, thread_service, + (void *)(lws_intptr_t)n)) + lwsl_err("Failed to start service thread\n"); + + /* wait for all the service threads to exit */ + + while ((--n) >= 0) + pthread_join(pthread_service[n], &retval); + + lws_context_destroy(context); + + return 0; +} diff --git a/minimal-examples/minimal-http-server/CMakeLists.txt b/minimal-examples/minimal-http-server/CMakeLists.txt index 38d6e751..f054a4e1 100644 --- a/minimal-examples/minimal-http-server/CMakeLists.txt +++ b/minimal-examples/minimal-http-server/CMakeLists.txt @@ -1,10 +1,12 @@ cmake_minimum_required(VERSION 2.8) -project(lws-minimal-http-server C) - set(SAMP lws-minimal-http-server) set(SRCS minimal-http-server.c) +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + add_executable(${SAMP} ${SRCS}) target_link_libraries(${SAMP} -lwebsockets) diff --git a/minimal-examples/minimal-ws-server-pmd-bulk/CMakeLists.txt b/minimal-examples/minimal-ws-server-pmd-bulk/CMakeLists.txt index 1f9b1cc9..f872dd90 100644 --- a/minimal-examples/minimal-ws-server-pmd-bulk/CMakeLists.txt +++ b/minimal-examples/minimal-ws-server-pmd-bulk/CMakeLists.txt @@ -12,5 +12,9 @@ else() message(FATAL_ERROR "LWS need to have been built for extensions") endif() +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + add_executable(${SAMP} ${SRCS}) target_link_libraries(${SAMP} -lwebsockets) diff --git a/minimal-examples/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c b/minimal-examples/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c index 1ceafe8c..76e2f09c 100644 --- a/minimal-examples/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c +++ b/minimal-examples/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c @@ -53,79 +53,37 @@ static const char * const redundant_string = /* this is how much we will send each time the connection is writable */ #define MESSAGE_CHUNK_SIZE (1 * 1024) - /* one of these is created for each client connecting to us */ struct per_session_data__minimal_pmd_bulk { - struct per_session_data__minimal_pmd_bulk *pss_list; - struct lws *wsi; int position; /* byte position we got up to sending the message */ uint64_t rng; }; -/* one of these is created for each vhost our protocol is used with */ - -struct per_vhost_data__minimal_pmd_bulk { - struct lws_context *context; - struct lws_vhost *vhost; - const struct lws_protocols *protocol; - - /* linked-list of live pss */ - struct per_session_data__minimal_pmd_bulk *pss_list; -}; - static int callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - struct per_session_data__minimal_pmd_bulk **ppss, *pss = + struct per_session_data__minimal_pmd_bulk *pss = (struct per_session_data__minimal_pmd_bulk *)user; - struct per_vhost_data__minimal_pmd_bulk *vhd = - (struct per_vhost_data__minimal_pmd_bulk *) - lws_protocol_vh_priv_get(lws_get_vhost(wsi), - lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + MESSAGE_CHUNK_SIZE], *p; - uint32_t oldest; - int n, m, s, msg_flag = LWS_WRITE_CONTINUATION; + int n, m, msg_flag; switch (reason) { - case LWS_CALLBACK_PROTOCOL_INIT: - vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), - lws_get_protocol(wsi), - sizeof(struct per_vhost_data__minimal_pmd_bulk)); - vhd->context = lws_get_context(wsi); - vhd->protocol = lws_get_protocol(wsi); - vhd->vhost = lws_get_vhost(wsi); - break; - case LWS_CALLBACK_ESTABLISHED: - /* add ourselves to the list of live pss held in the vhd */ - pss->pss_list = vhd->pss_list; - vhd->pss_list = pss; - pss->wsi = wsi; pss->position = 0; pss->rng = 4; lws_callback_on_writable(wsi); break; - case LWS_CALLBACK_CLOSED: - /* remove our closing pss from the list of live pss */ - lws_start_foreach_llp(struct per_session_data__minimal_pmd_bulk **, - ppss, vhd->pss_list) { - if (*ppss == pss) { - *ppss = pss->pss_list; - break; - } - } lws_end_foreach_llp(ppss, pss_list); - break; - case LWS_CALLBACK_SERVER_WRITEABLE: - if (pss->position == MESSAGE_SIZE) break; - if (pss->position == 0) + if (!pss->position) msg_flag = LWS_WRITE_TEXT; + else + msg_flag = LWS_WRITE_CONTINUATION; /* fill up one chunk's worth of message content */ @@ -162,18 +120,14 @@ callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, n = lws_ptr_diff(p, &buf[LWS_PRE]); m = lws_write(wsi, &buf[LWS_PRE], n, msg_flag); - lwsl_notice("write done\n"); if (m < n) { - lwsl_err("ERROR %d writing to di socket\n", n); + lwsl_err("ERROR %d writing ws\n", n); return -1; } if (pss->position != MESSAGE_SIZE) /* if more to do... */ lws_callback_on_writable(wsi); break; - case LWS_CALLBACK_RECEIVE: - break; - default: break; } diff --git a/minimal-examples/minimal-ws-server-pmd/CMakeLists.txt b/minimal-examples/minimal-ws-server-pmd/CMakeLists.txt index 4d07b7b1..72ffa07c 100644 --- a/minimal-examples/minimal-ws-server-pmd/CMakeLists.txt +++ b/minimal-examples/minimal-ws-server-pmd/CMakeLists.txt @@ -9,7 +9,11 @@ set(CMAKE_REQUIRED_LIBRARIES websockets) CHECK_FUNCTION_EXISTS(lws_extension_callback_pm_deflate HAVE_PMD) if (HAVE_PMD) else() - message(FATAL_ERROR "LWS need to have been built for extensions") + message(FATAL_ERROR "LWS needs to have been built for extensions") +endif() + +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) endif() add_executable(${SAMP} ${SRCS}) diff --git a/minimal-examples/minimal-ws-server-pmd/protocol_lws_minimal.c b/minimal-examples/minimal-ws-server-pmd/protocol_lws_minimal.c index 87c2df2b..70ccefe6 100644 --- a/minimal-examples/minimal-ws-server-pmd/protocol_lws_minimal.c +++ b/minimal-examples/minimal-ws-server-pmd/protocol_lws_minimal.c @@ -63,13 +63,12 @@ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - struct per_session_data__minimal **ppss, *pss = + struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); - uint32_t oldest; int n, m; switch (reason) { @@ -111,7 +110,7 @@ callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, vhd->amsg.payload + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); - if (m < vhd->amsg.len) { + if (m < (int)vhd->amsg.len) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } diff --git a/minimal-examples/minimal-ws-server-ring/CMakeLists.txt b/minimal-examples/minimal-ws-server-ring/CMakeLists.txt index a8864516..8dd86a04 100644 --- a/minimal-examples/minimal-ws-server-ring/CMakeLists.txt +++ b/minimal-examples/minimal-ws-server-ring/CMakeLists.txt @@ -1,9 +1,11 @@ cmake_minimum_required(VERSION 2.8) -project(lws-minimal-ws-server C) - set(SAMP lws-minimal-ws-server) set(SRCS minimal-ws-server.c) +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + add_executable(${SAMP} ${SRCS}) target_link_libraries(${SAMP} -lwebsockets) diff --git a/minimal-examples/minimal-ws-server-ring/protocol_lws_minimal.c b/minimal-examples/minimal-ws-server-ring/protocol_lws_minimal.c index d25151cf..46bb5793 100644 --- a/minimal-examples/minimal-ws-server-ring/protocol_lws_minimal.c +++ b/minimal-examples/minimal-ws-server-ring/protocol_lws_minimal.c @@ -61,7 +61,7 @@ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - struct per_session_data__minimal **ppss, *pss = + struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) @@ -116,7 +116,7 @@ callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); - if (m < pmsg->len) { + if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } @@ -145,7 +145,7 @@ callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ - lws_callback_on_writable((*ppss)->wsi); + lws_callback_on_writable(pss->wsi); break; case LWS_CALLBACK_RECEIVE: diff --git a/minimal-examples/minimal-ws-server/CMakeLists.txt b/minimal-examples/minimal-ws-server/CMakeLists.txt index a8864516..8dd86a04 100644 --- a/minimal-examples/minimal-ws-server/CMakeLists.txt +++ b/minimal-examples/minimal-ws-server/CMakeLists.txt @@ -1,9 +1,11 @@ cmake_minimum_required(VERSION 2.8) -project(lws-minimal-ws-server C) - set(SAMP lws-minimal-ws-server) set(SRCS minimal-ws-server.c) +if (UNIX) + set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS}" ) +endif() + add_executable(${SAMP} ${SRCS}) target_link_libraries(${SAMP} -lwebsockets) diff --git a/minimal-examples/minimal-ws-server/protocol_lws_minimal.c b/minimal-examples/minimal-ws-server/protocol_lws_minimal.c index 87c2df2b..63200a93 100644 --- a/minimal-examples/minimal-ws-server/protocol_lws_minimal.c +++ b/minimal-examples/minimal-ws-server/protocol_lws_minimal.c @@ -63,13 +63,12 @@ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - struct per_session_data__minimal **ppss, *pss = + struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); - uint32_t oldest; int n, m; switch (reason) { @@ -111,8 +110,8 @@ callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, vhd->amsg.payload + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); - if (m < vhd->amsg.len) { - lwsl_err("ERROR %d writing to di socket\n", n); + if (m < (int)vhd->amsg.len) { + lwsl_err("ERROR %d writing to ws\n", n); return -1; } diff --git a/test-apps/test-server-http.c b/test-apps/test-server-http.c index e7e4893e..1166d15f 100644 --- a/test-apps/test-server-http.c +++ b/test-apps/test-server-http.c @@ -219,10 +219,10 @@ int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, WSI_TOKEN_HTTP_URI_ARGS, n) > 0) { lwsl_notice("URI Arg %d: %s\n", ++n, buf); } - } - if (lws_get_peer_simple(wsi, buf, sizeof(buf))) - lwsl_info("HTTP connect from %s\n", buf); + if (lws_get_peer_simple(wsi, buf, sizeof(buf))) + lwsl_info("HTTP connect from %s\n", buf); + } if (len < 1) { lws_return_http_status(wsi, diff --git a/test-apps/test-server-pthreads.c b/test-apps/test-server-pthreads.c index df5453a4..6a81bbd8 100644 --- a/test-apps/test-server-pthreads.c +++ b/test-apps/test-server-pthreads.c @@ -300,7 +300,7 @@ int main(int argc, char **argv) #endif /* tell the library what debug level to emit and to send it to syslog */ - lws_set_log_level(debug_level, lwsl_emit_syslog); + lws_set_log_level(debug_level, NULL); lwsl_notice("libwebsockets test server pthreads - license LGPL2.1+SLE\n"); lwsl_notice("(C) Copyright 2010-2018 Andy Green \n");