Add irc to ALPN protocols
The new ALPN token has been approved . We can start using it now.
if true return true else return false
Use sendTargetBacklog when re-attaching a channel
No need to attempt to send backlog for all targets in the network.
We're only interested in a single channel.
Rename network.history to network.delivered
"History" is over-loaded with e.g. CHATHISTORY support.
Rename sendNetworkHistory to sendNetworkBacklog
"History" is a little bit over-loaded with CHATHISTORY support.
Add support for graceful shutdown
Request invite-notify to upstreams
... and do not forward INVITEs to downstreams that do not support the
The downstream capability can be permanent because there is no way for a
client to get the list of people invited to a channel, thus no state can
Forward ISUPPORT NETWORK token
Send RPL_ISUPPORT CHATHISTORY token
In particular, go-irc v3.1.4 should fix empty IRC message handling.
Don't forward batch tags
We don't want to have the batch tag when calling uc.produce, otherwise
downstream will end up with junk batch ids.
Add in-memory message store
Uses an in-memory ring buffer.
Make chat history operations optional in messageStore
Some stores may want not to implement chat history operations.
Add store-agnostic message ID format
Allow to query the network ID and entity from the message ID regardless
of the underlying store used.
Turn messageStore into an interface
This allows for other implementations that aren't based on a filesystem.
Improve dc.authenticate()'s error messages
Advertise all caps, CAP DEL them on registration
... so that the JOIN/history batch takes into account all capabilities.
Without this commit for example, enabling multi-prefix after the batch
makes the client send NAMES requests for all channels, which generate
service: Introduce `channel update`
This adds the `channel update` service command, which is used to set the
auto-detach, auto-reattach, and message relaying settings of a channel.
Of note is that currently the parser parses `#` as a comment, which
means any `channel update #foo ...` will actually need to be escaped to
`channel update "#foo" ...`
Add customizable auto-detaching, auto-reattaching, relaying.
This uses the fields added previously to the Channel struct to implement
the actual detaching/reattaching/relaying logic.
The `FilterDefault` values of the messages filters are currently
The values of the message filters are not currently user-settable.
This introduces a new user event, eventChannelDetach, which stores an
upstreamConn (which might become invalid at the time of processing), and
a channel name, used for auto-detaching. Every time the channel detach
timer is refreshed (by receveing a message, etc.), a new timer is
created on the upstreamChannel, which will dispatch this event after the
duration (and discards the previous timer, if any).