Properly handle PING messages
This commit is contained in:
parent
8997a70acb
commit
d484e6e374
@ -195,11 +195,29 @@ func (dc *downstreamConn) handleMessage(msg *irc.Message) error {
|
|||||||
case "QUIT":
|
case "QUIT":
|
||||||
return dc.Close()
|
return dc.Close()
|
||||||
case "PING":
|
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{
|
dc.SendMessage(&irc.Message{
|
||||||
Prefix: dc.srv.prefix(),
|
Prefix: dc.srv.prefix(),
|
||||||
Command: "PONG",
|
Command: "PONG",
|
||||||
Params: []string{dc.srv.Hostname},
|
Params: params,
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
|
19
upstream.go
19
upstream.go
@ -109,10 +109,25 @@ func (uc *upstreamConn) getChannel(name string) (*upstreamChannel, error) {
|
|||||||
func (uc *upstreamConn) handleMessage(msg *irc.Message) error {
|
func (uc *upstreamConn) handleMessage(msg *irc.Message) error {
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
case "PING":
|
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{
|
uc.SendMessage(&irc.Message{
|
||||||
Command: "PONG",
|
Command: "PONG",
|
||||||
Params: []string{uc.srv.Hostname},
|
Params: params,
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
case "MODE":
|
case "MODE":
|
||||||
|
Loading…
Reference in New Issue
Block a user