mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-09-15 21:00:27 +00:00
provider: Add override_dialer_options option
This commit is contained in:
@@ -36,11 +36,12 @@ type Adapter struct {
|
|||||||
callbackAccess sync.Mutex
|
callbackAccess sync.Mutex
|
||||||
callbacks list.List[adapter.ProviderUpdateCallback]
|
callbacks list.List[adapter.ProviderUpdateCallback]
|
||||||
|
|
||||||
link string
|
link string
|
||||||
enabled bool
|
enabled bool
|
||||||
removeEmojis bool
|
removeEmojis bool
|
||||||
timeout time.Duration
|
overrideDialerOptions *option.DialerOptions
|
||||||
interval time.Duration
|
timeout time.Duration
|
||||||
|
interval time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAdapter(ctx context.Context, router adapter.Router, outbound adapter.OutboundManager, logFactory log.Factory, logger log.ContextLogger, providerTag string, providerType string, options option.ProviderHealthCheckOptions) Adapter {
|
func NewAdapter(ctx context.Context, router adapter.Router, outbound adapter.OutboundManager, logFactory log.Factory, logger log.ContextLogger, providerTag string, providerType string, options option.ProviderHealthCheckOptions) Adapter {
|
||||||
@@ -75,6 +76,10 @@ func (a *Adapter) SetRemoveEmojis(remove bool) {
|
|||||||
a.removeEmojis = remove
|
a.removeEmojis = remove
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Adapter) SetOverrideDialerOptions(options *option.DialerOptions) {
|
||||||
|
a.overrideDialerOptions = options
|
||||||
|
}
|
||||||
|
|
||||||
func (a *Adapter) Start() error {
|
func (a *Adapter) Start() error {
|
||||||
a.history = service.PtrFromContext[urltest.HistoryStorage](a.ctx)
|
a.history = service.PtrFromContext[urltest.HistoryStorage](a.ctx)
|
||||||
if a.history == nil {
|
if a.history == nil {
|
||||||
@@ -119,6 +124,11 @@ func (a *Adapter) UpdateOutbounds(oldOpts []option.Outbound, newOpts []option.Ou
|
|||||||
oldOptByTag[opt.Tag] = opt
|
oldOptByTag[opt.Tag] = opt
|
||||||
}
|
}
|
||||||
for i, opt := range newOpts {
|
for i, opt := range newOpts {
|
||||||
|
if a.overrideDialerOptions != nil {
|
||||||
|
if wrapper, ok := opt.Options.(option.DialerOptionsWrapper); ok {
|
||||||
|
wrapper.ReplaceDialerOptions(*a.overrideDialerOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
var tag string
|
var tag string
|
||||||
if opt.Tag != "" {
|
if opt.Tag != "" {
|
||||||
tag = F.ToString(a.providerTag, "/", opt.Tag)
|
tag = F.ToString(a.providerTag, "/", opt.Tag)
|
||||||
|
|||||||
@@ -50,6 +50,10 @@
|
|||||||
"path": "subscriptions/my-sub.txt",
|
"path": "subscriptions/my-sub.txt",
|
||||||
// Remove emoji flags from proxy names.
|
// Remove emoji flags from proxy names.
|
||||||
"remove_emojis": true,
|
"remove_emojis": true,
|
||||||
|
// Override dial fields on every outbound from this provider.
|
||||||
|
"override_dialer_options": {
|
||||||
|
// Dial fields
|
||||||
|
},
|
||||||
"health_check": {
|
"health_check": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"url": "https://www.gstatic.com/generate_204",
|
"url": "https://www.gstatic.com/generate_204",
|
||||||
|
|||||||
@@ -82,6 +82,10 @@
|
|||||||
"include": "(?i)hk|jp|sg|us",
|
"include": "(?i)hk|jp|sg|us",
|
||||||
// Remove emoji flags from proxy names.
|
// Remove emoji flags from proxy names.
|
||||||
"remove_emojis": true,
|
"remove_emojis": true,
|
||||||
|
// Override dial fields on every outbound from this provider.
|
||||||
|
"override_dialer_options": {
|
||||||
|
// Dial fields
|
||||||
|
},
|
||||||
"health_check": {
|
"health_check": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"url": "https://www.gstatic.com/generate_204",
|
"url": "https://www.gstatic.com/generate_204",
|
||||||
|
|||||||
+18
-15
@@ -47,28 +47,31 @@ func (h *Provider) UnmarshalJSONContext(ctx context.Context, content []byte) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ProviderLocalOptions struct {
|
type ProviderLocalOptions struct {
|
||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
||||||
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
||||||
|
OverrideDialerOptions *DialerOptions `json:"override_dialer_options,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProviderRemoteOptions struct {
|
type ProviderRemoteOptions struct {
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
UserAgent string `json:"user_agent,omitempty"`
|
UserAgent string `json:"user_agent,omitempty"`
|
||||||
Headers badoption.HTTPHeader `json:"headers,omitempty"`
|
Headers badoption.HTTPHeader `json:"headers,omitempty"`
|
||||||
DownloadDetour string `json:"download_detour,omitempty"`
|
DownloadDetour string `json:"download_detour,omitempty"`
|
||||||
UpdateInterval badoption.Duration `json:"update_interval,omitempty"`
|
UpdateInterval badoption.Duration `json:"update_interval,omitempty"`
|
||||||
|
|
||||||
Exclude *badoption.Regexp `json:"exclude,omitempty"`
|
Exclude *badoption.Regexp `json:"exclude,omitempty"`
|
||||||
Include *badoption.Regexp `json:"include,omitempty"`
|
Include *badoption.Regexp `json:"include,omitempty"`
|
||||||
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
||||||
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
||||||
|
OverrideDialerOptions *DialerOptions `json:"override_dialer_options,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProviderInlineOptions struct {
|
type ProviderInlineOptions struct {
|
||||||
Outbounds []Outbound `json:"outbounds,omitempty"`
|
Outbounds []Outbound `json:"outbounds,omitempty"`
|
||||||
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
RemoveEmojis bool `json:"remove_emojis,omitempty"`
|
||||||
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
HealthCheck ProviderHealthCheckOptions `json:"health_check,omitempty"`
|
||||||
|
OverrideDialerOptions *DialerOptions `json:"override_dialer_options,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProviderHealthCheckOptions struct {
|
type ProviderHealthCheckOptions struct {
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ func NewProviderInline(ctx context.Context, router adapter.Router, logFactory lo
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
}
|
}
|
||||||
p.SetRemoveEmojis(options.RemoveEmojis)
|
p.SetRemoveEmojis(options.RemoveEmojis)
|
||||||
|
p.SetOverrideDialerOptions(options.OverrideDialerOptions)
|
||||||
p.UpdateOutbounds(nil, options.Outbounds)
|
p.UpdateOutbounds(nil, options.Outbounds)
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
@@ -71,6 +72,7 @@ func NewProviderLocal(ctx context.Context, router adapter.Router, logFactory log
|
|||||||
provider: service.FromContext[adapter.ProviderManager](ctx),
|
provider: service.FromContext[adapter.ProviderManager](ctx),
|
||||||
}
|
}
|
||||||
provider.SetRemoveEmojis(options.RemoveEmojis)
|
provider.SetRemoveEmojis(options.RemoveEmojis)
|
||||||
|
provider.SetOverrideDialerOptions(options.OverrideDialerOptions)
|
||||||
filePath := filemanager.BasePath(ctx, options.Path)
|
filePath := filemanager.BasePath(ctx, options.Path)
|
||||||
provider.path, _ = filepath.Abs(filePath)
|
provider.path, _ = filepath.Abs(filePath)
|
||||||
watcher, err := fswatch.NewWatcher(fswatch.Options{
|
watcher, err := fswatch.NewWatcher(fswatch.Options{
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ func NewProviderRemote(ctx context.Context, router adapter.Router, logFactory lo
|
|||||||
include: (*regexp.Regexp)(options.Include),
|
include: (*regexp.Regexp)(options.Include),
|
||||||
}
|
}
|
||||||
p.SetRemoveEmojis(options.RemoveEmojis)
|
p.SetRemoveEmojis(options.RemoveEmojis)
|
||||||
|
p.SetOverrideDialerOptions(options.OverrideDialerOptions)
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user