Compare commits

...

2 Commits
dev ... v1.4.1

Author SHA1 Message Date
Owen
4850b1b332 Handle cross platform close
Former-commit-id: 89932bb736c7f4b3eb9bb2384b0cf6bd27872c1c
2026-01-31 17:50:31 -08:00
Owen
1ff74f7173 Dont go unregistered when low power mode
Former-commit-id: f55fc8fb39f8efc9d5438465f655dc2d734223c3
2026-01-31 17:15:30 -08:00
5 changed files with 28 additions and 12 deletions

View File

@@ -36,7 +36,7 @@ func (o *Olm) handleConnect(msg websocket.WSMessage) {
var wgData WgData var wgData WgData
if o.connected { if o.registered {
logger.Info("Already connected. Ignoring new connection request.") logger.Info("Already connected. Ignoring new connection request.")
return return
} }
@@ -208,7 +208,7 @@ func (o *Olm) handleConnect(msg websocket.WSMessage) {
o.apiServer.SetRegistered(true) o.apiServer.SetRegistered(true)
o.connected = true o.registered = true
// Start ping monitor now that we are registered and connected // Start ping monitor now that we are registered and connected
o.websocket.StartPingMonitor() o.websocket.StartPingMonitor()

View File

@@ -157,7 +157,7 @@ func (o *Olm) handleWgPeerUpdateData(msg websocket.WSMessage) {
func (o *Olm) handleSync(msg websocket.WSMessage) { func (o *Olm) handleSync(msg websocket.WSMessage) {
logger.Debug("Received sync message: %v", msg.Data) logger.Debug("Received sync message: %v", msg.Data)
if !o.connected { if !o.registered {
logger.Warn("Not connected, ignoring sync request") logger.Warn("Not connected, ignoring sync request")
return return
} }

View File

@@ -8,7 +8,6 @@ import (
_ "net/http/pprof" _ "net/http/pprof"
"os" "os"
"sync" "sync"
"syscall"
"time" "time"
"github.com/fosrl/newt/bind" "github.com/fosrl/newt/bind"
@@ -32,7 +31,7 @@ type Olm struct {
privateKey wgtypes.Key privateKey wgtypes.Key
logFile *os.File logFile *os.File
connected bool registered bool
tunnelRunning bool tunnelRunning bool
uapiListener net.Listener uapiListener net.Listener
@@ -386,10 +385,10 @@ func (o *Olm) StartTunnel(config TunnelConfig) {
o.apiServer.SetConnectionStatus(true) o.apiServer.SetConnectionStatus(true)
if o.connected { if o.registered {
o.websocket.StartPingMonitor() o.websocket.StartPingMonitor()
logger.Debug("Already connected, skipping registration") logger.Debug("Already registered, skipping registration")
return nil return nil
} }
@@ -576,7 +575,7 @@ func (o *Olm) Close() {
// If we never created a device from the FD, close it explicitly // If we never created a device from the FD, close it explicitly
// This can happen if tunnel is stopped during registration before handleConnect // This can happen if tunnel is stopped during registration before handleConnect
logger.Debug("Closing unused TUN file descriptor %d", o.tunnelConfig.FileDescriptorTun) logger.Debug("Closing unused TUN file descriptor %d", o.tunnelConfig.FileDescriptorTun)
if err := syscall.Close(int(o.tunnelConfig.FileDescriptorTun)); err != nil { if err := closeFD(o.tunnelConfig.FileDescriptorTun); err != nil {
logger.Error("Failed to close TUN file descriptor: %v", err) logger.Error("Failed to close TUN file descriptor: %v", err)
} else { } else {
logger.Info("Closed unused TUN file descriptor") logger.Info("Closed unused TUN file descriptor")
@@ -615,7 +614,7 @@ func (o *Olm) StopTunnel() error {
} }
// Reset the running state BEFORE cleanup to prevent callbacks from accessing nil pointers // Reset the running state BEFORE cleanup to prevent callbacks from accessing nil pointers
o.connected = false o.registered = false
o.tunnelRunning = false o.tunnelRunning = false
// Cancel the tunnel context if it exists // Cancel the tunnel context if it exists
@@ -739,9 +738,6 @@ func (o *Olm) SetPowerMode(mode string) error {
logger.Info("Switching to low power mode") logger.Info("Switching to low power mode")
// Mark as disconnected so we re-register on reconnect
o.connected = false
// Update API server connection status // Update API server connection status
if o.apiServer != nil { if o.apiServer != nil {
o.apiServer.SetConnectionStatus(false) o.apiServer.SetConnectionStatus(false)

10
olm/olm_unix.go Normal file
View File

@@ -0,0 +1,10 @@
//go:build !windows
package olm
import "syscall"
// closeFD closes a file descriptor in a platform-specific way
func closeFD(fd uint32) error {
return syscall.Close(int(fd))
}

10
olm/olm_windows.go Normal file
View File

@@ -0,0 +1,10 @@
//go:build windows
package olm
import "syscall"
// closeFD closes a file descriptor in a platform-specific way
func closeFD(fd uint32) error {
return syscall.Close(syscall.Handle(fd))
}