diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2024-11-14 14:59:20 +0100 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2024-12-19 10:50:36 +0100 |
| commit | 4de4d76ad1ef1dc52b6e2e03c4fc81d4ea8d467e (patch) | |
| tree | f09aadb416c61c94eb703d950b1689645aad4c4c /proxy/proxy.go | |
| parent | 2f3a9d0c1687e6f591ccdb7d44a36cdc09359321 (diff) | |
ProxyGuard: Add a restart function
Diffstat (limited to 'proxy/proxy.go')
| -rw-r--r-- | proxy/proxy.go | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/proxy/proxy.go b/proxy/proxy.go index 439e239..06c833f 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -29,19 +29,21 @@ func (l *Logger) Log(msg string) { type Proxy struct { proxyguard.Client + resChan chan struct{} } // NewProxyguard sets up proxyguard for proxied WireGuard connections func NewProxyguard(ctx context.Context, lp int, tcpsp int, peer string, setupSocket func(fd int)) (*Proxy, error) { proxyguard.UpdateLogger(&Logger{}) proxy := Proxy{ - proxyguard.Client{ + Client: proxyguard.Client{ Peer: peer, ListenPort: lp, TCPSourcePort: tcpsp, SetupSocket: setupSocket, UserAgent: httpw.UserAgent, }, + resChan: make(chan struct{}), } err := proxy.Client.SetupDNS(ctx) if err != nil { @@ -52,9 +54,33 @@ func NewProxyguard(ctx context.Context, lp int, tcpsp int, peer string, setupSoc } func (p *Proxy) Tunnel(ctx context.Context, wglisten int) error { - err := p.Client.Tunnel(ctx, wglisten) - if err != nil { - return i18nerr.WrapInternal(err, "The VPN proxy exited") + log.Logger.Infof("callying tunnel") + errChan := make(chan error, 1) + gctx, cancel := context.WithCancel(ctx) + go func() { + err := p.Client.Tunnel(gctx, wglisten) + defer log.Logger.Infof("exit goroutine") + if err != nil { + err = i18nerr.WrapInternal(err, "The VPN proxy exited") + } + errChan <- err + }() + + select { + case err := <- errChan: + log.Logger.Infof("exit hier") + cancel() + return err + case <- p.resChan: + log.Logger.Infof("before cancel") + cancel() + log.Logger.Infof("after cancel") + <- errChan + log.Logger.Infof("after errChan") + return p.Tunnel(ctx, wglisten) } - return nil +} + +func (p *Proxy) Restart() { + p.resChan <- struct{}{} } |
