libwebsockets
Lightweight C library for HTML5 websockets
Loading...
Searching...
No Matches
lws-context-vhost.h
Go to the documentation of this file.
1/*
2 * libwebsockets - small server side websockets and web server implementation
3 *
4 * Copyright (C) 2010 - 2021 Andy Green <andy@warmcat.com>
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22 * IN THE SOFTWARE.
23 */
24
39
40/*
41 * NOTE: These public enums are part of the abi. If you want to add one,
42 * add it at where specified so existing users are unaffected.
43 */
44
45
46#define LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT ((1ll << 1) | \
47 (1ll << 12))
48
51#define LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME (1ll << 2)
53#define LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT ((1ll << 3) | \
54 (1ll << 12))
55
61#define LWS_SERVER_OPTION_LIBEV (1ll << 4)
63#define LWS_SERVER_OPTION_DISABLE_IPV6 (1ll << 5)
65#define LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS (1ll << 6)
68#define LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED (1ll << 7)
70#define LWS_SERVER_OPTION_VALIDATE_UTF8 (1ll << 8)
72#define LWS_SERVER_OPTION_SSL_ECDH ((1ll << 9) | \
73 (1ll << 12))
74
75#define LWS_SERVER_OPTION_LIBUV (1ll << 10)
77#define LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS ((1ll << 11) |\
78 (1ll << 12))
79
88#define LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT (1ll << 12)
90#define LWS_SERVER_OPTION_EXPLICIT_VHOSTS (1ll << 13)
93#define LWS_SERVER_OPTION_UNIX_SOCK (1ll << 14)
95#define LWS_SERVER_OPTION_STS (1ll << 15)
98#define LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY (1ll << 16)
100#define LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE (1ll << 17)
102#define LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN (1ll << 18)
108#define LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN (1ll << 19)
115#define LWS_SERVER_OPTION_FALLBACK_TO_RAW /* use below name */ (1ll << 20)
116#define LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG (1ll << 20)
128
129#define LWS_SERVER_OPTION_LIBEVENT (1ll << 21)
131
132#define LWS_SERVER_OPTION_ONLY_RAW /* Use below name instead */ (1ll << 22)
133#define LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG (1ll << 22)
146#define LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE (1ll << 23)
152#define LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX (1ll << 24)
159#define LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT (1ll << 25)
164#define LWS_SERVER_OPTION_IGNORE_MISSING_CERT (1ll << 26)
170#define LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK (1ll << 27)
181#define LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE (1ll << 28)
197
198#define LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER (1ll << 29)
206#define LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND (1ll << 30)
210
211#define LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW (1ll << 31)
214
215#define LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL (1ll << 32)
220
221#define LWS_SERVER_OPTION_GLIB (1ll << 33)
223
224#define LWS_SERVER_OPTION_H2_PRIOR_KNOWLEDGE (1ll << 34)
228
229#define LWS_SERVER_OPTION_NO_LWS_SYSTEM_STATES (1ll << 35)
232
233#define LWS_SERVER_OPTION_SS_PROXY (1ll << 36)
235
236#define LWS_SERVER_OPTION_SDEVENT (1ll << 37)
238
239#define LWS_SERVER_OPTION_ULOOP (1ll << 38)
241
242#define LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE (1ll << 39)
244
245#define LWS_SERVER_OPTION_OPENSSL_AUTO_DH_PARAMETERS (1ll << 40)
251
252#define LWS_SERVER_OPTION_MBEDTLS_VERIFY_CLIENT_CERT_POST_HANDSHAKE ((1ll << 41) | \
253 (1ll << 12))
254
261
262#define LWS_SERVER_OPTION_VH_INSTANTIATE_ALL_PROTOCOLS (1ll << 42)
264
265 /****** add new things just above ---^ ******/
266
267
268#define lws_check_opt(c, f) ((((uint64_t)c) & ((uint64_t)f)) == ((uint64_t)f))
269
270struct lws_plat_file_ops;
271struct lws_ss_policy;
272struct lws_ss_plugin;
273struct lws_metric_policy;
274struct lws_sss_ops;
275
276typedef int (*lws_context_ready_cb_t)(struct lws_context *context);
277
278#if defined(LWS_WITH_NETWORK)
279typedef int (*lws_peer_limits_notify_t)(struct lws_context *ctx,
280 lws_sockfd_type sockfd,
281 lws_sockaddr46 *sa46);
282#endif
283
294#if defined(LWS_WITH_NETWORK)
295 const char *iface;
302 const struct lws_protocols *protocols;
308#if defined(LWS_ROLE_WS)
309 const struct lws_extension *extensions;
312#endif
313#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)
314 const struct lws_token_limits *token_limits;
317 const char *http_proxy_address;
321 const struct lws_protocol_vhost_options *headers;
324
325 const struct lws_protocol_vhost_options *reject_service_keywords;
332 const struct lws_protocol_vhost_options *pvo;
335 const char *log_filepath;
338 const struct lws_http_mount *mounts;
340 const char *server_string;
343
344 const char *error_document_404;
348 int port;
360
361 unsigned int http_proxy_port;
363 unsigned int max_http_header_data2;
368 unsigned int max_http_header_pool2;
373
374 int keepalive_timeout;
378 uint32_t http2_settings[7];
384
385 unsigned short max_http_header_data;
388 unsigned short max_http_header_pool;
395
396#endif
397
398#if defined(LWS_WITH_TLS)
399 const char *ssl_private_key_password;
404 const char *ssl_cert_filepath;
416 const char *ssl_private_key_filepath;
435 const char *ssl_ca_filepath;
444 const char *ssl_cipher_list;
454 const char *ecdh_curve;
457 const char *tls1_3_plus_cipher_list;
464
465 const void *server_ssl_cert_mem;
469 const void *server_ssl_private_key_mem;
474 const void *server_ssl_ca_mem;
478
479 long ssl_options_set;
481 long ssl_options_clear;
483 int simultaneous_ssl_restriction;
486 int simultaneous_ssl_handshake_restriction;
488 int ssl_info_event_mask;
494 unsigned int server_ssl_cert_mem_len;
497 unsigned int server_ssl_private_key_mem_len;
499 unsigned int server_ssl_ca_mem_len;
501
502 const char *alpn;
509
510
511#if defined(LWS_WITH_CLIENT)
512 const char *client_ssl_private_key_password;
515 const char *client_ssl_cert_filepath;
518 const void *client_ssl_cert_mem;
521 unsigned int client_ssl_cert_mem_len;
524 const char *client_ssl_private_key_filepath;
530 const void *client_ssl_key_mem;
533 const char *client_ssl_ca_filepath;
535 const void *client_ssl_ca_mem;
538
539 const char *client_ssl_cipher_list;
543 const char *client_tls_1_3_plus_cipher_list;
549
550 long ssl_client_options_set;
552 long ssl_client_options_clear;
554
555
556 unsigned int client_ssl_ca_mem_len;
559 unsigned int client_ssl_key_mem_len;
562
563#endif
564
565#if !defined(LWS_WITH_MBEDTLS)
566 SSL_CTX *provided_client_ssl_ctx;
571#else /* WITH_MBEDTLS */
572 const char *mbedtls_client_preload_filepath;
582#endif
583#endif
584
585 int ka_time;
588 int ka_probes;
592 int ka_interval;
595 unsigned int timeout_secs;
600 unsigned int connect_timeout_secs;
604 int bind_iface;
615 unsigned int timeout_secs_ah_idle;
618#endif /* WITH_NETWORK */
619
620#if defined(LWS_WITH_TLS_SESSIONS)
621 uint32_t tls_session_timeout;
624 uint32_t tls_session_cache_max;
627#endif
628
629 gid_t gid;
632 uid_t uid;
635 uint64_t options;
637 void *user;
646 unsigned int count_threads;
664 const char *vhost_name;
671#if defined(LWS_WITH_PLUGINS)
672 const char * const *plugin_dirs;
675#endif
683
684
685 unsigned int pt_serv_buf_size;
691#if defined(LWS_WITH_FILE_OPS)
692 const struct lws_plat_file_ops *fops;
699#endif
700
701#if defined(LWS_WITH_SOCKS5)
702 const char *socks_proxy_address;
706 unsigned int socks_proxy_port;
710#endif
711
712#if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP)
713 cap_value_t caps[4];
720 char count_caps;
723#endif
738 void (*signal_cb)(void *event_lib_handle, int signum);
744 struct lws_context **pcontext;
750 void (*finalize)(struct lws_vhost *vh, void *arg);
768 const struct lws_protocols **pprotocols;
778
779 const char *username;
781 const char *groupname;
783 const char *unix_socket_perms;
794#if defined(LWS_WITH_SYS_STATE)
795 lws_state_notify_link_t * const *register_notifier_list;
799#endif
800#if defined(LWS_WITH_SECURE_STREAMS)
801#if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY)
802 const struct lws_ss_policy *pss_policies;
804#else
805 const char *pss_policies_json;
812#endif
813 const struct lws_ss_plugin **pss_plugins;
816 const char *ss_proxy_bind;
821 const char *ss_proxy_address;
823 uint16_t ss_proxy_port; /* 0 = if connecting to ss proxy, do it via a
824 * Unix Domain Socket, "+@proxy.ss.lws" if ss_proxy_bind is NULL else
825 * the socket path given in ss_proxy_bind (start it with a + or +@);
826 * nonzero means connect via a tcp socket to the tcp address in
827 * ss_proxy_bind and the given port */
828 const struct lws_transport_proxy_ops *txp_ops_ssproxy;
831 const void *txp_ssproxy_info;
833 const struct lws_transport_client_ops *txp_ops_sspc;
836#endif
837
838#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)
839#endif
840
845#if defined(LWS_WITH_PEER_LIMITS)
846 lws_peer_limits_notify_t pl_notify_cb;
853 unsigned short ip_limit_ah;
861 unsigned short ip_limit_wsi;
868
869#endif /* PEER_LIMITS */
870
871#if defined(LWS_WITH_SYS_FAULT_INJECTION)
872 lws_fi_ctx_t fic;
879#endif
880
881#if defined(LWS_WITH_SYS_SMD)
882 lws_smd_notification_cb_t early_smd_cb;
889 void *early_smd_opaque;
890 lws_smd_class_t early_smd_class_filter;
891 lws_usec_t smd_ttl_us;
896 uint16_t smd_queue_depth;
899#endif
900
901#if defined(LWS_WITH_SYS_METRICS)
902 const struct lws_metric_policy *metrics_policies;
904 const char *metrics_prefix;
911#endif
912
918
928
929#if defined(LWS_WITH_TLS_JIT_TRUST)
930 size_t jitt_cache_max_footprint;
933 int vh_idle_grace_ms;
936#endif
937
941
942#if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT)
943 const char *http_nsc_filepath;
945
946 size_t http_nsc_heap_max_footprint;
949 size_t http_nsc_heap_max_items;
952 size_t http_nsc_heap_max_payload;
955#endif
956
957#if defined(LWS_WITH_SYS_ASYNC_DNS)
958 const char **async_dns_servers;
964#endif
965
966#if defined(WIN32)
967 unsigned int win32_connect_check_interval_usec;
972#endif
973
980
988
989#if defined(LWS_WITH_NETWORK)
990 const char *wol_if;
992#endif
993
994 int argc;
997 const char **argv;
1000
1001 /* Add new things just above here ---^
1002 * This is part of the ABI, don't needlessly break compatibility
1003 *
1004 * The below is to ensure later library versions with new
1005 * members added above will see 0 (default) even if the app
1006 * was not built against the newer headers.
1007 */
1008
1009 void *_unused[2];
1010};
1011
1046LWS_VISIBLE LWS_EXTERN struct lws_context *
1048
1049
1059lws_context_destroy(struct lws_context *context);
1060
1061typedef int (*lws_reload_func)(void);
1062
1086lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
1087
1089lws_context_is_deprecated(struct lws_context *context);
1090
1109lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
1110
1129lws_set_socks(struct lws_vhost *vhost, const char *socks);
1130
1131struct lws_vhost;
1132
1142LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1143lws_create_vhost(struct lws_context *context,
1144 const struct lws_context_creation_info *info);
1145
1165lws_vhost_destroy(struct lws_vhost *vh);
1166
1183 char **config_strings, int *len);
1184
1201lwsws_get_config_vhosts(struct lws_context *context,
1202 struct lws_context_creation_info *info, const char *d,
1203 char **config_strings, int *len);
1204
1210LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1211lws_get_vhost(struct lws *wsi);
1212
1218LWS_VISIBLE LWS_EXTERN const char *
1219lws_get_vhost_name(struct lws_vhost *vhost);
1220
1229LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1230lws_get_vhost_by_name(struct lws_context *context, const char *name);
1231
1238lws_get_vhost_port(struct lws_vhost *vhost);
1239
1246lws_get_vhost_user(struct lws_vhost *vhost);
1247
1253LWS_VISIBLE LWS_EXTERN const char *
1254lws_get_vhost_iface(struct lws_vhost *vhost);
1255
1265lws_vhost_user(struct lws_vhost *vhost);
1266
1277lws_context_user(struct lws_context *context);
1278
1279LWS_VISIBLE LWS_EXTERN const char *
1280lws_vh_tag(struct lws_vhost *vh);
1281
1284 const char *sspol);
1285
1287lws_default_loop_exit(struct lws_context *cx);
1288
1291
1293lws_cmdline_passfail(int argc, const char **argv, int actual);
1294
1306lws_systemd_inherited_fd(unsigned int index,
1307 struct lws_context_creation_info *info);
1308
1325lws_context_is_being_destroyed(struct lws_context *context);
1326
1333
1345
1360
1369
1371#define AUTH_MODE_MASK 0xF0000000
1372
1380 const char *mountpoint;
1382 const char *origin;
1384 const char *def;
1386 const char *protocol;
1388
1397
1402 unsigned int auth_mask;
1404
1405 unsigned int cache_reusable:1;
1406 unsigned int cache_revalidate:1;
1407 unsigned int cache_intermediaries:1;
1408 unsigned int cache_no:1;
1409
1410 unsigned char origin_protocol;
1411 unsigned char mountpoint_len;
1412
1415
1416 const char *cgi_chroot_path;
1418
1419 const char *cgi_wd;
1423
1432 unsigned int keepalive_timeout;
1436
1437 /* Add new things just above here ---^
1438 * This is part of the ABI, don't needlessly break compatibility
1439 */
1440};
1441
1443lws_vhost_set_mounts(struct lws_vhost *v, const struct lws_http_mount *mounts);
1444
const lws_system_ops_t * system_ops
const struct lws_plugin_evlib * event_lib_custom
void(* finalize)(struct lws_vhost *vh, void *arg)
const struct lws_protocols ** pprotocols
struct lws_context ** pcontext
const lws_retry_bo_t * retry_and_idle_policy
const struct lws_protocol_vhost_options * next
void(* signal_cb)(void *event_lib_handle, int signum)
const struct lws_protocol_vhost_options * options
LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb)
LWS_VISIBLE LWS_EXTERN void lws_context_default_loop_run_destroy(struct lws_context *cx)
int(* lws_reload_func)(void)
LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **config_strings, int *len)
LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_create_vhost(struct lws_context *context, const struct lws_context_creation_info *info)
LWS_VISIBLE LWS_EXTERN int lws_cmdline_passfail(int argc, const char **argv, int actual)
LWS_VISIBLE LWS_EXTERN void * lws_vhost_user(struct lws_vhost *vhost)
LWS_VISIBLE LWS_EXTERN int lws_set_proxy(struct lws_vhost *vhost, const char *proxy)
LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(const struct lws_context_creation_info *info)
LWS_VISIBLE LWS_EXTERN void lws_default_loop_exit(struct lws_context *cx)
LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
LWS_VISIBLE LWS_EXTERN int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **config_strings, int *len)
LWS_VISIBLE LWS_EXTERN int lws_set_socks(struct lws_vhost *vhost, const char *socks)
LWS_VISIBLE LWS_EXTERN const char * lws_vh_tag(struct lws_vhost *vh)
LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_name(struct lws_vhost *vhost)
LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost_by_name(struct lws_context *context, const char *name)
LWS_VISIBLE LWS_EXTERN int lws_get_vhost_port(struct lws_vhost *vhost)
LWS_VISIBLE LWS_EXTERN void lws_vhost_destroy(struct lws_vhost *vh)
LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_iface(struct lws_vhost *vhost)
LWS_VISIBLE LWS_EXTERN int lws_systemd_inherited_fd(unsigned int index, struct lws_context_creation_info *info)
LWS_VISIBLE LWS_EXTERN void _lws_context_info_defaults(struct lws_context_creation_info *info, const char *sspol)
LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated(struct lws_context *context)
LWS_VISIBLE LWS_EXTERN int lws_context_is_being_destroyed(struct lws_context *context)
LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context)
LWS_VISIBLE LWS_EXTERN void * lws_get_vhost_user(struct lws_vhost *vhost)
int(* lws_context_ready_cb_t)(struct lws_context *context)
struct lws_log_cx lws_log_cx_t
const struct lws_http_mount * mount_next
const char * protocol
const struct lws_protocol_vhost_options * interpret
unsigned int keepalive_timeout
unsigned int cache_no
const char * basic_auth_login_file
const struct lws_protocol_vhost_options * extra_mimetypes
unsigned int auth_mask
unsigned char origin_protocol
unsigned int cache_reusable
const char * mountpoint
unsigned int cache_intermediaries
const char * cgi_chroot_path
unsigned char mountpoint_len
const struct lws_protocol_vhost_options * headers
unsigned int cache_revalidate
const struct lws_protocol_vhost_options * cgienv
lws_mount_protocols
LWS_VISIBLE LWS_EXTERN void lws_vhost_set_mounts(struct lws_vhost *v, const struct lws_http_mount *mounts)
lws_authentication_mode
@ LWSMPRO_NO_MOUNT
@ LWSMPRO_CGI
@ LWSMPRO_HTTP
@ LWSMPRO_FILE
@ LWSMPRO_REDIR_HTTPS
@ LWSMPRO_CALLBACK
@ LWSMPRO_REDIR_HTTP
@ LWSMPRO_HTTPS
@ LWSAUTHM_BASIC_AUTH_CALLBACK
@ LWSAUTHM_DEFAULT
unsigned short uint16_t
unsigned int uint32_t
#define LWS_EXTERN
int64_t lws_usec_t
int lws_sockfd_type
#define LWS_VISIBLE
struct lws_retry_bo lws_retry_bo_t
int(* lws_smd_notification_cb_t)(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len)
Definition lws-smd.h:185
uint32_t lws_smd_class_t
Definition lws-smd.h:31
struct lws_system_ops lws_system_ops_t