diff --git a/go.mod b/go.mod index fe43ed8..07e9d51 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/CalebQ42/darkstorm-server go 1.17 + +require github.com/1lann/udp-forward v0.0.0-20191015034046-6b774a53ea39 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bf2cb0b --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/1lann/udp-forward v0.0.0-20191015034046-6b774a53ea39 h1:wAEqazqaAqb7wwijTl14KruBl7cvYytD3SkhXT9v5zs= +github.com/1lann/udp-forward v0.0.0-20191015034046-6b774a53ea39/go.mod h1:zK6NTEHRcxPf9N4gcm0WXvE8RpsJfg/a8hMSW6dAQ0c= diff --git a/linker.go b/linker.go index 7fb31c0..617c9c6 100644 --- a/linker.go +++ b/linker.go @@ -10,6 +10,8 @@ import ( "strconv" "strings" "time" + + forward "github.com/1lann/udp-forward" ) type link struct { @@ -71,6 +73,15 @@ failWaiting: func createLink(port int, l link, failChan chan int) { log.Println("Linking", port, "to", l.addr, "with type", l.linkType) + if l.isUDP() { + _, err := forward.Forward(":"+strconv.Itoa(port), l.addr, forward.DefaultTimeout) + if err != nil { + log.Println("Error with udp forwarder on port", port, ":", err) + failChan <- port + return + } + return + } var tcpListen net.Listener var con net.Conn var err error @@ -82,23 +93,9 @@ func createLink(port int, l link, failChan chan int) { return } defer tcpListen.Close() - } else if l.isUDP() { - var addr *net.UDPAddr - addr, err = net.ResolveUDPAddr(l.linkType, ":"+strconv.Itoa(port)) - if err != nil { - log.Println("Error while parsing port", port, ":", err) - failChan <- port - return - } - con, err = net.ListenUDP(l.linkType, addr) - if err != nil { - log.Println("Error while listening to port", port, ":", err) - } } for { - if l.isTCP() { - con, err = tcpListen.Accept() - } + con, err = tcpListen.Accept() if err != nil { log.Println("Error while trying to accept connection to port ", port, ":", err) failChan <- port @@ -110,19 +107,6 @@ func createLink(port int, l link, failChan chan int) { failChan <- port return } - if l.isUDP() { - var addr *net.UDPAddr - addr, err = net.ResolveUDPAddr(l.linkType, ":"+strconv.Itoa(port)) - if err != nil { - log.Println("Error while parsing port", port, ":", err) - failChan <- port - return - } - con, err = net.ListenUDP(l.linkType, addr) - if err != nil { - log.Println("Error while listening to port", port, ":", err) - } - } } }