override.go 760 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package buf
  2. import (
  3. "github.com/xtls/xray-core/common/net"
  4. )
  5. type EndpointOverrideReader struct {
  6. Reader
  7. Dest net.Address
  8. OriginalDest net.Address
  9. }
  10. func (r *EndpointOverrideReader) ReadMultiBuffer() (MultiBuffer, error) {
  11. mb, err := r.Reader.ReadMultiBuffer()
  12. if err == nil {
  13. for _, b := range mb {
  14. if b.UDP != nil && b.UDP.Address == r.OriginalDest {
  15. b.UDP.Address = r.Dest
  16. }
  17. }
  18. }
  19. return mb, err
  20. }
  21. type EndpointOverrideWriter struct {
  22. Writer
  23. Dest net.Address
  24. OriginalDest net.Address
  25. }
  26. func (w *EndpointOverrideWriter) WriteMultiBuffer(mb MultiBuffer) error {
  27. for _, b := range mb {
  28. if b.UDP != nil && b.UDP.Address == w.Dest {
  29. b.UDP.Address = w.OriginalDest
  30. }
  31. }
  32. return w.Writer.WriteMultiBuffer(mb)
  33. }