This commit is contained in:
Quentin McGaw
2020-06-10 01:16:58 +00:00
parent 6ae9dc5c2c
commit 6107f5c4ab

View File

@@ -136,7 +136,11 @@ func _main(background context.Context, args []string) int {
err = firewallConf.AcceptAll(ctx) err = firewallConf.AcceptAll(ctx)
fatalOnError(err) fatalOnError(err)
connected, signalConnected := context.WithCancel(context.Background()) connectedCh := make(chan struct{})
signalConnected := func() {
connectedCh <- struct{}{}
}
defer close(connectedCh)
go collectStreamLines(ctx, streamMerger, logger, signalConnected) go collectStreamLines(ctx, streamMerger, logger, signalConnected)
waiter := command.NewWaiter() waiter := command.NewWaiter()
@@ -283,9 +287,17 @@ func _main(background context.Context, args []string) int {
}) })
go func() { go func() {
<-connected.Done() // blocks until openvpn is connected firstRun := true
for {
select {
case <-ctx.Done():
return
case <-connectedCh: // blocks until openvpn is connected
onConnected(ctx, allSettings, logger, dnsConf, fileManager, waiter, onConnected(ctx, allSettings, logger, dnsConf, fileManager, waiter,
streamMerger, httpServer, routingConf, defaultInterface, piaConf) streamMerger, httpServer, routingConf, defaultInterface, piaConf, firstRun)
firstRun = false
}
}
}() }()
signalsCh := make(chan os.Signal, 1) signalsCh := make(chan os.Signal, 1)
@@ -423,15 +435,14 @@ func onConnected(ctx context.Context, allSettings settings.Settings,
logger logging.Logger, dnsConf dns.Configurator, fileManager files.FileManager, logger logging.Logger, dnsConf dns.Configurator, fileManager files.FileManager,
waiter command.Waiter, streamMerger command.StreamMerger, httpServer server.Server, waiter command.Waiter, streamMerger command.StreamMerger, httpServer server.Server,
routingConf routing.Routing, defaultInterface string, routingConf routing.Routing, defaultInterface string,
piaConf pia.Configurator, piaConf pia.Configurator, firstRun bool,
) { ) {
if allSettings.PIA.PortForwarding.Enabled { if allSettings.PIA.PortForwarding.Enabled {
time.AfterFunc(5*time.Second, func() { time.AfterFunc(5*time.Second, func() {
setupPortForwarding(logger, piaConf, allSettings.PIA, allSettings.System.UID, allSettings.System.GID) setupPortForwarding(logger, piaConf, allSettings.PIA, allSettings.System.UID, allSettings.System.GID)
}) })
} }
if allSettings.DNS.Enabled && firstRun {
if allSettings.DNS.Enabled {
go unboundRunLoop(ctx, logger, dnsConf, allSettings.DNS, allSettings.System.UID, allSettings.System.GID, waiter, streamMerger, httpServer) go unboundRunLoop(ctx, logger, dnsConf, allSettings.DNS, allSettings.System.UID, allSettings.System.GID, waiter, streamMerger, httpServer)
} }