|  | @@ -3,6 +3,7 @@ package protocol
 | 
											
												
													
														|  |  import (
 |  |  import (
 | 
											
												
													
														|  |  	"runtime"
 |  |  	"runtime"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +	"v2ray.com/core/common/bitmask"
 | 
											
												
													
														|  |  	"v2ray.com/core/common/net"
 |  |  	"v2ray.com/core/common/net"
 | 
											
												
													
														|  |  	"v2ray.com/core/common/uuid"
 |  |  	"v2ray.com/core/common/uuid"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
										
											
												
													
														|  | @@ -24,31 +25,16 @@ func (c RequestCommand) TransferType() TransferType {
 | 
											
												
													
														|  |  	return TransferTypePacket
 |  |  	return TransferTypePacket
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -// RequestOption is the options of a request.
 |  | 
 | 
											
												
													
														|  | -type RequestOption byte
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  const (
 |  |  const (
 | 
											
												
													
														|  |  	// RequestOptionChunkStream indicates request payload is chunked. Each chunk consists of length, authentication and payload.
 |  |  	// RequestOptionChunkStream indicates request payload is chunked. Each chunk consists of length, authentication and payload.
 | 
											
												
													
														|  | -	RequestOptionChunkStream = RequestOption(0x01)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	RequestOptionChunkStream bitmask.Byte = 0x01
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	// RequestOptionConnectionReuse indicates client side expects to reuse the connection.
 |  |  	// RequestOptionConnectionReuse indicates client side expects to reuse the connection.
 | 
											
												
													
														|  | -	RequestOptionConnectionReuse = RequestOption(0x02)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	RequestOptionConnectionReuse bitmask.Byte = 0x02
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	RequestOptionChunkMasking = RequestOption(0x04)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	RequestOptionChunkMasking bitmask.Byte = 0x04
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func (o RequestOption) Has(option RequestOption) bool {
 |  | 
 | 
											
												
													
														|  | -	return (o & option) == option
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (o *RequestOption) Set(option RequestOption) {
 |  | 
 | 
											
												
													
														|  | -	*o = (*o | option)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (o *RequestOption) Clear(option RequestOption) {
 |  | 
 | 
											
												
													
														|  | -	*o = (*o & (^option))
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  type Security byte
 |  |  type Security byte
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (s Security) Is(t SecurityType) bool {
 |  |  func (s Security) Is(t SecurityType) bool {
 | 
											
										
											
												
													
														|  | @@ -65,7 +51,7 @@ func NormSecurity(s Security) Security {
 | 
											
												
													
														|  |  type RequestHeader struct {
 |  |  type RequestHeader struct {
 | 
											
												
													
														|  |  	Version  byte
 |  |  	Version  byte
 | 
											
												
													
														|  |  	Command  RequestCommand
 |  |  	Command  RequestCommand
 | 
											
												
													
														|  | -	Option   RequestOption
 |  | 
 | 
											
												
													
														|  | 
 |  | +	Option   bitmask.Byte
 | 
											
												
													
														|  |  	Security Security
 |  |  	Security Security
 | 
											
												
													
														|  |  	Port     net.Port
 |  |  	Port     net.Port
 | 
											
												
													
														|  |  	Address  net.Address
 |  |  	Address  net.Address
 | 
											
										
											
												
													
														|  | @@ -79,28 +65,14 @@ func (h *RequestHeader) Destination() net.Destination {
 | 
											
												
													
														|  |  	return net.TCPDestination(h.Address, h.Port)
 |  |  	return net.TCPDestination(h.Address, h.Port)
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -type ResponseOption byte
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  const (
 |  |  const (
 | 
											
												
													
														|  | -	ResponseOptionConnectionReuse = ResponseOption(0x01)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	ResponseOptionConnectionReuse bitmask.Byte = 0x01
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func (o *ResponseOption) Set(option ResponseOption) {
 |  | 
 | 
											
												
													
														|  | -	*o = (*o | option)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (o ResponseOption) Has(option ResponseOption) bool {
 |  | 
 | 
											
												
													
														|  | -	return (o & option) == option
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (o *ResponseOption) Clear(option ResponseOption) {
 |  | 
 | 
											
												
													
														|  | -	*o = (*o & (^option))
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  type ResponseCommand interface{}
 |  |  type ResponseCommand interface{}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  type ResponseHeader struct {
 |  |  type ResponseHeader struct {
 | 
											
												
													
														|  | -	Option  ResponseOption
 |  | 
 | 
											
												
													
														|  | 
 |  | +	Option  bitmask.Byte
 | 
											
												
													
														|  |  	Command ResponseCommand
 |  |  	Command ResponseCommand
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 |