mirror of
https://github.com/safing/portmaster
synced 2025-09-01 10:09:11 +00:00
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package captain
|
|
|
|
import (
|
|
"github.com/safing/portmaster/spn/conf"
|
|
"github.com/safing/portmaster/spn/docks"
|
|
)
|
|
|
|
func startDockHooks() {
|
|
docks.RegisterCraneUpdateHook(handleCraneUpdate)
|
|
}
|
|
|
|
func stopDockHooks() {
|
|
docks.ResetCraneUpdateHook()
|
|
}
|
|
|
|
func handleCraneUpdate(crane *docks.Crane) {
|
|
if crane == nil {
|
|
return
|
|
}
|
|
|
|
if conf.Client() && crane.Controller != nil && crane.Controller.Abandoning.IsSet() {
|
|
// Check connection to home hub.
|
|
triggerClientHealthCheck()
|
|
}
|
|
|
|
if conf.PublicHub() && crane.Public() {
|
|
// Update Hub status.
|
|
updateConnectionStatus()
|
|
}
|
|
}
|
|
|
|
func updateConnectionStatus() {
|
|
// Delay updating status for a better chance to combine multiple changes.
|
|
module.statusUpdater.Delay(maintainStatusUpdateDelay)
|
|
|
|
// Check if we lost all connections and trigger a pending restart if we did.
|
|
for _, crane := range docks.GetAllAssignedCranes() {
|
|
if crane.Public() && !crane.Stopped() {
|
|
// There is at least one public and active crane, so don't restart now.
|
|
return
|
|
}
|
|
}
|
|
|
|
// TODO(vladimir): what was this needed for?
|
|
// updates.TriggerRestartIfPending()
|
|
}
|