mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-14 07:59:31 +01:00
add PROXY protocol support
This commit is contained in:
parent
a8141a0e1c
commit
4379cb8e1c
@ -28,6 +28,7 @@ var (
|
|||||||
"PING": NewPingCommand,
|
"PING": NewPingCommand,
|
||||||
"PONG": NewPongCommand,
|
"PONG": NewPongCommand,
|
||||||
"PRIVMSG": NewPrivMsgCommand,
|
"PRIVMSG": NewPrivMsgCommand,
|
||||||
|
"PROXY": NewProxyCommand,
|
||||||
"QUIT": NewQuitCommand,
|
"QUIT": NewQuitCommand,
|
||||||
"TOPIC": NewTopicCommand,
|
"TOPIC": NewTopicCommand,
|
||||||
"USER": NewUserMsgCommand,
|
"USER": NewUserMsgCommand,
|
||||||
@ -581,3 +582,30 @@ func NewCapCommand(args []string) (editableCommand, error) {
|
|||||||
args: args,
|
args: args,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HAPROXY support
|
||||||
|
type ProxyCommand struct {
|
||||||
|
BaseCommand
|
||||||
|
net string
|
||||||
|
sourceIP string
|
||||||
|
destIP string
|
||||||
|
sourcePort string
|
||||||
|
destPort string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg *ProxyCommand) String() string {
|
||||||
|
return fmt.Sprintf("PROXY(sourceIP=%s, sourcePort=%s)", msg.sourceIP, msg.sourcePort)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewProxyCommand(args []string) (editableCommand, error) {
|
||||||
|
if len(args) < 5 {
|
||||||
|
return nil, NotEnoughArgsError
|
||||||
|
}
|
||||||
|
return &ProxyCommand{
|
||||||
|
net: args[0],
|
||||||
|
sourceIP: args[1],
|
||||||
|
destIP: args[2],
|
||||||
|
sourcePort: args[3],
|
||||||
|
destPort: args[4],
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
@ -60,7 +60,8 @@ func (server *Server) receiveCommands(commands <-chan Command) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
switch command.(type) {
|
switch command.(type) {
|
||||||
case *PassCommand, *CapCommand:
|
case *PassCommand, *CapCommand, *ProxyCommand:
|
||||||
|
// no-op
|
||||||
default:
|
default:
|
||||||
client.Reply(ErrPasswdMismatch(server))
|
client.Reply(ErrPasswdMismatch(server))
|
||||||
client.Destroy()
|
client.Destroy()
|
||||||
@ -401,3 +402,12 @@ func (msg *OperCommand) HandleServer(server *Server) {
|
|||||||
func (msg *CapCommand) HandleServer(server *Server) {
|
func (msg *CapCommand) HandleServer(server *Server) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg *ProxyCommand) HandleServer(server *Server) {
|
||||||
|
client := msg.Client()
|
||||||
|
addr, err := net.ResolveIPAddr("ip", msg.sourceIP)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
client.hostname = LookupHostname(addr)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user