chore: ntp service support dialer-proxy
This commit is contained in:
parent
c0ba798708
commit
0dfe696300
3 changed files with 24 additions and 12 deletions
|
@ -93,10 +93,11 @@ type Controller struct {
|
||||||
// NTP config
|
// NTP config
|
||||||
type NTP struct {
|
type NTP struct {
|
||||||
Enable bool `yaml:"enable"`
|
Enable bool `yaml:"enable"`
|
||||||
WriteToSystem bool `yaml:"write-to-system"`
|
|
||||||
Server string `yaml:"server"`
|
Server string `yaml:"server"`
|
||||||
Port int `yaml:"port"`
|
Port int `yaml:"port"`
|
||||||
Interval int `yaml:"interval"`
|
Interval int `yaml:"interval"`
|
||||||
|
DialerProxy string `yaml:"dialer-proxy"`
|
||||||
|
WriteToSystem bool `yaml:"write-to-system"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DNS config
|
// DNS config
|
||||||
|
@ -183,10 +184,11 @@ type Config struct {
|
||||||
|
|
||||||
type RawNTP struct {
|
type RawNTP struct {
|
||||||
Enable bool `yaml:"enable"`
|
Enable bool `yaml:"enable"`
|
||||||
WriteToSystem bool `yaml:"write-to-system"`
|
|
||||||
Server string `yaml:"server"`
|
Server string `yaml:"server"`
|
||||||
ServerPort int `yaml:"server-port"`
|
ServerPort int `yaml:"server-port"`
|
||||||
Interval int `yaml:"interval"`
|
Interval int `yaml:"interval"`
|
||||||
|
DialerProxy string `yaml:"dialer-proxy"`
|
||||||
|
WriteToSystem bool `yaml:"write-to-system"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type RawDNS struct {
|
type RawDNS struct {
|
||||||
|
@ -1200,6 +1202,7 @@ func paresNTP(rawCfg *RawConfig) *NTP {
|
||||||
Server: cfg.Server,
|
Server: cfg.Server,
|
||||||
Port: cfg.ServerPort,
|
Port: cfg.ServerPort,
|
||||||
Interval: cfg.Interval,
|
Interval: cfg.Interval,
|
||||||
|
DialerProxy: cfg.DialerProxy,
|
||||||
WriteToSystem: cfg.WriteToSystem,
|
WriteToSystem: cfg.WriteToSystem,
|
||||||
}
|
}
|
||||||
return ntpCfg
|
return ntpCfg
|
||||||
|
|
|
@ -190,8 +190,12 @@ func updateExperimental(c *config.Config) {
|
||||||
|
|
||||||
func updateNTP(c *config.NTP) {
|
func updateNTP(c *config.NTP) {
|
||||||
if c.Enable {
|
if c.Enable {
|
||||||
ntp.ReCreateNTPService(net.JoinHostPort(c.Server, strconv.Itoa(c.Port)),
|
ntp.ReCreateNTPService(
|
||||||
time.Duration(c.Interval), c.WriteToSystem)
|
net.JoinHostPort(c.Server, strconv.Itoa(c.Port)),
|
||||||
|
time.Duration(c.Interval),
|
||||||
|
c.DialerProxy,
|
||||||
|
c.WriteToSystem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,15 @@ package ntp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/Dreamacro/clash/log"
|
|
||||||
M "github.com/sagernet/sing/common/metadata"
|
|
||||||
N "github.com/sagernet/sing/common/network"
|
|
||||||
"github.com/sagernet/sing/common/ntp"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/Dreamacro/clash/component/dialer"
|
||||||
|
"github.com/Dreamacro/clash/component/proxydialer"
|
||||||
|
"github.com/Dreamacro/clash/log"
|
||||||
|
|
||||||
|
M "github.com/sagernet/sing/common/metadata"
|
||||||
|
"github.com/sagernet/sing/common/ntp"
|
||||||
)
|
)
|
||||||
|
|
||||||
var offset time.Duration
|
var offset time.Duration
|
||||||
|
@ -15,6 +18,7 @@ var service *Service
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
server M.Socksaddr
|
server M.Socksaddr
|
||||||
|
dialer proxydialer.SingDialer
|
||||||
ticker *time.Ticker
|
ticker *time.Ticker
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
|
@ -23,16 +27,17 @@ type Service struct {
|
||||||
running bool
|
running bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReCreateNTPService(server string, interval time.Duration, syncSystemTime bool) {
|
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) {
|
||||||
if service != nil {
|
if service != nil {
|
||||||
service.Stop()
|
service.Stop()
|
||||||
}
|
}
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
service = &Service{
|
service = &Service{
|
||||||
|
server: M.ParseSocksaddr(server),
|
||||||
|
dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()),
|
||||||
|
ticker: time.NewTicker(interval * time.Minute),
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
server: M.ParseSocksaddr(server),
|
|
||||||
ticker: time.NewTicker(interval * time.Minute),
|
|
||||||
syncSystemTime: syncSystemTime,
|
syncSystemTime: syncSystemTime,
|
||||||
}
|
}
|
||||||
service.Start()
|
service.Start()
|
||||||
|
@ -70,7 +75,7 @@ func (srv *Service) update() {
|
||||||
var response *ntp.Response
|
var response *ntp.Response
|
||||||
var err error
|
var err error
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
response, err = ntp.Exchange(context.Background(), N.SystemDialer, srv.server)
|
response, err = ntp.Exchange(context.Background(), srv.dialer, srv.server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if i == 2 {
|
if i == 2 {
|
||||||
log.Errorln("Initialize NTP time failed: %s", err)
|
log.Errorln("Initialize NTP time failed: %s", err)
|
||||||
|
|
Loading…
Reference in a new issue