diff --git a/build.sh b/build.sh deleted file mode 100755 index 1fd11a7..0000000 --- a/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -docker build . -t torat diff --git a/run.sh b/run.sh deleted file mode 100755 index 1f8df25..0000000 --- a/run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -docker run -it -v "$(pwd)"/dist:/dist_ext -p 8000:8000 torat - diff --git a/torat_server/server.go b/torat_server/server.go index 761b257..d7a454f 100644 --- a/torat_server/server.go +++ b/torat_server/server.go @@ -11,6 +11,7 @@ import ( "net/rpc" "os" "path/filepath" + "time" "github.com/cretz/bine/tor" torEd25519 "github.com/cretz/bine/torutil/ed25519" @@ -80,6 +81,23 @@ func Start() error { log.Println("Onion service running:", service.ID+".onion") loadData() + + // Spawn timer to clean dead connections every 5 mins + timer := time.NewTicker(5 * time.Minute) + go func() { + for { + select { + case <-timer.C: + for i, _ := range activeClients { + ac := getClient(i) + if err := ac.getHostname(); err != nil { + activeClients = append(activeClients[:i], activeClients[i+1:]...) + } + } + } + } + }() + for { conn, err := service.Accept() if err != nil { @@ -117,6 +135,13 @@ func accept(conn net.Conn) { saveData() + // Remove previous dead entry if it exists + for i, c := range activeClients { + if c.Hostname == ac.Hostname { + activeClients = append(activeClients[:i], activeClients[i+1:]...) + } + } + activeClients = append(activeClients, ac) fmt.Println(green("[Server] [+] New Client: "), blue(ac.Data().Name)) }