mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
928 B
52 lines
928 B
package router |
|
|
|
import ( |
|
sync "sync" |
|
|
|
"github.com/xtls/xray-core/common/errors" |
|
) |
|
|
|
func (r *Router) OverrideBalancer(balancer string, target string) error { |
|
var b *Balancer |
|
for tag, bl := range r.balancers { |
|
if tag == balancer { |
|
b = bl |
|
break |
|
} |
|
} |
|
if b == nil { |
|
return errors.New("balancer '", balancer, "' not found") |
|
} |
|
b.override.Put(target) |
|
return nil |
|
} |
|
|
|
type overrideSettings struct { |
|
target string |
|
} |
|
|
|
type override struct { |
|
access sync.RWMutex |
|
settings overrideSettings |
|
} |
|
|
|
// Get gets the override settings |
|
func (o *override) Get() string { |
|
o.access.RLock() |
|
defer o.access.RUnlock() |
|
return o.settings.target |
|
} |
|
|
|
// Put updates the override settings |
|
func (o *override) Put(target string) { |
|
o.access.Lock() |
|
defer o.access.Unlock() |
|
o.settings.target = target |
|
} |
|
|
|
// Clear clears the override settings |
|
func (o *override) Clear() { |
|
o.access.Lock() |
|
defer o.access.Unlock() |
|
o.settings.target = "" |
|
}
|
|
|