Compare commits

..

1 Commits

Author SHA1 Message Date
Quentin McGaw 88ffd887b4 logs 2026-07-29 04:19:49 +00:00
7 changed files with 27 additions and 36 deletions
+3
View File
@@ -99,6 +99,7 @@ func (l *Loop) run(runCtx context.Context, runDone chan<- struct{},
case partialUpdate := <-updateTrigger:
updatedSettings, err := l.settings.updateWith(partialUpdate, *l.settings.VPNIsUp)
if err != nil {
l.logger.Debug(fmt.Sprintf("port forward loop: run: updateWith error %v", err))
updateResult <- err
continue
}
@@ -136,6 +137,7 @@ func (l *Loop) run(runCtx context.Context, runDone chan<- struct{},
if err != nil {
err = fmt.Errorf("starting port forwarding service: %w", err)
}
l.logger.Debug(fmt.Sprintf("port forward loop: Start: error is %v", err))
updateResult <- err
} else if err != nil {
// Log the error and schedule a retry
@@ -150,6 +152,7 @@ func (l *Loop) UpdateWith(partialUpdate Settings) (err error) {
case l.updateTrigger <- partialUpdate:
select {
case err = <-l.updatedResult:
l.logger.Debug(fmt.Sprintf("port forward loop: UpdateWith: received error %v", err))
return err
case <-l.runCtx.Done():
return l.runCtx.Err()
-21
View File
@@ -49,24 +49,3 @@ func portPairToString(internal, external uint16) string {
}
return fmt.Sprintf("%d (internal port %d)", external, internal)
}
type loggerWithPrefix struct {
prefix string
logger Logger
}
func (l *loggerWithPrefix) Debug(msg string) {
l.logger.Debug(l.prefix + msg)
}
func (l *loggerWithPrefix) Info(msg string) {
l.logger.Info(l.prefix + msg)
}
func (l *loggerWithPrefix) Warn(msg string) {
l.logger.Warn(l.prefix + msg)
}
func (l *loggerWithPrefix) Error(msg string) {
l.logger.Error(l.prefix + msg)
}
+1 -3
View File
@@ -6,7 +6,6 @@ import (
"fmt"
"net/http"
"slices"
"strings"
"sync"
)
@@ -61,8 +60,7 @@ func (s *Service) SetPortsForwarded(ctx context.Context, ports []uint16) (err er
s.portMutex.Lock()
defer s.portMutex.Unlock()
hasPortForwardingCodeRunning := !strings.HasSuffix(s.settings.PortForwarder.Name(), "[not supported]")
if hasPortForwardingCodeRunning {
if s.settings.PortForwarder != nil {
return errors.New("setting port forwarded at runtime is not supported with internally running port forwarding code")
}
+3 -5
View File
@@ -123,7 +123,9 @@ func (s *Service) onNewPorts(ctx context.Context, internalToExternalPorts map[ui
}
}
s.logger.Debug(fmt.Sprintf("writePortForwardedFile with externalPorts: %v", externalPorts))
err = s.writePortForwardedFile(externalPorts)
s.logger.Debug(fmt.Sprintf("writing port file: error is %v", err))
if err != nil {
_ = s.cleanup()
return fmt.Errorf("writing port file: %w", err)
@@ -133,11 +135,7 @@ func (s *Service) onNewPorts(ctx context.Context, internalToExternalPorts map[ui
copy(s.ports, externalPorts)
if s.settings.UpCommand != "" {
logger := &loggerWithPrefix{
prefix: "up command: ",
logger: s.logger,
}
err = runCommand(ctx, s.cmder, logger, s.settings.UpCommand, externalPorts, s.settings.Interface)
err = runCommand(ctx, s.cmder, s.logger, s.settings.UpCommand, externalPorts, s.settings.Interface)
if err != nil {
err = fmt.Errorf("running up command: %w", err)
s.logger.Error(err.Error())
+2 -5
View File
@@ -32,11 +32,7 @@ func (s *Service) cleanup() (err error) {
const downTimeout = 60 * time.Second
ctx, cancel := context.WithTimeout(context.Background(), downTimeout)
defer cancel()
logger := &loggerWithPrefix{
prefix: "down command: ",
logger: s.logger,
}
err = runCommand(ctx, s.cmder, logger, s.settings.DownCommand, s.ports, s.settings.Interface)
err = runCommand(ctx, s.cmder, s.logger, s.settings.DownCommand, s.ports, s.settings.Interface)
if err != nil {
err = fmt.Errorf("running down command: %w", err)
s.logger.Error(err.Error())
@@ -62,6 +58,7 @@ func (s *Service) cleanup() (err error) {
s.ports = nil
s.logger.Debug("writePortForwardedFile in cleanup")
err = s.writePortForwardedFile(nil)
if err != nil {
return fmt.Errorf("clearing port file: %w", err)
@@ -133,6 +133,20 @@ func (p *Provider) KeepPortForward(ctx context.Context,
case <-timer.C:
}
_, externalIPv4Address, err := client.ExternalAddress(ctx, objects.Gateway)
if err != nil {
switch {
case strings.HasSuffix(err.Error(), "connection refused"):
err = fmt.Errorf("%w - make sure you have +pmp at the end of your OpenVPN username "+
"or that your Wireguard key is set to work with PMP", err)
case strings.Contains(err.Error(), "i/o timeout"):
err = fmt.Errorf("%w - make sure FIREWALL_OUTBOUND_SUBNETS does not conflict with "+
"the VPN gateway ip address %s", err, objects.Gateway)
}
logger.Error(fmt.Sprintf("getting external IPv4 address: %v", err))
}
logger.Debug("gateway external IPv4 address is " + externalIPv4Address.String())
objects.Logger.Debug("refreshing forwarded ports since 45 seconds have elapsed")
const lifetime = 60 * time.Second
for internalPort, externalPort := range p.internalToExternalPorts {
+4 -2
View File
@@ -34,7 +34,9 @@ func (l *Loop) startPortForwarding(data tunnelUpData) (err error) {
Password: data.password,
},
}
return l.portForward.UpdateWith(partialUpdate)
err = l.portForward.UpdateWith(partialUpdate)
l.logger.Debug(fmt.Sprintf("vpn loop: start port forwarding: error is %v", err))
return err
}
func (l *Loop) stopPortForwarding() (err error) {
@@ -55,7 +57,7 @@ func newNoPortForwarder(providerName string) *noPortForwarder {
}
func (n *noPortForwarder) Name() string {
return n.providerName + " [not supported]"
return n.providerName
}
func (n *noPortForwarder) PortForward(context.Context, pfutils.PortForwardObjects) (