43 lines
839 B
Go
43 lines
839 B
Go
|
package socket
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"net"
|
||
|
|
||
|
"github.com/kisielk/og-rek"
|
||
|
"github.com/nlpodyssey/gopickle/types"
|
||
|
)
|
||
|
|
||
|
type Fail2BanSocket struct {
|
||
|
socket net.Conn
|
||
|
encoder *ogórek.Encoder
|
||
|
}
|
||
|
|
||
|
func MustConnectToSocket(path string) *Fail2BanSocket {
|
||
|
c, err := net.Dial("unix", path)
|
||
|
if err != nil {
|
||
|
log.Fatalf("failed to open fail2ban socket: %v", err)
|
||
|
}
|
||
|
return &Fail2BanSocket{
|
||
|
socket: c,
|
||
|
encoder: ogórek.NewEncoder(c),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Fail2BanSocket) Ping() bool {
|
||
|
response, err := s.sendCommand([]string{pingCommand, "100"})
|
||
|
if err != nil {
|
||
|
log.Printf("server ping failed: %v", err)
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
if t, ok := response.(*types.Tuple); ok {
|
||
|
if (*t)[1] == "pong" {
|
||
|
return true
|
||
|
}
|
||
|
log.Printf("unexpected response data: %s", t)
|
||
|
}
|
||
|
log.Printf("unexpected response format - cannot parse: %v", response)
|
||
|
return false
|
||
|
}
|