| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 
							- package ray
 
- import (
 
- 	"github.com/v2ray/v2ray-core/common/alloc"
 
- )
 
- const (
 
- 	bufferSize = 16
 
- )
 
- func NewRay() Ray {
 
- 	return &directRay{
 
- 		Input:  make(chan *alloc.Buffer, bufferSize),
 
- 		Output: make(chan *alloc.Buffer, bufferSize),
 
- 	}
 
- }
 
- // OutboundRay is a transport interface for outbound connections.
 
- type OutboundRay interface {
 
- 	// OutboundInput provides a stream for the input of the outbound connection.
 
- 	// The outbound connection shall write all the input until it is closed.
 
- 	OutboundInput() <-chan *alloc.Buffer
 
- 	// OutboundOutput provides a stream to retrieve the response from the
 
- 	// outbound connection. The outbound connection shall close the channel
 
- 	// after all responses are receivced and put into the channel.
 
- 	OutboundOutput() chan<- *alloc.Buffer
 
- }
 
- // InboundRay is a transport interface for inbound connections.
 
- type InboundRay interface {
 
- 	// InboundInput provides a stream to retrieve the request from client.
 
- 	// The inbound connection shall close the channel after the entire request
 
- 	// is received and put into the channel.
 
- 	InboundInput() chan<- *alloc.Buffer
 
- 	// InboudBound provides a stream of data for the inbound connection to write
 
- 	// as response. The inbound connection shall write all the data from the
 
- 	// channel until it is closed.
 
- 	InboundOutput() <-chan *alloc.Buffer
 
- }
 
- // Ray is an internal tranport channel bewteen inbound and outbound connection.
 
- type Ray interface {
 
- 	InboundRay
 
- 	OutboundRay
 
- }
 
- type directRay struct {
 
- 	Input  chan *alloc.Buffer
 
- 	Output chan *alloc.Buffer
 
- }
 
- func (ray *directRay) OutboundInput() <-chan *alloc.Buffer {
 
- 	return ray.Input
 
- }
 
- func (ray *directRay) OutboundOutput() chan<- *alloc.Buffer {
 
- 	return ray.Output
 
- }
 
- func (ray *directRay) InboundInput() chan<- *alloc.Buffer {
 
- 	return ray.Input
 
- }
 
- func (ray *directRay) InboundOutput() <-chan *alloc.Buffer {
 
- 	return ray.Output
 
- }
 
 
  |