github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/app/policy/manager.go (about)

     1  package policy
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/v2fly/v2ray-core/v5/common"
     7  	"github.com/v2fly/v2ray-core/v5/features/policy"
     8  )
     9  
    10  // Instance is an instance of Policy manager.
    11  type Instance struct {
    12  	levels map[uint32]*Policy
    13  	system *SystemPolicy
    14  }
    15  
    16  // New creates new Policy manager instance.
    17  func New(ctx context.Context, config *Config) (*Instance, error) {
    18  	m := &Instance{
    19  		levels: make(map[uint32]*Policy),
    20  		system: config.System,
    21  	}
    22  	if len(config.Level) > 0 {
    23  		for lv, p := range config.Level {
    24  			pp := defaultPolicy()
    25  			pp.overrideWith(p)
    26  			m.levels[lv] = pp
    27  		}
    28  	}
    29  
    30  	return m, nil
    31  }
    32  
    33  // Type implements common.HasType.
    34  func (*Instance) Type() interface{} {
    35  	return policy.ManagerType()
    36  }
    37  
    38  // ForLevel implements policy.Manager.
    39  func (m *Instance) ForLevel(level uint32) policy.Session {
    40  	if p, ok := m.levels[level]; ok {
    41  		return p.ToCorePolicy()
    42  	}
    43  	return policy.SessionDefault()
    44  }
    45  
    46  // ForSystem implements policy.Manager.
    47  func (m *Instance) ForSystem() policy.System {
    48  	if m.system == nil {
    49  		return policy.System{}
    50  	}
    51  	return m.system.ToCorePolicy()
    52  }
    53  
    54  // Start implements common.Runnable.Start().
    55  func (m *Instance) Start() error {
    56  	return nil
    57  }
    58  
    59  // Close implements common.Closable.Close().
    60  func (m *Instance) Close() error {
    61  	return nil
    62  }
    63  
    64  func init() {
    65  	common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) {
    66  		return New(ctx, config.(*Config))
    67  	}))
    68  }