From b8fb8c5b152fea1f52fd7d01e4144112971ae7df Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 16 Mar 2018 10:06:52 +0800 Subject: [PATCH] minimal: multivhost + refactor --- lib/context.c | 12 +- minimal-examples/README.md | 11 +- minimal-examples/client-http/README.md | 3 + .../minimal-http-client/CMakeLists.txt | 0 .../minimal-http-client/README.md | 0 .../minimal-http-client/minimal-http-client.c | 0 .../{client => client-ws}/README.md | 1 - .../minimal-ws-client/CMakeLists.txt | 0 .../minimal-ws-client/README.md | 0 .../minimal-ws-client/minimal-ws-client.c | 0 minimal-examples/server-http/README.md | 6 + .../minimal-http-server-libuv/CMakeLists.txt | 0 .../minimal-http-server-libuv/README.md | 0 .../minimal-http-server.c | 0 .../mount-origin/404.html | 0 .../mount-origin/favicon.ico | Bin .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../CMakeLists.txt | 12 ++ .../minimal-http-server-multivhost/README.md | 43 +++++ .../minimal-http-server.c | 158 ++++++++++++++++++ .../mount-origin-localhost1/404.html | 9 + .../mount-origin-localhost1}/favicon.ico | Bin .../mount-origin-localhost1/index.html | 14 ++ .../libwebsockets.org-logo.png | Bin .../mount-origin-localhost2/404.html | 9 + .../mount-origin-localhost2}/favicon.ico | Bin .../mount-origin-localhost2/index.html | 14 ++ .../libwebsockets.org-logo.png | Bin .../mount-origin-localhost3/404.html | 9 + .../mount-origin-localhost3}/favicon.ico | Bin .../mount-origin-localhost3/index.html | 14 ++ .../libwebsockets.org-logo.png | Bin .../minimal-http-server-smp/CMakeLists.txt | 0 .../minimal-http-server-smp/README.md | 0 .../minimal-http-server-smp.c | 0 .../mount-origin/favicon.ico | Bin .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../minimal-http-server/CMakeLists.txt | 0 .../minimal-http-server/README.md | 0 .../minimal-http-server/minimal-http-server.c | 0 .../minimal-http-server/mount-origin/404.html | 0 .../mount-origin/favicon.ico | Bin .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../{server => server-ws}/README.md | 3 - .../minimal-ws-broker/CMakeLists.txt | 0 .../minimal-ws-broker/README.md | 0 .../minimal-ws-broker/minimal-ws-broker.c | 0 .../mount-origin/favicon.ico | Bin .../minimal-ws-broker/mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../minimal-ws-broker/protocol_lws_minimal.c | 0 .../minimal-ws-server-pmd-bulk/CMakeLists.txt | 0 .../minimal-ws-server-pmd-bulk/README.md | 0 .../minimal-ws-server-pmd-bulk.c | 0 .../mount-origin/favicon.ico | Bin .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../protocol_lws_minimal_pmd_bulk.c | 0 .../minimal-ws-server-pmd/CMakeLists.txt | 0 .../minimal-ws-server-pmd/README.md | 0 .../minimal-ws-server-pmd.c | 0 .../mount-origin/favicon.ico | Bin .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin .../protocol_lws_minimal.c | 0 .../minimal-ws-server-ring/CMakeLists.txt | 0 .../minimal-ws-server-ring/README.md | 0 .../minimal-ws-server.c | 0 .../mount-origin/favicon.ico | Bin 0 -> 1406 bytes .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes .../protocol_lws_minimal.c | 0 .../minimal-ws-server-threads/CMakeLists.txt | 0 .../minimal-ws-server-threads/README.md | 0 .../minimal-ws-server.c | 0 .../mount-origin/favicon.ico | Bin 0 -> 1406 bytes .../mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes .../protocol_lws_minimal.c | 0 .../minimal-ws-server/CMakeLists.txt | 0 .../minimal-ws-server/README.md | 0 .../minimal-ws-server/minimal-ws-server.c | 0 .../mount-origin/favicon.ico | Bin 0 -> 1406 bytes .../minimal-ws-server/mount-origin/index.html | 0 .../mount-origin/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes .../minimal-ws-server/protocol_lws_minimal.c | 0 89 files changed, 308 insertions(+), 10 deletions(-) create mode 100644 minimal-examples/client-http/README.md rename minimal-examples/{client => client-http}/minimal-http-client/CMakeLists.txt (100%) rename minimal-examples/{client => client-http}/minimal-http-client/README.md (100%) rename minimal-examples/{client => client-http}/minimal-http-client/minimal-http-client.c (100%) rename minimal-examples/{client => client-ws}/README.md (67%) rename minimal-examples/{client => client-ws}/minimal-ws-client/CMakeLists.txt (100%) rename minimal-examples/{client => client-ws}/minimal-ws-client/README.md (100%) rename minimal-examples/{client => client-ws}/minimal-ws-client/minimal-ws-client.c (100%) create mode 100644 minimal-examples/server-http/README.md rename minimal-examples/{server => server-http}/minimal-http-server-libuv/CMakeLists.txt (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/README.md (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/minimal-http-server.c (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/mount-origin/404.html (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/mount-origin/index.html (100%) rename minimal-examples/{server => server-http}/minimal-http-server-libuv/mount-origin/libwebsockets.org-logo.png (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/CMakeLists.txt create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/README.md create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/minimal-http-server.c create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/404.html rename minimal-examples/{server/minimal-http-server-smp/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost1}/favicon.ico (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/index.html rename minimal-examples/{server/minimal-http-server-smp/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost1}/libwebsockets.org-logo.png (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/404.html rename minimal-examples/{server/minimal-http-server/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost2}/favicon.ico (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/index.html rename minimal-examples/{server/minimal-http-server/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost2}/libwebsockets.org-logo.png (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/404.html rename minimal-examples/{server/minimal-ws-broker/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost3}/favicon.ico (100%) create mode 100644 minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/index.html rename minimal-examples/{server/minimal-ws-broker/mount-origin => server-http/minimal-http-server-multivhost/mount-origin-localhost3}/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-http}/minimal-http-server-smp/CMakeLists.txt (100%) rename minimal-examples/{server => server-http}/minimal-http-server-smp/README.md (100%) rename minimal-examples/{server => server-http}/minimal-http-server-smp/minimal-http-server-smp.c (100%) rename minimal-examples/{server/minimal-ws-server-pmd-bulk => server-http/minimal-http-server-smp}/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-http}/minimal-http-server-smp/mount-origin/index.html (100%) rename minimal-examples/{server/minimal-ws-server-pmd-bulk => server-http/minimal-http-server-smp}/mount-origin/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-http}/minimal-http-server/CMakeLists.txt (100%) rename minimal-examples/{server => server-http}/minimal-http-server/README.md (100%) rename minimal-examples/{server => server-http}/minimal-http-server/minimal-http-server.c (100%) rename minimal-examples/{server => server-http}/minimal-http-server/mount-origin/404.html (100%) rename minimal-examples/{server/minimal-ws-server-pmd => server-http/minimal-http-server}/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-http}/minimal-http-server/mount-origin/index.html (100%) rename minimal-examples/{server/minimal-ws-server-pmd => server-http/minimal-http-server}/mount-origin/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-ws}/README.md (73%) rename minimal-examples/{server => server-ws}/minimal-ws-broker/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-broker/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-broker/minimal-ws-broker.c (100%) rename minimal-examples/{server/minimal-ws-server-ring => server-ws/minimal-ws-broker}/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-ws}/minimal-ws-broker/mount-origin/index.html (100%) rename minimal-examples/{server/minimal-ws-server-ring => server-ws/minimal-ws-broker}/mount-origin/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-ws}/minimal-ws-broker/protocol_lws_minimal.c (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd-bulk/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd-bulk/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd-bulk/minimal-ws-server-pmd-bulk.c (100%) rename minimal-examples/{server/minimal-ws-server-threads => server-ws/minimal-ws-server-pmd-bulk}/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd-bulk/mount-origin/index.html (100%) rename minimal-examples/{server/minimal-ws-server-threads => server-ws/minimal-ws-server-pmd-bulk}/mount-origin/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd/minimal-ws-server-pmd.c (100%) rename minimal-examples/{server/minimal-ws-server => server-ws/minimal-ws-server-pmd}/mount-origin/favicon.ico (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd/mount-origin/index.html (100%) rename minimal-examples/{server/minimal-ws-server => server-ws/minimal-ws-server-pmd}/mount-origin/libwebsockets.org-logo.png (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-pmd/protocol_lws_minimal.c (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-ring/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-ring/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-ring/minimal-ws-server.c (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/favicon.ico rename minimal-examples/{server => server-ws}/minimal-ws-server-ring/mount-origin/index.html (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/libwebsockets.org-logo.png rename minimal-examples/{server => server-ws}/minimal-ws-server-ring/protocol_lws_minimal.c (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-threads/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-threads/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server-threads/minimal-ws-server.c (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/favicon.ico rename minimal-examples/{server => server-ws}/minimal-ws-server-threads/mount-origin/index.html (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/libwebsockets.org-logo.png rename minimal-examples/{server => server-ws}/minimal-ws-server-threads/protocol_lws_minimal.c (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server/CMakeLists.txt (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server/README.md (100%) rename minimal-examples/{server => server-ws}/minimal-ws-server/minimal-ws-server.c (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server/mount-origin/favicon.ico rename minimal-examples/{server => server-ws}/minimal-ws-server/mount-origin/index.html (100%) create mode 100644 minimal-examples/server-ws/minimal-ws-server/mount-origin/libwebsockets.org-logo.png rename minimal-examples/{server => server-ws}/minimal-ws-server/protocol_lws_minimal.c (100%) diff --git a/lib/context.c b/lib/context.c index c78684a8..fae8f900 100644 --- a/lib/context.c +++ b/lib/context.c @@ -847,10 +847,14 @@ lws_create_vhost(struct lws_context *context, } else vh->log_fd = (int)LWS_INVALID_FILE; #endif - if (lws_context_init_server_ssl(info, vh)) + if (lws_context_init_server_ssl(info, vh)) { + lwsl_err("%s: lws_context_init_server_ssl failed\n", __func__); goto bail1; - if (lws_context_init_client_ssl(info, vh)) + } + if (lws_context_init_client_ssl(info, vh)) { + lwsl_err("%s: lws_context_init_client_ssl failed\n", __func__); goto bail1; + } if (lws_context_init_server(info, vh)) { lwsl_err("init server failed\n"); goto bail1; @@ -867,8 +871,10 @@ lws_create_vhost(struct lws_context *context, /* for the case we are adding a vhost much later, after server init */ if (context->protocol_init_done) - if (lws_protocol_init(context)) + if (lws_protocol_init(context)) { + lwsl_err("%s: lws_protocol_init failed\n", __func__); goto bail1; + } return vh; diff --git a/minimal-examples/README.md b/minimal-examples/README.md index 6bb99528..4561e01f 100644 --- a/minimal-examples/README.md +++ b/minimal-examples/README.md @@ -1,14 +1,18 @@ |name|demonstrates| ---|--- -server|Minimal examples providing a server -client|Minimal examples providing a client +server-http|Minimal examples providing an http server +server-ws|Minimal examples providing a ws server (and an http server) +client-http|Minimal examples providing an http client +client-ws|Minimal examples providing a ws client client-server|Minimal examples providing client and server connections simultaneously ## FAQ ### What should I look at first -server/minimal-http-server +Build and install lws itself first, these examples all want to link to it. Then + +`server-http/minimal-http-server` ### Why are most of the sources split into a main C file file and a protocol file? @@ -70,3 +74,4 @@ external configuration data to a specific vhost + protocol combination using code. In lwsws, this is simply a matter of setting the desired JSON config. + diff --git a/minimal-examples/client-http/README.md b/minimal-examples/client-http/README.md new file mode 100644 index 00000000..b45fdfeb --- /dev/null +++ b/minimal-examples/client-http/README.md @@ -0,0 +1,3 @@ +|name|demonstrates| +---|--- +minimal-http-client|Connects to and reads https://warmcat.com diff --git a/minimal-examples/client/minimal-http-client/CMakeLists.txt b/minimal-examples/client-http/minimal-http-client/CMakeLists.txt similarity index 100% rename from minimal-examples/client/minimal-http-client/CMakeLists.txt rename to minimal-examples/client-http/minimal-http-client/CMakeLists.txt diff --git a/minimal-examples/client/minimal-http-client/README.md b/minimal-examples/client-http/minimal-http-client/README.md similarity index 100% rename from minimal-examples/client/minimal-http-client/README.md rename to minimal-examples/client-http/minimal-http-client/README.md diff --git a/minimal-examples/client/minimal-http-client/minimal-http-client.c b/minimal-examples/client-http/minimal-http-client/minimal-http-client.c similarity index 100% rename from minimal-examples/client/minimal-http-client/minimal-http-client.c rename to minimal-examples/client-http/minimal-http-client/minimal-http-client.c diff --git a/minimal-examples/client/README.md b/minimal-examples/client-ws/README.md similarity index 67% rename from minimal-examples/client/README.md rename to minimal-examples/client-ws/README.md index 11af3e22..21433e09 100644 --- a/minimal-examples/client/README.md +++ b/minimal-examples/client-ws/README.md @@ -1,4 +1,3 @@ |name|demonstrates| ---|--- -minimal-http-client|Connects to and reads https://warmcat.com minimal-ws-client|Connects to the dumb-increment-protocol wss server at https://libwebsockets.org diff --git a/minimal-examples/client/minimal-ws-client/CMakeLists.txt b/minimal-examples/client-ws/minimal-ws-client/CMakeLists.txt similarity index 100% rename from minimal-examples/client/minimal-ws-client/CMakeLists.txt rename to minimal-examples/client-ws/minimal-ws-client/CMakeLists.txt diff --git a/minimal-examples/client/minimal-ws-client/README.md b/minimal-examples/client-ws/minimal-ws-client/README.md similarity index 100% rename from minimal-examples/client/minimal-ws-client/README.md rename to minimal-examples/client-ws/minimal-ws-client/README.md diff --git a/minimal-examples/client/minimal-ws-client/minimal-ws-client.c b/minimal-examples/client-ws/minimal-ws-client/minimal-ws-client.c similarity index 100% rename from minimal-examples/client/minimal-ws-client/minimal-ws-client.c rename to minimal-examples/client-ws/minimal-ws-client/minimal-ws-client.c diff --git a/minimal-examples/server-http/README.md b/minimal-examples/server-http/README.md new file mode 100644 index 00000000..9a72f66e --- /dev/null +++ b/minimal-examples/server-http/README.md @@ -0,0 +1,6 @@ +|Example|Demonstrates| +---|--- +minimal-http-server|Serves a directory over http/1 or http/2, custom 404 handler +minimal-http-server-libuv|Same as minimal-http-server but libuv event loop +minimal-http-server-multivhost|Same as minimal-http-server but three different vhosts +minimal-http-server-smp|Multiple service threads diff --git a/minimal-examples/server/minimal-http-server-libuv/CMakeLists.txt b/minimal-examples/server-http/minimal-http-server-libuv/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/CMakeLists.txt rename to minimal-examples/server-http/minimal-http-server-libuv/CMakeLists.txt diff --git a/minimal-examples/server/minimal-http-server-libuv/README.md b/minimal-examples/server-http/minimal-http-server-libuv/README.md similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/README.md rename to minimal-examples/server-http/minimal-http-server-libuv/README.md diff --git a/minimal-examples/server/minimal-http-server-libuv/minimal-http-server.c b/minimal-examples/server-http/minimal-http-server-libuv/minimal-http-server.c similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/minimal-http-server.c rename to minimal-examples/server-http/minimal-http-server-libuv/minimal-http-server.c diff --git a/minimal-examples/server/minimal-http-server-libuv/mount-origin/404.html b/minimal-examples/server-http/minimal-http-server-libuv/mount-origin/404.html similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/mount-origin/404.html rename to minimal-examples/server-http/minimal-http-server-libuv/mount-origin/404.html diff --git a/minimal-examples/server/minimal-http-server-libuv/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server-libuv/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server-libuv/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-http-server-libuv/mount-origin/index.html b/minimal-examples/server-http/minimal-http-server-libuv/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/mount-origin/index.html rename to minimal-examples/server-http/minimal-http-server-libuv/mount-origin/index.html diff --git a/minimal-examples/server/minimal-http-server-libuv/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server-libuv/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-http-server-libuv/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server-libuv/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/CMakeLists.txt b/minimal-examples/server-http/minimal-http-server-multivhost/CMakeLists.txt new file mode 100644 index 00000000..5077704a --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 2.8) + +set(SAMP lws-minimal-http-server-multivhost) +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/server-http/minimal-http-server-multivhost/README.md b/minimal-examples/server-http/minimal-http-server-multivhost/README.md new file mode 100644 index 00000000..42172208 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/README.md @@ -0,0 +1,43 @@ +# lws minimal http server multivhost + +This creates a single server that creates three vhosts listening on both :7681 and +:7682. Two separate vhosts share listening on :7682. + +|vhost|listens on port|serves| +---|---|--- +localhost1|7681|./mount-origin-localhost1 +localhost2|7682|./mount-origin-localhost2 +localhost3|7682|./mount-origin-localhost3 + +Notice the last two both listen on 7682. If you visit http://localhost:7682, +by default you will get mapped to the first one, localhost2. + +However if you edit /etc/hosts on your machine and add + +``` +127.0.0.1 localhost3 +``` + +so that you can visit http://localhost3:7682 in your browser, lws will use the +`Host: localhost3` header sent by your browser to select the localhost3 vhost +for the connection, and you will be served content from ./mount-origin-localhost3 + +## build + +``` + $ cmake . && make +``` + +## usage + +``` + $ ./lws-minimal-http-server-multivhost +[2018/03/16 09:37:20:0866] USER: LWS minimal http server-multivhost | visit http://localhost:7681 / 7682 +[2018/03/16 09:37:20:0867] NOTICE: Creating Vhost 'localhost1' port 7681, 1 protocols, IPv6 off +[2018/03/16 09:37:20:0868] NOTICE: Creating Vhost 'localhost2' port 7682, 1 protocols, IPv6 off +[2018/03/16 09:37:20:0869] NOTICE: Creating Vhost 'localhost3' port 7682, 1 protocols, IPv6 off +[2018/03/16 09:37:20:0869] NOTICE: using listen skt from vhost localhost2 +``` + +Visit http://localhost:7681 and http://localhost:7682 + diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/minimal-http-server.c b/minimal-examples/server-http/minimal-http-server-multivhost/minimal-http-server.c new file mode 100644 index 00000000..d73ac729 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/minimal-http-server.c @@ -0,0 +1,158 @@ +/* + * lws-minimal-http-server-multivhost + * + * Copyright (C) 2018 Andy Green + * + * This file is made available under the Creative Commons CC0 1.0 + * Universal Public Domain Dedication. + * + * This demonstrates the most minimal http server you can make with lws. + * + * To keep it simple, it serves stuff from the subdirectory + * "./mount-origin" of the directory it was started in. + * You can change that by changing mount.origin below. + */ + +#include +#include +#include + +static int interrupted; + +static const struct lws_http_mount mount_localhost1 = { + /* .mount_next */ NULL, /* linked-list "next" */ + /* .mountpoint */ "/", /* mountpoint URL */ + /* .origin */ "./mount-origin-localhost1", + /* .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, +}, mount_localhost2 = { + /* .mount_next */ NULL, /* linked-list "next" */ + /* .mountpoint */ "/", /* mountpoint URL */ + /* .origin */ "./mount-origin-localhost2", + /* .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, +}, mount_localhost3 = { + /* .mount_next */ NULL, /* linked-list "next" */ + /* .mountpoint */ "/", /* mountpoint URL */ + /* .origin */ "./mount-origin-localhost3", + /* .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 sigint_handler(int sig) +{ + interrupted = 1; +} + +int main(int argc, char **argv) +{ + struct lws_context_creation_info info; + struct lws_context *context; + int n = 0; + + signal(SIGINT, sigint_handler); + + memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ + info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; + + lws_set_log_level(LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_USER + /* | LLL_INFO */ /* | LLL_DEBUG */, NULL); + + lwsl_user("LWS minimal http server-multivhost | visit http://localhost:7681 / 7682\n"); + + /* + * Because of LWS_SERVER_OPTION_EXPLICIT_VHOSTS, this only creates + * the context and no longer creates a default vhost + */ + context = lws_create_context(&info); + if (!context) { + lwsl_err("lws init failed\n"); + return 1; + } + + /* it's our job now to create the vhosts we want: + * + * - "localhost1" listen on 7681 and serve ./mount-origin-localhost1/ + * - "localhost2" listen on 7682 and serve ./mount-origin-localhost2/ + * - "localhost3" share 7682 and serve ./mount-origin-localhost3/ + * + * Note lws supports dynamic vhost creation and destruction at runtime. + * When using multi-vhost with your own protocols, you must provide a + * pvo for each vhost naming each protocol you want enabled on it. + * minimal-ws-server-threads demonstrates how to provide pvos. + */ + + info.port = 7681; + info.mounts = &mount_localhost1; + info.error_document_404 = "/404.html"; + info.vhost_name = "localhost1"; + + if (!lws_create_vhost(context, &info)) { + lwsl_err("Failed to create first vhost\n"); + goto bail; + } + + info.port = 7682; + info.mounts = &mount_localhost2; + info.error_document_404 = "/404.html"; + info.vhost_name = "localhost2"; + + if (!lws_create_vhost(context, &info)) { + lwsl_err("Failed to create second vhost\n"); + goto bail; + } + + /* a second vhost listens on port 7682 */ + info.mounts = &mount_localhost3; + info.error_document_404 = "/404.html"; + info.vhost_name = "localhost3"; + + if (!lws_create_vhost(context, &info)) { + lwsl_err("Failed to create third vhost\n"); + goto bail; + } + + while (n >= 0 && !interrupted) + n = lws_service(context, 1000); + +bail: + lws_context_destroy(context); + + return 0; +} diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/404.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/404.html new file mode 100644 index 00000000..ab948658 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/404.html @@ -0,0 +1,9 @@ + + + +
+

404 (vhost localhost1)

+ Sorry, that file doesn't exist. + + + diff --git a/minimal-examples/server/minimal-http-server-smp/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/favicon.ico diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/index.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/index.html new file mode 100644 index 00000000..df01441e --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/index.html @@ -0,0 +1,14 @@ + + + +
+ + Hello from the minimal http server multivhost example.
+
+ This was served from ./mount-origin-localhost1/index.html
+
+ You can confirm the 404 page handler by going to this + nonexistant page. + + + diff --git a/minimal-examples/server/minimal-http-server-smp/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost1/libwebsockets.org-logo.png diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/404.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/404.html new file mode 100644 index 00000000..1591faf5 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/404.html @@ -0,0 +1,9 @@ + + + +
+

404 (vhost localhost2)

+ Sorry, that file doesn't exist. + + + diff --git a/minimal-examples/server/minimal-http-server/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-http-server/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/favicon.ico diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/index.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/index.html new file mode 100644 index 00000000..33caf445 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/index.html @@ -0,0 +1,14 @@ + + + +
+ + Hello from the minimal http server multivhost example.
+
+ This was served from ./mount-origin-localhost2/index.html
+
+ You can confirm the 404 page handler by going to this + nonexistant page. + + + diff --git a/minimal-examples/server/minimal-http-server/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-http-server/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost2/libwebsockets.org-logo.png diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/404.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/404.html new file mode 100644 index 00000000..0c054569 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/404.html @@ -0,0 +1,9 @@ + + + +
+

404 (vhost localhost3)

+ Sorry, that file doesn't exist. + + + diff --git a/minimal-examples/server/minimal-ws-broker/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-broker/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/favicon.ico diff --git a/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/index.html b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/index.html new file mode 100644 index 00000000..85ca5027 --- /dev/null +++ b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/index.html @@ -0,0 +1,14 @@ + + + +
+ + Hello from the minimal http server multivhost example.
+
+ This was served from ./mount-origin-localhost3/index.html
+
+ You can confirm the 404 page handler by going to this + nonexistant page. + + + diff --git a/minimal-examples/server/minimal-ws-broker/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-broker/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server-multivhost/mount-origin-localhost3/libwebsockets.org-logo.png diff --git a/minimal-examples/server/minimal-http-server-smp/CMakeLists.txt b/minimal-examples/server-http/minimal-http-server-smp/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/CMakeLists.txt rename to minimal-examples/server-http/minimal-http-server-smp/CMakeLists.txt diff --git a/minimal-examples/server/minimal-http-server-smp/README.md b/minimal-examples/server-http/minimal-http-server-smp/README.md similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/README.md rename to minimal-examples/server-http/minimal-http-server-smp/README.md diff --git a/minimal-examples/server/minimal-http-server-smp/minimal-http-server-smp.c b/minimal-examples/server-http/minimal-http-server-smp/minimal-http-server-smp.c similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/minimal-http-server-smp.c rename to minimal-examples/server-http/minimal-http-server-smp/minimal-http-server-smp.c diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server-smp/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server-smp/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-http-server-smp/mount-origin/index.html b/minimal-examples/server-http/minimal-http-server-smp/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-http-server-smp/mount-origin/index.html rename to minimal-examples/server-http/minimal-http-server-smp/mount-origin/index.html diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server-smp/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server-smp/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server/minimal-http-server/CMakeLists.txt b/minimal-examples/server-http/minimal-http-server/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-http-server/CMakeLists.txt rename to minimal-examples/server-http/minimal-http-server/CMakeLists.txt diff --git a/minimal-examples/server/minimal-http-server/README.md b/minimal-examples/server-http/minimal-http-server/README.md similarity index 100% rename from minimal-examples/server/minimal-http-server/README.md rename to minimal-examples/server-http/minimal-http-server/README.md diff --git a/minimal-examples/server/minimal-http-server/minimal-http-server.c b/minimal-examples/server-http/minimal-http-server/minimal-http-server.c similarity index 100% rename from minimal-examples/server/minimal-http-server/minimal-http-server.c rename to minimal-examples/server-http/minimal-http-server/minimal-http-server.c diff --git a/minimal-examples/server/minimal-http-server/mount-origin/404.html b/minimal-examples/server-http/minimal-http-server/mount-origin/404.html similarity index 100% rename from minimal-examples/server/minimal-http-server/mount-origin/404.html rename to minimal-examples/server-http/minimal-http-server/mount-origin/404.html diff --git a/minimal-examples/server/minimal-ws-server-pmd/mount-origin/favicon.ico b/minimal-examples/server-http/minimal-http-server/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/mount-origin/favicon.ico rename to minimal-examples/server-http/minimal-http-server/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-http-server/mount-origin/index.html b/minimal-examples/server-http/minimal-http-server/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-http-server/mount-origin/index.html rename to minimal-examples/server-http/minimal-http-server/mount-origin/index.html diff --git a/minimal-examples/server/minimal-ws-server-pmd/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-http/minimal-http-server/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-http/minimal-http-server/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server/README.md b/minimal-examples/server-ws/README.md similarity index 73% rename from minimal-examples/server/README.md rename to minimal-examples/server-ws/README.md index 628eb053..0112d625 100644 --- a/minimal-examples/server/README.md +++ b/minimal-examples/server-ws/README.md @@ -1,8 +1,5 @@ |Example|Demonstrates| ---|--- -minimal-http-server|Serves a directory over http/1 or http/2, custom 404 handler -minimal-http-server-libuv|Same as minimal-http-server but libuv event loop -minimal-http-server-smp|Multiple service threads minimal-ws-server|Serves an index.html over http that opens a ws shared chat client in a browser minimal-ws-server-pmd|Simple ws server with permessage-deflate support minimal-ws-server-pmd-bulk|Simple ws server showing how to pass bulk data with permessage-deflate diff --git a/minimal-examples/server/minimal-ws-broker/CMakeLists.txt b/minimal-examples/server-ws/minimal-ws-broker/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-ws-broker/CMakeLists.txt rename to minimal-examples/server-ws/minimal-ws-broker/CMakeLists.txt diff --git a/minimal-examples/server/minimal-ws-broker/README.md b/minimal-examples/server-ws/minimal-ws-broker/README.md similarity index 100% rename from minimal-examples/server/minimal-ws-broker/README.md rename to minimal-examples/server-ws/minimal-ws-broker/README.md diff --git a/minimal-examples/server/minimal-ws-broker/minimal-ws-broker.c b/minimal-examples/server-ws/minimal-ws-broker/minimal-ws-broker.c similarity index 100% rename from minimal-examples/server/minimal-ws-broker/minimal-ws-broker.c rename to minimal-examples/server-ws/minimal-ws-broker/minimal-ws-broker.c diff --git a/minimal-examples/server/minimal-ws-server-ring/mount-origin/favicon.ico b/minimal-examples/server-ws/minimal-ws-broker/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/mount-origin/favicon.ico rename to minimal-examples/server-ws/minimal-ws-broker/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-ws-broker/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-broker/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-broker/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-broker/mount-origin/index.html diff --git a/minimal-examples/server/minimal-ws-server-ring/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-broker/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-ws/minimal-ws-broker/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server/minimal-ws-broker/protocol_lws_minimal.c b/minimal-examples/server-ws/minimal-ws-broker/protocol_lws_minimal.c similarity index 100% rename from minimal-examples/server/minimal-ws-broker/protocol_lws_minimal.c rename to minimal-examples/server-ws/minimal-ws-broker/protocol_lws_minimal.c diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/CMakeLists.txt b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/CMakeLists.txt rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/CMakeLists.txt diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/README.md b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/README.md similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/README.md rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/README.md diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/minimal-ws-server-pmd-bulk.c b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/minimal-ws-server-pmd-bulk.c similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/minimal-ws-server-pmd-bulk.c rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/minimal-ws-server-pmd-bulk.c diff --git a/minimal-examples/server/minimal-ws-server-threads/mount-origin/favicon.ico b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-server-threads/mount-origin/favicon.ico rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/index.html diff --git a/minimal-examples/server/minimal-ws-server-threads/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-server-threads/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c b/minimal-examples/server-ws/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c rename to minimal-examples/server-ws/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c diff --git a/minimal-examples/server/minimal-ws-server-pmd/CMakeLists.txt b/minimal-examples/server-ws/minimal-ws-server-pmd/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/CMakeLists.txt rename to minimal-examples/server-ws/minimal-ws-server-pmd/CMakeLists.txt diff --git a/minimal-examples/server/minimal-ws-server-pmd/README.md b/minimal-examples/server-ws/minimal-ws-server-pmd/README.md similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/README.md rename to minimal-examples/server-ws/minimal-ws-server-pmd/README.md diff --git a/minimal-examples/server/minimal-ws-server-pmd/minimal-ws-server-pmd.c b/minimal-examples/server-ws/minimal-ws-server-pmd/minimal-ws-server-pmd.c similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/minimal-ws-server-pmd.c rename to minimal-examples/server-ws/minimal-ws-server-pmd/minimal-ws-server-pmd.c diff --git a/minimal-examples/server/minimal-ws-server/mount-origin/favicon.ico b/minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/favicon.ico similarity index 100% rename from minimal-examples/server/minimal-ws-server/mount-origin/favicon.ico rename to minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/favicon.ico diff --git a/minimal-examples/server/minimal-ws-server-pmd/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/index.html diff --git a/minimal-examples/server/minimal-ws-server/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/libwebsockets.org-logo.png similarity index 100% rename from minimal-examples/server/minimal-ws-server/mount-origin/libwebsockets.org-logo.png rename to minimal-examples/server-ws/minimal-ws-server-pmd/mount-origin/libwebsockets.org-logo.png diff --git a/minimal-examples/server/minimal-ws-server-pmd/protocol_lws_minimal.c b/minimal-examples/server-ws/minimal-ws-server-pmd/protocol_lws_minimal.c similarity index 100% rename from minimal-examples/server/minimal-ws-server-pmd/protocol_lws_minimal.c rename to minimal-examples/server-ws/minimal-ws-server-pmd/protocol_lws_minimal.c diff --git a/minimal-examples/server/minimal-ws-server-ring/CMakeLists.txt b/minimal-examples/server-ws/minimal-ws-server-ring/CMakeLists.txt similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/CMakeLists.txt rename to minimal-examples/server-ws/minimal-ws-server-ring/CMakeLists.txt diff --git a/minimal-examples/server/minimal-ws-server-ring/README.md b/minimal-examples/server-ws/minimal-ws-server-ring/README.md similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/README.md rename to minimal-examples/server-ws/minimal-ws-server-ring/README.md diff --git a/minimal-examples/server/minimal-ws-server-ring/minimal-ws-server.c b/minimal-examples/server-ws/minimal-ws-server-ring/minimal-ws-server.c similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/minimal-ws-server.c rename to minimal-examples/server-ws/minimal-ws-server-ring/minimal-ws-server.c diff --git a/minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/favicon.ico b/minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/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/server/minimal-ws-server-ring/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-server-ring/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/index.html diff --git a/minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-server-ring/mount-origin/libwebsockets.org-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2060a10c936a0959f2a5c3a6b7fa60ac324f1a95 GIT binary patch literal 7029 zcmbVRWmpqlxM!r~7}7Nyl2W6Q#v!1jW1y7e=5vh%{0%8YD%LA&rz{ z3?wCl%l&#k-rw__{GIbY=Xu}r;f-WdV?9PXZaOkDGDZV^*dsDBfa>-9-VN&O{@2fU zOVHE6PdLE9; zwCw2SDGEMdM?5}xT(d`%!9}ww_d_}SY|s@~)J&Gs?w%cw{+D1n(nf{~ou>LQ$=tw$ zIRQ}=7o5sn_dVG`ATwXna@P>Z6nhwWi}ODz#Pm|TGC2cP4S=0o6-y{bh&G5!!V!a( ziW%2WZF|wC(V&_Tbzcei$pB`RGDLx!#(86iH43%SY$G;ce81GtXfDkZML!owkES2W8W*DJo^ zm%s0OovL=+Z*Im!aqRDq5+|piUaUX|atGK@y}>3@{Pd0UjypF$>aq)ax~#wKjp%Hr zuCm@?MyJIug=@>1AN~A^oybc<@d7S}=p(ccPd|P*gJs=7d^n{~60Zm~Lg2+yX&A`l z*U#9M2l{8(lzH*BcL_IKJGKpm;BfmPp>+LU@0&KcROn{xKk6s{V@w`HSdF3WAh#*Q(swGS#eZEZno~olFO(<^5}#$3jzwe7FnUYi zzfG1zQAG6J3O#Fk0pS0=Kx$u-D)W?nibIeITqdC=L(rr14^ZA1Ub;D3Z~vrxhuxf3Bsq zoB60*h3YJnOA(_$H?{6f=h6OSx(o4AptShPsrckA{TVvA_|<2vJR#h3hfdqG zv^XdZOa5Dg#$8rPRK_Ur6!1?XW08`RbS7KX(TYQB=awF(k>|Jn?G)R|KlK*+oFOK) zBW_Z3ne>yhwbh7wzuU-Nc;potuC)&(wlCvs`%94tn$Z}O>bRxnlhUD)d zIb@60?ioZ{CQ-Umh1F>BWuCvn@YM>kaV?zShP8k0afuDgBdHv!;uflK#6{X34*O9@ zma?+f&vHhIwQ1e%QVW{#$5I_CGS7H#stP2|MyHH@`be%A(8wtBD;~Lq+3MBu)bph* zSSuQQcFbz0=C^;IU(TEO z{KWkHxOPuXbCx)?8d%Rt(=RpHXr>nJY<LG4Kj#i>MG~f=Y zI!@2a**36|Zd|8_h{s#&!4C0Enj-7*<+d~C*n1wX$Qg0LrAV8C?ao^EHO!mUpr7+J znKHMF>k0^4BGmunhDHu70Xv0RA*r;h499NnqdvO={{Vn!uGU;4Eno-8%EK$U@H8Q) z1isqA)u%F8^1Pwg`a#sI_rcpfue@$`=PxYyG@ z*16KGV>Y)Fda14kxvibL+1E&n)Dz?E_KO=XKk}#X5)yCh%8xBZ2 z!9%Z>1V}RWWvHl?FI|seF$Ir|CzfOL%JcNTO`-H}dO6_+CB=R}?AG#fV)WX(Yx=Eo zl^{ zpjr~Sfs;LiXEh|g)@67BKcaSH&TQ<3zO>ix^*fC8eqhL$ zDPLx`A>w0*YGw{c<&vUMjsSk=@p0aKw=bR$`FS%OyN^M zv{Dx=m1;=5GO$(>*;FHc$x!cNFMB$wDxumvF0^JzRB?6?DC7IuL+_c`2^?018o{V5 z2qXQnfr-7sB;U88#}A3EKG{0?r9OGt32U9AL47@jZ*1R2udW}KbO=+gWjmPRFQ1O+O2RdmLk0Fc?&i&{i%yTF9bh((NMMk z9i+1_S-R~tTt{D9hq_38$slLm$Hdjcfx&e!YuwTD%mgip|Lux+Zvi*p%#dt3w@;NY zZ^HAyVJ6?RHvZcd)ZZPc9sQWFM42Gj`?5)uap~2;9?`X})@8L)?SFl0N+=y3f-e^rAv+GFQ zXF9hh0ux8I89~nfk&L9r1pzw=Sy3e5s?EmN9;3{XhhDy-4XXK3r%MlUZQ5=53Cbdf z)qe~KuYE;2*(rtY?5`qle?cL5diE?bVm(LGm5sQk;LbQR0EqEjBTm4&)xSUym(dNvsv!edLX2aZJ|=P%zthzu)Xczx*(d1~h90^9klJq`#FL zF7ohA6~&n~_UuDRC>uJaW{j+Y;MlZ2UAnfGVd^h@;_=@m7oO%c0~-$x#Ol#ZQ0tD;DDP3iS%A&zL~yqbXTdv^s3bZJ zWhBo|c_jYf3@ zSsnX4WC_emA1*TKS47@l*%>NRE4Lil9SO%&`xS8bzV*Bk#H&aqLaWmKEdQy#d7e{4 zQ?{!}RZiUg+6-x#iwM%1*@tP}aY4=$%o|3^FIIyayq-KT_AX~PH`(X<-p?PH zS5ah~r9<;PL+y;N$+k-8w2()pqj#U1tji$$?@{t>=dgZXDyY73Sf*qB z{FrVxd<9!XYlOZ?3UlAbFrS_|T_V7kg~x_3w%EkKI3X!C?>zERPPy?xlF9IQrkcx+ zz!-?L;lcKV5Q$22A@;3-5{GBf*i=+Q#X3GfQC?~L_x_kH!a5n6`kCr1_BJwxwX87B z+f80_a^n~?{DeF4G4(vSPkL)&yz^d4qB3xW8Zx7_$?CRiv#cTOjKU-w9pFg~A5Avp z+Et+n=@L~Xq4DrX`%*(hn}W+V39*Zqwlr212_ackj+S=Ma}oTjXkOCXEv19G4%v>% zGZT)6qhry4?XzSIQBv)Ot9Y#{7XEPPfWgrJK*HSj#!FS&$Xa*K57aL%xcw8_V~C>-!Y|pjooH4)+Y`MlQy~v?&T>Ow%Cu zqgWD3Eel5+d`}cdhw25SlW9nuEQmH#9}Ue;HJfKz=R79_F6L?>pz%JQ%gpvP8F@Fl zc^tl-(xQm*gi%QN;>#hr{g!bD$pE{GGVGp?_Y8#=BFDbusvR-9sak(DKDBBhSpM{J z?mp7YAeb>HM)4G@?8$(=TWn8(%{zD+xAR|3a!1wo8JAVHRNoF$uKP5e1X10pQ8ebJ z3Ah|>9g;w+CL-|Y!iIiMm;1HO6HkmS40bOG#lVbCfxXX1$+Pz&A+iYt)8DCHkHwA^ z@^}iKX=AJ?aJm(X$$V13JilC#g;D2^bBqM~KX9|vJXgF9&*X!8%+oXmSerPU+Iw7` zWV_?BXI4l8q~g-08aOS4BGMGZ5rXahN@5JR#5wBu_Do>M-GLTQAgkBe2*({D7-&x5J^N+FC9AW7oo4mcxQel@y%lD%7KMmZ?@v1*l z0WWK;#snb{0(k+$-UJC7V(v~W3OP?1Qh@ABd+}WG89w#Wkgb0!7F!w9y&WWp@Hov!4H-ZJo}&sNA;S7r9p$}|peH6U{)Z`GGg_nw zviwXI8TdH$tHc0irk_-s8dOmf@4;c-Ued;h&B=n7%C6RUZ`~W88+eE@ZDG!{Z`hPS z>|+hBqKAu)X#{v0ew1STRq;%-Mch$>O+AyfhlGJAF{cf;=tQh7U&7RUWe=!}E@X0Mv2-w+qUdSHOg~g)0=nnfO%wpm@r3>Q#ka`he8Q%m(V!mTY zjWi`)SE24&4yGrF;59yWnLa4tLPAV;Xyf`@Z~kqHNH@`ScDBe@m!RJ#BtPjQVkJM6LN+m;KaCyTYg3>OwInKklrnLM*^hb2 zRdQbRVxoV1o-C|4yz}ug;h?k%u029eG|ldEa8(JSTx3(VVliBfW>A!2y1j}1#3QW3 z^%8p7D(2$z0-9+l!}m2mA;8yv=k8Q;h&V1hCY(R;wkqu>I4s?u@+ut{z^JB{;|7rJ zY4=T5-_3|S&|Qn*_{_BdJJG2IXFE*TW6xt7P`sO~KF>Opa-4)+zwxPucUd{zOcf7j zs`1bAuuSUYbRV2nPcFO&hMo>yxY#OL3^acbmJ)a1u}%q&25%8aA`T_oadHPdz!F`pbm^} zy!T&=eM3)lyh-Pt?xzOf+T?q(`qdOsJ3Z$V(vj{FWG3a`uV%6W*4(5n>-YErv6Z;= z#Vf9w%V_Avg7{Fmm@t#dY-GrSt;Qv^P%v|soaeUQ^zr#q5@KAoS(?o?fxgaZ^^)-1 zRvg0NPz0hI`-19uFUbf0{YF;-GNwLC=0$j;^Ks!JCY! zFZmnOmEw<+BR8;ZS}^uZRp6@aQHMy%&~EMQ$sDKPp^>VHr>@+%CVA{&qlj@&f%f-1 zS-nJ^vOln%tv-gMc6;i9SZ1^sW-vvEVK?YU)Qd3|ba90T;TFHA*dlq`OZ~tT&Er#Sc@k zF}EQNFlXjT7$Q2!PTG{IfgUKwMI!*AfM(qObfs>7Brn3sue*~M7))6d%&=SXu5O0B zf)EPXw_G+TPpSoeC4@~n=&cjd z{8ObRGje1y26@_LHTx9}tN^a|#s8%uzk)_r4~x7KrSgeu&T-LC^RigV8G_fr)P;k3CQOPTrc~vIx9DfT z`nbZYT|ubgJb1E9PkM>~RqMDKHoUO%GF_l{Vp)K;K4zEdUCWk?^Oko_4wN7G z#MH-xdN5yYGJuTLs0rRN`qF{xp99ZfxRQoX{jMekvj2X36^Q;!zL~U`d^0AMQJA7O zEx)?t1{hb=eJ16jO3eCH-JEnXQY&=gf)@z=h%H)m`!?KSsLVT;il=p28%7Sygx%!4 zw%VPzNI8Oei&=UckW%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/server/minimal-ws-server-threads/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-server-threads/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/index.html diff --git a/minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-server-threads/mount-origin/libwebsockets.org-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2060a10c936a0959f2a5c3a6b7fa60ac324f1a95 GIT binary patch literal 7029 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 JqOtKoVgQl$ETjMc literal 0 HcmV?d00001 diff --git a/minimal-examples/server/minimal-ws-server/mount-origin/index.html b/minimal-examples/server-ws/minimal-ws-server/mount-origin/index.html similarity index 100% rename from minimal-examples/server/minimal-ws-server/mount-origin/index.html rename to minimal-examples/server-ws/minimal-ws-server/mount-origin/index.html diff --git a/minimal-examples/server-ws/minimal-ws-server/mount-origin/libwebsockets.org-logo.png b/minimal-examples/server-ws/minimal-ws-server/mount-origin/libwebsockets.org-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2060a10c936a0959f2a5c3a6b7fa60ac324f1a95 GIT binary patch literal 7029 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