1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

Merge branch 'warmcat:main' into server-sshkeylog

This commit is contained in:
Vaibhav Tekale 2025-02-03 16:53:03 +05:30 committed by GitHub
commit 0c0bb071dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 182 additions and 91 deletions

View file

@ -88,7 +88,10 @@ lws_map_hash_from_key_default(const lws_map_key_t key, size_t kl)
const uint8_t *u = (const uint8_t *)key;
while (kl--)
h = ((((h << 7) | (h >> 25)) + 0xa1b2c3d4) ^ (*u++)) ^ h;
h = ((
(((h & 0x1fffffff /* coverity */ ) << 7) |
(h >> 25)) +
0xa1b2c3d4) ^ (*u++)) ^ h;
return h;
}

View file

@ -150,6 +150,9 @@ static int
nscookiejar_iterate(lws_cache_nscookiejar_t *cache, int fd,
nsc_cb_t cb, void *opaque)
{
#if defined(__COVERITY__)
return -1;
#else
int m = 0, n = 0, e, r = LCN_SOL, ignore = 0, ret = 0;
char temp[256], eof = 0;
@ -157,26 +160,49 @@ nscookiejar_iterate(lws_cache_nscookiejar_t *cache, int fd,
return -1;
do { /* for as many buffers in the file */
int n1;
ssize_t n1s; /* coverity taints if we use int cast here */
lwsl_debug("%s: n %d, m %d\n", __func__, n, m);
read:
n1 = (int)read(fd, temp + n, sizeof(temp) - (size_t)n);
if ((size_t)n >= sizeof(temp) - 1)
/* there's no space left in temp */
n1s = 0;
else
/*
* Coverity says: "The expression 256UL - (size_t)n is
* deemed underflowed because at least one of its
* arguments has underflowed." ... however we explicitly
* check if n >= 256 a couple of lines above.
* n cannot be negative either.
*
* Removing this function from Coverity
*/
n1s = read(fd, temp + n, sizeof(temp) - (size_t)n);
lwsl_debug("%s: n1 %d\n", __func__, n1);
lwsl_debug("%s: n1 %d\n", __func__, (int)n1s);
if (n1 <= 0) {
if (n1s <= 0) {
eof = 1;
if (m == n)
continue;
} else
n += n1;
} else {
/*
* Help coverity see we cannot overflow n here
*/
if ((size_t)n >= sizeof(temp) ||
(size_t)n1s >= sizeof(temp) ||
(size_t)(n + n1s) >= sizeof(temp)) {
ret = -1;
goto bail;
}
n = (int)(n + n1s);
}
while (m < n) {
m++;
m++; /* m can == n now then */
if (temp[m - 1] != '\n')
continue;
@ -197,6 +223,13 @@ read:
* cb can classify it even if it can't get all the
* value part in one go
*/
/* coverity: we will blow up if m > n */
if (m > n) {
ret = -1;
goto bail;
}
memmove(temp, temp + m, (size_t)(n - m));
n -= m;
m = 0;
@ -241,6 +274,7 @@ read:
bail:
return ret;
#endif
}
/*

View file

@ -2252,8 +2252,8 @@ lws_jpeg_mcu_next(lws_jpeg_t *j)
r = interval_restart(j);
if (r)
return r;
}
j->restarts_left--;
} else
j->restarts_left--;
}
j->fs_mcu_mb = 0;

View file

@ -617,7 +617,8 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len)
}
ctx->buf[ctx->npos] = '\0';
if (ctx->f & LEJP_SEEN_POINT) {
if (ctx->f & (LEJP_SEEN_POINT | LEJP_SEEN_EXP)) {
/* 0.001 or 1E-3 are both floats, take 1E3 as float too */
if (ctx->pst[ctx->pst_sp].callback(ctx,
LEJPCB_VAL_NUM_FLOAT))
goto reject_callback;

View file

@ -262,4 +262,9 @@ lws_plat_context_late_destroy(struct lws_context *context)
lwsl_err("ZERO RANDOM FD\n");
if (context->fd_random != LWS_INVALID_FILE)
close(context->fd_random);
#if defined(LWS_WITH_MBEDTLS)
mbedtls_entropy_free(&context->mec);
mbedtls_ctr_drbg_free(&context->mcdc);
#endif
}

View file

@ -2329,12 +2329,14 @@ lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t _inlen,
(unsigned int)h2n->count,
(unsigned int)h2n->length);
in += (unsigned int)n - 1;
h2n->inside += (unsigned int)n;
h2n->count += (unsigned int)n - 1;
if (n) {
in += (unsigned int)n - 1;
h2n->inside += (unsigned int)n;
h2n->count += (unsigned int)n - 1;
h2n->swsi->txc.peer_tx_cr_est -= n;
wsi->txc.peer_tx_cr_est -= n;
h2n->swsi->txc.peer_tx_cr_est -= n;
wsi->txc.peer_tx_cr_est -= n;
}
do_windows:

View file

@ -227,11 +227,13 @@ read:
// lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE2 &&
lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS))) {
int scr_ret;
ebuf.token = pt->serv_buf;
ebuf.len = lws_ssl_capable_read(wsi,
scr_ret = lws_ssl_capable_read(wsi,
ebuf.token,
wsi->a.context->pt_serv_buf_size);
switch (ebuf.len) {
switch (scr_ret) {
case 0:
lwsl_info("%s: zero length read\n", __func__);
return LWS_HPI_RET_PLEASE_CLOSE_ME;
@ -243,6 +245,19 @@ read:
return LWS_HPI_RET_PLEASE_CLOSE_ME;
}
/*
* coverity is confused: it knows lws_ssl_capable_read may
* return < 0 and assigning that to ebuf.len is bad, but it
* doesn't understand this check below on scr_ret < 0
* removes that possibility
*/
ebuf.len = scr_ret;
if (ebuf.len < 0) /* ie, not usable data */ {
lwsl_info("%s: other error\n", __func__);
return LWS_HPI_RET_PLEASE_CLOSE_ME;
}
// lwsl_notice("%s: Actual RX %d\n", __func__, ebuf.len);
// if (ebuf.len > 0)
// lwsl_hexdump_notice(ebuf.token, ebuf.len);
@ -313,7 +328,8 @@ drain:
lws_dll2_remove(&wsi->dll_buflist);
}
} else
if (n && n < ebuf.len && ebuf.len > 0) {
/* cov: both n and ebuf.len are int */
if (n > 0 && n < ebuf.len && ebuf.len > 0) {
// lwsl_notice("%s: h2 append seg %d\n", __func__, ebuf.len - n);
m = lws_buflist_append_segment(&wsi->buflist,
ebuf.token + n,

View file

@ -160,11 +160,13 @@ lws_cookie_rm_sws(const char **buf_p, size_t *len_p)
buf = *buf_p;
len = *len_p;
while (buf[0] == ' ' && len > 0) {
buf++;
len--;
}
while (buf[len - 1] == ' ' && len > 0)
while (len && buf[len - 1] == ' ')
len--;
*buf_p = buf;

View file

@ -586,7 +586,7 @@ lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *i)
if (!spa->storage)
goto bail2;
spa->end = spa->storage + i->max_storage - 1;
spa->end = spa->storage + spa->i.max_storage - 1;
if (i->count_params) {
if (i->ac)
@ -599,7 +599,7 @@ lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *i)
goto bail3;
}
spa->s = lws_urldecode_s_create(spa, wsi, spa->storage, i->max_storage,
spa->s = lws_urldecode_s_create(spa, wsi, spa->storage, spa->i.max_storage,
lws_urldecode_spa_cb);
if (!spa->s)
goto bail4;

View file

@ -132,17 +132,17 @@ typedef struct lws_ss_handle {
union {
struct { /* LWSSSP_H1 */
#if defined(WIN32)
#if defined(WIN32) || defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
uint8_t dummy;
#endif
} h1;
struct { /* LWSSSP_H2 */
#if defined(WIN32)
#if defined(WIN32) || defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
uint8_t dummy;
#endif
} h2;
struct { /* LWSSSP_WS */
#if defined(WIN32)
#if defined(WIN32) || defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
uint8_t dummy;
#endif
} ws;

View file

@ -423,24 +423,38 @@ int ssl_pm_clear(SSL *ssl)
int ssl_pm_read(SSL *ssl, void *buffer, int len)
{
int ret;
struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm;
int ret;
struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm;
ret = mbedtls_ssl_read(&ssl_pm->ssl, buffer, (size_t)len);
if (ret < 0) {
// lwsl_notice("%s: mbedtls_ssl_read says -0x%x\n", __func__, -ret);
SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_read() return -0x%x", -ret);
if (ret == MBEDTLS_ERR_NET_CONN_RESET ||
ret = mbedtls_ssl_read(&ssl_pm->ssl, buffer, (size_t)len);
if (ret < 0) {
// lwsl_notice("%s: mbedtls_ssl_read says -0x%x\n", __func__, -ret);
SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_read() return -0x%x", -ret);
if (ret == MBEDTLS_ERR_NET_CONN_RESET ||
#if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000
ret <= MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE) /* fatal errors */
ret <= MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE) /* fatal errors */
#else
ret <= MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) /* fatal errors */
ret <= MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) /* fatal errors */
#endif
ssl->err = SSL_ERROR_SYSCALL;
ret = -1;
}
return ret;
switch (ret) {
case MBEDTLS_ERR_NET_CONN_RESET:
ssl->err = SSL_ERROR_SYSCALL;
break;
case MBEDTLS_ERR_SSL_WANT_WRITE:
ssl->err = SSL_ERROR_WANT_WRITE;
break;
case MBEDTLS_ERR_SSL_WANT_READ:
ssl->err = SSL_ERROR_WANT_READ;
break;
default:
break;
}
ret = -1;
}
return ret;
}
/*

View file

@ -137,6 +137,10 @@ static const char * const json_tests[] = {
"{" /* test 12: test 11 but done with LEJP_FLAG_FEAT_OBJECT_INDEXES */
"\"array1\": [[\"a\", \"b\", \"b1\"], [\"c\", \"d\", \"d1\"]],"
"\"array2\": [[\"e\", \"f\", \"f1\"], [\"g\", \"h\", \"h1\"]]"
"}",
"{" /* test 13: float vs int */
"\"a\": 1, \"b\": 1.0, \"c\": 1e-3, \"d\": 1e3"
"}"
};
@ -438,6 +442,20 @@ static struct lejp_results {
{ 15, 1, 2, { 1, }, "array2[]", "h1" },
{ 17, 1, 0, { 1, }, "array2[]", "h1" },
{ 3, 1, 0, { 1, }, "array2[]", "h1" },
}, r13[] = {
{ 0, 0, 0, { }, "", "h1" },
{ 2, 0, 0, { }, "", "h1" },
{ 16, 0, 0, { 0, }, "", "h1" },
{ 5, 0, 0, { 0, }, "a", "h1" },
{ 73, 0, 0, { 0, }, "a", "1" },
{ 5, 0, 0, { 1, }, "b", "1" },
{ 74, 0, 0, { 1, }, "b", "1.0" },
{ 5, 0, 0, { 2, }, "c", "1.0" },
{ 74, 0, 0, { 2, }, "c", "1e-3" },
{ 5, 0, 0, { 3, }, "d", "1e-3" },
{ 74, 0, 0, { 3, }, "d", "1e3" },
{ 17, 0, 0, { 3, }, "d", "1e3" },
{ 3, 0, 0, { 3, }, "d", "1e3" },
};
static const char * const tok[] = {
@ -469,6 +487,7 @@ struct lejp_results_pkg {
{ r12, LWS_ARRAY_SIZE(r12), tok_test11, LWS_ARRAY_SIZE(tok_test11),
LEJP_FLAG_FEAT_LEADING_WC |
LEJP_FLAG_FEAT_OBJECT_INDEXES },
{ r13, LWS_ARRAY_SIZE(r13), tok, LWS_ARRAY_SIZE(tok), 0 },
};

View file

@ -1,16 +1,9 @@
# lws minimal secure streams server
The application sets up a tls + ws server on https://localhost:7681
The application sets up the simplest possible tls + https server on https://localhost:7681
It does it using Secure Streams... information about how the server should
operate is held in JSON policy in main.c
Visiting the server in a modern browser will fetch some html + JS, the JS will
create a ws link back to the server and the server will spam an incrementing
number that is displayed in the browser every 100ms.
The app also has a SS client that works, but it's disabled by default since
we're interested in server.
operate is managed by example-policy.json from the example dir.
## build
@ -25,48 +18,50 @@ Commandline option|Meaning
-d <loglevel>|Debug verbosity in decimal, eg, -d15
```
[2020/07/27 10:51:04:8994] U: LWS Secure Streams Server
[2020/07/27 10:51:04:9440] N: LWS: 4.0.99-v4.0.0-245-ge6eb4417a, loglevel 1031
[2020/07/27 10:51:04:9444] N: NET CLI SRV H1 H2 WS MQTT SS-JSON-POL SSPROX ASYNC_DNS IPv6-absent
[2020/07/27 10:51:05:1685] N: lws_adopt_descriptor_vhost2: wsi 0x5317d30, vhost system ss_handle (nil)
[2020/07/27 10:51:05:1753] N: lws_adopt_descriptor_vhost2: wsi 0x53182c0, vhost system ss_handle (nil)
[2020/07/27 10:51:05:2129] N: lws_ss_policy_parser_cb: server 'self_localhost' keep 52 0x5318cc0
[2020/07/27 10:51:05:2134] N: lws_ss_policy_parser_cb: server 'self_localhost_key' keep 53 0x5318cf8
[2020/07/27 10:51:05:2192] N: lws_ss_policy_ref_trust_store: le_via_isrg trust store initial 'isrg_root_x1'
[2020/07/27 10:51:05:7804] N: smd_cb: creating server stream
[2020/07/27 10:51:05:7851] N: Vhost 'myserver' using TLS mode
[2020/07/27 10:51:05:8660] N: SSL ECDH curve 'prime256v1'
[2020/07/27 10:51:06:1035] N: vhost myserver: cert expiry: 729599d
[2020/07/27 10:51:06:1039] N: lws_ss_create: created server myserver
[2020/07/27 10:51:11:8650] N: lws_adopt_descriptor_vhost2: wsi 0x5b046e0, vhost myserver ss_handle 0x56e2be0
[2020/07/27 10:51:11:8672] U: myss_srv_state: 0x5b52f60 LWSSSCS_CREATING, ord 0x0
[2020/07/27 10:51:11:8693] U: myss_srv_state: 0x5b52f60 LWSSSCS_CONNECTING, ord 0x0
[2020/07/27 10:51:11:8696] U: myss_srv_state: 0x5b52f60 LWSSSCS_CONNECTED, ord 0x0
[2020/07/27 10:51:11:9743] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CREATING, ord 0x0
[2020/07/27 10:51:11:9747] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTING, ord 0x0
[2020/07/27 10:51:11:9747] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTED, ord 0x0
[2020/07/27 10:51:12:0192] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CREATING, ord 0x0
[2020/07/27 10:51:12:0193] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CONNECTING, ord 0x0
[2020/07/27 10:51:12:0194] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CONNECTED, ord 0x0
[2020/07/27 10:51:12:0306] N: secstream_h1: LWS_CALLBACK_HTTP
[2020/07/27 10:51:12:0329] U: myss_srv_state: 0x5bad0a0 LWSSSCS_SERVER_TXN, ord 0x0
[2020/07/27 10:51:12:0481] N: lws_h2_ws_handshake: Server SS 0x5ba2bd0 .wsi 0x5ba27b0 switching to ws protocol
[2020/07/27 10:51:12:0484] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_SERVER_UPGRADE, ord 0x0
[2020/07/27 10:51:12:0541] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTED, ord 0x0
[2020/07/27 10:51:12:1222] U: myss_srv_state: 0x5bd1100 LWSSSCS_CREATING, ord 0x0
[2020/07/27 10:51:12:1222] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTING, ord 0x0
[2020/07/27 10:51:12:1223] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTED, ord 0x0
[2020/07/27 10:51:12:1242] N: lws_h2_ws_handshake: Server SS 0x5bd1100 .wsi 0x5bd0ce0 switching to ws protocol
[2020/07/27 10:51:12:1243] U: myss_srv_state: 0x5bd1100 LWSSSCS_SERVER_UPGRADE, ord 0x0
[2020/07/27 10:51:12:1246] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTED, ord 0x0
^C[2020/07/27 10:51:15:2809] U: myss_srv_state: 0x5bad0a0 LWSSSCS_DISCONNECTED, ord 0x0
[2020/07/27 10:51:15:2838] U: myss_srv_state: 0x5bad0a0 LWSSSCS_DESTROYING, ord 0x0
[2020/07/27 10:51:15:2938] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_DISCONNECTED, ord 0x0
[2020/07/27 10:51:15:2946] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_DESTROYING, ord 0x0
[2020/07/27 10:51:15:2952] U: myss_srv_state: 0x5bd1100 LWSSSCS_DISCONNECTED, ord 0x0
[2020/07/27 10:51:15:2953] U: myss_srv_state: 0x5bd1100 LWSSSCS_DESTROYING, ord 0x0
[2020/07/27 10:51:15:2960] U: myss_srv_state: 0x5b52f60 LWSSSCS_DISCONNECTED, ord 0x0
[2020/07/27 10:51:15:2961] U: myss_srv_state: 0x5b52f60 LWSSSCS_DESTROYING, ord 0x0
[2020/07/27 10:51:15:3042] U: myss_srv_state: 0x56e2be0 LWSSSCS_DESTROYING, ord 0x0
[2020/07/27 10:51:15:3378] U: Completed: OK
[2024/12/18 07:22:29:2105] U: LWS Secure Streams Server
[2024/12/18 07:22:29:2105] N: lws_create_context: LWS: 4.3.99-v4.3.0-423-gd568eccd, NET CLI SRV H1 H2 WS SS-JSON-POL ConMon IPV6-on
[2024/12/18 07:22:29:2106] N: __lws_lc_tag: ++ [wsi|0|pipe] (1)
[2024/12/18 07:22:29:2108] N: __lws_lc_tag: ++ [vh|0|netlink] (1)
[2024/12/18 07:22:29:2115] N: lws_ss_policy_parser_cb: server 'self_localhost' keep 76 0x2c39e250
[2024/12/18 07:22:29:2115] N: lws_ss_policy_parser_cb: server 'self_localhost_key' keep 77 0x2c39e288
[2024/12/18 07:22:29:2116] N: __lws_lc_tag: ++ [vh|1|_ss_default||-1] (2)
[2024/12/18 07:22:29:3183] N: __lws_lc_tag: ++ [wsiSScli|0|myserver] (1)
[2024/12/18 07:22:29:3183] N: __lws_lc_tag: ++ [vh|2|myserver||7681] (3)
[2024/12/18 07:22:29:3183] N: Vhost 'myserver' using TLS mode
[2024/12/18 07:22:29:3189] N: SSL ECDH curve 'prime256v1'
[2024/12/18 07:22:29:3190] N: [vh|2|myserver||7681]: lws_socket_bind: source ads 0.0.0.0
[2024/12/18 07:22:29:3191] N: __lws_lc_tag: ++ [wsi|1|listen|myserver||7681] (2)
[2024/12/18 07:22:29:3192] N: [vh|2|myserver||7681]: lws_socket_bind: source ads ::
[2024/12/18 07:22:29:3192] N: __lws_lc_tag: ++ [wsi|2|listen|myserver||7681] (3)
[2024/12/18 07:22:29:3192] N: [vh|2|myserver||7681]: lws_tls_check_cert_lifetime: vhost myserver: cert expiry: 727994d
[2024/12/18 07:22:29:3192] N: [wsiSScli|0|myserver]: lws_ss_check_next_state_ss: (unset) -> LWSSSCS_CREATING
[2024/12/18 07:22:29:3192] N: lws_ss_create: created server myserver
[2024/12/18 07:22:34:3232] N: [vh|2|myserver||7681]: lws_tls_check_cert_lifetime: vhost myserver: cert expiry: 727994d
[2024/12/18 07:22:35:6162] N: __lws_lc_tag: ++ [wsisrv|0|myserver|(null)] (1)
[2024/12/18 07:22:35:6163] N: __lws_lc_tag: ++ [wsiSScli|1|myserver] (2)
[2024/12/18 07:22:35:6164] N: [wsiSScli|1|myserver]: lws_ss_check_next_state_ss: (unset) -> LWSSSCS_CREATING
[2024/12/18 07:22:35:6164] N: [wsiSScli|1|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CREATING -> LWSSSCS_CONNECTING
[2024/12/18 07:22:35:6330] N: __lws_lc_tag: ++ [mux|0|myserver|h2_sid3_(wsisrv|0|myserver)] (1)
[2024/12/18 07:22:35:6330] N: __lws_lc_tag: ++ [wsiSScli|2|myserver] (3)
[2024/12/18 07:22:35:6330] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: (unset) -> LWSSSCS_CREATING
[2024/12/18 07:22:35:6331] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CREATING -> LWSSSCS_CONNECTING
[2024/12/18 07:22:35:6332] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CONNECTING -> LWSSSCS_CONNECTED
[2024/12/18 07:22:35:6332] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CONNECTED -> LWSSSCS_SERVER_TXN
[2024/12/18 07:22:35:6332] U: [wsiSScli|2|myserver]: myss_srv_tx: TX 26, flags 0x3, r 0
[2024/12/18 07:22:35:6332] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: LWSSSCS_SERVER_TXN -> LWSSSCS_DISCONNECTED
[2024/12/18 07:22:35:6332] N: [wsiSScli|2|myserver]: lws_ss_check_next_state_ss: LWSSSCS_DISCONNECTED -> LWSSSCS_DESTROYING
[2024/12/18 07:22:35:6332] N: __lws_lc_untag: -- [wsiSScli|2|myserver] (2) 200μs
[2024/12/18 07:22:35:6332] N: __lws_lc_untag: -- [mux|0|myserver|h2_sid3_(wsisrv|0|myserver)] (0) 229μs
^C[2024/12/18 07:22:39:8479] N: __lws_lc_untag: -- [wsi|0|pipe] (2) 10.637s
[2024/12/18 07:22:39:8481] N: __lws_lc_untag: -- [wsisrv|0|myserver|(null)] (0) 4.231s
[2024/12/18 07:22:39:8481] N: __lws_lc_untag: -- [wsi|2|listen|myserver||7681] (1) 10.528s
[2024/12/18 07:22:39:8482] N: __lws_lc_untag: -- [vh|2|myserver||7681] (2) 10.529s
[2024/12/18 07:22:39:8482] N: __lws_lc_untag: -- [wsi|1|listen|myserver||7681] (0) 10.529s
[2024/12/18 07:22:39:8482] N: __lws_lc_untag: -- [vh|0|netlink] (1) 10.637s
[2024/12/18 07:22:39:8482] N: [wsiSScli|1|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CONNECTING -> LWSSSCS_DESTROYING
[2024/12/18 07:22:39:8482] N: __lws_lc_untag: -- [wsiSScli|1|myserver] (1) 4.231s
[2024/12/18 07:22:39:8482] N: [wsiSScli|0|myserver]: lws_ss_check_next_state_ss: LWSSSCS_CREATING -> LWSSSCS_DESTROYING
[2024/12/18 07:22:39:8482] N: __lws_lc_untag: -- [wsiSScli|0|myserver] (0) 10.529s
[2024/12/18 07:22:39:8486] N: __lws_lc_untag: -- [vh|1|_ss_default||-1] (0) 10.637s
[2024/12/18 07:22:39:8486] U: Completed: OK (seen expected 0)
```