diff --git a/internal/openvpn/portforward.go b/internal/openvpn/portforward.go index d026d55b..40db6f3f 100644 --- a/internal/openvpn/portforward.go +++ b/internal/openvpn/portforward.go @@ -10,10 +10,12 @@ import ( ) func (l *Loop) startPortForwarding(ctx context.Context, - portForwarder provider.PortForwarder, serverName string) { - if !l.GetSettings().Provider.PortForwarding.Enabled { + enabled bool, portForwarder provider.PortForwarder, + serverName string) { + if !enabled { return } + // only used for PIA for now gateway, err := l.routing.VPNLocalGatewayIP() if err != nil { @@ -33,7 +35,12 @@ func (l *Loop) startPortForwarding(ctx context.Context, } } -func (l *Loop) stopPortForwarding(ctx context.Context, timeout time.Duration) { +func (l *Loop) stopPortForwarding(ctx context.Context, enabled bool, + timeout time.Duration) { + if !enabled { + return // nothing to stop + } + if timeout > 0 { var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, timeout) diff --git a/internal/openvpn/run.go b/internal/openvpn/run.go index 2c7382eb..5e44e9a2 100644 --- a/internal/openvpn/run.go +++ b/internal/openvpn/run.go @@ -95,10 +95,12 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { for stayHere { select { case <-l.startPFCh: - l.startPortForwarding(ctx, providerConf, connection.Hostname) + l.startPortForwarding(ctx, settings.Provider.PortForwarding.Enabled, + providerConf, connection.Hostname) case <-ctx.Done(): const pfTimeout = 100 * time.Millisecond - l.stopPortForwarding(context.Background(), pfTimeout) + l.stopPortForwarding(context.Background(), + settings.Provider.PortForwarding.Enabled, pfTimeout) openvpnCancel() <-waitError close(waitError) @@ -107,7 +109,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { case <-l.stop: l.userTrigger = true l.logger.Info("stopping") - l.stopPortForwarding(ctx, 0) + l.stopPortForwarding(ctx, settings.Provider.PortForwarding.Enabled, 0) openvpnCancel() <-waitError // do not close waitError or the waitError @@ -124,7 +126,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { l.statusManager.Lock() // prevent SetStatus from running in parallel - l.stopPortForwarding(ctx, 0) + l.stopPortForwarding(ctx, settings.Provider.PortForwarding.Enabled, 0) openvpnCancel() l.statusManager.SetStatus(constants.Crashed) l.logAndWait(ctx, err)