// StartBinaryUpgradeChecker checks for binary upgrades when the connection is // up and on a schedule. // // This function runs in it's own goroutine. func StartBinaryUpgradeChecker() { connectionEventListener := make(chan service.ConnectionHistory) uChecker, _ := NewUpdateChecker("binary") service.AddListener(connectionEventListener) for { select { // Update when the transport connection comes up case event := <-connectionEventListener: if event.IsUp() { uChecker.Activate() uChecker.UpdateNow() } // Update by request of the update checker case request := <-uChecker.RequestC: err := upgradeBinaryCheck() // err := fakeUpgradeBinaryCheck() if err != nil { lg.Errorln(err) request.ResponseC <- UpdateError } else { request.ResponseC <- UpdateSuccess } } } }
// StartBlocklistUpgrader react to certain conitions for when the list of // blocked urls should be updated. // // This function runs in it's own goroutine. func StartBlocklistUpgrader() { connectionEventListener := make(chan service.ConnectionHistory) uChecker, _ := NewUpdateChecker("blocklist") service.AddListener(connectionEventListener) currentCountry := clientconfig.Get().Settings.Local.CountryCode checkCountrySettingC := time.NewTicker(2 * time.Second) defer checkCountrySettingC.Stop() loop: for { select { // Update when the transport connection comes up case event := <-connectionEventListener: if event.IsUp() { uChecker.Activate() uChecker.UpdateNow() } // Tell updatechecker to request update when user changes country settings case <-checkCountrySettingC.C: conf := clientconfig.Get() if currentCountry != conf.Settings.Local.CountryCode { currentCountry = conf.Settings.Local.CountryCode uChecker.UpdateNow() } // Update by request of the update checker case request := <-uChecker.RequestC: conf := clientconfig.Get() if conf.Settings.Local.CountryCode == "__" { lg.V(9).Infoln("Country is __, skipping blocklist updates") continue loop } currentCountry = conf.Settings.Local.CountryCode n, err := upgradeBlockList() if err != nil { lg.Errorf("blocklist update cc:%s err:%v", currentCountry, err) ui.Notify("blocklist_update_error_message") request.ResponseC <- UpdateError } else { lg.V(5).Infof("blocklist update success cc:%s, got %d entries", currentCountry, n) ui.Notify("blocklist_update_success_message") request.ResponseC <- UpdateSuccess } } } }
// StartBinaryUpgradeChecker checks for binary upgrades when the connection is // up and on a schedule. // // This function runs in it's own goroutine. func StartBinaryUpgradeChecker(diffsBaseURL string) { if !upgradeEnabled { lg.Infoln("binary upgrades are disabled using the command line flag") return } if VERSION == "" { lg.Warningln("VERSION not set, binary upgrades are disabled") return } _, err := version.NewVersion(VERSION) if err != nil { lg.Warningf("VERSION '%s' is not a valid semver version, binary upgrades are disabled: %v", VERSION, err) return } connectionEventListener := make(chan service.ConnectionHistory) uChecker, _ := NewUpdateChecker("binary") service.AddListener(connectionEventListener) for { select { // Update when the transport connection comes up case event := <-connectionEventListener: if event.IsUp() { uChecker.Activate() uChecker.UpdateNow() } // Update by request of the update checker case request := <-uChecker.RequestC: err := upgradeBinaryCheck(diffsBaseURL) if err != nil { lg.Errorln(err) request.ResponseC <- UpdateError } else { request.ResponseC <- UpdateSuccess } } } }
func init() { var err error pac.template, err = template.New("pac").Parse(pacRawTmpl) pac.defaultMethod = "DIRECT" if err != nil { panic(err) } var buf bytes.Buffer for k := range topLevelDomain { buf.WriteString(fmt.Sprintf("\t\"%s\": true,\n", k)) } pac.topLevelDomain = buf.String()[:buf.Len()-2] // remove the final comma go func() { connectionEventListener := make(chan service.ConnectionHistory) service.AddListener(connectionEventListener) for { select { case event := <-connectionEventListener: if event.IsUp() { current := event.Current() s, ok := service.ManagedServices.Service(current.ServiceID) if ok { response := s.Response SetBlockedMethod(response["protocol"], response["bindaddr"]) } else { SetBlockedMethod("DIRECT", "") } } else if event.Current().State == service.Ended { SetBlockedMethod("DIRECT", "") } } } }() }