(possibly) Added UDP linker capabilities

This commit is contained in:
Caleb Gardner
2021-09-21 06:25:37 -05:00
parent 1be4378071
commit b7fd4ec7d8
3 changed files with 28 additions and 17 deletions
+1 -1
View File
@@ -2,4 +2,4 @@
Experimenting with a Go server for personal uses. Combines a simple website server with a tcp forwarder. Experimenting with a Go server for personal uses. Combines a simple website server with a tcp forwarder.
Configure which ports go to which addresses via /etc/darkstorm-server.conf in the form `port address`. Configure which ports go to which addresses via /etc/darkstorm-server.conf in the form `type port address`. If type is not given, tcp is assumed.
+25 -14
View File
@@ -12,7 +12,12 @@ import (
"time" "time"
) )
func tcpLinker() { type link struct {
addr string
linkType string
}
func linker() {
links, err := parseConf() links, err := parseConf()
if err != nil { if err != nil {
log.Println("Error while trying to parse config file:", err, "tcp linker signing off") log.Println("Error while trying to parse config file:", err, "tcp linker signing off")
@@ -28,7 +33,7 @@ func tcpLinker() {
open := make(map[int]bool) open := make(map[int]bool)
for port, addr := range links { for port, addr := range links {
open[port] = true open[port] = true
go link(port, addr, failChan) go createLink(port, addr, failChan)
} }
failWaiting: failWaiting:
for portFail := <-failChan; ; portFail = <-failChan { for portFail := <-failChan; ; portFail = <-failChan {
@@ -51,13 +56,14 @@ failWaiting:
} }
fails[portFail]++ fails[portFail]++
log.Println("Restarting linking for port", portFail) log.Println("Restarting linking for port", portFail)
go link(portFail, links[portFail], failChan) go createLink(portFail, links[portFail], failChan)
} }
} }
func link(port int, addr string, failChan chan int) { func createLink(port int, l link, failChan chan int) {
listen, err := net.Listen("tcp", ":"+strconv.Itoa(port)) log.Println("Linking", port, "to", l.addr, "with type", l.linkType)
listen, err := net.Listen(l.linkType, ":"+strconv.Itoa(port))
if err != nil { if err != nil {
log.Println("Error while trying to listen to port ", port, ":", err) log.Println("Error while trying to listen to port ", port, ":", err)
failChan <- port failChan <- port
@@ -71,16 +77,16 @@ func link(port int, addr string, failChan chan int) {
failChan <- port failChan <- port
return return
} }
err = copyConn(con, addr) err = copyConn(con, l)
if err != nil { if err != nil {
log.Println("Error while trying copy data from port", port, "to address", addr, ":", err) log.Println("Error while trying copy data from port", port, "to address", l.addr, ":", err)
failChan <- port failChan <- port
return return
} }
} }
} }
func parseConf() (links map[int]string, err error) { func parseConf() (links map[int]link, err error) {
conf, err := os.Open("/etc/darkstorm-server.conf") conf, err := os.Open("/etc/darkstorm-server.conf")
if os.IsNotExist(err) { if os.IsNotExist(err) {
return nil, nil return nil, nil
@@ -88,7 +94,7 @@ func parseConf() (links map[int]string, err error) {
return nil, err return nil, err
} }
lineNum := 0 lineNum := 0
links = make(map[int]string) links = make(map[int]link)
rdr := bufio.NewReader(conf) rdr := bufio.NewReader(conf)
multilineComment := false multilineComment := false
var line string var line string
@@ -130,15 +136,20 @@ func parseConf() (links map[int]string, err error) {
continue continue
} }
split := strings.Split(line, " ") split := strings.Split(line, " ")
if len(split) != 2 { if len(split) < 2 || len(split) > 3 {
return nil, errors.New("invalid line #" + strconv.Itoa(lineNum)) return nil, errors.New("invalid line #" + strconv.Itoa(lineNum))
} }
var l link
if len(split) == 3 {
} else {
l.linkType = "tcp"
}
var i int var i int
i, err = strconv.Atoi(split[0]) i, err = strconv.Atoi(split[0])
if err != nil { if err != nil {
return nil, errors.New("invalid line #" + strconv.Itoa(lineNum)) return nil, errors.New("invalid line #" + strconv.Itoa(lineNum))
} }
links[i] = split[1] links[i] = l
line = "" line = ""
} }
err = nil err = nil
@@ -148,10 +159,10 @@ func parseConf() (links map[int]string, err error) {
return return
} }
func copyConn(src net.Conn, addr string) error { func copyConn(src net.Conn, l link) error {
dst, err := net.Dial("tcp", addr) dst, err := net.Dial(l.linkType, l.addr)
if err != nil { if err != nil {
log.Println("Erro while dialing", addr) log.Println("Erro while dialing", l.addr)
return err return err
} }
+2 -2
View File
@@ -8,7 +8,7 @@ import (
var quitChan chan string = make(chan string) var quitChan chan string = make(chan string)
func main() { func main() {
go tcpLinker() go linker()
go webserver() go webserver()
for failure := <-quitChan; ; failure = <-quitChan { for failure := <-quitChan; ; failure = <-quitChan {
switch failure { switch failure {
@@ -28,7 +28,7 @@ func tcpLinkerRestart() {
log.Println("TCP linker failed. Restarting in 5 seconds...") log.Println("TCP linker failed. Restarting in 5 seconds...")
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
log.Println("Restarting tcp linker") log.Println("Restarting tcp linker")
tcpLinker() linker()
} }
func websiteRestart() { func websiteRestart() {