| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- * lws-minimal-ws-proxy
- *
- * Written in 2010-2019 by Andy Green <[email protected]>
- *
- * 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 an added websocket proxy distributing what is received on a
- * dumb-increment wss connection to https://libwebsockets.org to all
- * browsers connected to this server.
- *
- * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of
- * the directory it was started in.
- * You can change that by changing mount.origin.
- */
- #include <libwebsockets.h>
- #include <string.h>
- #include <signal.h>
- #define LWS_PLUGIN_STATIC
- #include "protocol_lws_minimal.c"
- static struct lws_protocols protocols[] = {
- { "http", lws_callback_http_dummy, 0, 0 },
- LWS_PLUGIN_PROTOCOL_MINIMAL,
- { NULL, NULL, 0, 0 } /* terminator */
- };
- 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, const char **argv)
- {
- struct lws_context_creation_info info;
- struct lws_context *context;
- const char *p;
- int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE
- /* for LLL_ verbosity above NOTICE to be built into lws,
- * lws must have been configured and built with
- * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */
- /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */
- /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */
- /* | LLL_DEBUG */;
- signal(SIGINT, sigint_handler);
- if ((p = lws_cmdline_option(argc, argv, "-d")))
- logs = atoi(p);
- lws_set_log_level(logs, NULL);
- lwsl_user("LWS minimal ws proxy | visit http://localhost:7681\n");
- memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */
- info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT |
- LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE;
- info.port = 7681;
- info.mounts = &mount;
- info.protocols = protocols;
- context = lws_create_context(&info);
- if (!context) {
- lwsl_err("lws init failed\n");
- return 1;
- }
- while (n >= 0 && !interrupted)
- n = lws_service(context, 0);
- lws_context_destroy(context);
- return 0;
- }
|