diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-09 16:30:56 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-09 16:30:56 +0200 |
commit | cc0ab84ae692a8d968e3022b870f3b60012546b1 (patch) | |
tree | 8bea3476329d9671504ed9dbf02f8c03f7f041df /cmd | |
parent | aa02622a9b50b8b27de50d4f906d625b536c7c41 (diff) |
Protect main code (#54)
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/mt-multiserver-proxy/proxy.go | 142 |
1 files changed, 2 insertions, 140 deletions
diff --git a/cmd/mt-multiserver-proxy/proxy.go b/cmd/mt-multiserver-proxy/proxy.go index 71c1f33..0d735be 100644 --- a/cmd/mt-multiserver-proxy/proxy.go +++ b/cmd/mt-multiserver-proxy/proxy.go @@ -1,145 +1,7 @@ package main -import ( - "errors" - "log" - "net" - "os" - "os/signal" - "sync" - "syscall" - - "github.com/HimbeerserverDE/mt-multiserver-proxy" - "github.com/anon55555/mt" -) +import "github.com/HimbeerserverDE/mt-multiserver-proxy" func main() { - if err := proxy.LoadConfig(); err != nil { - log.Fatal("{←|⇶} ", err) - } - - if !proxy.Conf().NoPlugins { - proxy.LoadPlugins() - } - - var err error - switch proxy.Conf().AuthBackend { - case "sqlite3": - proxy.SetAuthBackend(proxy.AuthSQLite3{}) - default: - log.Fatal("{←|⇶} invalid auth backend") - } - - addr, err := net.ResolveUDPAddr("udp", proxy.Conf().BindAddr) - if err != nil { - log.Fatal("{←|⇶} ", err) - } - - pc, err := net.ListenUDP("udp", addr) - if err != nil { - log.Fatal("{←|⇶} ", err) - } - - l := proxy.Listen(pc) - defer l.Close() - - log.Print("{←|⇶} listen ", l.Addr()) - - go func() { - sig := make(chan os.Signal, 1) - signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP) - <-sig - - clts := l.Clts() - - var wg sync.WaitGroup - wg.Add(len(clts)) - - for cc := range clts { - go func(cc *proxy.ClientConn) { - ack, _ := cc.SendCmd(&mt.ToCltDisco{Reason: mt.Shutdown}) - select { - case <-cc.Closed(): - case <-ack: - cc.Close() - } - - wg.Done() - }(cc) - } - - wg.Wait() - os.Exit(0) - }() - - for { - cc, err := l.Accept() - if err != nil { - if errors.Is(err, net.ErrClosed) { - log.Print("{←|⇶} stop listening") - break - } - - log.Print("{←|⇶} ", err) - continue - } - - go func() { - <-cc.Init() - cc.Log("<->", "handshake completed") - - if len(proxy.Conf().Servers) == 0 { - cc.Log("<--", "no servers") - ack, _ := cc.SendCmd(&mt.ToCltDisco{ - Reason: mt.Custom, - Custom: "No servers are configured.", - }) - select { - case <-cc.Closed(): - case <-ack: - cc.Close() - } - - return - } - - addr, err := net.ResolveUDPAddr("udp", proxy.Conf().Servers[0].Addr) - if err != nil { - cc.Log("<--", "address resolution fail") - ack, _ := cc.SendCmd(&mt.ToCltDisco{ - Reason: mt.Custom, - Custom: "Server address resolution failed.", - }) - select { - case <-cc.Closed(): - case <-ack: - cc.Close() - } - - return - } - - conn, err := net.DialUDP("udp", nil, addr) - if err != nil { - cc.Log("<--", "connection fail") - - ack, _ := cc.SendCmd(&mt.ToCltDisco{ - Reason: mt.Custom, - Custom: "Server connection failed.", - }) - - select { - case <-cc.Closed(): - case <-ack: - cc.Close() - } - - return - } - - proxy.Connect(conn, proxy.Conf().Servers[0].Name, cc) - }() - } - - select {} + proxy.Run() } |