Properly handle PING messages

This commit is contained in:
Simon Ser 2020-02-18 17:07:58 +01:00
parent 8997a70acb
commit d484e6e374
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 37 additions and 4 deletions

View file

@ -195,11 +195,29 @@ func (dc *downstreamConn) handleMessage(msg *irc.Message) error {
case "QUIT":
return dc.Close()
case "PING":
// TODO: handle params
var from, to string
if len(msg.Params) >= 1 {
from = msg.Params[0]
}
if len(msg.Params) >= 2 {
to = msg.Params[1]
}
if to != "" && to != dc.srv.Hostname {
return ircError{&irc.Message{
Command: irc.ERR_NOSUCHSERVER,
Params: []string{to, "No such server"},
}}
}
params := []string{dc.srv.Hostname}
if from != "" {
params = append(params, from)
}
dc.SendMessage(&irc.Message{
Prefix: dc.srv.prefix(),
Command: "PONG",
Params: []string{dc.srv.Hostname},
Params: params,
})
return nil
default:

View file

@ -109,10 +109,25 @@ func (uc *upstreamConn) getChannel(name string) (*upstreamChannel, error) {
func (uc *upstreamConn) handleMessage(msg *irc.Message) error {
switch msg.Command {
case "PING":
// TODO: handle params
var from, to string
if len(msg.Params) >= 1 {
from = msg.Params[0]
}
if len(msg.Params) >= 2 {
to = msg.Params[1]
}
if to != "" && to != uc.srv.Hostname {
return fmt.Errorf("invalid PING destination %q", to)
}
params := []string{uc.srv.Hostname}
if from != "" {
params = append(params, from)
}
uc.SendMessage(&irc.Message{
Command: "PONG",
Params: []string{uc.srv.Hostname},
Params: params,
})
return nil
case "MODE":