* https-proxy-config: (92 commits)
increases tcp proxy listener timeout to 2 minutes
fixes dumb bug in tcp reverse proxy remote address resolution
upgrades libh2o to v0.13.5 (h2o v2.2.5)
sets the http client request timeout to 2 minutes
adds an http request timer to ensure connections are always closed
adds an http request timer to ensure connections are always closed
adds (disabled) h2o access log
don't leak ship-name in _proxy_ward_connect()
refactors .http.ports write/release (avoid the loom, etc.)
updates SSL_CTX init to support any PEM private key, simplifies error handling
adds u3_wcon (ward candidate conn), refactors ward connection accept and auth
enables ALPN and HTTP2 over TLS
increases timeout before server struct, adds explanatory comment
closes u3_ward stream and timer sequentially, fixing use-after-free per ASan
moves u3_pact to vere.h, replacing the unused u3_apac
fixes memory leak in failed cttp.c address resolution
suppresses AddressSanitizer in vararg functions u3i_molt and u3r_mean
ignores AddressSanitizer errors in jets.c
updates %wise and %that to give and receive the proxy auth nonce
implements nonce-baced authentication for u3_ward proxies
...
The spinner is a simple |/-\ at the current cursor position. For non-terminal
events, the root of the event's wire is also displayed to the right of the
spinner to give some indication of what's causing an unresponsive terminal.
I used the simplest synchronization strategy I could think of: u3_utat.mex_u is
a mutex that serializes access to a terminal's state. The main thread holds it
at all times except when processing events. When a terminal receives a %bee blit
with a non-nul bulb (the event ovum), it releases the mutex to let the spinner
thread do its thing. A %bee with a nul bulb halts the spinner by grabbing the
mutex and refreshing the input line.
Off-thread console writes are directly against the underlying fd to avoid
trashing non-thread-safe libuv state. Given the simple locking pattern, calling
libuv from the spinner thread might be fine, but I didn't feel like auditing
vere to rule out concurrent calls. It worked when I tried it, but... threads.
I didn't look into supporting anything other than the main terminal, so
currently it's the only one that receives %bee blits. In daemon mode, the
spinner is disabled entirely and no additional thread is started.