inspector.go 533 B

123456789101112131415161718192021222324252627282930313233343536
  1. package ray
  2. import (
  3. "sync"
  4. "v2ray.com/core/common/buf"
  5. )
  6. type Inspector interface {
  7. Input(*buf.Buffer)
  8. }
  9. type NoOpInspector struct{}
  10. func (NoOpInspector) Input(*buf.Buffer) {}
  11. type InspectorChain struct {
  12. sync.RWMutex
  13. chain []Inspector
  14. }
  15. func (ic *InspectorChain) AddInspector(inspector Inspector) {
  16. ic.Lock()
  17. defer ic.Unlock()
  18. ic.chain = append(ic.chain, inspector)
  19. }
  20. func (ic *InspectorChain) Input(b *buf.Buffer) {
  21. ic.RLock()
  22. defer ic.RUnlock()
  23. for _, inspector := range ic.chain {
  24. inspector.Input(b)
  25. }
  26. }