UDP forwarding working now

This is using a library, which I'm not too happy about, but it'll work for the moment
This commit is contained in:
Caleb Gardner
2021-09-23 15:51:10 -05:00
parent 4596c0315a
commit f77bdf9e5c
3 changed files with 16 additions and 28 deletions
+2
View File
@@ -1,3 +1,5 @@
module github.com/CalebQ42/darkstorm-server module github.com/CalebQ42/darkstorm-server
go 1.17 go 1.17
require github.com/1lann/udp-forward v0.0.0-20191015034046-6b774a53ea39 // indirect
+2
View File
@@ -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=
+11 -27
View File
@@ -10,6 +10,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
forward "github.com/1lann/udp-forward"
) )
type link struct { type link struct {
@@ -71,6 +73,15 @@ failWaiting:
func createLink(port int, l link, failChan chan int) { func createLink(port int, l link, failChan chan int) {
log.Println("Linking", port, "to", l.addr, "with type", l.linkType) 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 tcpListen net.Listener
var con net.Conn var con net.Conn
var err error var err error
@@ -82,23 +93,9 @@ func createLink(port int, l link, failChan chan int) {
return return
} }
defer tcpListen.Close() 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 { for {
if l.isTCP() {
con, err = tcpListen.Accept() con, err = tcpListen.Accept()
}
if err != nil { if err != nil {
log.Println("Error while trying to accept connection to port ", port, ":", err) log.Println("Error while trying to accept connection to port ", port, ":", err)
failChan <- port failChan <- port
@@ -110,19 +107,6 @@ func createLink(port int, l link, failChan chan int) {
failChan <- port failChan <- port
return 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)
}
}
} }
} }