mirror of
https://github.com/fosrl/olm.git
synced 2026-03-09 20:26:47 +00:00
@@ -186,7 +186,7 @@ func (o *Olm) handleWgPeerHolepunchAddSite(msg websocket.WSMessage) {
|
||||
}
|
||||
|
||||
o.holePunchManager.TriggerHolePunch() // Trigger immediate hole punch attempt
|
||||
o.holePunchManager.ResetInterval() // start sending immediately again so we fill in the endpoint on the cloud
|
||||
o.holePunchManager.ResetServerHolepunchInterval() // start sending immediately again so we fill in the endpoint on the cloud
|
||||
|
||||
// Send handshake acknowledgment back to server with retry
|
||||
o.stopPeerSend, _ = o.websocket.SendMessageInterval("olm/wg/server/peer/add", map[string]interface{}{
|
||||
|
||||
56
olm/olm.go
56
olm/olm.go
@@ -46,10 +46,10 @@ type Olm struct {
|
||||
holePunchManager *holepunch.Manager
|
||||
peerManager *peers.PeerManager
|
||||
// Power mode management
|
||||
currentPowerMode string
|
||||
powerModeMu sync.Mutex
|
||||
wakeUpTimer *time.Timer
|
||||
wakeUpDebounce time.Duration
|
||||
currentPowerMode string
|
||||
powerModeMu sync.Mutex
|
||||
wakeUpTimer *time.Timer
|
||||
wakeUpDebounce time.Duration
|
||||
|
||||
olmCtx context.Context
|
||||
tunnelCancel context.CancelFunc
|
||||
@@ -134,7 +134,7 @@ func Init(ctx context.Context, config OlmConfig) (*Olm, error) {
|
||||
logger.SetOutput(file)
|
||||
logFile = file
|
||||
}
|
||||
|
||||
|
||||
if config.WakeUpDebounce == 0 {
|
||||
config.WakeUpDebounce = 3 * time.Second
|
||||
}
|
||||
@@ -628,23 +628,28 @@ func (o *Olm) SetPowerMode(mode string) error {
|
||||
logger.Info("Switching to low power mode")
|
||||
|
||||
if o.websocket != nil {
|
||||
logger.Info("Closing websocket connection for low power mode")
|
||||
if err := o.websocket.Close(); err != nil {
|
||||
logger.Error("Error closing websocket: %v", err)
|
||||
logger.Info("Disconnecting websocket for low power mode")
|
||||
if err := o.websocket.Disconnect(); err != nil {
|
||||
logger.Error("Error disconnecting websocket: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
lowPowerInterval := 10 * time.Minute
|
||||
|
||||
if o.peerManager != nil {
|
||||
peerMonitor := o.peerManager.GetPeerMonitor()
|
||||
if peerMonitor != nil {
|
||||
lowPowerInterval := 10 * time.Minute
|
||||
peerMonitor.SetInterval(lowPowerInterval)
|
||||
peerMonitor.SetHolepunchInterval(lowPowerInterval, lowPowerInterval)
|
||||
peerMonitor.SetPeerInterval(lowPowerInterval, lowPowerInterval)
|
||||
peerMonitor.SetPeerHolepunchInterval(lowPowerInterval, lowPowerInterval)
|
||||
logger.Info("Set monitoring intervals to 10 minutes for low power mode")
|
||||
}
|
||||
o.peerManager.UpdateAllPeersPersistentKeepalive(0) // disable
|
||||
}
|
||||
|
||||
if o.holePunchManager != nil {
|
||||
o.holePunchManager.SetServerHolepunchInterval(lowPowerInterval, lowPowerInterval)
|
||||
}
|
||||
|
||||
o.currentPowerMode = "low"
|
||||
logger.Info("Switched to low power mode")
|
||||
|
||||
@@ -673,20 +678,8 @@ func (o *Olm) SetPowerMode(mode string) error {
|
||||
}
|
||||
|
||||
logger.Info("Debounce complete, switching to normal power mode")
|
||||
|
||||
// Restore intervals and reconnect websocket
|
||||
if o.peerManager != nil {
|
||||
peerMonitor := o.peerManager.GetPeerMonitor()
|
||||
if peerMonitor != nil {
|
||||
peerMonitor.ResetHolepunchInterval()
|
||||
peerMonitor.ResetInterval()
|
||||
}
|
||||
|
||||
o.peerManager.UpdateAllPeersPersistentKeepalive(5)
|
||||
}
|
||||
|
||||
|
||||
logger.Info("Reconnecting websocket for normal power mode")
|
||||
|
||||
if o.websocket != nil {
|
||||
if err := o.websocket.Connect(); err != nil {
|
||||
logger.Error("Failed to reconnect websocket: %v", err)
|
||||
@@ -694,6 +687,21 @@ func (o *Olm) SetPowerMode(mode string) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Restore intervals and reconnect websocket
|
||||
if o.peerManager != nil {
|
||||
peerMonitor := o.peerManager.GetPeerMonitor()
|
||||
if peerMonitor != nil {
|
||||
peerMonitor.ResetPeerHolepunchInterval()
|
||||
peerMonitor.ResetPeerInterval()
|
||||
}
|
||||
|
||||
o.peerManager.UpdateAllPeersPersistentKeepalive(5)
|
||||
}
|
||||
|
||||
if o.holePunchManager != nil {
|
||||
o.holePunchManager.ResetServerHolepunchInterval()
|
||||
}
|
||||
|
||||
o.currentPowerMode = "normal"
|
||||
logger.Info("Switched to normal power mode")
|
||||
})
|
||||
|
||||
@@ -123,7 +123,7 @@ func (o *Olm) handleWgPeerUpdate(msg websocket.WSMessage) {
|
||||
if updateData.Endpoint != "" && updateData.Endpoint != existingPeer.Endpoint {
|
||||
logger.Info("Endpoint changed for site %d, triggering holepunch to refresh NAT mappings", updateData.SiteId)
|
||||
_ = o.holePunchManager.TriggerHolePunch()
|
||||
o.holePunchManager.ResetInterval()
|
||||
o.holePunchManager.ResetServerHolepunchInterval()
|
||||
}
|
||||
|
||||
logger.Info("Successfully updated peer for site %d", updateData.SiteId)
|
||||
|
||||
Reference in New Issue
Block a user