Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/http2-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ void doc_h2_client_submit(uvcpp::uvcpp_h2_connection* conn) {
`tls_alpn_selected()`(`src/web/uvcpp_http_client.cpp:327-327`)→ `start_h2()`(`src/web/uvcpp_http_client.cpp:331-331` → `src/web/uvcpp_http_client.cpp:2048-2048`)→ 装回调(`src/web/uvcpp_http_client.cpp:2050-2050`)
→ `h2_->start(sc, cc)`(`src/web/uvcpp_http_client.cpp:2091-2091`)→ `send()` 分流到 `send_h2`(`src/web/uvcpp_http_client.cpp:489-489`)。

**`set_http2_enabled` 默认是关的**(`src/web/uvcpp_http_client.h:684-684`、
**`set_http2_enabled` 默认是关的**(`src/web/uvcpp_http_client.h:686-686`、
`src/web/uvcpp_http_server.h:357-357`)—— 低层的两条线都要显式打开,
只有 `webapp/` 框架层是零配置自动协商。

Expand Down
2 changes: 1 addition & 1 deletion doc/http2-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@

### 1.3 三个接入面

- **低层库**:`uvcpp_http_client::set_http2_enabled`(`src/web/uvcpp_http_client.h:432-432`)
- **低层库**:`uvcpp_http_client::set_http2_enabled`(`src/web/uvcpp_http_client.h:434-434`)
与 `uvcpp_http_server::set_http2_enabled`(`src/web/uvcpp_http_server.h:355-355`),
**都默认关**。
- **框架(webapp)**:零配置自动协商。ALPN 名单里 `h2` 在前
Expand Down
6 changes: 3 additions & 3 deletions doc/http3-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ void connect_over_http3(uvcpp_http_client& cli, int udp_port) {
```

- `uvcpp_http_server::listen_quic()` 在 `src/web/uvcpp_http_server.h:270`,
客户端那一侧是 `set_http3_enabled()`(`src/web/uvcpp_http_client.h:503-503`)。
客户端那一侧是 `set_http3_enabled()`(`src/web/uvcpp_http_client.h:505-505`)。
**整个 h3 公开面都套在 `#if UVCPP_HTTP3_ENABLE` 里** —— 没编进来时它不存在,
这是**编译期**的"没有",不是运行时返回错误。
- **`"h3"` 绝不进 TCP 的 ALPN 列表。** h3 只跑在 QUIC(UDP)上;在 TCP 的
Expand Down Expand Up @@ -422,7 +422,7 @@ void connect_over_http3(uvcpp_http_client& cli, int udp_port) {
模块",所以 §3.3 那条明明只用 web 层 API 的片段也列了
`<http3/uvcpp_h3_connection.h>` —— 不列的话它会**被编**,而它调的
`set_http3_enabled()` / `listen_quic()` 整段在 `#if UVCPP_HTTP3_ENABLE` 里
(`src/web/uvcpp_http_client.h:503-503`、`uvcpp_http_server.h:220`),于是报的是"未声明的
(`src/web/uvcpp_http_client.h:505-505`、`uvcpp_http_server.h:220`),于是报的是"未声明的
成员":那是**假红**(文档没腐烂,是那个包没编 h3)。
登记之后,`config-contract` job 手里那个包会把这三条判成 `[跳·默认关]` 而不是
`[跳]`,**退出码不会抬到 3**。两个宏(`UVCPP_QUIC_ENABLE`、`UVCPP_HTTP3_ENABLE`)
Expand Down Expand Up @@ -475,7 +475,7 @@ h1 写泵、TCP 的 ALPN 列表与分支 —— **全部不改**。唯一的例
(`std::map<uvcpp_quic_connection*, quic_ctx> quic_ctxs_`,
`src/web/uvcpp_http_server.h:1750-1750`),只在 QUIC 回调里碰;`conn_ctx` **不加任何
字段** —— 那个结构体在 h1 的**每请求**热路上,往里加一个字都是每个 h1 请求都要付
的。客户端加了六个成员(三个 `bool`、一个 `int64`、两个指针,`src/web/uvcpp_http_client.h:714-720`)
的。客户端加了六个成员(三个 `bool`、一个 `int64`、两个指针,`src/web/uvcpp_http_client.h:716-722`)
—— 那是每**连接**一个的对象,不是每请求一个;`send()` 热路上多的是一个可预测为假
的分支。不新增每连接或每请求的 `std::function`,不新增锁、不新增分配、不新增虚调用。

Expand Down
2 changes: 1 addition & 1 deletion doc/multiloop-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ DragonFly/Solaris/AIX 生效)。改法是:监听 fd 建一次,`dup()` n
| `uvcpp_http_server::contexts_` | `src/web/uvcpp_http_server.h:1844-1844` | **每请求**(`.cpp` 里 52 处引用)—— **已切开**(§4.1) |
| ~~`uvcpp_web_app::inflight_`~~ → `loop_slot::inflight` | `src/webapp/uvcpp_web_app.h:2222-2222`(**已切开**,W4 / 2c) | **每请求** |
| ~~`uvcpp_web_app::upgraded_`~~ → `loop_slot::upgraded` | `src/webapp/uvcpp_web_app.h:2281-2281`(**已切开**,W4 / 2c) | 每次 WS 升级 |
| `uvcpp_tcp_server::clients_` | `src/net/uvcpp_tcp_server.h:965-965` | 接受 / 关闭 / 计数 |
| `uvcpp_tcp_server::clients_` | `src/net/uvcpp_tcp_server.h:967-967` | 接受 / 关闭 / 计数 |

**比上面几条都靠前的一条:`post()` 本身是单循环的。** 它原来只有一份
`loop_tid_`/`post_queue_`,投递入口判据是 `loop_tid_ == std::this_thread::get_id()`。
Expand Down
2 changes: 1 addition & 1 deletion doc/net-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ size_t close_all_clients();
| setter | 约束 |
|---|---|
| `set_read_callback` | 必须在 loop 线程调用,且应当在 `listen()` 之前设好(`src/net/uvcpp_tcp_server.h:574-574`) |
| `set_ssl_context` | 必须在 `listen()` 之前设置(`src/net/uvcpp_tcp_server.h:706-707`) |
| `set_ssl_context` | 必须在 `listen()` 之前设置(`src/net/uvcpp_tcp_server.h:708-709`) |
| `set_tcp_nodelay` | 必须在 `listen()`(以及 `set_loops(n > 1)`,如果要用)之前调(`src/net/uvcpp_tcp_server.h:235-235`) |

`set_read_callback` 的实现就是一句赋值(`src/net/uvcpp_tcp_server.cpp:1061-1063`),
Expand Down
2 changes: 1 addition & 1 deletion doc/ssl-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ srv.add_sni_certificate_file("*.static.example.com", "static.pem", "static.key")

| 落点 | 声明 | 所有权说明 |
|---|---|---|
| `uvcpp_tcp_server::set_ssl_context` | `src/net/uvcpp_tcp_server.h:709-709` | "生命周期必须覆盖**整个服务端**,本服务端不持有它的所有权,也不负责释放"(`src/net/uvcpp_tcp_server.h:702-704`) |
| `uvcpp_tcp_server::set_ssl_context` | `src/net/uvcpp_tcp_server.h:711-711` | "生命周期必须覆盖**整个服务端**,本服务端不持有它的所有权,也不负责释放"(`src/net/uvcpp_tcp_server.h:702-704`) |
| `uvcpp_tcp_client::enable_tls` | `src/net/uvcpp_tcp_client.h:221-221` | "生命周期必须覆盖**整条连接**"(`:217`) |
| `uvcpp_web_app` | `src/webapp/uvcpp_web_app.cpp:2168-2168` | 全库唯一"有人拥有"的一处:`std::shared_ptr<uvcpp_ssl_context>` |

Expand Down
10 changes: 5 additions & 5 deletions doc/web-http-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
**三、`web/` 有 h2,但入口有三条。** 服务端 `set_http2_enabled(true)`
(`src/web/uvcpp_http_server.h:357-357`)加 TLS+ALPN,服务端 `set_h2c_enabled(true)`
(明文先验知识,RFC 9113 §3.4),客户端 `set_http2_enabled(true)`
(`src/web/uvcpp_http_client.h:684-684`)。
(`src/web/uvcpp_http_client.h:686-686`)。
前两条都**默认关**;只有 `webapp/` 框架层默认开、零配置自动协商。
**不做 `Upgrade: h2c` 协商**(RFC 9113 已删除该机制),**也不做嗅探** —— 明文这条腿
只认那 24 个字节。
Expand Down Expand Up @@ -95,7 +95,7 @@
`uvcpp_http_server` **自己不碰 TLS** —— 它没有任何 SSL API。要上 https 必须
`get_tcp_server()->set_ssl_context(...)`,**而且必须在 `listen()` 之前**
(`tests/functional/web_ssl_h2_client_func.cpp:186-186`)。握手超时归
`uvcpp_tcp_server`(默认 10000 ms,`src/net/uvcpp_tcp_server.h:805-805`)。
`uvcpp_tcp_server`(默认 10000 ms,`src/net/uvcpp_tcp_server.h:807-807`)。

---

Expand Down Expand Up @@ -471,7 +471,7 @@ int doc_client_async() {

`send` / `get` / `post` 的回调签名逐字是
`std::function<void(const uvcpp_http_response&, int)>`(`src/web/uvcpp_http_client.h:219-274`)。
交付的 `resp` 是成员 `pending_resp_`(`src/web/uvcpp_http_client.h:648-648`)的 const 引用 —— **存到下次 `send()`
交付的 `resp` 是成员 `pending_resp_`(`src/web/uvcpp_http_client.h:650-650`)的 const 引用 —— **存到下次 `send()`
就被覆写**。

**异步路径没有超时,`connect()` 也不设**(`src/web/uvcpp_http_client.cpp:64-68`)。
Expand All @@ -481,7 +481,7 @@ int doc_client_async() {
"对端在响应收完前断开"时 `send()` 的回调永远不来。

**在响应回调里 `delete` 客户端是预期的用法。** 所有闭包都捕一个 `alive_token_`
弱引用(`src/web/uvcpp_http_client.h:631-642`),析构第一件事就 reset
弱引用(`src/web/uvcpp_http_client.h:633-644`),析构第一件事就 reset
(`src/web/uvcpp_http_client.cpp:84-84`)—— 你不需要为它做任何额外的事。

### 流式响应(`send_stream`,`1.8.2` 起)
Expand Down Expand Up @@ -531,7 +531,7 @@ int doc_client_sync() {
### 三个容易写错的地方

**一、keep-alive 有两个方向:请求那头听调用方的,响应那头听对端的。**
`keep_alive_` 是**调用方的偏好**(`src/web/uvcpp_http_client.h:615-615` 初值 `true`、
`keep_alive_` 是**调用方的偏好**(`src/web/uvcpp_http_client.h:617-617` 初值 `true`、
`src/web/uvcpp_http_client.h:297-297` 声明 `set_keep_alive`、`src/web/uvcpp_http_client.cpp:1355-1355` setter)。`set_keep_alive(false)`
会让请求报文带上 `connection: close`(`src/web/uvcpp_http_client.cpp:591-610`);
默认的 `true` 则不补头,报文里那条 `connection: keep-alive` 是
Expand Down
2 changes: 1 addition & 1 deletion doc/web-ws-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ void close(ws_close_code code = ws_close_code::NORMAL,
const std::string& reason = std::string()); // src/web/uvcpp_ws_client.h:164-165
int run(uv_run_mode md = UV_RUN_DEFAULT); // src/web/uvcpp_ws_client.h:171-171
void stop(); // src/web/uvcpp_ws_client.h:172-172
void set_ssl_context(uvcpp_ssl_context* ctx); // src/web/uvcpp_ws_client.h:211-211
void set_ssl_context(uvcpp_ssl_context* ctx); // src/web/uvcpp_ws_client.h:213-213
```

```cpp
Expand Down
2 changes: 1 addition & 1 deletion doc/webapp-support-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
`uvcpp/uvcpp_config.h` 提供;自己传一个冲突的值是硬 `#error`)。

**这七个头里没有一个用 `UVCPP_WEBAPP_ENABLE` 守卫自己。** 21 个 webapp 头
里只有 `src/webapp/uvcpp_web_ws_client.h:52` 一处(`#endif` 在 `src/webapp/uvcpp_web_ws_client.h:435-435`)用了这个宏。
里只有 `src/webapp/uvcpp_web_ws_client.h:52` 一处(`#endif` 在 `src/webapp/uvcpp_web_ws_client.h:438-438`)用了这个宏。
所以"没开 webapp 却 include 了这七个头"是**链接期失败**(那几个 `.cpp` 没进构建,
`CMakeLists.txt:2343-2344`),不是编译期被 `#if` 挡住。这与 `uvcpp_web_ws_client.h`
的做法不一致 —— 看上去是历史的,不是设计。
Expand Down
2 changes: 1 addition & 1 deletion doc/worker-process-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ Windows 要真正能用,得走 **master 自己 `accept()` + 每连接 `WSADupl
`uvcpp_web_app` 的 `upgraded` / `inflight`(`src/webapp/uvcpp_web_app.h:2281-2281` /
`src/webapp/uvcpp_web_app.h:2222-2222`;这两个容器后来在多循环那条路上被搬进了
`loop_slot`,见 `doc/multiloop-design.md` §4.1)、
`uvcpp_tcp_server` 的 `clients_`(`src/net/uvcpp_tcp_server.h:965-965`)都不需要切成 per-loop。
`uvcpp_tcp_server` 的 `clients_`(`src/net/uvcpp_tcp_server.h:967-967`)都不需要切成 per-loop。
这是选这条路**白拿**的最大一块。
- **日志那条闸门在进程内照样存在。** 1.4.0 之后 `src/webapp/uvcpp_log.cpp:416-436` 的
`write()` 已经**不持锁调 sink** 了(锁内只快照一次 `sink()`,`:342-351`),但默认
Expand Down
2 changes: 2 additions & 0 deletions src/net/uvcpp_tcp_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,8 @@ class UVCPP_API uvcpp_tcp_server {
* 也不负责释放)。用 `uvcpp_ssl_context` 的 SERVER 模式,
* 并装好证书/私钥。
*
* **销毁顺序**:上下文必须比本对象活得久 —— 同一作用域里先声明上下文、再声明本对象;
* 反过来(先本对象后上下文)时,本对象析构收尾仍会拿这个裸指针去用,是 UB(issue #56)。
* @warning 必须在 `listen()` 之前设置。清空用 `set_ssl_context(nullptr)`。
* @warning 必须在 loop 线程调用。
*/
Expand Down
2 changes: 2 additions & 0 deletions src/quic/uvcpp_quic_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ class UVCPP_API uvcpp_quic_client {
* @param ctx 生命周期必须覆盖整条连接(**不属于本对象**)。清空用
* `set_ssl_context(nullptr)`。
*
* **销毁顺序**:上下文必须比本对象活得久 —— 同一作用域里先声明上下文、再声明本对象;
* 反过来(先本对象后上下文)时,本对象析构收尾仍会拿这个裸指针去用,是 UB(issue #56)。
* **不设就是没配**:QUIC 没有明文模式(ALPN 是 TLS 扩展),所以
* `connect()` 时上下文为空会返回 `UV_EINVAL`,而不是退化成一个不加密的连接。
*/
Expand Down
2 changes: 2 additions & 0 deletions src/quic/uvcpp_quic_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ class UVCPP_API uvcpp_quic_server {
* @param ctx 生命周期必须覆盖整条连接(**不属于本对象**)。清空用
* `set_ssl_context(nullptr)`。
*
* **销毁顺序**:上下文必须比本对象活得久 —— 同一作用域里先声明上下文、再声明本对象;
* 反过来(先本对象后上下文)时,本对象析构收尾仍会拿这个裸指针去用,是 UB(issue #56)。
* **不设就是没配**:QUIC 没有明文模式(ALPN 是 TLS 扩展),所以 `listen()` 时
* 上下文为空会返回 `UV_EINVAL`,而不是退化成一个不加密的服务端。
*/
Expand Down
2 changes: 2 additions & 0 deletions src/web/uvcpp_http_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,8 @@ class UVCPP_API uvcpp_http_client {
* SSL_read/SSL_write 要独占 socket,接管不了 memory BIO 那条会话。
* 宁可报错,也不把明文写进一条已经加密的连接。
*/
/// 上下文必须比本对象活得久:客户端只存裸指针,析构收尾时 TLS 会话还会用它。
/// 同一作用域里**先声明上下文、再声明本对象**;反过来是 UB(issue #56)。
void set_ssl_context(uvcpp_ssl_context* ctx);
bool is_ssl_enabled() const;
/** @brief 同步 SSL 请求路径(阻塞式握手/读写,仅 *_wait 系列使用)。 */
Expand Down
2 changes: 2 additions & 0 deletions src/web/uvcpp_ws_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ class UVCPP_API uvcpp_ws_client {
#endif

#if UVCPP_OPENSSL_ENABLE
/// 上下文必须比本对象活得久:只存裸指针,析构收尾时还会用它;同一作用域里先声明
/// 它、再声明本对象(先本对象后上下文是 UB,issue #56)。
void set_ssl_context(uvcpp_ssl_context* ctx);
#endif

Expand Down
3 changes: 3 additions & 0 deletions src/webapp/uvcpp_web_ws_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,9 @@ class UVCPP_API uvcpp_web_ws_client {
/**
* @brief `wss://` 用的 TLS 上下文。**生命周期要覆盖整条连接**(本层不持有)。
*
* **销毁顺序**:同一作用域里先声明上下文、再声明本对象;反过来时本对象析构收尾
* 仍会拿这个裸指针去用,是 UB(issue #56)。
*
* 与协议层不同,这里可以在 `connect()` 之后再设:本层存着,每次重建底层
* 客户端时重新装上去。
*/
Expand Down
26 changes: 13 additions & 13 deletions tests/tools/doc_line_refs.lock
Original file line number Diff line number Diff line change
Expand Up @@ -364,11 +364,11 @@ src/net/uvcpp_tcp_server.h:574-574 08b07dd52467473b 08b07dd52467473b -
src/net/uvcpp_tcp_server.h:59-65 6c4934b261a9cc89 4f8f1b25eeafd8a4 d43444b1e3b56248
src/net/uvcpp_tcp_server.h:693-701 d8b58caf3500ebca ba98e21b46a7f3c3 1a14c87e2385508e
src/net/uvcpp_tcp_server.h:702-704 bf9968cb4e22ad54 ef52884bf8e7c50e 829abaae1045b45a
src/net/uvcpp_tcp_server.h:706-707 50942e088938071d f5ba1f839216339a 36a2016703244047
src/net/uvcpp_tcp_server.h:709-709 cb2dd4f1b3ddbd6a cb2dd4f1b3ddbd6a -
src/net/uvcpp_tcp_server.h:805-805 cdbc26b28b6467b5 cdbc26b28b6467b5 -
src/net/uvcpp_tcp_server.h:708-709 50942e088938071d f5ba1f839216339a 36a2016703244047
src/net/uvcpp_tcp_server.h:711-711 cb2dd4f1b3ddbd6a cb2dd4f1b3ddbd6a -
src/net/uvcpp_tcp_server.h:807-807 cdbc26b28b6467b5 cdbc26b28b6467b5 -
src/net/uvcpp_tcp_server.h:92-97 451a810cbb9be70b 30f2378010013043 a251d8a336202775
src/net/uvcpp_tcp_server.h:965-965 0e77dae47f5f5e18 0e77dae47f5f5e18 -
src/net/uvcpp_tcp_server.h:967-967 0e77dae47f5f5e18 0e77dae47f5f5e18 -
src/net/uvcpp_udp_client.cpp:1148-1148 a0f156405122d91e a0f156405122d91e -
src/net/uvcpp_udp_client.h:74-74 25bf4d22cd8306d1 25bf4d22cd8306d1 -
src/net/uvcpp_udp_server.cpp:165-165 f756f35ae790d904 f756f35ae790d904 -
Expand Down Expand Up @@ -497,14 +497,14 @@ src/web/uvcpp_http_client.h:219-274 68d3495d6dc6d27f 859ac3537b2a51dc f75806f32b
src/web/uvcpp_http_client.h:297-297 ac2839442940b98f ac2839442940b98f -
src/web/uvcpp_http_client.h:351-363 1bb68c33ddd7d992 ee565528dbe5722b 1ca3932dc0f925c0
src/web/uvcpp_http_client.h:380-389 0e4969770f315a3c 96423943c5eb9538 15de869105d2e276
src/web/uvcpp_http_client.h:432-432 5ec5be8e44ec8d13 5ec5be8e44ec8d13 -
src/web/uvcpp_http_client.h:503-503 1a03c4409bf0b24d 1a03c4409bf0b24d -
src/web/uvcpp_http_client.h:434-434 5ec5be8e44ec8d13 5ec5be8e44ec8d13 -
src/web/uvcpp_http_client.h:505-505 1a03c4409bf0b24d 1a03c4409bf0b24d -
src/web/uvcpp_http_client.h:51-53 22f2d8d7b1cbef95 24a0ea5ff3bfa408 da39a3ee5e6b4b0d
src/web/uvcpp_http_client.h:615-615 77940e08340681ed 77940e08340681ed -
src/web/uvcpp_http_client.h:631-642 5e1bd587480aa0cd 41c5717b5d15e16b 0b2b8a8ee10f67b6
src/web/uvcpp_http_client.h:648-648 ffdce0a14f48d09e ffdce0a14f48d09e -
src/web/uvcpp_http_client.h:684-684 87d70f054eaf6247 87d70f054eaf6247 -
src/web/uvcpp_http_client.h:714-720 492d3de4ee7ad403 983b8bdf59a78818 d7e5948b212bfd26
src/web/uvcpp_http_client.h:617-617 77940e08340681ed 77940e08340681ed -
src/web/uvcpp_http_client.h:633-644 5e1bd587480aa0cd 41c5717b5d15e16b 0b2b8a8ee10f67b6
src/web/uvcpp_http_client.h:650-650 ffdce0a14f48d09e ffdce0a14f48d09e -
src/web/uvcpp_http_client.h:686-686 87d70f054eaf6247 87d70f054eaf6247 -
src/web/uvcpp_http_client.h:716-722 492d3de4ee7ad403 983b8bdf59a78818 d7e5948b212bfd26
src/web/uvcpp_http_client.h:78-78 b28db9b27491a2ec b28db9b27491a2ec -
src/web/uvcpp_http_common.h:246-247 5d5591c858a59089 abf28ca15bd6320a 2c6c767a330c50df
src/web/uvcpp_http_common.h:679-679 8440f66064369963 8440f66064369963 -
Expand Down Expand Up @@ -670,7 +670,7 @@ src/web/uvcpp_ws_client.h:164-165 79f887cd410dc60f 65247d3f22a6925c 1f76f3341ebc
src/web/uvcpp_ws_client.h:171-171 dfce7075e36d0e0a dfce7075e36d0e0a -
src/web/uvcpp_ws_client.h:172-172 96d3559398aa018e 96d3559398aa018e -
src/web/uvcpp_ws_client.h:206-206 1b8278d66ed4cfe0 1b8278d66ed4cfe0 -
src/web/uvcpp_ws_client.h:211-211 cb2dd4f1b3ddbd6a cb2dd4f1b3ddbd6a -
src/web/uvcpp_ws_client.h:213-213 cb2dd4f1b3ddbd6a cb2dd4f1b3ddbd6a -
src/web/uvcpp_ws_client.h:34-34 d5e8c6bfebc5d629 d5e8c6bfebc5d629 -
src/web/uvcpp_ws_client.h:43-55 2bb502980db447a3 c4d2345910e45855 6bfd5fa82e88e4ce
src/web/uvcpp_ws_client.h:56-56 48ef6d3897eb5aab 48ef6d3897eb5aab -
Expand Down Expand Up @@ -1045,7 +1045,7 @@ src/webapp/uvcpp_web_util.h:449-451 4c9252b2dd29c486 e3b5cff9df83b751 640a24243f
src/webapp/uvcpp_web_util.h:453-457 9ff2e4958b28c525 2e594c3e2d43c9cc 801242e1ce112eb2
src/webapp/uvcpp_web_util.h:494-494 c1438ca98c7caa1f c1438ca98c7caa1f -
src/webapp/uvcpp_web_work_limit.cpp:222-226 83782a20836777fc c2b7df6201fdd336 3c6564d375e78b9d
src/webapp/uvcpp_web_ws_client.h:435-435 7c944a0bf34320a1 7c944a0bf34320a1 -
src/webapp/uvcpp_web_ws_client.h:438-438 7c944a0bf34320a1 7c944a0bf34320a1 -
src/webapp/uvcpp_web_ws_client.h:52-52 54180563d582dd6f 54180563d582dd6f -
tests/functional/web_app_context_func.cpp:920-920 2b72c521e6313c92 2b72c521e6313c92 -
tests/functional/web_app_log_func.cpp:103-103 cd7473c402def02f cd7473c402def02f -
Expand Down
Loading