* fix#2227
Instead of returning an error from Accept(), force the caller to process
errors from trying to read and parse the PROXY protocol.
The advantage here is that we don't have to rely on (net.Error).Temporary
or incur timed backoff from net/http when hitting these errors. However,
we still risk stalling processing of new incoming connections if someone
opens a connection to the proxy listener and doesn't send anything.
This is hard to fix while maintaining the net.Listener abstraction in
cooperation with http.Server.
* reduce proxy deadline to 5 seconds
* Add API endpoint /v1/ns/passwd to change passwords
* New naming scheme for API endpoints under /v1/ns/
* /v1/ns/list no longer returns error responses
* Consistently return UNKNOWN_MSGID for unknown or invalid msgids
* If both client's DMs are stored in persistent history, a single
server.DeleteMessage will delete the single canonical copy of the message.
So the second call will fail, which is fine.
* abstract history DB interface
* make mysql error logging consistent
Consistently propagate database errors to the client, making the client
responsible for logging them.
* move ListCorrespondents from Sequence to Database/Buffer
If bob is monitoring alice, bob should get METADATA lines for alice
even if bob doesn't have extended-monitor.
This implementation also removes the check for extended-monitor
when sending account-notify, away-notify, chghost, setname
(which are explicitly mentioned in the extended-monitor spec)
on the grounds that nothing bad will happen if clients who support
the cap receive notifications for users they're not explicitly tracking.
* Impose a throttle on OPER attempts regardless of whether they caused a
password check.
* Never disconnect the client on a failed attempt, even if there was a
password check.
* Change error numeric to ERR_NOOPERHOST
* Explicit information about the failure in the server log (copying Insp)
Fixes#2296.
They are validated by test message, but it would have been possible
to add an http url.
If an http url was added, it's still possible to remove it via
NS PUSH DELETE.