Add JSON schema support
This commit is contained in:
+20
-4
@@ -1623,8 +1623,10 @@ func dnsRuleActionDisablesLegacyDNSMode(action option.DNSRuleAction) bool {
|
||||
return true
|
||||
}
|
||||
switch action.Action {
|
||||
case "", C.RuleActionTypeRoute, C.RuleActionTypeEvaluate:
|
||||
case "", C.RuleActionTypeRoute:
|
||||
return action.RouteOptions.DisableOptimisticCache || action.RouteOptions.Speculative
|
||||
case C.RuleActionTypeEvaluate:
|
||||
return action.EvaluateOptions.DisableOptimisticCache || action.EvaluateOptions.Speculative
|
||||
case C.RuleActionTypeRouteOptions:
|
||||
return action.RouteOptionsOptions.DisableOptimisticCache
|
||||
default:
|
||||
@@ -1634,8 +1636,10 @@ func dnsRuleActionDisablesLegacyDNSMode(action option.DNSRuleAction) bool {
|
||||
|
||||
func dnsRuleActionHasStrategy(action option.DNSRuleAction) bool {
|
||||
switch action.Action {
|
||||
case "", C.RuleActionTypeRoute, C.RuleActionTypeEvaluate:
|
||||
case "", C.RuleActionTypeRoute:
|
||||
return C.DomainStrategy(action.RouteOptions.Strategy) != C.DomainStrategyAsIS
|
||||
case C.RuleActionTypeEvaluate:
|
||||
return C.DomainStrategy(action.EvaluateOptions.Strategy) != C.DomainStrategyAsIS
|
||||
case C.RuleActionTypeRouteOptions:
|
||||
return C.DomainStrategy(action.RouteOptionsOptions.Strategy) != C.DomainStrategyAsIS
|
||||
default:
|
||||
@@ -1663,8 +1667,14 @@ func dnsRuleActionType(rule option.DNSRule) string {
|
||||
func dnsRuleActionServer(rule option.DNSRule) string {
|
||||
switch rule.Type {
|
||||
case "", C.RuleTypeDefault:
|
||||
if dnsRuleActionType(rule) == C.RuleActionTypeEvaluate {
|
||||
return rule.DefaultOptions.EvaluateOptions.Server
|
||||
}
|
||||
return rule.DefaultOptions.RouteOptions.Server
|
||||
case C.RuleTypeLogical:
|
||||
if dnsRuleActionType(rule) == C.RuleActionTypeEvaluate {
|
||||
return rule.LogicalOptions.EvaluateOptions.Server
|
||||
}
|
||||
return rule.LogicalOptions.RouteOptions.Server
|
||||
default:
|
||||
return ""
|
||||
@@ -1674,9 +1684,9 @@ func dnsRuleActionServer(rule option.DNSRule) string {
|
||||
func dnsRuleActionEvaluateTag(rule option.DNSRule) string {
|
||||
switch rule.Type {
|
||||
case "", C.RuleTypeDefault:
|
||||
return rule.DefaultOptions.RouteOptions.Tag
|
||||
return rule.DefaultOptions.EvaluateOptions.Tag
|
||||
case C.RuleTypeLogical:
|
||||
return rule.LogicalOptions.RouteOptions.Tag
|
||||
return rule.LogicalOptions.EvaluateOptions.Tag
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
@@ -1685,8 +1695,14 @@ func dnsRuleActionEvaluateTag(rule option.DNSRule) string {
|
||||
func dnsRuleActionSpeculative(rule option.DNSRule) bool {
|
||||
switch rule.Type {
|
||||
case "", C.RuleTypeDefault:
|
||||
if dnsRuleActionType(rule) == C.RuleActionTypeEvaluate {
|
||||
return rule.DefaultOptions.EvaluateOptions.Speculative
|
||||
}
|
||||
return rule.DefaultOptions.RouteOptions.Speculative
|
||||
case C.RuleTypeLogical:
|
||||
if dnsRuleActionType(rule) == C.RuleActionTypeEvaluate {
|
||||
return rule.LogicalOptions.EvaluateOptions.Speculative
|
||||
}
|
||||
return rule.LogicalOptions.RouteOptions.Speculative
|
||||
default:
|
||||
return false
|
||||
|
||||
@@ -174,7 +174,7 @@ func evaluateRule(server string, tag string, speculative bool) option.DNSRule {
|
||||
DefaultOptions: option.DefaultDNSRule{
|
||||
DNSRuleAction: option.DNSRuleAction{
|
||||
Action: C.RuleActionTypeEvaluate,
|
||||
RouteOptions: option.DNSRouteActionOptions{
|
||||
EvaluateOptions: option.DNSEvaluateActionOptions{
|
||||
Server: server,
|
||||
Tag: tag,
|
||||
Speculative: speculative,
|
||||
|
||||
@@ -328,8 +328,10 @@ func (t *DBusResolvedResolver) checkResolved(ctx context.Context) (*resolvedServ
|
||||
return nil, E.New("link has no DNS servers configured")
|
||||
}
|
||||
serverDialer, err := dialer.NewDefault(t.ctx, option.DialerOptions{
|
||||
BindInterface: defaultInterface.Name,
|
||||
UDPFragmentDefault: true,
|
||||
AbstractDialerOptions: option.AbstractDialerOptions{
|
||||
BindInterface: defaultInterface.Name,
|
||||
UDPFragmentDefault: true,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -2,6 +2,8 @@ package dns
|
||||
|
||||
import (
|
||||
"context"
|
||||
"maps"
|
||||
"slices"
|
||||
"sync"
|
||||
|
||||
"github.com/sagernet/sing-box/adapter"
|
||||
@@ -44,6 +46,12 @@ func NewTransportRegistry() *TransportRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *TransportRegistry) OptionTypes() []string {
|
||||
r.access.Lock()
|
||||
defer r.access.Unlock()
|
||||
return slices.Sorted(maps.Keys(r.optionsType))
|
||||
}
|
||||
|
||||
func (r *TransportRegistry) CreateOptions(transportType string) (any, bool) {
|
||||
r.access.Lock()
|
||||
defer r.access.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user