core

package module
v3.50.2+incompatible Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2018 License: MIT Imports: 25 Imported by: 0

README

Project V

Build Status AppVeyor Run Status codecov.io Go Report GoDoc codebeat Downloads

Project V is a set of network tools that help you to build your own computer network. It secures your network connections and thus protects your privacy. See our website for more information.

License

The MIT License (MIT)

Credits

This repo relies on the following third-party projects:

Documentation

Overview

Package core provides an entry point to use V2Ray core functionalities.

V2Ray makes it possible to accept incoming network connections with certain protocol, process the data, and send them through another connection with the same or a difference protocol on demand.

It may be configured to work with multiple protocols at the same time, and uses the internal router to tunnel through different inbound and outbound connections.

Index

Constants

View Source
const GetMetadataFuncName = "GetPluginMetadata"

GetMetadataFuncName is the name of the function in the plugin to return PluginMetadata.

Variables

This section is empty.

Functions

func AddInboundHandler added in v1.0.0

func AddInboundHandler(server *Instance, config *InboundHandlerConfig) error

func AddOutboundHandler added in v1.0.0

func AddOutboundHandler(server *Instance, config *OutboundHandlerConfig) error

func CreateObject added in v1.0.0

func CreateObject(v *Instance, config interface{}) (interface{}, error)

CreateObject creates a new object based on the given V2Ray instance and config. The V2Ray instance may be nil.

func Dial added in v1.0.0

func Dial(ctx context.Context, v *Instance, dest net.Destination) (net.Conn, error)

Dial provides an easy way for upstream caller to create net.Conn through V2Ray. It dispatches the request to the given destination by the given V2Ray instance. Since it is under a proxy context, the LocalAddr() and RemoteAddr() in returned net.Conn will not show real addresses being used for communication.

func LoadPlugins

func LoadPlugins() error

LoadPlugins loads all possible plugins in the 'plugin' directory.

func RegisterConfigLoader added in v1.0.0

func RegisterConfigLoader(format *ConfigFormat) error

RegisterConfigLoader add a new ConfigLoader.

func RequireFeatures added in v1.0.0

func RequireFeatures(ctx context.Context, callback interface{}) error

RequireFeatures is a helper function to require features from Instance in context. See Instance.RequireFeatures for more information.

func ServerType added in v1.0.0

func ServerType() interface{}

ServerType returns the type of the server.

func Version added in v1.0.0

func Version() string

Version returns V2Ray's version as a string, in the form of "x.y.z" where x, y and z are numbers. ".z" part may be omitted in regular releases.

func VersionStatement added in v1.0.0

func VersionStatement() []string

VersionStatement returns a list of strings representing the full version info.

Types

type Config added in v1.0.0

type Config struct {
	// Inbound handler configurations. Must have at least one item.
	Inbound []*InboundHandlerConfig `protobuf:"bytes,1,rep,name=inbound,proto3" json:"inbound,omitempty"`
	// Outbound handler configurations. Must have at least one item. The first item is used as default for routing.
	Outbound []*OutboundHandlerConfig `protobuf:"bytes,2,rep,name=outbound,proto3" json:"outbound,omitempty"`
	// App is for configurations of all features in V2Ray. A feature must implement the Feature interface, and its config type must be registered through common.RegisterConfig.
	App []*serial.TypedMessage `protobuf:"bytes,4,rep,name=app,proto3" json:"app,omitempty"`
	// Transport settings.
	Transport *transport.Config `protobuf:"bytes,5,opt,name=transport,proto3" json:"transport,omitempty"`
	// Configuration for extensions. The config may not work if corresponding extension is not loaded into V2Ray.
	// V2Ray will ignore such config during initialization.
	Extension            []*serial.TypedMessage `protobuf:"bytes,6,rep,name=extension,proto3" json:"extension,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

Config is the master config of V2Ray. V2Ray takes this config as input and functions accordingly.

func LoadConfig added in v1.0.0

func LoadConfig(formatName string, filename string, input io.Reader) (*Config, error)

LoadConfig loads config with given format from given source.

func (*Config) Descriptor added in v1.0.0

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

func (*Config) GetApp added in v1.0.0

func (m *Config) GetApp() []*serial.TypedMessage

func (*Config) GetExtension added in v1.0.0

func (m *Config) GetExtension() []*serial.TypedMessage

func (*Config) GetInbound added in v1.0.0

func (m *Config) GetInbound() []*InboundHandlerConfig

func (*Config) GetOutbound added in v1.0.0

func (m *Config) GetOutbound() []*OutboundHandlerConfig

func (*Config) GetTransport added in v1.0.0

func (m *Config) GetTransport() *transport.Config

func (*Config) ProtoMessage added in v1.0.0

func (*Config) ProtoMessage()

func (*Config) Reset added in v1.0.0

func (m *Config) Reset()

func (*Config) String added in v1.0.0

func (m *Config) String() string

func (*Config) XXX_DiscardUnknown

func (m *Config) XXX_DiscardUnknown()

func (*Config) XXX_Marshal

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

func (*Config) XXX_Merge

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

func (*Config) XXX_Size

func (m *Config) XXX_Size() int

func (*Config) XXX_Unmarshal

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

type ConfigFormat added in v1.0.0

type ConfigFormat struct {
	Name      string
	Extension []string
	Loader    ConfigLoader
}

ConfigFormat is a configurable format of V2Ray config file.

type ConfigLoader added in v1.0.0

type ConfigLoader func(input io.Reader) (*Config, error)

ConfigLoader is a utility to load V2Ray config from external source.

type GetMetadataFunc

type GetMetadataFunc func() PluginMetadata

GetMetadataFunc is the type of the function in the plugin to return PluginMetadata.

type InboundHandlerConfig added in v1.0.0

type InboundHandlerConfig struct {
	// Tag of the inbound handler. The tag must be unique among all inbound handlers
	Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
	// Settings for how this inbound proxy is handled.
	ReceiverSettings *serial.TypedMessage `protobuf:"bytes,2,opt,name=receiver_settings,json=receiverSettings,proto3" json:"receiver_settings,omitempty"`
	// Settings for inbound proxy. Must be one of the inbound proxies.
	ProxySettings        *serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings,proto3" json:"proxy_settings,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

InboundHandlerConfig is the configuration for inbound handler.

func (*InboundHandlerConfig) Descriptor added in v1.0.0

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

func (*InboundHandlerConfig) GetProxySettings added in v1.0.0

func (m *InboundHandlerConfig) GetProxySettings() *serial.TypedMessage

func (*InboundHandlerConfig) GetReceiverSettings added in v1.0.0

func (m *InboundHandlerConfig) GetReceiverSettings() *serial.TypedMessage

func (*InboundHandlerConfig) GetTag added in v1.0.0

func (m *InboundHandlerConfig) GetTag() string

func (*InboundHandlerConfig) ProtoMessage added in v1.0.0

func (*InboundHandlerConfig) ProtoMessage()

func (*InboundHandlerConfig) Reset added in v1.0.0

func (m *InboundHandlerConfig) Reset()

func (*InboundHandlerConfig) String added in v1.0.0

func (m *InboundHandlerConfig) String() string

func (*InboundHandlerConfig) XXX_DiscardUnknown

func (m *InboundHandlerConfig) XXX_DiscardUnknown()

func (*InboundHandlerConfig) XXX_Marshal

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

func (*InboundHandlerConfig) XXX_Merge

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

func (*InboundHandlerConfig) XXX_Size

func (m *InboundHandlerConfig) XXX_Size() int

func (*InboundHandlerConfig) XXX_Unmarshal

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

type Instance added in v1.0.0

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

Instance combines all functionalities in V2Ray.

func FromContext added in v1.0.0

func FromContext(ctx context.Context) *Instance

FromContext returns an Instance from the given context, or nil if the context doesn't contain one.

func MustFromContext added in v1.0.0

func MustFromContext(ctx context.Context) *Instance

MustFromContext returns an Instance from the given context, or panics if not present.

func New added in v1.0.0

func New(config *Config) (*Instance, error)

New returns a new V2Ray instance based on given configuration. The instance is not started at this point. To ensure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.

func StartInstance added in v1.0.0

func StartInstance(configFormat string, configBytes []byte) (*Instance, error)

StartInstance starts a new V2Ray instance with given serialized config. By default V2Ray only support config in protobuf format, i.e., configFormat = "protobuf". Caller need to load other packages to add JSON support.

func (*Instance) AddFeature added in v1.0.0

func (s *Instance) AddFeature(feature features.Feature) error

AddFeature registers a feature into current Instance.

func (*Instance) Close added in v1.0.0

func (s *Instance) Close() error

Close shutdown the V2Ray instance.

func (*Instance) GetFeature added in v1.0.0

func (s *Instance) GetFeature(featureType interface{}) features.Feature

GetFeature returns a feature of the given type, or nil if such feature is not registered.

func (*Instance) RequireFeatures added in v1.0.0

func (s *Instance) RequireFeatures(callback interface{}) error

RequireFeatures registers a callback, which will be called when all dependent features are registered. The callback must be a func(). All its parameters must be features.Feature.

func (*Instance) Start added in v1.0.0

func (s *Instance) Start() error

Start starts the V2Ray instance, including all registered features. When Start returns error, the state of the instance is unknown. A V2Ray instance can be started only once. Upon closing, the instance is not guaranteed to start again.

func (*Instance) Type added in v1.0.0

func (s *Instance) Type() interface{}

Type implements common.HasType.

type OutboundHandlerConfig added in v1.0.0

type OutboundHandlerConfig struct {
	// Tag of this outbound handler.
	Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
	// Settings for how to dial connection for this outbound handler.
	SenderSettings *serial.TypedMessage `protobuf:"bytes,2,opt,name=sender_settings,json=senderSettings,proto3" json:"sender_settings,omitempty"`
	// Settings for this outbound proxy. Must be one of the outbound proxies.
	ProxySettings *serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings,proto3" json:"proxy_settings,omitempty"`
	// If not zero, this outbound will be expired in seconds. Not used for now.
	Expire int64 `protobuf:"varint,4,opt,name=expire,proto3" json:"expire,omitempty"`
	// Comment of this outbound handler. Not used for now.
	Comment              string   `protobuf:"bytes,5,opt,name=comment,proto3" json:"comment,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

OutboundHandlerConfig is the configuration for outbound handler.

func (*OutboundHandlerConfig) Descriptor added in v1.0.0

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

func (*OutboundHandlerConfig) GetComment added in v1.0.0

func (m *OutboundHandlerConfig) GetComment() string

func (*OutboundHandlerConfig) GetExpire added in v1.0.0

func (m *OutboundHandlerConfig) GetExpire() int64

func (*OutboundHandlerConfig) GetProxySettings added in v1.0.0

func (m *OutboundHandlerConfig) GetProxySettings() *serial.TypedMessage

func (*OutboundHandlerConfig) GetSenderSettings added in v1.0.0

func (m *OutboundHandlerConfig) GetSenderSettings() *serial.TypedMessage

func (*OutboundHandlerConfig) GetTag added in v1.0.0

func (m *OutboundHandlerConfig) GetTag() string

func (*OutboundHandlerConfig) ProtoMessage added in v1.0.0

func (*OutboundHandlerConfig) ProtoMessage()

func (*OutboundHandlerConfig) Reset added in v1.0.0

func (m *OutboundHandlerConfig) Reset()

func (*OutboundHandlerConfig) String added in v1.0.0

func (m *OutboundHandlerConfig) String() string

func (*OutboundHandlerConfig) XXX_DiscardUnknown

func (m *OutboundHandlerConfig) XXX_DiscardUnknown()

func (*OutboundHandlerConfig) XXX_Marshal

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

func (*OutboundHandlerConfig) XXX_Merge

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

func (*OutboundHandlerConfig) XXX_Size

func (m *OutboundHandlerConfig) XXX_Size() int

func (*OutboundHandlerConfig) XXX_Unmarshal

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

type PluginMetadata

type PluginMetadata struct {
	// Name of the plugin
	Name string
}

PluginMetadata contains some brief information regarding a plugin.

type Server added in v1.0.0

type Server interface {
	common.Runnable
}

Server is an instance of V2Ray. At any time, there must be at most one Server instance running.

Directories

Path Synopsis
app
Package app contains feature implementations of V2Ray.
Package app contains feature implementations of V2Ray.
dns
Package dns is an implementation of core.DNS feature.
Package dns is an implementation of core.DNS feature.
log
policy
Package policy is an implementation of policy.Manager feature.
Package policy is an implementation of policy.Manager feature.
proxyman
Package proxyman defines applications for managing inbound and outbound proxies.
Package proxyman defines applications for managing inbound and outbound proxies.
Package common contains common utilities that are shared among other packages.
Package common contains common utilities that are shared among other packages.
buf
Package buf provides a light-weight memory allocation mechanism.
Package buf provides a light-weight memory allocation mechanism.
crypto
Package crypto provides common crypto libraries for V2Ray.
Package crypto provides common crypto libraries for V2Ray.
dice
Package dice contains common functions to generate random number.
Package dice contains common functions to generate random number.
errors
Package errors is a drop-in replacement for Golang lib 'errors'.
Package errors is a drop-in replacement for Golang lib 'errors'.
log
mux
net
Package net is a drop-in replacement to Golang's net package, with some more functionalities.
Package net is a drop-in replacement to Golang's net package, with some more functionalities.
session
Package session provides functions for sessions of incoming requests.
Package session provides functions for sessions of incoming requests.
vio
dns
Package proxy contains all proxies used by V2Ray.
Package proxy contains all proxies used by V2Ray.
blackhole
Package blackhole is an outbound handler that blocks all connections.
Package blackhole is an outbound handler that blocks all connections.
shadowsocks
Package shadowsocks provides compatible functionality to Shadowsocks.
Package shadowsocks provides compatible functionality to Shadowsocks.
socks
Package socks provides implements of Socks protocol 4, 4a and 5.
Package socks provides implements of Socks protocol 4, 4a and 5.
vmess
Package vmess contains the implementation of VMess protocol and transportation.
Package vmess contains the implementation of VMess protocol and transportation.
testing
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
internet/kcp
Package kcp - A Fast and Reliable ARQ Protocol
Package kcp - A Fast and Reliable ARQ Protocol
internet/websocket
Package websocket implements Websocket transport
Package websocket implements Websocket transport

Jump to

Keyboard shortcuts

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