Start client tunnels concurrently

This commit is contained in:
Anders Pitman 2020-10-24 17:00:42 -06:00
parent 1abc141d13
commit 7f595c2b0d

View File

@ -138,12 +138,23 @@ func (c *BoringProxyClient) SyncTunnels(serverTunnels map[string]Tunnel) {
log.Println("New tunnel", k)
c.tunnels[k] = newTun
cancel := c.BoreTunnel(newTun)
c.cancelFuncsMutex.Lock()
c.cancelFuncs[k] = cancel
c.cancelFuncsMutex.Unlock()
} else if newTun != tun {
log.Println("Restart tunnel", k)
c.cancelFuncsMutex.Lock()
c.cancelFuncs[k]()
c.cancelFuncsMutex.Unlock()
cancel := c.BoreTunnel(newTun)
c.cancelFuncsMutex.Lock()
c.cancelFuncs[k] = cancel
c.cancelFuncsMutex.Unlock()
}
}
@ -152,15 +163,20 @@ func (c *BoringProxyClient) SyncTunnels(serverTunnels map[string]Tunnel) {
_, exists := serverTunnels[k]
if !exists {
log.Println("Kill tunnel", k)
c.cancelFuncsMutex.Lock()
c.cancelFuncs[k]()
delete(c.tunnels, k)
delete(c.cancelFuncs, k)
c.cancelFuncsMutex.Unlock()
delete(c.tunnels, k)
}
}
}
func (c *BoringProxyClient) BoreTunnel(tunnel Tunnel) context.CancelFunc {
ctx, cancelFunc := context.WithCancel(context.Background())
go func() {
signer, err := ssh.ParsePrivateKey([]byte(tunnel.TunnelPrivateKey))
if err != nil {
log.Fatalf("unable to parse private key: %v", err)
@ -195,14 +211,6 @@ func (c *BoringProxyClient) BoreTunnel(tunnel Tunnel) context.CancelFunc {
}
//defer listener.Close()
ctx, cancelFunc := context.WithCancel(context.Background())
go func() {
<-ctx.Done()
listener.Close()
client.Close()
}()
go func() {
for {
conn, err := listener.Accept()
@ -219,6 +227,11 @@ func (c *BoringProxyClient) BoreTunnel(tunnel Tunnel) context.CancelFunc {
}
}()
<-ctx.Done()
listener.Close()
client.Close()
}()
return cancelFunc
}