libwebsockets
Lightweight C library for HTML5 websockets
Loading...
Searching...
No Matches
lws-misc.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
25#if defined(LWS_WITH_SPAWN)
26
27#if defined(WIN32) || defined(_WIN32)
28#else
29#include <sys/wait.h>
30#include <sys/times.h>
31#endif
32#endif
33
34#if defined(__OpenBSD__)
35#include <sys/siginfo.h>
36#endif
37
44
45struct lws_buflist;
46
58lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf,
59 size_t len);
71lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf);
72
89lws_buflist_use_segment(struct lws_buflist **head, size_t len);
90
99lws_buflist_total_len(struct lws_buflist **head);
100
113lws_buflist_linear_copy(struct lws_buflist **head, size_t ofs, uint8_t *buf,
114 size_t len);
115
133lws_buflist_linear_use(struct lws_buflist **head, uint8_t *buf, size_t len);
134
158lws_buflist_fragment_use(struct lws_buflist **head, uint8_t *buf,
159 size_t len, char *frag_first, char *frag_fin);
160
170lws_buflist_destroy_all_segments(struct lws_buflist **head);
171
183lws_buflist_describe(struct lws_buflist **head, void *id, const char *reason);
184
198lws_buflist_get_frag_start_or_NULL(struct lws_buflist **head);
199
200
201
202/*
203 * Optional helpers for closely-managed stream flow control. These are useful
204 * when there is no memory for large rx buffers and instead tx credit is being
205 * used to regulate the server sending data.
206 *
207 * When combined with stateful consumption-on-demand, this can be very effective
208 * at managing data flows through restricted circumstances. These helpers
209 * implement a golden implementation that can be bound to a stream in its priv
210 * data.
211 *
212 * The helper is sophisticated enough to contain a buflist to manage overflows
213 * on heap and preferentially drain it. RX goes through heap to guarantee the
214 * consumer can exit cleanly at any time.
215 */
216
217enum {
218 LWSDLOFLOW_STATE_READ, /* default, we want input */
219 LWSDLOFLOW_STATE_READ_COMPLETED, /* we do not need further rx, every-
220 * thing is locally buffered or used */
221 LWSDLOFLOW_STATE_READ_FAILED, /* operation has fatal error */
222};
223
224struct lws_ss_handle;
225
226typedef struct lws_flow {
228
229 struct lws_ss_handle *h;
230 struct lws_buflist *bl;
231
232 const uint8_t *data;
233 size_t len; /* bytes left in data */
234 uint32_t blseglen; /* bytes issued */
235 int32_t window;
236
237 uint8_t state;
239
249
260
270#define lws_ptr_diff(head, tail) \
271 ((int)((char *)(head) - (char *)(tail)))
272
273#define lws_ptr_diff_size_t(head, tail) \
274 ((size_t)(ssize_t)((char *)(head) - (char *)(tail)))
275
288lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
289
301lws_strncpy(char *dest, const char *src, size_t size);
302
303/*
304 * Variation where we want to use the smaller of two lengths, useful when the
305 * source string is not NUL terminated
306 */
307#define lws_strnncpy(dest, src, size1, destsize) \
308 lws_strncpy(dest, src, (size_t)(size1 + 1) < (size_t)(destsize) ? \
309 (size_t)(size1 + 1) : (size_t)(destsize))
310
324LWS_VISIBLE LWS_EXTERN const char *
325lws_nstrstr(const char *buf, size_t len, const char *name, size_t nl);
326
349LWS_VISIBLE LWS_EXTERN const char *
350lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen);
351
370lws_json_simple_strcmp(const char *buf, size_t len, const char *name, const char *comp);
371
390lws_hex_len_to_byte_array(const char *h, size_t hlen, uint8_t *dest, int max);
391
409lws_hex_to_byte_array(const char *h, uint8_t *dest, int max);
410
423lws_hex_from_byte_array(const uint8_t *src, size_t slen, char *dest, size_t len);
424
439lws_hex_random(struct lws_context *context, char *dest, size_t len);
440
441/*
442 * lws_timingsafe_bcmp(): constant time memcmp
443 *
444 * \param a: first buffer
445 * \param b: second buffer
446 * \param len: count of bytes to compare
447 *
448 * Return 0 if the two buffers are the same, else nonzero.
449 *
450 * Always compares all of the buffer before returning, so it can't be used as
451 * a timing oracle.
452 */
453
455lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len);
456
468lws_get_random(struct lws_context *context, void *buf, size_t len);
477lws_daemonize(const char *_lock_path);
485
493lws_wsi_user(struct lws *wsi);
494
502lws_wsi_tsi(struct lws *wsi);
503
515lws_set_wsi_user(struct lws *wsi, void *user);
516
540lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
541 const char **path);
559LWS_VISIBLE LWS_EXTERN const char *
560lws_cmdline_option(int argc, const char **argv, const char *val);
561
575lws_cmdline_option_handle_builtin(int argc, const char **argv,
576 struct lws_context_creation_info *info);
577
581LWS_VISIBLE LWS_EXTERN unsigned long
583
589
600lws_get_context(const struct lws *wsi);
601
612lws_get_vhost_listen_port(struct lws_vhost *vhost);
613
624lws_get_count_threads(struct lws_context *context);
625
634lws_get_parent(const struct lws *wsi);
635
643lws_get_child(const struct lws *wsi);
644
658lws_get_effective_uid_gid(struct lws_context *context, uid_t *uid, gid_t *gid);
659
667LWS_VISIBLE LWS_EXTERN const struct lws_udp * LWS_WARN_UNUSED_RESULT
668lws_get_udp(const struct lws *wsi);
669
671lws_get_opaque_parent_data(const struct lws *wsi);
672
674lws_set_opaque_parent_data(struct lws *wsi, void *data);
675
677lws_get_opaque_user_data(const struct lws *wsi);
678
680lws_set_opaque_user_data(struct lws *wsi, void *data);
681
684
687
689lws_get_close_length(struct lws *wsi);
690
691LWS_VISIBLE LWS_EXTERN unsigned char *
692lws_get_close_payload(struct lws *wsi);
693
705struct lws *lws_get_network_wsi(struct lws *wsi);
706
715lws_set_allocator(void *(*realloc)(void *ptr, size_t size, const char *reason));
716
717enum {
718 /*
719 * Flags for enable and disable rxflow with reason bitmap and with
720 * backwards-compatible single bool
721 */
725
732
733};
734
755lws_rx_flow_control(struct lws *wsi, int enable);
756
767lws_rx_flow_allow_all_protocol(const struct lws_context *context,
768 const struct lws_protocols *protocol);
769
793
794#if defined(LWS_WITH_DIR)
795
796typedef enum {
797 LDOT_UNKNOWN,
798 LDOT_FILE,
799 LDOT_DIR,
800 LDOT_LINK,
801 LDOT_FIFO,
802 LDOTT_SOCKET,
803 LDOT_CHAR,
804 LDOT_BLOCK
805} lws_dir_obj_type_t;
806
807struct lws_dir_entry {
808 const char *name;
809 lws_dir_obj_type_t type;
810};
811
812typedef int
813lws_dir_callback_function(const char *dirpath, void *user,
814 struct lws_dir_entry *lde);
815
829lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb);
830
843lws_dir_rm_rf_cb(const char *dirpath, void *user, struct lws_dir_entry *lde);
844
845
851
852typedef struct lws_dir_du {
853 uint64_t size_in_bytes;
854 uint32_t count_files;
855} lws_dir_du_t;
856
870lws_dir_du_cb(const char *dirpath, void *user, struct lws_dir_entry *lde);
871
872
873/*
874 * We pass every file in the base dir through a filter, and call back on the
875 * ones that match. Directories are ignored.
876 *
877 * The original path filter string may look like, eg, "sai-*.deb" or "*.txt"
878 */
879
880typedef int (*lws_dir_glob_cb_t)(void *data, const char *path);
881
882typedef struct lws_dir_glob {
883 const char *filter;
884 lws_dir_glob_cb_t cb;
885 void *user;
886} lws_dir_glob_t;
887
903lws_dir_glob_cb(const char *dirpath, void *user, struct lws_dir_entry *lde);
904
905#endif
906
923
931lws_get_tsi(struct lws *wsi);
932
940lws_is_ssl(struct lws *wsi);
947lws_is_cgi(struct lws *wsi);
948
964lws_tls_jit_trust_blob_queury_skid(const void *_blob, size_t blen,
965 const uint8_t *skid, size_t skid_len,
966 const uint8_t **prpder, size_t *prder_len);
967
979lws_open(const char *__file, int __oflag, ...);
980
981struct lws_wifi_scan { /* generic wlan scan item */
983 char ssid[32];
984 int32_t rssi; /* divide by .count to get db */
985 uint8_t bssid[6];
986 uint8_t count;
987 uint8_t channel;
988 uint8_t authmode;
989};
990
991#if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS)
999lws_get_ssl(struct lws *wsi);
1000#endif
1001
1003lws_explicit_bzero(void *p, size_t len);
1004
1005typedef struct lws_humanize_unit {
1006 const char *name; /* array ends with NULL name */
1007 uint64_t factor;
1009
1013
1014#if defined(_DEBUG)
1015void
1016lws_assert_fourcc(uint32_t fourcc, uint32_t expected);
1017#else
1018#define lws_assert_fourcc(_a, _b) do { } while (0);
1019#endif
1020
1044
1046lws_humanize(char *buf, size_t len, uint64_t value,
1047 const lws_humanize_unit_t *schema);
1048
1050lws_humanize_pad(char *p, size_t len, uint64_t v,
1051 const lws_humanize_unit_t *schema);
1052
1054lws_ser_wu16be(uint8_t *b, uint16_t u);
1055
1057lws_ser_wu32be(uint8_t *b, uint32_t u32);
1058
1060lws_ser_wu64be(uint8_t *b, uint64_t u64);
1061
1062LWS_VISIBLE LWS_EXTERN uint16_t
1063lws_ser_ru16be(const uint8_t *b);
1064
1065LWS_VISIBLE LWS_EXTERN uint32_t
1066lws_ser_ru32be(const uint8_t *b);
1067
1068LWS_VISIBLE LWS_EXTERN uint64_t
1069lws_ser_ru64be(const uint8_t *b);
1070
1072lws_vbi_encode(uint64_t value, void *buf);
1073
1075lws_vbi_decode(const void *buf, uint64_t *value, size_t len);
1076
1078
1079#if defined(LWS_WITH_SPAWN)
1080
1081/* opaque internal struct */
1082struct lws_spawn_piped;
1083
1084#if defined(WIN32)
1085struct _lws_siginfo_t {
1086 int retcode;
1087};
1088typedef struct _lws_siginfo_t siginfo_t;
1089#endif
1090
1097typedef struct lws_spawn_resource_us {
1098 uint64_t us_cpu_user;
1099 uint64_t us_cpu_sys;
1100
1101 uint64_t peak_mem_rss;
1102 uint64_t peak_mem_virt;
1103} lws_spawn_resource_us_t;
1104
1105typedef void (*lsp_cb_t)(void *opaque, const lws_spawn_resource_us_t *res,
1106 siginfo_t *si, int we_killed_him);
1107
1108
1128struct lws_spawn_piped_info {
1129 struct lws_dll2_owner *owner;
1130 struct lws_vhost *vh;
1131 struct lws *opt_parent;
1132
1133 const char * const *exec_array;
1134 const char **env_array;
1135 const char *protocol_name;
1136 const char *chroot_path;
1137 const char *wd;
1138
1139 struct lws_spawn_piped **plsp;
1140
1141 void *opaque;
1142
1143 lsp_cb_t reap_cb;
1144
1145 lws_spawn_resource_us_t *res;
1146
1147 lws_usec_t timeout_us;
1148 int max_log_lines;
1149 int tsi;
1150
1151 const struct lws_role_ops *ops; /* NULL is raw file */
1152
1153 uint8_t disable_ctrlc;
1154
1155 const char *cgroup_name_suffix;
1156 int *p_cgroup_ret;
1157};
1158
1180LWS_VISIBLE LWS_EXTERN struct lws_spawn_piped *
1181lws_spawn_piped(const struct lws_spawn_piped_info *lspi);
1182
1183/*
1184 * lws_spawn_piped_kill_child_process() - attempt to kill child process
1185 *
1186 * \p lsp: child object to kill
1187 *
1188 * Attempts to signal the child process in \p lsp to terminate.
1189 */
1191lws_spawn_piped_kill_child_process(struct lws_spawn_piped *lsp);
1192
1207lws_spawn_stdwsi_closed(struct lws_spawn_piped *lsp, struct lws *wsi);
1208
1209/*
1210 * lws_spawn_closedown_stdwsis() - forcibly close the spawner side of stdwsi pipes
1211 *
1212 * \p lsp: the spawn object
1213 *
1214 * Closes the spawner side of all the stdwsi for an lsp that are still open.
1215 */
1217lws_spawn_closedown_stdwsis(struct lws_spawn_piped *lsp);
1218
1230lws_spawn_get_stdfd(struct lws *wsi);
1231
1242lws_spawn_get_fd_stdxxx(struct lws_spawn_piped *lsp, int std_idx);
1243
1262lws_spawn_prepare_self_cgroup(const char *user, const char *group);
1263
1276lws_spawn_get_self_cgroup(char *cgroup, size_t max);
1277
1278#endif
1279
1281 const char *layers_path; /* where layers live */
1282 const char *overlay_path; /* where overlay instantiations live */
1283
1284 char mp[256]; /* mountpoint path */
1285 char ovname[64]; /* unique name for mount instance */
1286 char distro[64]; /* unique name for layer source */
1287
1288#if defined(__linux__)
1289 const char *layers[4]; /* distro layers, like "base", "env" */
1290#endif
1291};
1292
1328
1343
1344#define LWS_MINILEX_FAIL -1
1345#define LWS_MINILEX_CONTINUE 0
1346#define LWS_MINILEX_MATCH 1
1347
1375lws_minilex_parse(const uint8_t *lex, int16_t *ps, const uint8_t c,
1376 int *match);
1377
1378/*
1379 * Reports the number of significant bits (from the left) that is needed to
1380 * represent u. So if u is 0x80, result is 8.
1381 */
1382
1383LWS_VISIBLE LWS_EXTERN unsigned int
1384lws_sigbits(uintptr_t u);
1385
1396lws_wol(struct lws_context *ctx, const char *ip_or_NULL, uint8_t *mac_6_bytes);
struct lws_dll2 lws_dll2_t
uint32_t blseglen
Definition lws-misc.h:234
const uint8_t * data
Definition lws-misc.h:232
char ssid[32]
Definition lws-misc.h:983
size_t len
Definition lws-misc.h:233
struct lws_ss_handle * h
Definition lws-misc.h:229
uint8_t state
Definition lws-misc.h:237
struct lws_buflist * bl
Definition lws-misc.h:230
uint8_t channel
Definition lws-misc.h:987
int32_t window
Definition lws-misc.h:235
uint8_t authmode
Definition lws-misc.h:988
uint8_t count
Definition lws-misc.h:986
struct lws_wifi_scan * next
Definition lws-misc.h:982
lws_dll2_t list
Definition lws-misc.h:227
const char * name
Definition lws-misc.h:1006
uint8_t bssid[6]
Definition lws-misc.h:985
int32_t rssi
Definition lws-misc.h:984
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_hex_to_byte_array(const char *h, uint8_t *dest, int max)
LWS_VISIBLE const lws_humanize_unit_t humanize_schema_si_bytes[7]
LWS_VISIBLE LWS_EXTERN void * lws_buflist_get_frag_start_or_NULL(struct lws_buflist **head)
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 int lws_wsi_tsi(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN uint16_t lws_ser_ru16be(const uint8_t *b)
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 const struct lws_udp *LWS_WARN_UNUSED_RESULT lws_get_udp(const struct lws *wsi)
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_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)
LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option(int argc, const char **argv, const char *val)
LWS_VISIBLE LWS_EXTERN void lws_clear_child_pending_on_writable(struct lws *wsi)
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_buflist_linear_copy(struct lws_buflist **head, size_t ofs, uint8_t *buf, size_t len)
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 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 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)
size_t lws_get_allocated_heap(void)
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 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)
Definition lws-misc.h:1018
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 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)
LWS_VISIBLE LWS_EXTERN size_t lws_buflist_use_segment(struct lws_buflist **head, size_t len)
struct lws_flow lws_flow_t
LWS_VISIBLE const lws_humanize_unit_t humanize_schema_us[8]
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 const lws_humanize_unit_t humanize_schema_si[7]
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_child_pending_on_writable(const struct lws *wsi)
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 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 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)
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 int lws_rx_flow_control(struct lws *wsi, int enable)
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 void * lws_wsi_user(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN char * lws_strncpy(char *dest, const char *src, size_t size)
struct lws_humanize_unit lws_humanize_unit_t
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_RXFLOW_REASON_APPLIES_DISABLE
Definition lws-misc.h:730
@ LWS_RXFLOW_REASON_APPLIES
Definition lws-misc.h:726
@ LWS_RXFLOW_REASON_USER_BOOL
Definition lws-misc.h:722
@ LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT
Definition lws-misc.h:727
@ LWS_RXFLOW_REASON_APPLIES_ENABLE
Definition lws-misc.h:728
@ LWS_RXFLOW_REASON_FLAG_PROCESS_NOW
Definition lws-misc.h:731
@ LWS_RXFLOW_REASON_HTTP_RXBUFFER
Definition lws-misc.h:723
@ LWS_RXFLOW_REASON_H2_PPS_PENDING
Definition lws-misc.h:724
@ LWSDLOFLOW_STATE_READ
Definition lws-misc.h:218
@ LWSDLOFLOW_STATE_READ_COMPLETED
Definition lws-misc.h:219
@ LWSDLOFLOW_STATE_READ_FAILED
Definition lws-misc.h:221
#define LWS_FORMAT(string_index)
#define LWS_EXTERN
int64_t lws_usec_t
lws_stateful_ret_t
#define LWS_WARN_UNUSED_RESULT
#define LWS_VISIBLE
LWS_VISIBLE LWS_EXTERN int lws_fsmount_mount(struct lws_fsmount *fsm)
char mp[256]
Definition lws-misc.h:1284
LWS_VISIBLE LWS_EXTERN int lws_fsmount_unmount(struct lws_fsmount *fsm)
char ovname[64]
Definition lws-misc.h:1285
char distro[64]
Definition lws-misc.h:1286
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
Definition lws-misc.h:1282
const char * layers_path
Definition lws-misc.h:1281
LWS_VISIBLE LWS_EXTERN int lws_wol(struct lws_context *ctx, const char *ip_or_NULL, uint8_t *mac_6_bytes)