policy.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package core
  2. import (
  3. "sync"
  4. "time"
  5. "v2ray.com/core/common"
  6. "v2ray.com/core/features/policy"
  7. )
  8. type syncPolicyManager struct {
  9. sync.RWMutex
  10. policy.Manager
  11. }
  12. func (*syncPolicyManager) Type() interface{} {
  13. return policy.ManagerType()
  14. }
  15. func (m *syncPolicyManager) ForLevel(level uint32) policy.Session {
  16. m.RLock()
  17. defer m.RUnlock()
  18. if m.Manager == nil {
  19. p := policy.SessionDefault()
  20. if level == 1 {
  21. p.Timeouts.ConnectionIdle = time.Second * 600
  22. }
  23. return p
  24. }
  25. return m.Manager.ForLevel(level)
  26. }
  27. func (m *syncPolicyManager) ForSystem() policy.System {
  28. m.RLock()
  29. defer m.RUnlock()
  30. if m.Manager == nil {
  31. return policy.System{}
  32. }
  33. return m.Manager.ForSystem()
  34. }
  35. func (m *syncPolicyManager) Start() error {
  36. m.RLock()
  37. defer m.RUnlock()
  38. if m.Manager == nil {
  39. return nil
  40. }
  41. return m.Manager.Start()
  42. }
  43. func (m *syncPolicyManager) Close() error {
  44. m.RLock()
  45. defer m.RUnlock()
  46. return common.Close(m.Manager)
  47. }
  48. func (m *syncPolicyManager) Set(manager policy.Manager) {
  49. if manager == nil {
  50. return
  51. }
  52. m.Lock()
  53. defer m.Unlock()
  54. common.Close(m.Manager) // nolint: errcheck
  55. m.Manager = manager
  56. }