Documentation

Index

Constants

View Source
const (
	RequestCommandTCP = RequestCommand(0x01)
	RequestCommandUDP = RequestCommand(0x02)
	RequestCommandMux = RequestCommand(0x03)
)
View Source
const (
	// RequestOptionChunkStream indicates request payload is chunked. Each chunk consists of length, authentication and payload.
	RequestOptionChunkStream bitmask.Byte = 0x01

	// RequestOptionConnectionReuse indicates client side expects to reuse the connection.
	RequestOptionConnectionReuse bitmask.Byte = 0x02

	RequestOptionChunkMasking bitmask.Byte = 0x04

	RequestOptionGlobalPadding bitmask.Byte = 0x08
)
View Source
const (
	IDBytesLen = 16
)
View Source
const (
	ResponseOptionConnectionReuse bitmask.Byte = 0x01
)

Variables

View Source
var SecurityType_name = map[int32]string{
	0: "UNKNOWN",
	1: "LEGACY",
	2: "AUTO",
	3: "AES128_GCM",
	4: "CHACHA20_POLY1305",
	5: "NONE",
}
View Source
var SecurityType_value = map[string]int32{
	"UNKNOWN":           0,
	"LEGACY":            1,
	"AUTO":              2,
	"AES128_GCM":        3,
	"CHACHA20_POLY1305": 4,
	"NONE":              5,
}

Functions

func ContextWithRequestHeader

func ContextWithRequestHeader(ctx context.Context, request *RequestHeader) context.Context

func DefaultIDHash

func DefaultIDHash(key []byte) hash.Hash

Types

type Account

type Account interface {
	Equals(Account) bool
}

    Account is a user identity used for authentication.

    type AddressOption

    type AddressOption func(*option)

    func AddressFamilyByte

    func AddressFamilyByte(b byte, f net.AddressFamily) AddressOption

    func PortThenAddress

    func PortThenAddress() AddressOption

    func WithAddressTypeParser

    func WithAddressTypeParser(atp AddressTypeParser) AddressOption

    type AddressSerializer

    type AddressSerializer interface {
    	ReadAddressPort(buffer *buf.Buffer, input io.Reader) (net.Address, net.Port, error)
    
    	WriteAddressPort(writer io.Writer, addr net.Address, port net.Port) error
    }

    func NewAddressParser

    func NewAddressParser(options ...AddressOption) AddressSerializer

      NewAddressParser creates a new AddressParser

      type AddressType

      type AddressType byte
      const (
      	AddressTypeIPv4   AddressType = 1
      	AddressTypeDomain AddressType = 2
      	AddressTypeIPv6   AddressType = 3
      )

      type AddressTypeParser

      type AddressTypeParser func(byte) byte

      type AsAccount

      type AsAccount interface {
      	AsAccount() (Account, error)
      }

        AsAccount is an object can be converted into account.

        type CommandSwitchAccount

        type CommandSwitchAccount struct {
        	Host     net.Address
        	Port     net.Port
        	ID       uuid.UUID
        	Level    uint32
        	AlterIds uint16
        	ValidMin byte
        }

        type ID

        type ID struct {
        	// contains filtered or unexported fields
        }

          The ID of en entity, in the form of a UUID.

          func NewAlterIDs

          func NewAlterIDs(primary *ID, alterIDCount uint16) []*ID

          func NewID

          func NewID(uuid uuid.UUID) *ID

            NewID returns an ID with given UUID.

            func (*ID) Bytes

            func (id *ID) Bytes() []byte

            func (ID) CmdKey

            func (id ID) CmdKey() []byte

            func (*ID) Equals

            func (id *ID) Equals(another *ID) bool

              Equals returns true if this ID equals to the other one.

              func (*ID) String

              func (id *ID) String() string

              func (*ID) UUID

              func (id *ID) UUID() uuid.UUID

              type IDHash

              type IDHash func(key []byte) hash.Hash

              type MemoryUser

              type MemoryUser struct {
              	// Account is the parsed account of the protocol.
              	Account Account
              	Email   string
              	Level   uint32
              }

                MemoryUser is a parsed form of User, to reduce number of parsing of Account proto.

                type RequestCommand

                type RequestCommand byte

                  RequestCommand is a custom command in a proxy request.

                  func (RequestCommand) TransferType

                  func (c RequestCommand) TransferType() TransferType

                  type RequestHeader

                  type RequestHeader struct {
                  	Version  byte
                  	Command  RequestCommand
                  	Option   bitmask.Byte
                  	Security SecurityType
                  	Port     net.Port
                  	Address  net.Address
                  	User     *MemoryUser
                  }

                  func RequestHeaderFromContext

                  func RequestHeaderFromContext(ctx context.Context) *RequestHeader

                  func (*RequestHeader) Destination

                  func (h *RequestHeader) Destination() net.Destination

                  type ResponseCommand

                  type ResponseCommand interface{}

                  type ResponseHeader

                  type ResponseHeader struct {
                  	Option  bitmask.Byte
                  	Command ResponseCommand
                  }

                  type RoundRobinServerPicker

                  type RoundRobinServerPicker struct {
                  	sync.Mutex
                  	// contains filtered or unexported fields
                  }

                  func NewRoundRobinServerPicker

                  func NewRoundRobinServerPicker(serverlist *ServerList) *RoundRobinServerPicker

                  func (*RoundRobinServerPicker) PickServer

                  func (p *RoundRobinServerPicker) PickServer() *ServerSpec

                  type SecurityConfig

                  type SecurityConfig struct {
                  	Type                 SecurityType `protobuf:"varint,1,opt,name=type,proto3,enum=v2ray.core.common.protocol.SecurityType" json:"type,omitempty"`
                  	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
                  	XXX_unrecognized     []byte       `json:"-"`
                  	XXX_sizecache        int32        `json:"-"`
                  }

                  func (*SecurityConfig) Descriptor

                  func (*SecurityConfig) Descriptor() ([]byte, []int)

                  func (*SecurityConfig) GetSecurityType

                  func (sc *SecurityConfig) GetSecurityType() SecurityType

                  func (*SecurityConfig) GetType

                  func (m *SecurityConfig) GetType() SecurityType

                  func (*SecurityConfig) ProtoMessage

                  func (*SecurityConfig) ProtoMessage()

                  func (*SecurityConfig) Reset

                  func (m *SecurityConfig) Reset()

                  func (*SecurityConfig) String

                  func (m *SecurityConfig) String() string

                  func (*SecurityConfig) XXX_DiscardUnknown

                  func (m *SecurityConfig) XXX_DiscardUnknown()

                  func (*SecurityConfig) XXX_Marshal

                  func (m *SecurityConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                  func (*SecurityConfig) XXX_Merge

                  func (m *SecurityConfig) XXX_Merge(src proto.Message)

                  func (*SecurityConfig) XXX_Size

                  func (m *SecurityConfig) XXX_Size() int

                  func (*SecurityConfig) XXX_Unmarshal

                  func (m *SecurityConfig) XXX_Unmarshal(b []byte) error

                  type SecurityType

                  type SecurityType int32
                  const (
                  	SecurityType_UNKNOWN           SecurityType = 0
                  	SecurityType_LEGACY            SecurityType = 1
                  	SecurityType_AUTO              SecurityType = 2
                  	SecurityType_AES128_GCM        SecurityType = 3
                  	SecurityType_CHACHA20_POLY1305 SecurityType = 4
                  	SecurityType_NONE              SecurityType = 5
                  )

                  func (SecurityType) EnumDescriptor

                  func (SecurityType) EnumDescriptor() ([]byte, []int)

                  func (SecurityType) String

                  func (x SecurityType) String() string

                  type ServerEndpoint

                  type ServerEndpoint struct {
                  	Address              *net.IPOrDomain `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
                  	Port                 uint32          `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
                  	User                 []*User         `protobuf:"bytes,3,rep,name=user,proto3" json:"user,omitempty"`
                  	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
                  	XXX_unrecognized     []byte          `json:"-"`
                  	XXX_sizecache        int32           `json:"-"`
                  }

                  func (*ServerEndpoint) Descriptor

                  func (*ServerEndpoint) Descriptor() ([]byte, []int)

                  func (*ServerEndpoint) GetAddress

                  func (m *ServerEndpoint) GetAddress() *net.IPOrDomain

                  func (*ServerEndpoint) GetPort

                  func (m *ServerEndpoint) GetPort() uint32

                  func (*ServerEndpoint) GetUser

                  func (m *ServerEndpoint) GetUser() []*User

                  func (*ServerEndpoint) ProtoMessage

                  func (*ServerEndpoint) ProtoMessage()

                  func (*ServerEndpoint) Reset

                  func (m *ServerEndpoint) Reset()

                  func (*ServerEndpoint) String

                  func (m *ServerEndpoint) String() string

                  func (*ServerEndpoint) XXX_DiscardUnknown

                  func (m *ServerEndpoint) XXX_DiscardUnknown()

                  func (*ServerEndpoint) XXX_Marshal

                  func (m *ServerEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                  func (*ServerEndpoint) XXX_Merge

                  func (m *ServerEndpoint) XXX_Merge(src proto.Message)

                  func (*ServerEndpoint) XXX_Size

                  func (m *ServerEndpoint) XXX_Size() int

                  func (*ServerEndpoint) XXX_Unmarshal

                  func (m *ServerEndpoint) XXX_Unmarshal(b []byte) error

                  type ServerList

                  type ServerList struct {
                  	sync.RWMutex
                  	// contains filtered or unexported fields
                  }

                  func NewServerList

                  func NewServerList() *ServerList

                  func (*ServerList) AddServer

                  func (sl *ServerList) AddServer(server *ServerSpec)

                  func (*ServerList) GetServer

                  func (sl *ServerList) GetServer(idx uint32) *ServerSpec

                  func (*ServerList) Size

                  func (sl *ServerList) Size() uint32

                  type ServerPicker

                  type ServerPicker interface {
                  	PickServer() *ServerSpec
                  }

                  type ServerSpec

                  type ServerSpec struct {
                  	sync.RWMutex
                  	// contains filtered or unexported fields
                  }

                  func NewServerSpec

                  func NewServerSpec(dest net.Destination, valid ValidationStrategy, users ...*MemoryUser) *ServerSpec

                  func NewServerSpecFromPB

                  func NewServerSpecFromPB(spec ServerEndpoint) (*ServerSpec, error)

                  func (*ServerSpec) AddUser

                  func (s *ServerSpec) AddUser(user *MemoryUser)

                  func (*ServerSpec) Destination

                  func (s *ServerSpec) Destination() net.Destination

                  func (*ServerSpec) HasUser

                  func (s *ServerSpec) HasUser(user *MemoryUser) bool

                  func (*ServerSpec) Invalidate

                  func (s *ServerSpec) Invalidate()

                  func (*ServerSpec) IsValid

                  func (s *ServerSpec) IsValid() bool

                  func (*ServerSpec) PickUser

                  func (s *ServerSpec) PickUser() *MemoryUser

                  type Timestamp

                  type Timestamp int64

                  func NowTime

                  func NowTime() Timestamp

                  type TimestampGenerator

                  type TimestampGenerator func() Timestamp

                  func NewTimestampGenerator

                  func NewTimestampGenerator(base Timestamp, delta int) TimestampGenerator

                  type TransferType

                  type TransferType byte
                  const (
                  	TransferTypeStream TransferType = 0
                  	TransferTypePacket TransferType = 1
                  )

                  type User

                  type User struct {
                  	Level uint32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"`
                  	Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
                  	// Protocol specific account information. Must be the account proto in one of the proxies.
                  	Account              *serial.TypedMessage `protobuf:"bytes,3,opt,name=account,proto3" json:"account,omitempty"`
                  	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
                  	XXX_unrecognized     []byte               `json:"-"`
                  	XXX_sizecache        int32                `json:"-"`
                  }

                    User is a generic user for all procotols.

                    func (*User) Descriptor

                    func (*User) Descriptor() ([]byte, []int)

                    func (*User) GetAccount

                    func (m *User) GetAccount() *serial.TypedMessage

                    func (*User) GetEmail

                    func (m *User) GetEmail() string

                    func (*User) GetLevel

                    func (m *User) GetLevel() uint32

                    func (*User) GetTypedAccount

                    func (u *User) GetTypedAccount() (Account, error)

                    func (*User) ProtoMessage

                    func (*User) ProtoMessage()

                    func (*User) Reset

                    func (m *User) Reset()

                    func (*User) String

                    func (m *User) String() string

                    func (*User) ToMemoryUser

                    func (u *User) ToMemoryUser() (*MemoryUser, error)

                    func (*User) XXX_DiscardUnknown

                    func (m *User) XXX_DiscardUnknown()

                    func (*User) XXX_Marshal

                    func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                    func (*User) XXX_Merge

                    func (m *User) XXX_Merge(src proto.Message)

                    func (*User) XXX_Size

                    func (m *User) XXX_Size() int

                    func (*User) XXX_Unmarshal

                    func (m *User) XXX_Unmarshal(b []byte) error

                    type ValidationStrategy

                    type ValidationStrategy interface {
                    	IsValid() bool
                    	Invalidate()
                    }

                    func AlwaysValid

                    func AlwaysValid() ValidationStrategy

                    func BeforeTime

                    func BeforeTime(t time.Time) ValidationStrategy

                    Directories

                    Path Synopsis
                    tls