On stop the cached listenings sockets were freed through the hashtable;
but they are actually refcounted, and the hashtable only has a "weak"
reference (which gets cleared once all strong references are dropped).
* fix handling of "simple calls" (notifications)
when plugin/action can't be found (must not send
an error response, as id == -1)
* server stop clears all plugins; don't log error in
* try to adapt a more modern python style
* add flake8 linting and mypy type checking
* add many type hints
* various refactorings to make proper type hints possible
* use f-strings for formatting instead of `%` and `.format`
* get rid of `Env` global; pass it explicitly or use a ContextVar
* use metaclass to automatically register test cases
It seems this is actually allowed by the RFCs; although it is intended
as HTTP/1.0 backward compatibility, and HTTP/1.1 servers (backends)
really should do better.
... so li_stream_simple_socket_close doesn't need to acquire (when the rc might already be 0).
Instead call li_iostream_reset in all places that didn't acquire before,
and drop the acquire.
- use decoded path instead of orig raw path (which includes the query
string); the decoded path should be safe, and we also really don't
need to support any "raw" handling - we're at the filesystem level