From b04708178acf308a4416f2b264af85760f6219dc Mon Sep 17 00:00:00 2001 From: Andy Green <andy@warmcat.com> Date: Tue, 20 Mar 2018 13:28:25 +0800 Subject: [PATCH] minimal: http-server-tls --- README.md | 13 +-- lib/tls/openssl/openssl-server.c | 2 +- .../minimal-ws-proxy/CMakeLists.txt | 13 +-- .../minimal-http-client/CMakeLists.txt | 14 +-- minimal-examples/http-server/README.md | 3 +- .../CMakeLists.txt | 13 +-- .../minimal-http-server-libuv/CMakeLists.txt | 13 +-- .../CMakeLists.txt | 14 +-- .../minimal-http-server-smp/CMakeLists.txt | 13 +-- .../minimal-http-server-tls/CMakeLists.txt | 78 ++++++++++++++++ .../minimal-http-server-tls/README.md | 45 ++++++++++ .../localhost-100y.cert | 34 +++++++ .../localhost-100y.key | 52 +++++++++++ .../minimal-http-server-tls.c | 84 ++++++++++++++++++ .../mount-origin/404.html | 9 ++ .../mount-origin/favicon.ico | Bin 0 -> 1406 bytes .../mount-origin/http2.png | Bin 0 -> 7563 bytes .../mount-origin/index.html | 39 ++++++++ .../mount-origin/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes .../minimal-http-server/CMakeLists.txt | 14 +-- .../minimal-ws-client-rx/CMakeLists.txt | 13 +-- .../minimal-ws-client-tx/CMakeLists.txt | 13 +-- .../minimal-ws-broker/CMakeLists.txt | 14 +-- .../minimal-ws-server-pmd-bulk/CMakeLists.txt | 13 +-- .../minimal-ws-server-pmd/CMakeLists.txt | 13 +-- .../minimal-ws-server-ring/CMakeLists.txt | 13 +-- .../minimal-ws-server-threads/CMakeLists.txt | 13 +-- .../minimal-ws-server/CMakeLists.txt | 13 +-- 28 files changed, 458 insertions(+), 100 deletions(-) create mode 100644 minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt create mode 100644 minimal-examples/http-server/minimal-http-server-tls/README.md create mode 100644 minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert create mode 100644 minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key create mode 100644 minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c create mode 100644 minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html create mode 100644 minimal-examples/http-server/minimal-http-server-tls/mount-origin/favicon.ico create mode 100644 minimal-examples/http-server/minimal-http-server-tls/mount-origin/http2.png create mode 100644 minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html create mode 100644 minimal-examples/http-server/minimal-http-server-tls/mount-origin/libwebsockets.org-logo.png diff --git a/README.md b/README.md index 851c5b98..0d60a88c 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,10 @@ News ## Lws has the first official ws-over-h2 server support -There's a new standard on the RFC track that enabled multiplexing ws connections +There's a new standard on the RFC track that enables multiplexing ws connections over an http/2 link. Compared to making individual tcp and tls connections for each ws link back to the same server, this makes your site start up radically -faster, and since all the connections are in one tls tunnel, with much memory +faster, and since all the connections are in one tls tunnel, with considerable memory reduction serverside. To enable it on master you just need -DLWS_WITH_HTTP2=1 at cmake. No changes to @@ -22,16 +22,17 @@ apis if you return your own headers, as shown in the test apps for several versi or to take advantage of ws-over-h2. When built with http/2 support, it automatically falls back to http/1 and traditional ws upgrade if that's all the client can handle. -Currently only Chrome Canary v67 supports this ws-over-h2 encapsulation but the other -browsers will catch up soon. +Currently only Chrome Canary v67 supports this ws-over-h2 encapsulation (chrome +must be started with `--enable-websocket-over-http2` switch to enable it currently) +but the other browsers will catch up soon. ## New "minimal examples" https://github.com/warmcat/libwebsockets/tree/master/minimal-examples -These are like the test apps, but focus on doing one thing, the best way, with the minimum amount of code. For example the minimal-http-server serves the cwd on http/1 or http/2 in 50 LOC. +These are like the test apps, but focus on doing one thing, the best way, with the minimum amount of code. For example the minimal-http-server serves the cwd on http/1 or http/2 in 50 LOC. Same thing with tls is just three more lines. -They also build standalone, so it's easier to copy them directly to start your own project; they +They build standalone, so it's easier to copy them directly to start your own project; they are CC0 licensed (public domain) to facilitate that. ## Windows binary builds diff --git a/lib/tls/openssl/openssl-server.c b/lib/tls/openssl/openssl-server.c index ab24af4c..0c7f8c92 100644 --- a/lib/tls/openssl/openssl-server.c +++ b/lib/tls/openssl/openssl-server.c @@ -280,7 +280,7 @@ check_key: if (extra_certs) x = sk_X509_value(extra_certs, 0); else - lwsl_err("%s: no extra certs\n", __func__); + lwsl_info("%s: no extra certs\n", __func__); #endif if (!x) { //lwsl_err("%s: x is NULL\n", __func__); diff --git a/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt b/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt index 006d260e..c3f7521c 100644 --- a/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt +++ b/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-proxy) set(SRCS minimal-ws-proxy.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/http-client/minimal-http-client/CMakeLists.txt b/minimal-examples/http-client/minimal-http-client/CMakeLists.txt index 511362ed..f8b222cf 100644 --- a/minimal-examples/http-client/minimal-http-client/CMakeLists.txt +++ b/minimal-examples/http-client/minimal-http-client/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client) set(SRCS minimal-http-client.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) @@ -61,6 +62,7 @@ MACRO(require_lws_config reqconfig _val result) endif() ENDMACRO() + set(requirements 1) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) diff --git a/minimal-examples/http-server/README.md b/minimal-examples/http-server/README.md index 59535d8e..034e89d8 100644 --- a/minimal-examples/http-server/README.md +++ b/minimal-examples/http-server/README.md @@ -1,6 +1,7 @@ |Example|Demonstrates| ---|--- -minimal-http-server|Serves a directory over http/1 or http/2, custom 404 handler +minimal-http-server|Serves a directory over http/1, custom 404 handler +minimal-http-server-tls|Serves a directory over http/1 or http/2 with TLS (SSL), 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/http-server/minimal-http-server-dynamic/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-dynamic/CMakeLists.txt index 2943e46f..3286a419 100644 --- a/minimal-examples/http-server/minimal-http-server-dynamic/CMakeLists.txt +++ b/minimal-examples/http-server/minimal-http-server-dynamic/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-dynamic) set(SRCS minimal-http-server-dynamic.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/http-server/minimal-http-server-libuv/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-libuv/CMakeLists.txt index 3a2a0e5a..dc56dcdd 100644 --- a/minimal-examples/http-server/minimal-http-server-libuv/CMakeLists.txt +++ b/minimal-examples/http-server/minimal-http-server-libuv/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-libuv) set(SRCS minimal-http-server.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/http-server/minimal-http-server-multivhost/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-multivhost/CMakeLists.txt index 5684ff2f..ae0400dd 100644 --- a/minimal-examples/http-server/minimal-http-server-multivhost/CMakeLists.txt +++ b/minimal-examples/http-server/minimal-http-server-multivhost/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-multivhost) set(SRCS minimal-http-server.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) @@ -60,7 +61,6 @@ MACRO(require_lws_config reqconfig _val result) endif() ENDMACRO() - set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) diff --git a/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt index 59f49b75..fedd1550 100644 --- a/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt +++ b/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-smp) set(SRCS minimal-http-server-smp.c) @@ -51,16 +51,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt new file mode 100644 index 00000000..7c8e7d62 --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt @@ -0,0 +1,78 @@ +cmake_minimum_required(VERSION 2.8) +include(CheckCSourceCompiles) + +set(SAMP lws-minimal-http-server-tls) +set(SRCS minimal-http-server-tls.c) + +# If we are being built as part of lws, confirm current build config supports +# reqconfig, else skip building ourselves. +# +# If we are being built externally, confirm installed lws was configured to +# support reqconfig, else error out with a helpful message about the problem. +# +MACRO(require_lws_config reqconfig _val result) + + if (DEFINED ${reqconfig}) + if (${reqconfig}) + set (rq 1) + else() + set (rq 0) + endif() + else() + set(rq 0) + endif() + + if (${_val} EQUAL ${rq}) + set(SAME 1) + else() + set(SAME 0) + endif() + + if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) + if (${_val}) + message("${SAMP}: skipping as lws being built without ${reqconfig}") + else() + message("${SAMP}: skipping as lws built with ${reqconfig}") + endif() + set(${result} 0) + else() + if (LWS_WITH_MINIMAL_EXAMPLES) + set(MET ${SAME}) + else() + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) + endif() + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) + set(MET 1) + else() + set(MET 0) + endif() + endif() + if (NOT MET) + if (${_val}) + message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") + else() + message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") + endif() + endif() + + endif() +ENDMACRO() + +set(requirements 1) +require_lws_config(LWS_WITHOUT_SERVER 0 requirements) +require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) + +if (requirements) + add_executable(${SAMP} ${SRCS}) + + if (websockets_shared) + target_link_libraries(${SAMP} websockets_shared) + add_dependencies(${SAMP} websockets_shared) + else() + target_link_libraries(${SAMP} websockets) + endif() +endif() diff --git a/minimal-examples/http-server/minimal-http-server-tls/README.md b/minimal-examples/http-server/minimal-http-server-tls/README.md new file mode 100644 index 00000000..b10ffed6 --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/README.md @@ -0,0 +1,45 @@ +# lws minimal http server with tls + +## build + +``` + $ cmake . && make +``` + +## usage + +``` + $ ./lws-minimal-http-server-tls +[2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 +[2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off +[2018/03/20 13:23:13:0142] NOTICE: Using SSL mode +[2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' +[2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled +[2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert +[2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert +[2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath +[2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key +[2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default +[2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d +``` + +Visit https://localhost:7681 + +Because it uses a selfsigned certificate, you will have to make an exception for it in your browser. + +## Certificate creation + +The selfsigned certs provided were created with + +``` +echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" +``` + +they cover "localhost" and last 100 years from 2018-03-20. + +You can replace them with commercial certificates matching your hostname. + +## HTTP/2 + +If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable +out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. diff --git a/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert b/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert new file mode 100644 index 00000000..6f372db4 --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD +VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb +MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx +HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 +WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl +d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 +cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA +aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW +aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 +Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek +LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH +KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 +jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ +Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz +TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK +Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 +nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo +GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p +sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU +9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar +jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow +YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA +xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P +wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 +H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv +xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk +ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g +1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA +AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg +mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s +8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX +e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= +-----END CERTIFICATE----- diff --git a/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key b/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key new file mode 100644 index 00000000..148f8598 --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +fBrpEY1IATtPq1taBZZogRqI3rOkkPk= +-----END PRIVATE KEY----- diff --git a/minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c b/minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c new file mode 100644 index 00000000..7afd0ffd --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c @@ -0,0 +1,84 @@ +/* + * lws-minimal-http-server-tls + * + * Copyright (C) 2018 Andy Green <andy@warmcat.com> + * + * 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, + * with three extra lines giving it tls (ssl) capabilities, which in + * turn allow operation with HTTP/2 if lws was configured for it. + * + * 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 <libwebsockets.h> +#include <string.h> +#include <signal.h> + +static int interrupted; + +static const struct lws_http_mount mount = { + /* .mount_next */ NULL, /* linked-list "next" */ + /* .mountpoint */ "/", /* mountpoint URL */ + /* .origin */ "./mount-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 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.port = 7681; + info.mounts = &mount; + info.error_document_404 = "/404.html"; + + info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; + info.ssl_cert_filepath = "localhost-100y.cert"; + info.ssl_private_key_filepath = "localhost-100y.key"; + + lws_set_log_level(LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_USER + /* | LLL_INFO */ /* | LLL_DEBUG */, NULL); + + lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); + + context = lws_create_context(&info); + if (!context) { + lwsl_err("lws init failed\n"); + return 1; + } + + while (n >= 0 && !interrupted) + n = lws_service(context, 1000); + + lws_context_destroy(context); + + return 0; +} diff --git a/minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html new file mode 100644 index 00000000..1f7ae66e --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html @@ -0,0 +1,9 @@ +<meta charset="UTF-8"> +<html> + <body> + <img src="libwebsockets.org-logo.png"><br> + <h1>404</h1> + Sorry, that file doesn't exist. + </body> +</html> + diff --git a/minimal-examples/http-server/minimal-http-server-tls/mount-origin/favicon.ico b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c0cc2e3dff34012ba3d4a7848a7ed17579788ec5 GIT binary patch literal 1406 zcmZQzU}Ruq5D;JhgA7&%1~CQ(1`P%V29S^f14y0&EXTkIp}-`Ry|Mg1n7g4Wf+79t z2ZrqYe+;>20vPVjzRB=<LjuF5*B2OyS3%T(6^;_4Aut*O!zKh6Nd`<zOpI)7Y@qT3 ztd|fUtO$wV;NW0nWo2b#XJ-eC65@juArUMrER39-oQ%xO%wSPMe6S*%#Q*;c3^07e Soq+*{L1HjAh{nbTi2(qS_AI0T literal 0 HcmV?d00001 diff --git a/minimal-examples/http-server/minimal-http-server-tls/mount-origin/http2.png b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/http2.png new file mode 100644 index 0000000000000000000000000000000000000000..439bfa482fa00e69af2d562f17a6e89453eb98cc GIT binary patch literal 7563 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 literal 0 HcmV?d00001 diff --git a/minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html new file mode 100644 index 00000000..d245a57d --- /dev/null +++ b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html @@ -0,0 +1,39 @@ + <meta charset="UTF-8"> +<html> + <body> + <img src="libwebsockets.org-logo.png"><br> + + Hello from the <b>minimal https server example</b>. + <br> + You can confirm the 404 page handler by going to this + nonexistant <a href="notextant.html">page</a>. + <br> + <div id="transport"></div> + </body> + +<script> + +window.onload = function() { + +var transport_protocol = ""; + +if ( performance && performance.timing.nextHopProtocol ) { + transport_protocol = performance.timing.nextHopProtocol; +} else if ( window.chrome && window.chrome.loadTimes ) { + transport_protocol = window.chrome.loadTimes().connectionInfo; +} else { + + var p = performance.getEntriesByType("resource"); + for (var i=0; i < p.length; i++) { + var value = "nextHopProtocol" in p[i]; + if (value) + transport_protocol = p[i].nextHopProtocol; + } + } + + if (transport_protocol == "h2") + document.getElementById("transport").innerHTML = "<img src=\"/http2.png\">"; +} +</script> +</html> + diff --git a/minimal-examples/http-server/minimal-http-server-tls/mount-origin/libwebsockets.org-logo.png b/minimal-examples/http-server/minimal-http-server-tls/mount-origin/libwebsockets.org-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2060a10c936a0959f2a5c3a6b7fa60ac324f1a95 GIT binary patch literal 7029 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 literal 0 HcmV?d00001 diff --git a/minimal-examples/http-server/minimal-http-server/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server/CMakeLists.txt index 457e817a..a17d4e9f 100644 --- a/minimal-examples/http-server/minimal-http-server/CMakeLists.txt +++ b/minimal-examples/http-server/minimal-http-server/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server) set(SRCS minimal-http-server.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) @@ -61,6 +62,7 @@ MACRO(require_lws_config reqconfig _val result) endif() ENDMACRO() + set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) diff --git a/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt b/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt index 22f69014..9548db3c 100644 --- a/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt +++ b/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-rx) set(SRCS minimal-ws-client.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt b/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt index 156d7c35..a43e3dc6 100644 --- a/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt +++ b/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-tx) set(SRCS minimal-ws-client.c) @@ -50,16 +50,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt index 8ad44309..73fb25a8 100644 --- a/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-broker) set(SRCS minimal-ws-broker.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) @@ -60,7 +61,6 @@ MACRO(require_lws_config reqconfig _val result) endif() ENDMACRO() - set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) diff --git a/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt index 36af4b78..82b70652 100644 --- a/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8.9) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-pmd-bulk) set(SRCS minimal-ws-server-pmd-bulk.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt index 8b9721b1..fb607abf 100644 --- a/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8.9) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-pmd) set(SRCS minimal-ws-server-pmd.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt index 04e9d5bd..01445cf0 100644 --- a/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-ring) set(SRCS minimal-ws-server.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt index 8b147749..4f232053 100644 --- a/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-threads) set(SRCS minimal-ws-server.c) @@ -51,16 +51,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) diff --git a/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt b/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt index 6ec72fe9..c0cb7cbc 100644 --- a/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt +++ b/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -include(CheckSymbolExists) +include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server) set(SRCS minimal-ws-server.c) @@ -39,16 +39,17 @@ MACRO(require_lws_config reqconfig _val result) if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() - CHECK_SYMBOL_EXISTS(${reqconfig} libwebsockets.h HAS) - if (NOT DEFINED HAS) - set(HAS 0) + CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) + if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) + set(HAS_${reqconfig} 0) + else() + set(HAS_${reqconfig} 1) endif() - if ((HAS AND ${_val}) OR (NOT HAS AND NOT ${_val})) + if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() - endif() if (NOT MET) if (${_val}) -- GitLab