mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-06-13 21:54:13 +08:00
fix & improve efficiency of outbound.Balancer.Network()
* call balancer.Balancer.Networks() only we needed * fix fallback networks not considered * fix balancer.Balancer.Networks() not return nil
This commit is contained in:
parent
1a2e43a2b6
commit
a20ce25d39
@ -86,8 +86,10 @@ func (s *rttBasedBalancer) Networks() []string {
|
|||||||
return []string{N.NetworkTCP, N.NetworkUDP}
|
return []string{N.NetworkTCP, N.NetworkUDP}
|
||||||
case hasTCP:
|
case hasTCP:
|
||||||
return []string{N.NetworkTCP}
|
return []string{N.NetworkTCP}
|
||||||
default:
|
case hasUDP:
|
||||||
return []string{N.NetworkUDP}
|
return []string{N.NetworkUDP}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,33 @@ func (s *Balancer) Network() []string {
|
|||||||
if s.Balancer == nil {
|
if s.Balancer == nil {
|
||||||
return []string{N.NetworkTCP, N.NetworkUDP}
|
return []string{N.NetworkTCP, N.NetworkUDP}
|
||||||
}
|
}
|
||||||
return s.Balancer.Networks()
|
fallbackNetworks := s.fallback.Network()
|
||||||
|
fallbackTCP := common.Contains(fallbackNetworks, N.NetworkTCP)
|
||||||
|
fallbackUDP := common.Contains(fallbackNetworks, N.NetworkUDP)
|
||||||
|
if fallbackTCP && fallbackUDP {
|
||||||
|
// fallback supports all network, we don't need to ask s.Balancer,
|
||||||
|
// we know it can fallback to s.fallback for all networks even if
|
||||||
|
// no outbound is available
|
||||||
|
return fallbackNetworks
|
||||||
|
}
|
||||||
|
|
||||||
|
// ask s.Balancer for available networks
|
||||||
|
networks := s.Balancer.Networks()
|
||||||
|
switch {
|
||||||
|
case fallbackTCP:
|
||||||
|
if !common.Contains(networks, N.NetworkUDP) {
|
||||||
|
return fallbackNetworks
|
||||||
|
}
|
||||||
|
return []string{N.NetworkTCP, N.NetworkUDP}
|
||||||
|
case fallbackUDP:
|
||||||
|
if !common.Contains(networks, N.NetworkTCP) {
|
||||||
|
return fallbackNetworks
|
||||||
|
}
|
||||||
|
return []string{N.NetworkTCP, N.NetworkUDP}
|
||||||
|
default:
|
||||||
|
// fallback supports no network, return the networks from s.Balancer
|
||||||
|
return networks
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now implements adapter.OutboundGroup
|
// Now implements adapter.OutboundGroup
|
||||||
|
Loading…
x
Reference in New Issue
Block a user