25#if defined(LWS_WITH_SPAWN)
27#if defined(WIN32) || defined(_WIN32)
34#if defined(__OpenBSD__)
35#include <sys/siginfo.h>
146#define LWS_BUFLIST_OOM_LIMIT (2 * 1024 * 1024)
265 size_t len,
char *frag_first,
char *frag_fin);
410 size_t len,
char *frag_first,
char *frag_fin);
513 size_t count_private_owners);
544 struct lws_ss_handle *
h;
545 struct lws_buflist *
bl;
585#define lws_ptr_diff(head, tail) \
586 ((int)((char *)(head) - (char *)(tail)))
605#define lws_ptr_diff_size_t(head, tail) \
606 ((size_t)(ssize_t)((char *)(head) - (char *)(tail)))
659lws_strnncpy_size(
size_t size1,
size_t destsize)
661 if (size1 == (
size_t)-1)
665 return size1 + 1u < destsize ? size1 + 1u : destsize;
673#define lws_strnncpy(dest, src, size1, destsize) \
674 lws_strncpy(dest, src, lws_strnncpy_size((size_t)(size1), \
727lws_nstrstr(
const char *buf,
size_t len,
const char *name,
size_t nl);
1167#if defined(LWS_WITH_CRASH_BACKTRACE)
1190lws_crash_backtrace_install(
void);
1571#if defined(LWS_WITH_DIR)
1582} lws_dir_obj_type_t;
1584struct lws_dir_entry {
1586 lws_dir_obj_type_t type;
1590lws_dir_callback_function(
const char *dirpath,
void *user,
1591 struct lws_dir_entry *lde);
1593struct lws_dir_info {
1594 const char *dirpath;
1596 lws_dir_callback_function *cb;
1597 unsigned char do_toplevel_cb:1;
1625lws_dir(
const char *dirpath,
void *user, lws_dir_callback_function cb);
1649lws_dir_via_info(
struct lws_dir_info *info);
1675lws_dir_rm_rf_cb(
const char *dirpath,
void *user,
struct lws_dir_entry *lde);
1705lws_dir_symlink_rotate(
const char *cur,
const char *target,
1706 const char *cur_tag,
const char *prev_tag);
1715typedef struct lws_dir_du {
1716 uint64_t size_in_bytes;
1733lws_dir_du_cb(
const char *dirpath,
void *user,
struct lws_dir_entry *lde);
1743typedef int (*lws_dir_glob_cb_t)(
void *data,
const char *path);
1745typedef struct lws_dir_glob {
1747 lws_dir_glob_cb_t cb;
1767lws_dir_glob_cb(
const char *dirpath,
void *user,
struct lws_dir_entry *lde);
1830 const uint8_t *skid,
size_t skid_len,
1831 const uint8_t **prpder,
size_t *prder_len);
1872#define lws_assert_fourcc(_a, _b) do { } while (0);
1933#if defined(LWS_WITH_SPAWN)
1936struct lws_spawn_piped;
1939struct _lws_siginfo_t {
1942typedef struct _lws_siginfo_t siginfo_t;
1966typedef struct lws_spawn_resource_us {
1967 uint64_t us_cpu_user;
1968 uint64_t us_cpu_sys;
1970 uint64_t peak_mem_rss;
1971 uint64_t peak_mem_virt;
1972} lws_spawn_resource_us_t;
1974typedef void (*lsp_cb_t)(
void *opaque,
const lws_spawn_resource_us_t *res,
1975 siginfo_t *si,
int we_killed_him);
1999struct lws_spawn_piped_info {
2000 struct lws_dll2_owner *owner;
2001 struct lws_vhost *vh;
2002 struct lws *opt_parent;
2004 const char *
const *exec_array;
2005 const char **env_array;
2006 const char *protocol_name;
2007 const char *chroot_path;
2010 struct lws_spawn_piped **plsp;
2016 lws_spawn_resource_us_t *res;
2022 const struct lws_role_ops *ops;
2027 const char *cgroup_name_suffix;
2053lws_spawn_piped(
const struct lws_spawn_piped_info *lspi);
2063lws_spawn_piped_kill_child_process(
struct lws_spawn_piped *lsp);
2083lws_spawn_piped_destroy(
struct lws_spawn_piped **lsp);
2093lws_spawn_get_stdwsi_open_count(
struct lws_spawn_piped *lsp);
2111lws_spawn_stdwsi_closed(
struct lws_spawn_piped *lsp,
struct lws *wsi);
2121lws_spawn_closedown_stdwsis(
struct lws_spawn_piped *lsp);
2134lws_spawn_get_stdfd(
struct lws *wsi);
2146lws_spawn_get_fd_stdxxx(
struct lws_spawn_piped *lsp,
int std_idx);
2166lws_spawn_prepare_self_cgroup(
const char *user,
const char *group);
2180lws_spawn_get_self_cgroup(
char *cgroup,
size_t max);
2192#if defined(__linux__)
2193 const char *layers[4];
2253#define LWS_MINILEX_FAIL -1
2254#define LWS_MINILEX_CONTINUE 0
2255#define LWS_MINILEX_MATCH 1
struct lws_dll2 lws_dll2_t
struct lws_buflist2_owner * upstream
struct lws_buflist2_owner * private_owners
size_t(* evict)(struct lws_reclaimable *r)
struct lws_dll2_owner owner
struct lws_wifi_scan * next
lws_wsmsg_transfer_cb optional_cb
LWS_VISIBLE LWS_EXTERN void lws_buflist2_destroy_all_segments(struct lws_buflist2_owner *owner)
LWS_VISIBLE LWS_EXTERN int lws_wsmsg_append(lws_wsmsg_info_t *info)
LWS_VISIBLE LWS_EXTERN lws_fragbuf_t * lws_fragbuf_create(size_t units, size_t unit_size)
LWS_VISIBLE LWS_EXTERN void lws_cmdline_option_handle_builtin(int argc, const char **argv, struct lws_context_creation_info *info)
LWS_VISIBLE LWS_EXTERN int lws_ensure_user_space(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_hex_to_byte_array(const char *h, uint8_t *dest, int max)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option_cx(const struct lws_context *cx, const char *val)
LWS_VISIBLE LWS_EXTERN void * lws_buflist_get_frag_start_or_NULL(struct lws_buflist **head)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path) LWS_WARN_DEPRECATED
LWS_VISIBLE LWS_EXTERN void lws_switches_print_help(const char *prog, const struct lws_switches *switches, size_t count)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist_append_segment_take_ownership(struct lws_buflist **head, uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_buflist_describe(struct lws_buflist **head, void *id, const char *reason)
LWS_VISIBLE LWS_EXTERN int lws_open(const char *__file, int __oflag,...)
LWS_VISIBLE LWS_EXTERN size_t lws_buflist2_next_segment_len(struct lws_buflist2_owner *owner, uint8_t **buf)
LWS_VISIBLE LWS_EXTERN void lws_reclaimable_add(lws_reclaimable_t *r)
LWS_VISIBLE LWS_EXTERN void lws_reclaimable_touch(lws_reclaimable_t *r)
LWS_VISIBLE LWS_EXTERN int lws_wsi_tsi(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN uint16_t lws_ser_ru16be(const uint8_t *b)
LWS_VISIBLE LWS_EXTERN void lws_clear_child_pending_on_writable(struct lws *wsi) LWS_WARN_DEPRECATED
LWS_VISIBLE LWS_EXTERN lws_usec_t lws_now_usecs(void)
LWS_VISIBLE LWS_EXTERN void lws_explicit_bzero(void *p, size_t len)
LWS_VISIBLE LWS_EXTERN_FOR_DATA const lws_humanize_unit_t humanize_schema_si_bytes[7]
LWS_VISIBLE LWS_EXTERN struct lws * lws_get_network_wsi(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...) LWS_FORMAT(3)
LWS_VISIBLE LWS_EXTERN void lws_get_effective_uid_gid(struct lws_context *context, uid_t *uid, gid_t *gid)
void(* lws_wsmsg_transfer_cb)(struct lws_wsmsg_info *info)
LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN size_t lws_get_allocated_heap(void)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option(int argc, const char **argv, const char *val)
LWS_VISIBLE LWS_EXTERN_FOR_DATA const lws_humanize_unit_t humanize_schema_si[7]
LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs(void)
LWS_VISIBLE LWS_EXTERN size_t lws_get_random(struct lws_context *context, void *buf, size_t len)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_check_utf8(unsigned char *state, const unsigned char *buf, size_t len)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_options(int argc, const char *const *argv, const char *val, const char *last)
LWS_VISIBLE LWS_EXTERN int lws_buflist_linear_copy(struct lws_buflist **head, size_t ofs, uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_reclaimable_remove(lws_reclaimable_t *r)
LWS_VISIBLE LWS_EXTERN void lws_reclaimable_unpin(lws_reclaimable_t *r)
LWS_VISIBLE LWS_EXTERN void lws_heap_limit_set(size_t bytes)
LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN unsigned char * lws_get_close_payload(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN uint32_t lws_crc32(uint32_t crc, const void *buf, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_hex_len_to_byte_array(const char *h, size_t hlen, uint8_t *dest, int max)
LWS_VISIBLE LWS_EXTERN const char * lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen)
LWS_VISIBLE LWS_EXTERN size_t lws_utf8_trim_partial(char *s, size_t len)
struct lws_parse_uri lws_parse_uri_t
LWS_VISIBLE LWS_EXTERN void lws_fragbuf_destroy(lws_fragbuf_t **fb)
LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
LWS_VISIBLE LWS_EXTERN size_t lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_vhost_listen_port(struct lws_vhost *vhost)
LWS_VISIBLE LWS_EXTERN void lws_wsmsg_destroy(struct lws_buflist2_owner *private_owners, size_t count_private_owners)
LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_humanize(char *buf, size_t len, uint64_t value, const lws_humanize_unit_t *schema)
LWS_VISIBLE LWS_EXTERN void lws_set_opaque_user_data(struct lws *wsi, void *data)
#define lws_assert_fourcc(_a, _b)
LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN uint32_t lws_ser_ru32be(const uint8_t *b)
LWS_VISIBLE LWS_EXTERN size_t lws_buflist_total_len(struct lws_buflist **head)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist2_append_segment_take_ownership(struct lws_buflist2_owner *owner, uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN lws_stateful_ret_t lws_flow_feed(lws_flow_t *flow)
LWS_VISIBLE LWS_EXTERN void lws_ser_wu16be(uint8_t *b, uint16_t u)
LWS_VISIBLE LWS_EXTERN void lws_set_wsi_user(struct lws *wsi, void *user)
LWS_VISIBLE LWS_EXTERN lws_stateful_ret_t lws_flow_req(lws_flow_t *flow)
struct lws_wsmsg_info lws_wsmsg_info_t
LWS_VISIBLE LWS_EXTERN size_t lws_buflist_use_segment(struct lws_buflist **head, size_t len)
struct lws_flow lws_flow_t
struct lws_reclaimable lws_reclaimable_t
LWS_VISIBLE LWS_EXTERN void * lws_buflist2_get_frag_start_or_NULL(struct lws_buflist2_owner *owner)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN unsigned int lws_fragbuf_pieces(const lws_fragbuf_t *fb)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option_cx_argv0(const struct lws_context *cx)
LWS_VISIBLE LWS_EXTERN const char * lws_nstrstr(const char *buf, size_t len, const char *name, size_t nl)
LWS_VISIBLE LWS_EXTERN int lws_get_close_length(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_tls_jit_trust_blob_queury_skid(const void *_blob, size_t blen, const uint8_t *skid, size_t skid_len, const uint8_t **prpder, size_t *prder_len)
LWS_VISIBLE LWS_EXTERN void lws_set_opaque_parent_data(struct lws *wsi, void *data)
LWS_VISIBLE LWS_EXTERN size_t lws_reclaim(size_t want)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_options_cx(const struct lws_context *cx, const char *val, const char *last)
LWS_VISIBLE LWS_EXTERN int lws_json_simple_strcmp(const char *buf, size_t len, const char *name, const char *comp)
LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_get_library_version(void)
LWS_VISIBLE LWS_EXTERN void lws_reclaimable_pin(lws_reclaimable_t *r)
LWS_VISIBLE LWS_EXTERN int lws_get_child_pending_on_writable(const struct lws *wsi) LWS_WARN_DEPRECATED
LWS_VISIBLE LWS_EXTERN int lws_vbi_encode(uint64_t value, void *buf)
LWS_VISIBLE LWS_EXTERN uint64_t lws_ser_ru64be(const uint8_t *b)
LWS_VISIBLE LWS_EXTERN int lws_humanize_pad(char *p, size_t len, uint64_t v, const lws_humanize_unit_t *schema)
LWS_VISIBLE LWS_EXTERN int lws_get_tsi(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_buflist_linear_use(struct lws_buflist **head, uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_vbi_decode(const void *buf, uint64_t *value, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_ser_wu64be(uint8_t *b, uint64_t u64)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
LWS_VISIBLE LWS_EXTERN void lws_hex_from_byte_array(const uint8_t *src, size_t slen, char *dest, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_ser_wu32be(uint8_t *b, uint32_t u32)
LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_parent_data(const struct lws *wsi)
struct lws_fragbuf lws_fragbuf_t
LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size, const char *reason))
LWS_VISIBLE LWS_EXTERN int lws_buflist_fragment_use(struct lws_buflist **head, uint8_t *buf, size_t len, char *frag_first, char *frag_fin)
LWS_VISIBLE LWS_EXTERN size_t lws_buflist2_use_segment(struct lws_buflist2_owner *owner, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist2_append_segment(struct lws_buflist2_owner *owner, const uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_plat_group_to_gid(const char *groupname, gid_t *pgid)
LWS_VISIBLE LWS_EXTERN lws_fragbuf_t * lws_fragbuf_create_cap(size_t units, size_t unit_size, size_t cap)
LWS_VISIBLE LWS_EXTERN int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len)
LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_user_data(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_plat_user_to_uid(const char *username, uid_t *puid)
LWS_VISIBLE LWS_EXTERN uint8_t * lws_fragbuf_at(const lws_fragbuf_t *fb, size_t ofs, size_t *avail)
LWS_VISIBLE LWS_EXTERN_FOR_DATA const lws_humanize_unit_t humanize_schema_us[8]
LWS_VISIBLE LWS_EXTERN int lws_wsi_close_cause(struct lws *wsi, char *buf, size_t len)
LWS_VISIBLE LWS_EXTERN lws_parse_uri_t *LWS_WARN_UNUSED_RESULT lws_parse_uri_create(const char *uri)
LWS_VISIBLE LWS_EXTERN void * lws_wsi_user(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN char * lws_strncpy(char *dest, const char *src, size_t size)
LWS_VISIBLE LWS_EXTERN int lws_buflist2_fragment_use(struct lws_buflist2_owner *owner, uint8_t *buf, size_t len, char *frag_first, char *frag_fin)
LWS_VISIBLE LWS_EXTERN void lws_parse_uri_destroy(lws_parse_uri_t **pcuri)
struct lws_humanize_unit lws_humanize_unit_t
LWS_VISIBLE LWS_EXTERN lws_usec_t lws_parse_iso8601(const char *ads)
LWS_VISIBLE LWS_EXTERN int lws_hex_random(struct lws_context *context, char *dest, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_buflist_destroy_all_segments(struct lws_buflist **head)
LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_parent(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN uint8_t * lws_fragbuf_unit(const lws_fragbuf_t *fb, size_t unit)
@ LWS_RXFLOW_REASON_MQTT_ACK_TX
@ LWS_RXFLOW_REASON_APPLIES_DISABLE
@ LWS_RXFLOW_REASON_APPLIES
@ LWS_RXFLOW_REASON_USER_BOOL
@ LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT
@ LWS_RXFLOW_REASON_APPLIES_ENABLE
@ LWS_RXFLOW_REASON_FLAG_PROCESS_NOW
@ LWS_RXFLOW_REASON_HTTP_RXBUFFER
@ LWS_RXFLOW_REASON_H2_PPS_PENDING
@ LWSDLOFLOW_STATE_READ_COMPLETED
@ LWSDLOFLOW_STATE_READ_FAILED
#define LWS_EXTERN_FOR_DATA
#define LWS_WARN_DEPRECATED
#define LWS_FORMAT(string_index)
#define LWS_WARN_UNUSED_RESULT
LWS_VISIBLE LWS_EXTERN int lws_fsmount_mount(struct lws_fsmount *fsm)
LWS_VISIBLE LWS_EXTERN int lws_fsmount_unmount(struct lws_fsmount *fsm)
LWS_VISIBLE LWS_EXTERN unsigned int lws_sigbits(uintptr_t u)
LWS_VISIBLE LWS_EXTERN int lws_minilex_parse(const uint8_t *lex, int16_t *ps, const uint8_t c, int *match)
const char * overlay_path
LWS_VISIBLE LWS_EXTERN int lws_wol(struct lws_context *ctx, const char *ip_or_NULL, uint8_t *mac_6_bytes)