1
0
Fork 0
forked from External/ergo

implement a channel forwarding mode

Fixes #1260
This commit is contained in:
Shivaram Lingamneni 2020-12-14 05:00:21 -05:00
parent 9033d97c6f
commit ba72d3acfc
10 changed files with 101 additions and 28 deletions

View file

@ -83,12 +83,12 @@ func (cm *ChannelManager) Get(name string) (channel *Channel) {
}
// Join causes `client` to join the channel named `name`, creating it if necessary.
func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) error {
func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) (err error, forward string) {
server := client.server
casefoldedName, err := CasefoldChannel(name)
skeleton, skerr := Skeleton(name)
if err != nil || skerr != nil || len(casefoldedName) > server.Config().Limits.ChannelLen {
return errNoSuchChannel
return errNoSuchChannel, ""
}
channel, err := func() (*Channel, error) {
@ -128,15 +128,15 @@ func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin
}()
if err != nil {
return err
return err, ""
}
channel.EnsureLoaded()
err = channel.Join(client, key, isSajoin, rb)
err, forward = channel.Join(client, key, isSajoin, rb)
cm.maybeCleanup(channel, true)
return err
return
}
func (cm *ChannelManager) maybeCleanup(channel *Channel, afterJoin bool) {