protocol

package
v3.1.13+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2023 License: MIT, MIT Imports: 21 Imported by: 0

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
)
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 ContextWithUser

func ContextWithUser(ctx context.Context, user *User) context.Context

ContextWithUser returns a context combined with a User.

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(*AddressParser)

func AddressFamilyByte

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

func PortThenAddress

func PortThenAddress() AddressOption

func WithAddressTypeParser

func WithAddressTypeParser(atp AddressTypeParser) AddressOption

type AddressParser

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

AddressParser is a utility for reading and writer addresses.

func NewAddressParser

func NewAddressParser(options ...AddressOption) *AddressParser

NewAddressParser creates a new AddressParser

func (*AddressParser) ReadAddressPort

func (p *AddressParser) ReadAddressPort(buffer *buf.Buffer, input io.Reader) (net.Address, net.Port, error)

ReadAddressPort reads address and port from the given input.

func (*AddressParser) WriteAddressPort

func (p *AddressParser) WriteAddressPort(writer io.Writer, addr net.Address, port net.Port) error

WriteAddressPort writes address and port into the given writer.

type AddressType

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

type AddressTypeParser

type AddressTypeParser func(byte) byte

type AlternativeOutboundConfig

type AlternativeOutboundConfig struct {
	Settings             *serial.TypedMessage   `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"`
	StreamSettings       *internet.StreamConfig `protobuf:"bytes,3,opt,name=stream_settings,json=streamSettings" json:"stream_settings,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (*AlternativeOutboundConfig) Descriptor

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

func (*AlternativeOutboundConfig) GetSettings

func (m *AlternativeOutboundConfig) GetSettings() *serial.TypedMessage

func (*AlternativeOutboundConfig) GetStreamSettings

func (m *AlternativeOutboundConfig) GetStreamSettings() *internet.StreamConfig

func (*AlternativeOutboundConfig) ProtoMessage

func (*AlternativeOutboundConfig) ProtoMessage()

func (*AlternativeOutboundConfig) Reset

func (m *AlternativeOutboundConfig) Reset()

func (*AlternativeOutboundConfig) String

func (m *AlternativeOutboundConfig) String() string

func (*AlternativeOutboundConfig) XXX_DiscardUnknown

func (m *AlternativeOutboundConfig) XXX_DiscardUnknown()

func (*AlternativeOutboundConfig) XXX_Marshal

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

func (*AlternativeOutboundConfig) XXX_Merge

func (dst *AlternativeOutboundConfig) XXX_Merge(src proto.Message)

func (*AlternativeOutboundConfig) XXX_Size

func (m *AlternativeOutboundConfig) XXX_Size() int

func (*AlternativeOutboundConfig) XXX_Unmarshal

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

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 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     *User
}

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,enum=com.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 (dst *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" json:"address,omitempty"`
	Port                 uint32          `protobuf:"varint,2,opt,name=port" json:"port,omitempty"`
	User                 []*User         `protobuf:"bytes,3,rep,name=user" 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 (dst *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 ...*User) *ServerSpec

func NewServerSpecFromPB

func NewServerSpecFromPB(spec ServerEndpoint) *ServerSpec

func (*ServerSpec) AddUser

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

func (*ServerSpec) Destination

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

func (*ServerSpec) HasUser

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

func (*ServerSpec) Invalidate

func (s *ServerSpec) Invalidate()

func (*ServerSpec) IsValid

func (s *ServerSpec) IsValid() bool

func (*ServerSpec) PickUser

func (s *ServerSpec) PickUser() *User

type Timestamp

type Timestamp int64

func NowTime

func NowTime() Timestamp

func (Timestamp) Bytes

func (v Timestamp) Bytes(b []byte) []byte

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" json:"level,omitempty"`
	Email string `protobuf:"bytes,2,opt,name=email" 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" json:"account,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

User is a generic user for all procotols.

func UserFromContext

func UserFromContext(ctx context.Context) *User

UserFromContext extracts a User from the given context, if any.

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) 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 (dst *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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL