12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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 = ""
- }
|