1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
[]
= "simoom"
= "simoom: a small, fast, secure embeddable HTTP/1.1, HTTP/2 and HTTP/3 server."
= true
= true
= true
= true
= true
= true
= ["http", "http2", "http3", "server", "quic"]
= ["web-programming::http-server", "network-programming", "embedded"]
= "https://github.com/Cameleering/simoom"
= "https://docs.rs/simoom"
= "../../README.md"
[]
= true
[]
= { = "../simoom-rt", = "0.1.0", = false }
# Per-thread CPU time for the stall watchdog.
= { = "../simoom-sys", = "0.1.0", = false }
# Always linked for the Date header, header validation and base64; its request parser is linked
# only with the `http1` feature, its WebSocket codec only with `websocket`.
= { = "../simoom-http1", = "0.1.0", = false }
# Its `connect-protocol` and `keepalive` features come with `websocket-h2` and `h2-keepalive`.
= { = "../simoom-h2", = "0.1.0", = true, = false }
= { = "../simoom-tls", = "0.1.0", = true, = false }
= { = "../simoom-quic", = "0.1.0", = true, = false }
= { = "../simoom-h3", = "0.1.0", = true }
= { = "../simoom-compress", = "0.1.0", = true }
[]
= ["http1", "http2", "websocket", "io-uring", "watchdog", "guard", "idle-trim"]
# HTTP/1.1 over TCP: keep-alive, pipelining, chunked bodies, 100-continue.
= []
# HTTP/2: h2c with prior knowledge and `Upgrade: h2c`, and h2 over TLS through ALPN.
= ["dep:simoom-h2"]
# TLS 1.3 on TCP listeners; ALPN chooses h2 or http/1.1.
= ["dep:simoom-tls", "simoom-tls/rsa"]
# The remaining TLS key types and suite: ECDSA P-384 and Ed25519 certificates, and
# ChaCha20-Poly1305. `tls` alone has X25519, P-256, RSA and AES-GCM, which covers the
# certificates people actually deploy.
= ["tls", "simoom-tls/p384", "simoom-tls/ed25519", "simoom-tls/chacha20"]
# HTTP/3 over QUIC on UDP listeners (needs TLS 1.3).
= ["tls", "dep:simoom-quic", "dep:simoom-h3", "simoom-rt/udp"]
# WebSocket upgrades (RFC 6455) on HTTP/1.1.
= ["http1", "simoom-http1/websocket"]
# The stall watchdog (`Limits::inline_budget`): finds inline handlers that hold a loop thread
# and moves their route to the offload pool. On by default; an edge build that leaves it out
# saves its code, and `inline_budget` and the stall limits are then ignored.
= []
# Overload and slow-client guards (K5, K6): admission by backpressure
# (`Limits::max_pending_per_loop`, `Limits::pending_503`), slow request heads kept open until the
# server is short of connections (`Limits::slow_head_limit`) and the per-IP reconnect rate
# (`Limits::reconnect_rate`). On by default; an edge build that leaves it out saves their code,
# those limits are then ignored and slow heads close at `head_timeout`.
= []
# Memory returned after bursts (simoom-rt `idle-trim`): an idle loop frees cached buffers and
# asks the allocator to give free memory back to the OS. On by default.
= ["simoom-rt/idle-trim"]
# Alias of `websocket`.
= ["websocket"]
# WebSocket over HTTP/2 (RFC 8441, extended CONNECT): `Reply::websocket` also accepts
# `:protocol websocket` streams. Not in `default` or `full`, which keep their size budgets.
= ["websocket", "http2", "simoom-h2/connect-protocol"]
# HTTP/2 PING keepalive (`Limits::h2_keepalive`): finds clients that vanished behind
# long-lived streams. Without it those limits are ignored.
= ["http2", "simoom-h2/keepalive"]
# Response compression (gzip, deflate) negotiated from `Accept-Encoding`
# (`Builder::compression`), and request body decoding (`Request::decoded_body`).
= ["dep:simoom-compress"]
# Brotli (`br`) and zstd responses and request decoding, on top of `compression`.
= ["compression", "simoom-compress/brotli"]
= ["compression", "simoom-compress/zstd"]
# WebSocket over HTTP/3 (RFC 9220, extended CONNECT): `Reply::websocket` also accepts
# `:protocol websocket` streams on QUIC.
= ["websocket", "http3"]
# WebSocket permessage-deflate (RFC 7692, `Builder::websocket_deflate`).
= ["websocket", "simoom-http1/permessage-deflate"]
# Server helpers (each its own feature): `multipart/form-data` parsing (`simoom::multipart`),
# cookies (`simoom::cookie`), conditional and range requests (`simoom::conditional`), CORS
# (`simoom::cors`).
= []
= []
= []
= []
# Authentication helpers (`simoom::auth`): Basic, Digest (RFC 7616, signed nonces, replay
# protection, rspauth), Bearer extraction and the `Auth::wrap` service. Hashes and HMAC from
# simoom-tls (MD5 from its `legacy` module).
= ["dep:simoom-tls", "simoom-tls/legacy"]
= ["http1", "http2", "http3", "tls", "tls-extra", "tls-client", "websocket", "io-uring", "watchdog", "guard", "idle-trim"]
# The TLS client (simoom-tls's, and simoom-quic's QUIC client). The server never needs it; the
# TLS and HTTP/3 tests use it.
= ["tls", "simoom-tls/client", "simoom-quic?/client"]
# The Linux io_uring back end (`Backend::IoUring`; without it that falls back to epoll). On by
# default for servers; an edge build (`--no-default-features --features http1`) leaves it out.
= ["simoom-rt/io-uring"]
[[]]
= "h3_bulk"
= ["http3", "tls-client"]
[[]]
= "interop_server"
= ["http3", "tls-extra"]
[[]]
= "watchdog"
= ["watchdog"]