Initial test CLI
parent
9c5662303a
commit
852faf64ff
|
@ -12,6 +12,7 @@ const defaultCmdPrefix = ">"
|
|||
const defaultSendInterval = 0.09
|
||||
const defaultUserLimit = 10
|
||||
const defaultAuthBackend = "sqlite3"
|
||||
const defaultTelnetAddr = ":40010"
|
||||
const defaultBindAddr = ":40000"
|
||||
const defaultListInterval = 300
|
||||
|
||||
|
@ -27,6 +28,7 @@ type Config struct {
|
|||
SendInterval float32
|
||||
UserLimit int
|
||||
AuthBackend string
|
||||
TelnetAddr string
|
||||
BindAddr string
|
||||
Servers []struct {
|
||||
Name string
|
||||
|
@ -83,6 +85,7 @@ func LoadConfig() error {
|
|||
config.SendInterval = defaultSendInterval
|
||||
config.UserLimit = defaultUserLimit
|
||||
config.AuthBackend = defaultAuthBackend
|
||||
config.TelnetAddr = defaultTelnetAddr
|
||||
config.BindAddr = defaultBindAddr
|
||||
config.Groups = make(map[string][]string)
|
||||
config.UserGroups = make(map[string]string)
|
||||
|
|
8
run.go
8
run.go
|
@ -29,6 +29,12 @@ func Run() {
|
|||
log.Fatal("{←|⇶} invalid auth backend")
|
||||
}
|
||||
|
||||
go func() {
|
||||
if err := telnetServer(); err != nil {
|
||||
log.Fatal("{←|⇶} ", err)
|
||||
}
|
||||
}()
|
||||
|
||||
addr, err := net.ResolveUDPAddr("udp", Conf().BindAddr)
|
||||
if err != nil {
|
||||
log.Fatal("{←|⇶} ", err)
|
||||
|
@ -49,6 +55,8 @@ func Run() {
|
|||
signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
|
||||
<-sig
|
||||
|
||||
close(telnetCh)
|
||||
|
||||
if Conf().List.Enable {
|
||||
if err := announce(listRm); err != nil {
|
||||
log.Print("{←|⇶} ", err)
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
package proxy
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
)
|
||||
|
||||
var telnetCh = make(chan struct{})
|
||||
|
||||
func telnetServer() error {
|
||||
ln, err := net.Listen("tcp", Conf().TelnetAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer ln.Close()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-telnetCh:
|
||||
return nil
|
||||
default:
|
||||
conn, err := ln.Accept()
|
||||
if err != nil {
|
||||
log.Print("{←|⇶} ", err)
|
||||
continue
|
||||
}
|
||||
|
||||
go handleTelnet(conn)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handleTelnet(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
|
||||
r, w := bufio.NewReader(conn), bufio.NewWriter(conn)
|
||||
b := bufio.NewReadWriter(r, w)
|
||||
|
||||
b.WriteString("mt-multiserver-proxy console\n")
|
||||
for {
|
||||
b.WriteString(">")
|
||||
|
||||
_, err := b.ReadString('\n')
|
||||
if err != nil {
|
||||
if errors.Is(err, io.EOF) {
|
||||
return
|
||||
}
|
||||
|
||||
log.Print("{←|⇶} ", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue