mirror of
https://git.zx2c4.com/wireguard-windows
synced 2024-11-10 16:59:18 +00:00
6ed37f30f5
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
/* SPDX-License-Identifier: MIT
|
|
*
|
|
* Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved.
|
|
*/
|
|
|
|
package manager
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
_ "unsafe"
|
|
|
|
"golang.zx2c4.com/wireguard/windows/services"
|
|
"golang.zx2c4.com/wireguard/windows/updater"
|
|
"golang.zx2c4.com/wireguard/windows/version"
|
|
)
|
|
|
|
//go:linkname fastrandn runtime.fastrandn
|
|
func fastrandn(n uint32) uint32
|
|
|
|
type UpdateState uint32
|
|
|
|
const (
|
|
UpdateStateUnknown UpdateState = iota
|
|
UpdateStateFoundUpdate
|
|
UpdateStateUpdatesDisabledUnofficialBuild
|
|
)
|
|
|
|
var updateState = UpdateStateUnknown
|
|
|
|
func jitterSleep(min, max time.Duration) {
|
|
time.Sleep(min + time.Millisecond*time.Duration(fastrandn(uint32((max-min+1)/time.Millisecond))))
|
|
}
|
|
|
|
func checkForUpdates() {
|
|
if !version.IsRunningOfficialVersion() {
|
|
log.Println("Build is not official, so updates are disabled")
|
|
updateState = UpdateStateUpdatesDisabledUnofficialBuild
|
|
IPCServerNotifyUpdateFound(updateState)
|
|
return
|
|
}
|
|
if services.StartedAtBoot() {
|
|
jitterSleep(time.Minute*2, time.Minute*5)
|
|
}
|
|
noError, didNotify := true, false
|
|
for {
|
|
update, err := updater.CheckForUpdate()
|
|
if err == nil && update != nil && !didNotify {
|
|
log.Println("An update is available")
|
|
updateState = UpdateStateFoundUpdate
|
|
IPCServerNotifyUpdateFound(updateState)
|
|
didNotify = true
|
|
} else if err != nil && !didNotify {
|
|
log.Printf("Update checker: %v", err)
|
|
if noError {
|
|
jitterSleep(time.Minute*4, time.Minute*6)
|
|
noError = false
|
|
} else {
|
|
jitterSleep(time.Minute*25, time.Minute*30)
|
|
}
|
|
} else {
|
|
jitterSleep(time.Hour-time.Minute*3, time.Hour+time.Minute*3)
|
|
}
|
|
}
|
|
}
|