Handle upstream RPL_MYINFO messages
This commit is contained in:
parent
cad64e1a6c
commit
f2b471259a
36
upstream.go
36
upstream.go
@ -10,15 +10,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
rpl_localusers = "265"
|
rpl_localusers = "265"
|
||||||
rpl_globalusers = "266"
|
rpl_globalusers = "266"
|
||||||
)
|
)
|
||||||
|
|
||||||
type upstreamConn struct {
|
type upstreamConn struct {
|
||||||
net net.Conn
|
upstream *Upstream
|
||||||
irc *irc.Conn
|
net net.Conn
|
||||||
srv *Server
|
irc *irc.Conn
|
||||||
|
srv *Server
|
||||||
registered bool
|
registered bool
|
||||||
|
|
||||||
|
serverName string
|
||||||
|
availableUserModes string
|
||||||
|
availableChannelModes string
|
||||||
|
channelModesWithParam string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *upstreamConn) handleMessage(msg *irc.Message) error {
|
func (c *upstreamConn) handleMessage(msg *irc.Message) error {
|
||||||
@ -31,7 +37,18 @@ func (c *upstreamConn) handleMessage(msg *irc.Message) error {
|
|||||||
})
|
})
|
||||||
case irc.RPL_WELCOME:
|
case irc.RPL_WELCOME:
|
||||||
c.registered = true
|
c.registered = true
|
||||||
case irc.RPL_YOURHOST, irc.RPL_CREATED, irc.RPL_MYINFO:
|
c.srv.Logger.Printf("Connection to %q registered", c.upstream.Addr)
|
||||||
|
case irc.RPL_MYINFO:
|
||||||
|
if len(msg.Params) < 5 {
|
||||||
|
return newNeedMoreParamsError(msg.Command)
|
||||||
|
}
|
||||||
|
c.serverName = msg.Params[1]
|
||||||
|
c.availableUserModes = msg.Params[3]
|
||||||
|
c.availableChannelModes = msg.Params[4]
|
||||||
|
if len(msg.Params) > 5 {
|
||||||
|
c.channelModesWithParam = msg.Params[5]
|
||||||
|
}
|
||||||
|
case irc.RPL_YOURHOST, irc.RPL_CREATED:
|
||||||
// Ignore
|
// Ignore
|
||||||
case irc.RPL_LUSERCLIENT, irc.RPL_LUSEROP, irc.RPL_LUSERUNKNOWN, irc.RPL_LUSERCHANNELS, irc.RPL_LUSERME:
|
case irc.RPL_LUSERCLIENT, irc.RPL_LUSEROP, irc.RPL_LUSERUNKNOWN, irc.RPL_LUSERCHANNELS, irc.RPL_LUSERME:
|
||||||
// Ignore
|
// Ignore
|
||||||
@ -55,7 +72,12 @@ func connect(s *Server, upstream *Upstream) error {
|
|||||||
return fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)
|
return fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := upstreamConn{net: netConn, irc: irc.NewConn(netConn), srv: s}
|
c := upstreamConn{
|
||||||
|
upstream: upstream,
|
||||||
|
net: netConn,
|
||||||
|
irc: irc.NewConn(netConn),
|
||||||
|
srv: s,
|
||||||
|
}
|
||||||
defer netConn.Close()
|
defer netConn.Close()
|
||||||
|
|
||||||
err = c.irc.WriteMessage(&irc.Message{
|
err = c.irc.WriteMessage(&irc.Message{
|
||||||
@ -83,7 +105,7 @@ func connect(s *Server, upstream *Upstream) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := c.handleMessage(msg); err != nil {
|
if err := c.handleMessage(msg); err != nil {
|
||||||
return err
|
c.srv.Logger.Printf("Failed to handle message %q from %q: %v", msg, upstream.Addr, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user