fix: provider auto update

This commit is contained in:
Skyxim 2022-05-08 00:04:16 +08:00
parent 663bf4fbb0
commit 2fbbf7519f
6 changed files with 30 additions and 14 deletions

View file

@ -43,6 +43,14 @@ func (f *fetcher) Initial() (any, error) {
err error
isLocal bool
)
defer func() {
// pull proxies automatically
if f.ticker != nil {
go f.pullLoop()
}
}()
if stat, fErr := os.Stat(f.vehicle.Path()); fErr == nil {
buf, err = os.ReadFile(f.vehicle.Path())
modTime := stat.ModTime()
@ -84,11 +92,6 @@ func (f *fetcher) Initial() (any, error) {
f.hash = md5.Sum(buf)
// pull proxies automatically
if f.ticker != nil {
go f.pullLoop()
}
return proxies, nil
}

View file

@ -74,7 +74,7 @@ func (h *HTTPVehicle) Read() ([]byte, error) {
// from http.DefaultTransport
MaxIdleConns: 100,
IdleConnTimeout: 30 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
TLSHandshakeTimeout: 5 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
DialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
conn := inner.HandleTcp(address, uri.Hostname())

View file

@ -78,8 +78,8 @@ func ApplyConfig(cfg *config.Config, force bool) {
updateSniffer(cfg.Sniffer)
updateHosts(cfg.Hosts)
updateDNS(cfg.DNS)
loadProxyProvider(cfg.Providers)
loadRuleProvider(cfg.RuleProviders)
loadProviders(cfg)
updateGeneral(cfg.General, force)
updateIPTables(cfg)
updateTun(cfg.Tun, cfg.DNS)
@ -89,6 +89,12 @@ func ApplyConfig(cfg *config.Config, force bool) {
log.SetLevel(cfg.General.LogLevel)
}
func loadProviders(cfg *config.Config) {
P.NewInner(tunnel.TCPIn())
loadProxyProvider(cfg.Providers)
loadRuleProvider(cfg.RuleProviders)
}
func GetGeneral() *config.General {
ports := P.GetPorts()
var authenticator []string
@ -188,7 +194,7 @@ func loadProvider(pv provider.Provider) {
log.Infoln("Start initial provider %s", (pv).Name())
}
if err := (pv).Initial(); err != nil {
if err := pv.Initial(); err != nil {
switch pv.Type() {
case provider.Proxy:
{

View file

@ -83,6 +83,10 @@ func SetBindAddress(host string) {
bindAddress = host
}
func NewInner(tcpIn chan<- C.ConnContext) {
inner.New(tcpIn)
}
func ReCreateHTTP(port int, tcpIn chan<- C.ConnContext) {
httpMux.Lock()
defer httpMux.Unlock()
@ -127,7 +131,6 @@ func ReCreateSocks(port int, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.P
log.Errorln("Start SOCKS server error: %s", err.Error())
}
}()
inner.New(tcpIn)
addr := genAddr(bindAddress, port, allowLan)

View file

@ -44,6 +44,12 @@ func (f *fetcher) Initial() (interface{}, error) {
err error
)
defer func() {
if f.ticker != nil {
go f.pullLoop()
}
}()
if stat, fErr := os.Stat(f.vehicle.Path()); fErr == nil {
buf, err = ioutil.ReadFile(f.vehicle.Path())
modTime := stat.ModTime()
@ -83,9 +89,6 @@ func (f *fetcher) Initial() (interface{}, error) {
}
f.hash = md5.Sum(buf)
if f.ticker != nil {
go f.pullLoop()
}
return rules, nil
}

View file

@ -118,7 +118,8 @@ func NewRuleSetProvider(name string, behavior P.RuleType, interval time.Duration
rp,
}
runtime.SetFinalizer(wrapper, rp.fetcher.Destroy())
final := func(provider *RuleSetProvider) { rp.fetcher.Destroy() }
runtime.SetFinalizer(wrapper, final)
return wrapper
}