| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package core
- import (
- "sync"
- "time"
- "v2ray.com/core/common"
- "v2ray.com/core/features/policy"
- )
- type syncPolicyManager struct {
- sync.RWMutex
- policy.Manager
- }
- func (m *syncPolicyManager) ForLevel(level uint32) policy.Session {
- m.RLock()
- defer m.RUnlock()
- if m.Manager == nil {
- p := policy.SessionDefault()
- if level == 1 {
- p.Timeouts.ConnectionIdle = time.Second * 600
- }
- return p
- }
- return m.Manager.ForLevel(level)
- }
- func (m *syncPolicyManager) ForSystem() policy.System {
- m.RLock()
- defer m.RUnlock()
- if m.Manager == nil {
- return policy.System{}
- }
- return m.Manager.ForSystem()
- }
- func (m *syncPolicyManager) Start() error {
- m.RLock()
- defer m.RUnlock()
- if m.Manager == nil {
- return nil
- }
- return m.Manager.Start()
- }
- func (m *syncPolicyManager) Close() error {
- m.RLock()
- defer m.RUnlock()
- return common.Close(m.Manager)
- }
- func (m *syncPolicyManager) Set(manager policy.Manager) {
- if manager == nil {
- return
- }
- m.Lock()
- defer m.Unlock()
- common.Close(m.Manager) // nolint: errcheck
- m.Manager = manager
- }
|