1d4afb5ceSopenharmony_ci/* 2d4afb5ceSopenharmony_ci * libwebsockets - small server side websockets and web server implementation 3d4afb5ceSopenharmony_ci * 4d4afb5ceSopenharmony_ci * Copyright (C) 2010 - 2021 Andy Green <andy@warmcat.com> 5d4afb5ceSopenharmony_ci * 6d4afb5ceSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy 7d4afb5ceSopenharmony_ci * of this software and associated documentation files (the "Software"), to 8d4afb5ceSopenharmony_ci * deal in the Software without restriction, including without limitation the 9d4afb5ceSopenharmony_ci * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10d4afb5ceSopenharmony_ci * sell copies of the Software, and to permit persons to whom the Software is 11d4afb5ceSopenharmony_ci * furnished to do so, subject to the following conditions: 12d4afb5ceSopenharmony_ci * 13d4afb5ceSopenharmony_ci * The above copyright notice and this permission notice shall be included in 14d4afb5ceSopenharmony_ci * all copies or substantial portions of the Software. 15d4afb5ceSopenharmony_ci * 16d4afb5ceSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17d4afb5ceSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18d4afb5ceSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19d4afb5ceSopenharmony_ci * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20d4afb5ceSopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21d4afb5ceSopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22d4afb5ceSopenharmony_ci * IN THE SOFTWARE. 23d4afb5ceSopenharmony_ci */ 24d4afb5ceSopenharmony_ci 25d4afb5ceSopenharmony_ci/** \defgroup log Logging 26d4afb5ceSopenharmony_ci * 27d4afb5ceSopenharmony_ci * ##Logging 28d4afb5ceSopenharmony_ci * 29d4afb5ceSopenharmony_ci * Lws provides flexible and filterable logging facilities, which can be 30d4afb5ceSopenharmony_ci * used inside lws and in user code. 31d4afb5ceSopenharmony_ci * 32d4afb5ceSopenharmony_ci * Log categories may be individually filtered bitwise, and directed to built-in 33d4afb5ceSopenharmony_ci * sinks for syslog-compatible logging, or a user-defined function. 34d4afb5ceSopenharmony_ci * 35d4afb5ceSopenharmony_ci * Traditional logs use a single, processwide logging context. New style log 36d4afb5ceSopenharmony_ci * apis (lws_xxx_cx()) can pass the logging context to use in. 37d4afb5ceSopenharmony_ci */ 38d4afb5ceSopenharmony_ci///@{ 39d4afb5ceSopenharmony_ci 40d4afb5ceSopenharmony_ci#define LLL_ERR (1 << 0) 41d4afb5ceSopenharmony_ci#define LLL_WARN (1 << 1) 42d4afb5ceSopenharmony_ci#define LLL_NOTICE (1 << 2) 43d4afb5ceSopenharmony_ci#define LLL_INFO (1 << 3) 44d4afb5ceSopenharmony_ci#define LLL_DEBUG (1 << 4) 45d4afb5ceSopenharmony_ci#define LLL_PARSER (1 << 5) 46d4afb5ceSopenharmony_ci#define LLL_HEADER (1 << 6) 47d4afb5ceSopenharmony_ci#define LLL_EXT (1 << 7) 48d4afb5ceSopenharmony_ci#define LLL_CLIENT (1 << 8) 49d4afb5ceSopenharmony_ci#define LLL_LATENCY (1 << 9) 50d4afb5ceSopenharmony_ci#define LLL_USER (1 << 10) 51d4afb5ceSopenharmony_ci#define LLL_THREAD (1 << 11) 52d4afb5ceSopenharmony_ci 53d4afb5ceSopenharmony_ci#define LLL_COUNT (12) /* set to count of valid flags */ 54d4afb5ceSopenharmony_ci 55d4afb5ceSopenharmony_ci#define LLLF_SECRECY_PII (1 << 16) 56d4afb5ceSopenharmony_ci /**< contains Personally Identifiable Information */ 57d4afb5ceSopenharmony_ci#define LLLF_SECRECY_BEARER (1 << 17) 58d4afb5ceSopenharmony_ci /**< possession of this data allows impersonation */ 59d4afb5ceSopenharmony_ci 60d4afb5ceSopenharmony_ci#define LLLF_LOG_TIMESTAMP (1 << 18) 61d4afb5ceSopenharmony_ci /**< set to prepend logs with timestamp */ 62d4afb5ceSopenharmony_ci 63d4afb5ceSopenharmony_ci#define LLLF_LOG_CONTEXT_AWARE (1 << 30) 64d4afb5ceSopenharmony_ci/**< set if the context uses an emit function that takes the logctx, auto- 65d4afb5ceSopenharmony_ci * applied when setting emit using lws_set_log_level_cx() api */ 66d4afb5ceSopenharmony_ci 67d4afb5ceSopenharmony_cistruct lws_log_cx; 68d4afb5ceSopenharmony_ci 69d4afb5ceSopenharmony_citypedef void (*lws_log_emit_t)(int level, const char *line); 70d4afb5ceSopenharmony_citypedef void (*lws_log_emit_cx_t)(struct lws_log_cx *cx, int level, 71d4afb5ceSopenharmony_ci const char *line, size_t len); 72d4afb5ceSopenharmony_citypedef void (*lws_log_prepend_cx_t)(struct lws_log_cx *cx, void *obj, 73d4afb5ceSopenharmony_ci char **p, char *e); 74d4afb5ceSopenharmony_citypedef void (*lws_log_use_cx_t)(struct lws_log_cx *cx, int _new); 75d4afb5ceSopenharmony_ci 76d4afb5ceSopenharmony_ci/* 77d4afb5ceSopenharmony_ci * This is the logging context 78d4afb5ceSopenharmony_ci */ 79d4afb5ceSopenharmony_ci 80d4afb5ceSopenharmony_citypedef struct lws_log_cx { 81d4afb5ceSopenharmony_ci union { 82d4afb5ceSopenharmony_ci lws_log_emit_t emit; /* legacy emit function */ 83d4afb5ceSopenharmony_ci lws_log_emit_cx_t emit_cx; /* LLLF_LOG_CONTEXT_AWARE */ 84d4afb5ceSopenharmony_ci } u; 85d4afb5ceSopenharmony_ci 86d4afb5ceSopenharmony_ci#if LWS_MAX_SMP > 1 87d4afb5ceSopenharmony_ci pthread_mutex_t refcount_lock; 88d4afb5ceSopenharmony_ci#endif 89d4afb5ceSopenharmony_ci 90d4afb5ceSopenharmony_ci lws_log_use_cx_t refcount_cb; 91d4afb5ceSopenharmony_ci /**< NULL, or a function called after each change to .refcount below, 92d4afb5ceSopenharmony_ci * this enables implementing side-effects like opening and closing 93d4afb5ceSopenharmony_ci * log files when the first and last object binds / unbinds */ 94d4afb5ceSopenharmony_ci lws_log_prepend_cx_t prepend; 95d4afb5ceSopenharmony_ci /**< NULL, or a cb to optionally prepend a string to logs we are a 96d4afb5ceSopenharmony_ci * parent of */ 97d4afb5ceSopenharmony_ci struct lws_log_cx *parent; 98d4afb5ceSopenharmony_ci /**< NULL, or points to log ctx we are a child of */ 99d4afb5ceSopenharmony_ci void *opaque; 100d4afb5ceSopenharmony_ci /**< ignored by lws, used to pass config to emit_cx, eg, filepath */ 101d4afb5ceSopenharmony_ci void *stg; 102d4afb5ceSopenharmony_ci /**< ignored by lws, may be used a storage by refcount_cb / emit_cx */ 103d4afb5ceSopenharmony_ci uint32_t lll_flags; 104d4afb5ceSopenharmony_ci /**< mask of log levels we want to emit in this context */ 105d4afb5ceSopenharmony_ci int32_t refcount; 106d4afb5ceSopenharmony_ci /**< refcount of objects bound to this log context */ 107d4afb5ceSopenharmony_ci#if LWS_MAX_SMP > 1 108d4afb5ceSopenharmony_ci char inited; 109d4afb5ceSopenharmony_ci#endif 110d4afb5ceSopenharmony_ci} lws_log_cx_t; 111d4afb5ceSopenharmony_ci 112d4afb5ceSopenharmony_ci/** 113d4afb5ceSopenharmony_ci * lwsl_timestamp: generate logging timestamp string 114d4afb5ceSopenharmony_ci * 115d4afb5ceSopenharmony_ci * \param level: logging level 116d4afb5ceSopenharmony_ci * \param p: char * buffer to take timestamp 117d4afb5ceSopenharmony_ci * \param len: length of p 118d4afb5ceSopenharmony_ci * 119d4afb5ceSopenharmony_ci * returns length written in p 120d4afb5ceSopenharmony_ci */ 121d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN int 122d4afb5ceSopenharmony_cilwsl_timestamp(int level, char *p, size_t len); 123d4afb5ceSopenharmony_ci 124d4afb5ceSopenharmony_ci#if defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK) 125d4afb5ceSopenharmony_ci#define _lws_log(aaa, ...) SMSG(__VA_ARGS__) 126d4afb5ceSopenharmony_ci#else 127d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 128d4afb5ceSopenharmony_ci_lws_log(int filter, const char *format, ...) LWS_FORMAT(2); 129d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 130d4afb5ceSopenharmony_ci_lws_logv(int filter, const char *format, va_list vl); 131d4afb5ceSopenharmony_ci#endif 132d4afb5ceSopenharmony_ci 133d4afb5ceSopenharmony_cistruct lws_vhost; 134d4afb5ceSopenharmony_cistruct lws; 135d4afb5ceSopenharmony_ci 136d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN struct lws_log_cx * 137d4afb5ceSopenharmony_cilwsl_context_get_cx(struct lws_context *cx); 138d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN struct lws_log_cx * 139d4afb5ceSopenharmony_cilwsl_vhost_get_cx(struct lws_vhost *vh); 140d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN struct lws_log_cx * 141d4afb5ceSopenharmony_cilwsl_wsi_get_cx(struct lws *wsi); 142d4afb5ceSopenharmony_ci#if defined(LWS_WITH_SECURE_STREAMS) 143d4afb5ceSopenharmony_cistruct lws_ss_handle; 144d4afb5ceSopenharmony_cistruct lws_sspc_handle; 145d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN struct lws_log_cx * 146d4afb5ceSopenharmony_cilwsl_ss_get_cx(struct lws_ss_handle *ss); 147d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN struct lws_log_cx * 148d4afb5ceSopenharmony_cilwsl_sspc_get_cx(struct lws_sspc_handle *ss); 149d4afb5ceSopenharmony_ci#endif 150d4afb5ceSopenharmony_ci 151d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 152d4afb5ceSopenharmony_cilws_log_emit_cx_file(struct lws_log_cx *cx, int level, const char *line, 153d4afb5ceSopenharmony_ci size_t len); 154d4afb5ceSopenharmony_ci 155d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 156d4afb5ceSopenharmony_cilws_log_use_cx_file(struct lws_log_cx *cx, int _new); 157d4afb5ceSopenharmony_ci 158d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 159d4afb5ceSopenharmony_cilws_log_prepend_context(struct lws_log_cx *cx, void *obj, char **p, char *e); 160d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 161d4afb5ceSopenharmony_cilws_log_prepend_vhost(struct lws_log_cx *cx, void *obj, char **p, char *e); 162d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 163d4afb5ceSopenharmony_cilws_log_prepend_wsi(struct lws_log_cx *cx, void *obj, char **p, char *e); 164d4afb5ceSopenharmony_ci#if defined(LWS_WITH_SECURE_STREAMS) 165d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 166d4afb5ceSopenharmony_cilws_log_prepend_ss(struct lws_log_cx *cx, void *obj, char **p, char *e); 167d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 168d4afb5ceSopenharmony_cilws_log_prepend_sspc(struct lws_log_cx *cx, void *obj, char **p, char *e); 169d4afb5ceSopenharmony_ci#endif 170d4afb5ceSopenharmony_ci 171d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 172d4afb5ceSopenharmony_ci_lws_log_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, 173d4afb5ceSopenharmony_ci int filter, const char *_fun, const char *format, ...) LWS_FORMAT(6); 174d4afb5ceSopenharmony_ci 175d4afb5ceSopenharmony_ci#define lwsl_cx(_c, _fil, ...) \ 176d4afb5ceSopenharmony_ci _lws_log_cx(lwsl_context_get_cx(_c), lws_log_prepend_context, \ 177d4afb5ceSopenharmony_ci _c, _fil, __func__, __VA_ARGS__) 178d4afb5ceSopenharmony_ci#define lwsl_vhost(_v, _fil, ...) \ 179d4afb5ceSopenharmony_ci _lws_log_cx(lwsl_vhost_get_cx(_v), lws_log_prepend_vhost, _v, \ 180d4afb5ceSopenharmony_ci _fil, __func__, __VA_ARGS__) 181d4afb5ceSopenharmony_ci#define lwsl_wsi(_w, _fil, ...) \ 182d4afb5ceSopenharmony_ci _lws_log_cx(lwsl_wsi_get_cx(_w), lws_log_prepend_wsi, _w, \ 183d4afb5ceSopenharmony_ci _fil, __func__, __VA_ARGS__) 184d4afb5ceSopenharmony_ci#define lwsl_ss(_h, _fil, ...) \ 185d4afb5ceSopenharmony_ci _lws_log_cx(lwsl_ss_get_cx(_h), lws_log_prepend_ss, _h, \ 186d4afb5ceSopenharmony_ci _fil, __func__, __VA_ARGS__) 187d4afb5ceSopenharmony_ci 188d4afb5ceSopenharmony_ci#define lwsl_hexdump_context(_c, _fil, _buf, _len) \ 189d4afb5ceSopenharmony_ci lwsl_hexdump_level_cx(lwsl_context_get_cx(_c), \ 190d4afb5ceSopenharmony_ci lws_log_prepend_context, \ 191d4afb5ceSopenharmony_ci _c, _fil, _buf, _len) 192d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost(_v, _fil, _buf, _len) \ 193d4afb5ceSopenharmony_ci lwsl_hexdump_level_cx(lwsl_vhost_get_cx(_v), \ 194d4afb5ceSopenharmony_ci lws_log_prepend_vhost, \ 195d4afb5ceSopenharmony_ci _v, _fil, _buf, _len) 196d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi(_w, _fil, _buf, _len) \ 197d4afb5ceSopenharmony_ci lwsl_hexdump_level_cx(lwsl_wsi_get_cx(_w), \ 198d4afb5ceSopenharmony_ci lws_log_prepend_wsi, \ 199d4afb5ceSopenharmony_ci _w, _fil, _buf, _len) 200d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss(_h, _fil, _buf, _len) \ 201d4afb5ceSopenharmony_ci lwsl_hexdump_level_cx(lwsl_ss_get_cx(_h), \ 202d4afb5ceSopenharmony_ci lws_log_prepend_ss, \ 203d4afb5ceSopenharmony_ci _h, _fil, _buf, _len) 204d4afb5ceSopenharmony_ci 205d4afb5ceSopenharmony_ci/* 206d4afb5ceSopenharmony_ci * Figure out which logs to build in or not 207d4afb5ceSopenharmony_ci */ 208d4afb5ceSopenharmony_ci 209d4afb5ceSopenharmony_ci#if defined(_DEBUG) 210d4afb5ceSopenharmony_ci /* 211d4afb5ceSopenharmony_ci * In DEBUG build, select all logs unless NO_LOGS 212d4afb5ceSopenharmony_ci */ 213d4afb5ceSopenharmony_ci #if defined(LWS_WITH_NO_LOGS) 214d4afb5ceSopenharmony_ci #define _LWS_LINIT (LLL_ERR | LLL_USER) 215d4afb5ceSopenharmony_ci #else 216d4afb5ceSopenharmony_ci #define _LWS_LINIT ((1 << LLL_COUNT) - 1) 217d4afb5ceSopenharmony_ci #endif 218d4afb5ceSopenharmony_ci#else /* not _DEBUG */ 219d4afb5ceSopenharmony_ci#if defined(LWS_WITH_NO_LOGS) 220d4afb5ceSopenharmony_ci#define _LWS_LINIT (LLL_ERR | LLL_USER) 221d4afb5ceSopenharmony_ci#else 222d4afb5ceSopenharmony_ci #define _LWS_LINIT (LLL_ERR | LLL_USER | LLL_WARN | LLL_NOTICE) 223d4afb5ceSopenharmony_ci#endif 224d4afb5ceSopenharmony_ci#endif /* _DEBUG */ 225d4afb5ceSopenharmony_ci 226d4afb5ceSopenharmony_ci/* 227d4afb5ceSopenharmony_ci * Create either empty overrides or the ones forced at build-time. 228d4afb5ceSopenharmony_ci * These overrides have the final say... any bits set in 229d4afb5ceSopenharmony_ci * LWS_LOGGING_BITFIELD_SET force the build of those logs, any bits 230d4afb5ceSopenharmony_ci * set in LWS_LOGGING_BITFIELD_CLEAR disable the build of those logs. 231d4afb5ceSopenharmony_ci * 232d4afb5ceSopenharmony_ci * If not defined lws decides based on CMAKE_BUILD_TYPE=DEBUG or not 233d4afb5ceSopenharmony_ci */ 234d4afb5ceSopenharmony_ci 235d4afb5ceSopenharmony_ci#if defined(LWS_LOGGING_BITFIELD_SET) 236d4afb5ceSopenharmony_ci #define _LWS_LBS (LWS_LOGGING_BITFIELD_SET) 237d4afb5ceSopenharmony_ci#else 238d4afb5ceSopenharmony_ci #define _LWS_LBS 0 239d4afb5ceSopenharmony_ci#endif 240d4afb5ceSopenharmony_ci 241d4afb5ceSopenharmony_ci#if defined(LWS_LOGGING_BITFIELD_CLEAR) 242d4afb5ceSopenharmony_ci #define _LWS_LBC (LWS_LOGGING_BITFIELD_CLEAR) 243d4afb5ceSopenharmony_ci#else 244d4afb5ceSopenharmony_ci #define _LWS_LBC 0 245d4afb5ceSopenharmony_ci#endif 246d4afb5ceSopenharmony_ci 247d4afb5ceSopenharmony_ci/* 248d4afb5ceSopenharmony_ci * Compute the final active logging bitfield for build 249d4afb5ceSopenharmony_ci */ 250d4afb5ceSopenharmony_ci#define _LWS_ENABLED_LOGS (((_LWS_LINIT) | (_LWS_LBS)) & ~(_LWS_LBC)) 251d4afb5ceSopenharmony_ci 252d4afb5ceSopenharmony_ci/* 253d4afb5ceSopenharmony_ci * Individually enable or disable log levels for build 254d4afb5ceSopenharmony_ci * depending on what was computed 255d4afb5ceSopenharmony_ci */ 256d4afb5ceSopenharmony_ci 257d4afb5ceSopenharmony_ci/* 258d4afb5ceSopenharmony_ci * Process scope logs 259d4afb5ceSopenharmony_ci */ 260d4afb5ceSopenharmony_ci 261d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_ERR) 262d4afb5ceSopenharmony_ci#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) 263d4afb5ceSopenharmony_ci#else 264d4afb5ceSopenharmony_ci#define lwsl_err(...) do {} while(0) 265d4afb5ceSopenharmony_ci#endif 266d4afb5ceSopenharmony_ci 267d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_WARN) 268d4afb5ceSopenharmony_ci#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) 269d4afb5ceSopenharmony_ci#else 270d4afb5ceSopenharmony_ci#define lwsl_warn(...) do {} while(0) 271d4afb5ceSopenharmony_ci#endif 272d4afb5ceSopenharmony_ci 273d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_NOTICE) 274d4afb5ceSopenharmony_ci#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) 275d4afb5ceSopenharmony_ci#else 276d4afb5ceSopenharmony_ci#define lwsl_notice(...) do {} while(0) 277d4afb5ceSopenharmony_ci#endif 278d4afb5ceSopenharmony_ci 279d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_INFO) 280d4afb5ceSopenharmony_ci#define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) 281d4afb5ceSopenharmony_ci#else 282d4afb5ceSopenharmony_ci#define lwsl_info(...) do {} while(0) 283d4afb5ceSopenharmony_ci#endif 284d4afb5ceSopenharmony_ci 285d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_DEBUG) 286d4afb5ceSopenharmony_ci#define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) 287d4afb5ceSopenharmony_ci#else 288d4afb5ceSopenharmony_ci#define lwsl_debug(...) do {} while(0) 289d4afb5ceSopenharmony_ci#endif 290d4afb5ceSopenharmony_ci 291d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_PARSER) 292d4afb5ceSopenharmony_ci#define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) 293d4afb5ceSopenharmony_ci#else 294d4afb5ceSopenharmony_ci#define lwsl_parser(...) do {} while(0) 295d4afb5ceSopenharmony_ci#endif 296d4afb5ceSopenharmony_ci 297d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_HEADER) 298d4afb5ceSopenharmony_ci#define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__) 299d4afb5ceSopenharmony_ci#else 300d4afb5ceSopenharmony_ci#define lwsl_header(...) do {} while(0) 301d4afb5ceSopenharmony_ci#endif 302d4afb5ceSopenharmony_ci 303d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_EXT) 304d4afb5ceSopenharmony_ci#define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) 305d4afb5ceSopenharmony_ci#else 306d4afb5ceSopenharmony_ci#define lwsl_ext(...) do {} while(0) 307d4afb5ceSopenharmony_ci#endif 308d4afb5ceSopenharmony_ci 309d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_CLIENT) 310d4afb5ceSopenharmony_ci#define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) 311d4afb5ceSopenharmony_ci#else 312d4afb5ceSopenharmony_ci#define lwsl_client(...) do {} while(0) 313d4afb5ceSopenharmony_ci#endif 314d4afb5ceSopenharmony_ci 315d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_LATENCY) 316d4afb5ceSopenharmony_ci#define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) 317d4afb5ceSopenharmony_ci#else 318d4afb5ceSopenharmony_ci#define lwsl_latency(...) do {} while(0) 319d4afb5ceSopenharmony_ci#endif 320d4afb5ceSopenharmony_ci 321d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_THREAD) 322d4afb5ceSopenharmony_ci#define lwsl_thread(...) _lws_log(LLL_THREAD, __VA_ARGS__) 323d4afb5ceSopenharmony_ci#else 324d4afb5ceSopenharmony_ci#define lwsl_thread(...) do {} while(0) 325d4afb5ceSopenharmony_ci#endif 326d4afb5ceSopenharmony_ci 327d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_USER) 328d4afb5ceSopenharmony_ci#define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__) 329d4afb5ceSopenharmony_ci#else 330d4afb5ceSopenharmony_ci#define lwsl_user(...) do {} while(0) 331d4afb5ceSopenharmony_ci#endif 332d4afb5ceSopenharmony_ci 333d4afb5ceSopenharmony_ci#define lwsl_hexdump_err(...) lwsl_hexdump_level(LLL_ERR, __VA_ARGS__) 334d4afb5ceSopenharmony_ci#define lwsl_hexdump_warn(...) lwsl_hexdump_level(LLL_WARN, __VA_ARGS__) 335d4afb5ceSopenharmony_ci#define lwsl_hexdump_notice(...) lwsl_hexdump_level(LLL_NOTICE, __VA_ARGS__) 336d4afb5ceSopenharmony_ci#define lwsl_hexdump_info(...) lwsl_hexdump_level(LLL_INFO, __VA_ARGS__) 337d4afb5ceSopenharmony_ci#define lwsl_hexdump_debug(...) lwsl_hexdump_level(LLL_DEBUG, __VA_ARGS__) 338d4afb5ceSopenharmony_ci 339d4afb5ceSopenharmony_ci/* 340d4afb5ceSopenharmony_ci * lws_context scope logs 341d4afb5ceSopenharmony_ci */ 342d4afb5ceSopenharmony_ci 343d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_ERR) 344d4afb5ceSopenharmony_ci#define lwsl_cx_err(_c, ...) lwsl_cx(_c, LLL_ERR, __VA_ARGS__) 345d4afb5ceSopenharmony_ci#else 346d4afb5ceSopenharmony_ci#define lwsl_cx_err(_c, ...) do {} while(0) 347d4afb5ceSopenharmony_ci#endif 348d4afb5ceSopenharmony_ci 349d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_WARN) 350d4afb5ceSopenharmony_ci#define lwsl_cx_warn(_c, ...) lwsl_cx(_c, LLL_WARN, __VA_ARGS__) 351d4afb5ceSopenharmony_ci#else 352d4afb5ceSopenharmony_ci#define lwsl_cx_warn(_c, ...) do {} while(0) 353d4afb5ceSopenharmony_ci#endif 354d4afb5ceSopenharmony_ci 355d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_NOTICE) 356d4afb5ceSopenharmony_ci#define lwsl_cx_notice(_c, ...) lwsl_cx(_c, LLL_NOTICE, __VA_ARGS__) 357d4afb5ceSopenharmony_ci#else 358d4afb5ceSopenharmony_ci#define lwsl_cx_notice(_c, ...) do {} while(0) 359d4afb5ceSopenharmony_ci#endif 360d4afb5ceSopenharmony_ci 361d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_INFO) 362d4afb5ceSopenharmony_ci#define lwsl_cx_info(_c, ...) lwsl_cx(_c, LLL_INFO, __VA_ARGS__) 363d4afb5ceSopenharmony_ci#else 364d4afb5ceSopenharmony_ci#define lwsl_cx_info(_c, ...) do {} while(0) 365d4afb5ceSopenharmony_ci#endif 366d4afb5ceSopenharmony_ci 367d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_DEBUG) 368d4afb5ceSopenharmony_ci#define lwsl_cx_debug(_c, ...) lwsl_cx(_c, LLL_DEBUG, __VA_ARGS__) 369d4afb5ceSopenharmony_ci#else 370d4afb5ceSopenharmony_ci#define lwsl_cx_debug(_c, ...) do {} while(0) 371d4afb5ceSopenharmony_ci#endif 372d4afb5ceSopenharmony_ci 373d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_PARSER) 374d4afb5ceSopenharmony_ci#define lwsl_cx_parser(_c, ...) lwsl_cx(_c, LLL_PARSER, __VA_ARGS__) 375d4afb5ceSopenharmony_ci#else 376d4afb5ceSopenharmony_ci#define lwsl_cx_parser(_c, ...) do {} while(0) 377d4afb5ceSopenharmony_ci#endif 378d4afb5ceSopenharmony_ci 379d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_HEADER) 380d4afb5ceSopenharmony_ci#define lwsl_cx_header(_c, ...) lwsl_cx(_c, LLL_HEADER, __VA_ARGS__) 381d4afb5ceSopenharmony_ci#else 382d4afb5ceSopenharmony_ci#define lwsl_cx_header(_c, ...) do {} while(0) 383d4afb5ceSopenharmony_ci#endif 384d4afb5ceSopenharmony_ci 385d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_EXT) 386d4afb5ceSopenharmony_ci#define lwsl_cx_ext(_c, ...) lwsl_cx(_c, LLL_EXT, __VA_ARGS__) 387d4afb5ceSopenharmony_ci#else 388d4afb5ceSopenharmony_ci#define lwsl_cx_ext(_c, ...) do {} while(0) 389d4afb5ceSopenharmony_ci#endif 390d4afb5ceSopenharmony_ci 391d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_CLIENT) 392d4afb5ceSopenharmony_ci#define lwsl_cx_client(_c, ...) lwsl_cx(_c, LLL_CLIENT, __VA_ARGS__) 393d4afb5ceSopenharmony_ci#else 394d4afb5ceSopenharmony_ci#define lwsl_cx_client(_c, ...) do {} while(0) 395d4afb5ceSopenharmony_ci#endif 396d4afb5ceSopenharmony_ci 397d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_LATENCY) 398d4afb5ceSopenharmony_ci#define lwsl_cx_latency(_c, ...) lwsl_cx(_c, LLL_LATENCY, __VA_ARGS__) 399d4afb5ceSopenharmony_ci#else 400d4afb5ceSopenharmony_ci#define lwsl_cx_latency(_c, ...) do {} while(0) 401d4afb5ceSopenharmony_ci#endif 402d4afb5ceSopenharmony_ci 403d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_THREAD) 404d4afb5ceSopenharmony_ci#define lwsl_cx_thread(_c, ...) lwsl_cx(_c, LLL_THREAD, __VA_ARGS__) 405d4afb5ceSopenharmony_ci#else 406d4afb5ceSopenharmony_ci#define lwsl_cx_thread(_c, ...) do {} while(0) 407d4afb5ceSopenharmony_ci#endif 408d4afb5ceSopenharmony_ci 409d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_USER) 410d4afb5ceSopenharmony_ci#define lwsl_cx_user(_c, ...) lwsl_cx(_c, LLL_USER, __VA_ARGS__) 411d4afb5ceSopenharmony_ci#else 412d4afb5ceSopenharmony_ci#define lwsl_cx_user(_c, ...) do {} while(0) 413d4afb5ceSopenharmony_ci#endif 414d4afb5ceSopenharmony_ci 415d4afb5ceSopenharmony_ci#define lwsl_hexdump_cx_err(_c, ...) lwsl_hexdump_context(_c, LLL_ERR, __VA_ARGS__) 416d4afb5ceSopenharmony_ci#define lwsl_hexdump_cx_warn(_c, ...) lwsl_hexdump_context(_c, LLL_WARN, __VA_ARGS__) 417d4afb5ceSopenharmony_ci#define lwsl_hexdump_cx_notice(_c, ...) lwsl_hexdump_context(_c, LLL_NOTICE, __VA_ARGS__) 418d4afb5ceSopenharmony_ci#define lwsl_hexdump_cx_info(_c, ...) lwsl_hexdump_context(_c, LLL_INFO, __VA_ARGS__) 419d4afb5ceSopenharmony_ci#define lwsl_hexdump_cx_debug(_c, ...) lwsl_hexdump_context(_c, LLL_DEBUG, __VA_ARGS__) 420d4afb5ceSopenharmony_ci 421d4afb5ceSopenharmony_ci/* 422d4afb5ceSopenharmony_ci * lws_vhost 423d4afb5ceSopenharmony_ci */ 424d4afb5ceSopenharmony_ci 425d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_ERR) 426d4afb5ceSopenharmony_ci#define lwsl_vhost_err(_v, ...) lwsl_vhost(_v, LLL_ERR, __VA_ARGS__) 427d4afb5ceSopenharmony_ci#else 428d4afb5ceSopenharmony_ci#define lwsl_vhost_err(_v, ...) do {} while(0) 429d4afb5ceSopenharmony_ci#endif 430d4afb5ceSopenharmony_ci 431d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_WARN) 432d4afb5ceSopenharmony_ci#define lwsl_vhost_warn(_v, ...) lwsl_vhost(_v, LLL_WARN, __VA_ARGS__) 433d4afb5ceSopenharmony_ci#else 434d4afb5ceSopenharmony_ci#define lwsl_vhost_warn(_v, ...) do {} while(0) 435d4afb5ceSopenharmony_ci#endif 436d4afb5ceSopenharmony_ci 437d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_NOTICE) 438d4afb5ceSopenharmony_ci#define lwsl_vhost_notice(_v, ...) lwsl_vhost(_v, LLL_NOTICE, __VA_ARGS__) 439d4afb5ceSopenharmony_ci#else 440d4afb5ceSopenharmony_ci#define lwsl_vhost_notice(_v, ...) do {} while(0) 441d4afb5ceSopenharmony_ci#endif 442d4afb5ceSopenharmony_ci 443d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_INFO) 444d4afb5ceSopenharmony_ci#define lwsl_vhost_info(_v, ...) lwsl_vhost(_v, LLL_INFO, __VA_ARGS__) 445d4afb5ceSopenharmony_ci#else 446d4afb5ceSopenharmony_ci#define lwsl_vhost_info(_v, ...) do {} while(0) 447d4afb5ceSopenharmony_ci#endif 448d4afb5ceSopenharmony_ci 449d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_DEBUG) 450d4afb5ceSopenharmony_ci#define lwsl_vhost_debug(_v, ...) lwsl_vhost(_v, LLL_DEBUG, __VA_ARGS__) 451d4afb5ceSopenharmony_ci#else 452d4afb5ceSopenharmony_ci#define lwsl_vhost_debug(_v, ...) do {} while(0) 453d4afb5ceSopenharmony_ci#endif 454d4afb5ceSopenharmony_ci 455d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_PARSER) 456d4afb5ceSopenharmony_ci#define lwsl_vhost_parser(_v, ...) lwsl_vhost(_v, LLL_PARSER, __VA_ARGS__) 457d4afb5ceSopenharmony_ci#else 458d4afb5ceSopenharmony_ci#define lwsl_vhost_parser(_v, ...) do {} while(0) 459d4afb5ceSopenharmony_ci#endif 460d4afb5ceSopenharmony_ci 461d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_HEADER) 462d4afb5ceSopenharmony_ci#define lwsl_vhost_header(_v, ...) lwsl_vhost(_v, LLL_HEADER, __VA_ARGS__) 463d4afb5ceSopenharmony_ci#else 464d4afb5ceSopenharmony_ci#define lwsl_vhost_header(_v, ...) do {} while(0) 465d4afb5ceSopenharmony_ci#endif 466d4afb5ceSopenharmony_ci 467d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_EXT) 468d4afb5ceSopenharmony_ci#define lwsl_vhost_ext(_v, ...) lwsl_vhost(_v, LLL_EXT, __VA_ARGS__) 469d4afb5ceSopenharmony_ci#else 470d4afb5ceSopenharmony_ci#define lwsl_vhost_ext(_v, ...) do {} while(0) 471d4afb5ceSopenharmony_ci#endif 472d4afb5ceSopenharmony_ci 473d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_CLIENT) 474d4afb5ceSopenharmony_ci#define lwsl_vhost_client(_v, ...) lwsl_vhost(_v, LLL_CLIENT, __VA_ARGS__) 475d4afb5ceSopenharmony_ci#else 476d4afb5ceSopenharmony_ci#define lwsl_vhost_client(_v, ...) do {} while(0) 477d4afb5ceSopenharmony_ci#endif 478d4afb5ceSopenharmony_ci 479d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_LATENCY) 480d4afb5ceSopenharmony_ci#define lwsl_vhost_latency(_v, ...) lwsl_vhost(_v, LLL_LATENCY, __VA_ARGS__) 481d4afb5ceSopenharmony_ci#else 482d4afb5ceSopenharmony_ci#define lwsl_vhost_latency(_v, ...) do {} while(0) 483d4afb5ceSopenharmony_ci#endif 484d4afb5ceSopenharmony_ci 485d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_THREAD) 486d4afb5ceSopenharmony_ci#define lwsl_vhost_thread(_v, ...) lwsl_vhost(_v, LLL_THREAD, __VA_ARGS__) 487d4afb5ceSopenharmony_ci#else 488d4afb5ceSopenharmony_ci#define lwsl_vhost_thread(_v, ...) do {} while(0) 489d4afb5ceSopenharmony_ci#endif 490d4afb5ceSopenharmony_ci 491d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_USER) 492d4afb5ceSopenharmony_ci#define lwsl_vhost_user(_v, ...) lwsl_vhost(_v, LLL_USER, __VA_ARGS__) 493d4afb5ceSopenharmony_ci#else 494d4afb5ceSopenharmony_ci#define lwsl_vhost_user(_v, ...) do {} while(0) 495d4afb5ceSopenharmony_ci#endif 496d4afb5ceSopenharmony_ci 497d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost_err(_v, ...) lwsl_hexdump_vhost(_v, LLL_ERR, __VA_ARGS__) 498d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost_warn(_v, ...) lwsl_hexdump_vhost(_v, LLL_WARN, __VA_ARGS__) 499d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost_notice(_v, ...) lwsl_hexdump_vhost(_v, LLL_NOTICE, __VA_ARGS__) 500d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost_info(_v, ...) lwsl_hexdump_vhost(_v, LLL_INFO, __VA_ARGS__) 501d4afb5ceSopenharmony_ci#define lwsl_hexdump_vhost_debug(_v, ...) lwsl_hexdump_vhost(_v, LLL_DEBUG, __VA_ARGS__) 502d4afb5ceSopenharmony_ci 503d4afb5ceSopenharmony_ci 504d4afb5ceSopenharmony_ci/* 505d4afb5ceSopenharmony_ci * lws_wsi 506d4afb5ceSopenharmony_ci */ 507d4afb5ceSopenharmony_ci 508d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_ERR) 509d4afb5ceSopenharmony_ci#define lwsl_wsi_err(_w, ...) lwsl_wsi(_w, LLL_ERR, __VA_ARGS__) 510d4afb5ceSopenharmony_ci#else 511d4afb5ceSopenharmony_ci#define lwsl_wsi_err(_w, ...) do {} while(0) 512d4afb5ceSopenharmony_ci#endif 513d4afb5ceSopenharmony_ci 514d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_WARN) 515d4afb5ceSopenharmony_ci#define lwsl_wsi_warn(_w, ...) lwsl_wsi(_w, LLL_WARN, __VA_ARGS__) 516d4afb5ceSopenharmony_ci#else 517d4afb5ceSopenharmony_ci#define lwsl_wsi_warn(_w, ...) do {} while(0) 518d4afb5ceSopenharmony_ci#endif 519d4afb5ceSopenharmony_ci 520d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_NOTICE) 521d4afb5ceSopenharmony_ci#define lwsl_wsi_notice(_w, ...) lwsl_wsi(_w, LLL_NOTICE, __VA_ARGS__) 522d4afb5ceSopenharmony_ci#else 523d4afb5ceSopenharmony_ci#define lwsl_wsi_notice(_w, ...) do {} while(0) 524d4afb5ceSopenharmony_ci#endif 525d4afb5ceSopenharmony_ci 526d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_INFO) 527d4afb5ceSopenharmony_ci#define lwsl_wsi_info(_w, ...) lwsl_wsi(_w, LLL_INFO, __VA_ARGS__) 528d4afb5ceSopenharmony_ci#else 529d4afb5ceSopenharmony_ci#define lwsl_wsi_info(_w, ...) do {} while(0) 530d4afb5ceSopenharmony_ci#endif 531d4afb5ceSopenharmony_ci 532d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_DEBUG) 533d4afb5ceSopenharmony_ci#define lwsl_wsi_debug(_w, ...) lwsl_wsi(_w, LLL_DEBUG, __VA_ARGS__) 534d4afb5ceSopenharmony_ci#else 535d4afb5ceSopenharmony_ci#define lwsl_wsi_debug(_w, ...) do {} while(0) 536d4afb5ceSopenharmony_ci#endif 537d4afb5ceSopenharmony_ci 538d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_PARSER) 539d4afb5ceSopenharmony_ci#define lwsl_wsi_parser(_w, ...) lwsl_wsi(_w, LLL_PARSER, __VA_ARGS__) 540d4afb5ceSopenharmony_ci#else 541d4afb5ceSopenharmony_ci#define lwsl_wsi_parser(_w, ...) do {} while(0) 542d4afb5ceSopenharmony_ci#endif 543d4afb5ceSopenharmony_ci 544d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_HEADER) 545d4afb5ceSopenharmony_ci#define lwsl_wsi_header(_w, ...) lwsl_wsi(_w, LLL_HEADER, __VA_ARGS__) 546d4afb5ceSopenharmony_ci#else 547d4afb5ceSopenharmony_ci#define lwsl_wsi_header(_w, ...) do {} while(0) 548d4afb5ceSopenharmony_ci#endif 549d4afb5ceSopenharmony_ci 550d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_EXT) 551d4afb5ceSopenharmony_ci#define lwsl_wsi_ext(_w, ...) lwsl_wsi(_w, LLL_EXT, __VA_ARGS__) 552d4afb5ceSopenharmony_ci#else 553d4afb5ceSopenharmony_ci#define lwsl_wsi_ext(_w, ...) do {} while(0) 554d4afb5ceSopenharmony_ci#endif 555d4afb5ceSopenharmony_ci 556d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_CLIENT) 557d4afb5ceSopenharmony_ci#define lwsl_wsi_client(_w, ...) lwsl_wsi(_w, LLL_CLIENT, __VA_ARGS__) 558d4afb5ceSopenharmony_ci#else 559d4afb5ceSopenharmony_ci#define lwsl_wsi_client(_w, ...) do {} while(0) 560d4afb5ceSopenharmony_ci#endif 561d4afb5ceSopenharmony_ci 562d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_LATENCY) 563d4afb5ceSopenharmony_ci#define lwsl_wsi_latency(_w, ...) lwsl_wsi(_w, LLL_LATENCY, __VA_ARGS__) 564d4afb5ceSopenharmony_ci#else 565d4afb5ceSopenharmony_ci#define lwsl_wsi_latency(_w, ...) do {} while(0) 566d4afb5ceSopenharmony_ci#endif 567d4afb5ceSopenharmony_ci 568d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_THREAD) 569d4afb5ceSopenharmony_ci#define lwsl_wsi_thread(_w, ...) lwsl_wsi(_w, LLL_THREAD, __VA_ARGS__) 570d4afb5ceSopenharmony_ci#else 571d4afb5ceSopenharmony_ci#define lwsl_wsi_thread(_w, ...) do {} while(0) 572d4afb5ceSopenharmony_ci#endif 573d4afb5ceSopenharmony_ci 574d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_USER) 575d4afb5ceSopenharmony_ci#define lwsl_wsi_user(_w, ...) lwsl_wsi(_w, LLL_USER, __VA_ARGS__) 576d4afb5ceSopenharmony_ci#else 577d4afb5ceSopenharmony_ci#define lwsl_wsi_user(_w, ...) do {} while(0) 578d4afb5ceSopenharmony_ci#endif 579d4afb5ceSopenharmony_ci 580d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi_err(_v, ...) lwsl_hexdump_wsi(_v, LLL_ERR, __VA_ARGS__) 581d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi_warn(_v, ...) lwsl_hexdump_wsi(_v, LLL_WARN, __VA_ARGS__) 582d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi_notice(_v, ...) lwsl_hexdump_wsi(_v, LLL_NOTICE, __VA_ARGS__) 583d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi_info(_v, ...) lwsl_hexdump_wsi(_v, LLL_INFO, __VA_ARGS__) 584d4afb5ceSopenharmony_ci#define lwsl_hexdump_wsi_debug(_v, ...) lwsl_hexdump_wsi(_v, LLL_DEBUG, __VA_ARGS__) 585d4afb5ceSopenharmony_ci 586d4afb5ceSopenharmony_ci 587d4afb5ceSopenharmony_ci/* 588d4afb5ceSopenharmony_ci * lwsl_ss 589d4afb5ceSopenharmony_ci */ 590d4afb5ceSopenharmony_ci 591d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_ERR) 592d4afb5ceSopenharmony_ci#define lwsl_ss_err(_w, ...) lwsl_ss(_w, LLL_ERR, __VA_ARGS__) 593d4afb5ceSopenharmony_ci#else 594d4afb5ceSopenharmony_ci#define lwsl_ss_err(_w, ...) do {} while(0) 595d4afb5ceSopenharmony_ci#endif 596d4afb5ceSopenharmony_ci 597d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_WARN) 598d4afb5ceSopenharmony_ci#define lwsl_ss_warn(_w, ...) lwsl_ss(_w, LLL_WARN, __VA_ARGS__) 599d4afb5ceSopenharmony_ci#else 600d4afb5ceSopenharmony_ci#define lwsl_ss_warn(_w, ...) do {} while(0) 601d4afb5ceSopenharmony_ci#endif 602d4afb5ceSopenharmony_ci 603d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_NOTICE) 604d4afb5ceSopenharmony_ci#define lwsl_ss_notice(_w, ...) lwsl_ss(_w, LLL_NOTICE, __VA_ARGS__) 605d4afb5ceSopenharmony_ci#else 606d4afb5ceSopenharmony_ci#define lwsl_ss_notice(_w, ...) do {} while(0) 607d4afb5ceSopenharmony_ci#endif 608d4afb5ceSopenharmony_ci 609d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_INFO) 610d4afb5ceSopenharmony_ci#define lwsl_ss_info(_w, ...) lwsl_ss(_w, LLL_INFO, __VA_ARGS__) 611d4afb5ceSopenharmony_ci#else 612d4afb5ceSopenharmony_ci#define lwsl_ss_info(_w, ...) do {} while(0) 613d4afb5ceSopenharmony_ci#endif 614d4afb5ceSopenharmony_ci 615d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_DEBUG) 616d4afb5ceSopenharmony_ci#define lwsl_ss_debug(_w, ...) lwsl_ss(_w, LLL_DEBUG, __VA_ARGS__) 617d4afb5ceSopenharmony_ci#else 618d4afb5ceSopenharmony_ci#define lwsl_ss_debug(_w, ...) do {} while(0) 619d4afb5ceSopenharmony_ci#endif 620d4afb5ceSopenharmony_ci 621d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_PARSER) 622d4afb5ceSopenharmony_ci#define lwsl_ss_parser(_w, ...) lwsl_ss(_w, LLL_PARSER, __VA_ARGS__) 623d4afb5ceSopenharmony_ci#else 624d4afb5ceSopenharmony_ci#define lwsl_ss_parser(_w, ...) do {} while(0) 625d4afb5ceSopenharmony_ci#endif 626d4afb5ceSopenharmony_ci 627d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_HEADER) 628d4afb5ceSopenharmony_ci#define lwsl_ss_header(_w, ...) lwsl_ss(_w, LLL_HEADER, __VA_ARGS__) 629d4afb5ceSopenharmony_ci#else 630d4afb5ceSopenharmony_ci#define lwsl_ss_header(_w, ...) do {} while(0) 631d4afb5ceSopenharmony_ci#endif 632d4afb5ceSopenharmony_ci 633d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_EXT) 634d4afb5ceSopenharmony_ci#define lwsl_ss_ext(_w, ...) lwsl_ss(_w, LLL_EXT, __VA_ARGS__) 635d4afb5ceSopenharmony_ci#else 636d4afb5ceSopenharmony_ci#define lwsl_ss_ext(_w, ...) do {} while(0) 637d4afb5ceSopenharmony_ci#endif 638d4afb5ceSopenharmony_ci 639d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_CLIENT) 640d4afb5ceSopenharmony_ci#define lwsl_ss_client(_w, ...) lwsl_ss(_w, LLL_CLIENT, __VA_ARGS__) 641d4afb5ceSopenharmony_ci#else 642d4afb5ceSopenharmony_ci#define lwsl_ss_client(_w, ...) do {} while(0) 643d4afb5ceSopenharmony_ci#endif 644d4afb5ceSopenharmony_ci 645d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_LATENCY) 646d4afb5ceSopenharmony_ci#define lwsl_ss_latency(_w, ...) lwsl_ss(_w, LLL_LATENCY, __VA_ARGS__) 647d4afb5ceSopenharmony_ci#else 648d4afb5ceSopenharmony_ci#define lwsl_ss_latency(_w, ...) do {} while(0) 649d4afb5ceSopenharmony_ci#endif 650d4afb5ceSopenharmony_ci 651d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_THREAD) 652d4afb5ceSopenharmony_ci#define lwsl_ss_thread(_w, ...) lwsl_ss(_w, LLL_THREAD, __VA_ARGS__) 653d4afb5ceSopenharmony_ci#else 654d4afb5ceSopenharmony_ci#define lwsl_ss_thread(_w, ...) do {} while(0) 655d4afb5ceSopenharmony_ci#endif 656d4afb5ceSopenharmony_ci 657d4afb5ceSopenharmony_ci#if (_LWS_ENABLED_LOGS & LLL_USER) 658d4afb5ceSopenharmony_ci#define lwsl_ss_user(_w, ...) lwsl_ss(_w, LLL_USER, __VA_ARGS__) 659d4afb5ceSopenharmony_ci#else 660d4afb5ceSopenharmony_ci#define lwsl_ss_user(_w, ...) do {} while(0) 661d4afb5ceSopenharmony_ci#endif 662d4afb5ceSopenharmony_ci 663d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss_err(_v, ...) lwsl_hexdump_ss(_v, LLL_ERR, __VA_ARGS__) 664d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss_warn(_v, ...) lwsl_hexdump_ss(_v, LLL_WARN, __VA_ARGS__) 665d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss_notice(_v, ...) lwsl_hexdump_ss(_v, LLL_NOTICE, __VA_ARGS__) 666d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss_info(_v, ...) lwsl_hexdump_ss(_v, LLL_INFO, __VA_ARGS__) 667d4afb5ceSopenharmony_ci#define lwsl_hexdump_ss_debug(_v, ...) lwsl_hexdump_ss(_v, LLL_DEBUG, __VA_ARGS__) 668d4afb5ceSopenharmony_ci 669d4afb5ceSopenharmony_ci 670d4afb5ceSopenharmony_ci 671d4afb5ceSopenharmony_ci/** 672d4afb5ceSopenharmony_ci * lwsl_hexdump_level() - helper to hexdump a buffer at a selected debug level 673d4afb5ceSopenharmony_ci * 674d4afb5ceSopenharmony_ci * \param level: one of LLL_ constants 675d4afb5ceSopenharmony_ci * \param vbuf: buffer start to dump 676d4afb5ceSopenharmony_ci * \param len: length of buffer to dump 677d4afb5ceSopenharmony_ci * 678d4afb5ceSopenharmony_ci * If \p level is visible, does a nice hexdump -C style dump of \p vbuf for 679d4afb5ceSopenharmony_ci * \p len bytes. This can be extremely convenient while debugging. 680d4afb5ceSopenharmony_ci */ 681d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 682d4afb5ceSopenharmony_cilwsl_hexdump_level(int level, const void *vbuf, size_t len); 683d4afb5ceSopenharmony_ci 684d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 685d4afb5ceSopenharmony_cilwsl_hexdump_level_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, 686d4afb5ceSopenharmony_ci int hexdump_level, const void *vbuf, size_t len); 687d4afb5ceSopenharmony_ci 688d4afb5ceSopenharmony_ci/** 689d4afb5ceSopenharmony_ci * lwsl_hexdump() - helper to hexdump a buffer (DEBUG builds only) 690d4afb5ceSopenharmony_ci * 691d4afb5ceSopenharmony_ci * \param buf: buffer start to dump 692d4afb5ceSopenharmony_ci * \param len: length of buffer to dump 693d4afb5ceSopenharmony_ci * 694d4afb5ceSopenharmony_ci * Calls through to lwsl_hexdump_level(LLL_DEBUG, ... for compatability. 695d4afb5ceSopenharmony_ci * It's better to use lwsl_hexdump_level(level, ... directly so you can control 696d4afb5ceSopenharmony_ci * the visibility. 697d4afb5ceSopenharmony_ci */ 698d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 699d4afb5ceSopenharmony_cilwsl_hexdump(const void *buf, size_t len); 700d4afb5ceSopenharmony_ci 701d4afb5ceSopenharmony_ci/** 702d4afb5ceSopenharmony_ci * lws_is_be() - returns nonzero if the platform is Big Endian 703d4afb5ceSopenharmony_ci */ 704d4afb5ceSopenharmony_cistatic LWS_INLINE int lws_is_be(void) { 705d4afb5ceSopenharmony_ci const int probe = ~0xff; 706d4afb5ceSopenharmony_ci 707d4afb5ceSopenharmony_ci return *(const char *)&probe; 708d4afb5ceSopenharmony_ci} 709d4afb5ceSopenharmony_ci 710d4afb5ceSopenharmony_ci/** 711d4afb5ceSopenharmony_ci * lws_set_log_level() - Set the logging bitfield 712d4afb5ceSopenharmony_ci * \param level: OR together the LLL_ debug contexts you want output from 713d4afb5ceSopenharmony_ci * \param log_emit_function: NULL to leave it as it is, or a user-supplied 714d4afb5ceSopenharmony_ci * function to perform log string emission instead of 715d4afb5ceSopenharmony_ci * the default stderr one. 716d4afb5ceSopenharmony_ci * 717d4afb5ceSopenharmony_ci * log level defaults to "err", "warn" and "notice" contexts enabled and 718d4afb5ceSopenharmony_ci * emission on stderr. If stderr is a tty (according to isatty()) then 719d4afb5ceSopenharmony_ci * the output is coloured according to the log level using ANSI escapes. 720d4afb5ceSopenharmony_ci * 721d4afb5ceSopenharmony_ci * You can set the default security level for logging using the 722d4afb5ceSopenharmony_ci * secrecy_and_log_level() macro to set the \p level parameter, eg 723d4afb5ceSopenharmony_ci * 724d4afb5ceSopenharmony_ci * lws_set_log_level(secrecy_and_log_level(LWS_SECRECY_PII, LLL_ERR | LLL_WARN), 725d4afb5ceSopenharmony_ci * my_emit_function); 726d4afb5ceSopenharmony_ci * 727d4afb5ceSopenharmony_ci * Normally you can just leave it at the default. 728d4afb5ceSopenharmony_ci */ 729d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 730d4afb5ceSopenharmony_cilws_set_log_level(int level, lws_log_emit_t log_emit_function); 731d4afb5ceSopenharmony_ci 732d4afb5ceSopenharmony_ci/** 733d4afb5ceSopenharmony_ci * lwsl_emit_syslog() - helper log emit function writes to system log 734d4afb5ceSopenharmony_ci * 735d4afb5ceSopenharmony_ci * \param level: one of LLL_ log level indexes 736d4afb5ceSopenharmony_ci * \param line: log string 737d4afb5ceSopenharmony_ci * 738d4afb5ceSopenharmony_ci * You use this by passing the function pointer to lws_set_log_level(), to set 739d4afb5ceSopenharmony_ci * it as the log emit function, it is not called directly. 740d4afb5ceSopenharmony_ci */ 741d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 742d4afb5ceSopenharmony_cilwsl_emit_syslog(int level, const char *line); 743d4afb5ceSopenharmony_ci 744d4afb5ceSopenharmony_ci/** 745d4afb5ceSopenharmony_ci * lwsl_emit_stderr() - helper log emit function writes to stderr 746d4afb5ceSopenharmony_ci * 747d4afb5ceSopenharmony_ci * \param level: one of LLL_ log level indexes 748d4afb5ceSopenharmony_ci * \param line: log string 749d4afb5ceSopenharmony_ci * 750d4afb5ceSopenharmony_ci * You use this by passing the function pointer to lws_set_log_level(), to set 751d4afb5ceSopenharmony_ci * it as the log emit function, it is not called directly. 752d4afb5ceSopenharmony_ci * 753d4afb5ceSopenharmony_ci * It prepends a system timestamp like [2018/11/13 07:41:57:3989] 754d4afb5ceSopenharmony_ci * 755d4afb5ceSopenharmony_ci * If stderr is a tty, then ansi colour codes are added. 756d4afb5ceSopenharmony_ci */ 757d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 758d4afb5ceSopenharmony_cilwsl_emit_stderr(int level, const char *line); 759d4afb5ceSopenharmony_ci 760d4afb5ceSopenharmony_ci/** 761d4afb5ceSopenharmony_ci * lwsl_emit_stderr_notimestamp() - helper log emit function writes to stderr 762d4afb5ceSopenharmony_ci * 763d4afb5ceSopenharmony_ci * \param level: one of LLL_ log level indexes 764d4afb5ceSopenharmony_ci * \param line: log string 765d4afb5ceSopenharmony_ci * 766d4afb5ceSopenharmony_ci * You use this by passing the function pointer to lws_set_log_level(), to set 767d4afb5ceSopenharmony_ci * it as the log emit function, it is not called directly. 768d4afb5ceSopenharmony_ci * 769d4afb5ceSopenharmony_ci * If stderr is a tty, then ansi colour codes are added. 770d4afb5ceSopenharmony_ci */ 771d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 772d4afb5ceSopenharmony_cilwsl_emit_stderr_notimestamp(int level, const char *line); 773d4afb5ceSopenharmony_ci 774d4afb5ceSopenharmony_ci/** 775d4afb5ceSopenharmony_ci * lwsl_visible() - returns true if the log level should be printed 776d4afb5ceSopenharmony_ci * 777d4afb5ceSopenharmony_ci * \param level: one of LLL_ log level indexes 778d4afb5ceSopenharmony_ci * 779d4afb5ceSopenharmony_ci * This is useful if you have to do work to generate the log content, you 780d4afb5ceSopenharmony_ci * can skip the work if the log level used to print it is not actually 781d4afb5ceSopenharmony_ci * enabled at runtime. 782d4afb5ceSopenharmony_ci */ 783d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN int 784d4afb5ceSopenharmony_cilwsl_visible(int level); 785d4afb5ceSopenharmony_ci 786d4afb5ceSopenharmony_cistruct lws; 787d4afb5ceSopenharmony_ci 788d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN const char * 789d4afb5ceSopenharmony_cilws_wsi_tag(struct lws *wsi); 790d4afb5ceSopenharmony_ci 791d4afb5ceSopenharmony_ciLWS_VISIBLE LWS_EXTERN void 792d4afb5ceSopenharmony_cilwsl_refcount_cx(lws_log_cx_t *cx, int _new); 793d4afb5ceSopenharmony_ci 794d4afb5ceSopenharmony_ci///@} 795