github.com/xmplusdev/xray-core@v1.8.10/common/buf/override.go (about)

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