core

package module
v3.8.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2018 License: MIT Imports: 21 Imported by: 0

README

Project V

Build 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

View Source
var ConfigFormat_name = map[int32]string{
	0: "Protobuf",
	1: "JSON",
}
View Source
var ConfigFormat_value = map[string]int32{
	"Protobuf": 0,
	"JSON":     1,
}
View Source
var (
	// ErrNoClue is for the situation that existing information is not enough to make a decision. For example, Router may return this error when there is no suitable route.
	ErrNoClue = errors.New("not enough information for making a decision")
)

Functions

func Dial

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 PrintVersion

func PrintVersion()

PrintVersion prints current version into console.

func RegisterConfigLoader

func RegisterConfigLoader(format ConfigFormat, loader ConfigLoader) error

RegisterConfigLoader add a new ConfigLoader.

func Version

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.

Types

type Clock

type Clock interface {
	Feature

	// Now returns current time.
	Now() time.Time
}

Clock is a V2Ray feature that returns current time.

type Commander

type Commander interface {
	Feature
}

Commander is a feature that accepts commands from external source.

type Config

type Config struct {
	// Inbound handler configurations. Must have at least one item.
	Inbound []*InboundHandlerConfig `protobuf:"bytes,1,rep,name=inbound" 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" json:"outbound,omitempty"`
	// App configuration. Must be one in the app directory.
	App []*v2ray_core_common_serial.TypedMessage `protobuf:"bytes,4,rep,name=app" json:"app,omitempty"`
	// Transport settings.
	Transport *v2ray_core_transport.Config `protobuf:"bytes,5,opt,name=transport" 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 []*v2ray_core_common_serial.TypedMessage `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"`
}

Master config of V2Ray. V2Ray takes this config as input and functions accordingly.

func LoadConfig

func LoadConfig(format ConfigFormat, input io.Reader) (*Config, error)

LoadConfig loads config with given format from given source.

func (*Config) Descriptor

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

func (*Config) GetApp

func (*Config) GetExtension

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

func (*Config) GetInbound

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

func (*Config) GetOutbound

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

func (*Config) GetTransport

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

func (*Config) ProtoMessage

func (*Config) ProtoMessage()

func (*Config) Reset

func (m *Config) Reset()

func (*Config) String

func (m *Config) String() string

type ConfigFormat

type ConfigFormat int32

Configuration serialization format.

const (
	ConfigFormat_Protobuf ConfigFormat = 0
	ConfigFormat_JSON     ConfigFormat = 1
)

func (ConfigFormat) EnumDescriptor

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

func (ConfigFormat) String

func (x ConfigFormat) String() string

type ConfigLoader

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

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

type DNSClient

type DNSClient interface {
	Feature
	LookupIP(host string) ([]net.IP, error)
}

DNSClient is a V2Ray feature for querying DNS information.

type Dispatcher

type Dispatcher interface {
	Feature

	// Dispatch returns a Ray for transporting data for the given request.
	Dispatch(ctx context.Context, dest net.Destination) (ray.InboundRay, error)
}

Dispatcher is a feature that dispatches inbound requests to outbound handlers based on rules. Dispatcher is required to be registered in a V2Ray instance to make V2Ray function properly.

type Feature

type Feature interface {
	common.Runnable
}

Feature is the interface for V2Ray features. All features must implement this interface. All existing features have an implementation in app directory. These features can be replaced by third-party ones.

type GetMetadataFunc

type GetMetadataFunc func() PluginMetadata

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

type InboundHandler

type InboundHandler interface {
	common.Runnable
	// The tag of this handler.
	Tag() string

	// Deprecated. Do not use in new code.
	GetRandomInboundProxy() (interface{}, net.Port, int)
}

InboundHandler is the interface for handlers that process inbound connections.

type InboundHandlerConfig

type InboundHandlerConfig struct {
	// Tag of the inbound handler.
	Tag string `protobuf:"bytes,1,opt,name=tag" json:"tag,omitempty"`
	// Settings for how this inbound proxy is handled. Must be ReceiverConfig above.
	ReceiverSettings *v2ray_core_common_serial.TypedMessage `protobuf:"bytes,2,opt,name=receiver_settings,json=receiverSettings" json:"receiver_settings,omitempty"`
	// Settings for inbound proxy. Must be one of the inbound proxies.
	ProxySettings *v2ray_core_common_serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings" json:"proxy_settings,omitempty"`
}

func (*InboundHandlerConfig) Descriptor

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

func (*InboundHandlerConfig) GetProxySettings

func (*InboundHandlerConfig) GetReceiverSettings

func (*InboundHandlerConfig) GetTag

func (m *InboundHandlerConfig) GetTag() string

func (*InboundHandlerConfig) ProtoMessage

func (*InboundHandlerConfig) ProtoMessage()

func (*InboundHandlerConfig) Reset

func (m *InboundHandlerConfig) Reset()

func (*InboundHandlerConfig) String

func (m *InboundHandlerConfig) String() string

type InboundHandlerManager

type InboundHandlerManager interface {
	Feature
	// GetHandlers returns an InboundHandler for the given tag.
	GetHandler(ctx context.Context, tag string) (InboundHandler, error)
	// AddHandler adds the given handler into this InboundHandlerManager.
	AddHandler(ctx context.Context, handler InboundHandler) error

	// RemoveHandler removes a handler from InboundHandlerManager.
	RemoveHandler(ctx context.Context, tag string) error
}

InboundHandlerManager is a feature that managers InboundHandlers.

type Instance

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

Instance combines all functionalities in V2Ray.

func FromContext

func FromContext(ctx context.Context) *Instance

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

func New

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 make sure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.

func (*Instance) Clock

func (s *Instance) Clock() Clock

Clock returns the Clock used by this Instance. The returned Clock is always functional.

func (*Instance) Close

func (s *Instance) Close() error

Close shutdown the V2Ray instance.

func (*Instance) Commander

func (s *Instance) Commander() Commander

Commander returns the Commander used by this Instance. The returned Commander is always functional.

func (*Instance) CreateObject

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

func (*Instance) DNSClient

func (s *Instance) DNSClient() DNSClient

DNSClient returns the DNSClient used by this Instance. The returned DNSClient is always functional.

func (*Instance) Dispatcher

func (s *Instance) Dispatcher() Dispatcher

Dispatcher returns the Dispatcher used by this Instance. If Dispatcher was not registered before, the returned value doesn't work, although it is not nil.

func (*Instance) ID

func (s *Instance) ID() uuid.UUID

ID returns an unique ID for this V2Ray instance.

func (*Instance) InboundHandlerManager

func (s *Instance) InboundHandlerManager() InboundHandlerManager

InboundHandlerManager returns the InboundHandlerManager used by this Instance. If InboundHandlerManager was not registered before, the returned value doesn't work.

func (*Instance) OutboundHandlerManager

func (s *Instance) OutboundHandlerManager() OutboundHandlerManager

OutboundHandlerManager returns the OutboundHandlerManager used by this Instance. If OutboundHandlerManager was not registered before, the returned value doesn't work.

func (*Instance) PolicyManager

func (s *Instance) PolicyManager() PolicyManager

PolicyManager returns the PolicyManager used by this Instance. The returned PolicyManager is always functional.

func (*Instance) RegisterFeature

func (s *Instance) RegisterFeature(feature interface{}, instance Feature) error

RegisterFeature registers the given feature into V2Ray. If feature is one of the following types, the corressponding feature in this Instance will be replaced: DNSClient, PolicyManager, Router, Dispatcher, InboundHandlerManager, OutboundHandlerManager.

func (*Instance) Router

func (s *Instance) Router() Router

Router returns the Router used by this Instance. The returned Router is always functional.

func (*Instance) Start

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.

type OutboundHandler

type OutboundHandler interface {
	common.Runnable
	Tag() string
	Dispatch(ctx context.Context, outboundRay ray.OutboundRay)
}

OutboundHandler is the interface for handlers that process outbound connections.

type OutboundHandlerConfig

type OutboundHandlerConfig struct {
	// Tag of this outbound handler.
	Tag string `protobuf:"bytes,1,opt,name=tag" json:"tag,omitempty"`
	// Settings for how to dial connection for this outbound handler. Must be SenderConfig above.
	SenderSettings *v2ray_core_common_serial.TypedMessage `protobuf:"bytes,2,opt,name=sender_settings,json=senderSettings" json:"sender_settings,omitempty"`
	// Settings for this outbound proxy. Must be one of the outbound proxies.
	ProxySettings *v2ray_core_common_serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings" 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" json:"expire,omitempty"`
	// Comment of this outbound handler. Not used for now.
	Comment string `protobuf:"bytes,5,opt,name=comment" json:"comment,omitempty"`
}

func (*OutboundHandlerConfig) Descriptor

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

func (*OutboundHandlerConfig) GetComment

func (m *OutboundHandlerConfig) GetComment() string

func (*OutboundHandlerConfig) GetExpire

func (m *OutboundHandlerConfig) GetExpire() int64

func (*OutboundHandlerConfig) GetProxySettings

func (*OutboundHandlerConfig) GetSenderSettings

func (*OutboundHandlerConfig) GetTag

func (m *OutboundHandlerConfig) GetTag() string

func (*OutboundHandlerConfig) ProtoMessage

func (*OutboundHandlerConfig) ProtoMessage()

func (*OutboundHandlerConfig) Reset

func (m *OutboundHandlerConfig) Reset()

func (*OutboundHandlerConfig) String

func (m *OutboundHandlerConfig) String() string

type OutboundHandlerManager

type OutboundHandlerManager interface {
	Feature
	// GetHandler returns an OutboundHandler will given tag.
	GetHandler(tag string) OutboundHandler
	// GetDefaultHandler returns the default OutboundHandler. It is usually the first OutboundHandler specified in the configuration.
	GetDefaultHandler() OutboundHandler
	// AddHandler adds a handler into this OutboundHandlerManager.
	AddHandler(ctx context.Context, handler OutboundHandler) error

	// RemoveHandler removes a handler from OutboundHandlerManager.
	RemoveHandler(ctx context.Context, tag string) error
}

OutboundHandlerManager is a feature that manages OutboundHandlers.

type PluginMetadata

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

PluginMetadata contains some brief information regarding a plugin.

type Policy

type Policy struct {
	Timeouts TimeoutPolicy // Timeout settings
}

Policy is session based settings for controlling V2Ray requests. It contains various settings (or limits) that may differ for different users in the context.

func DefaultPolicy

func DefaultPolicy() Policy

DefaultPolicy returns the Policy when user is not specified.

func (Policy) OverrideWith

func (p Policy) OverrideWith(another Policy) Policy

OverrideWith overrides the current Policy with another one. All values with default value will be overridden.

type PolicyManager

type PolicyManager interface {
	Feature

	// ForLevel returns the Policy for the given user level.
	ForLevel(level uint32) Policy
}

PolicyManager is a feature that provides Policy for the given user by its id or level.

type Router

type Router interface {
	Feature

	// PickRoute returns a tag of an OutboundHandler based on the given context.
	PickRoute(ctx context.Context) (string, error)
}

Router is a feature to choose a outbound tag for the given request.

type Server

type Server interface {
	common.Runnable
}

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

type TimeoutPolicy

type TimeoutPolicy struct {
	// Timeout for handshake phase in a connection.
	Handshake time.Duration
	// Timeout for connection being idle, i.e., there is no egress or ingress traffic in this connection.
	ConnectionIdle time.Duration
	// Timeout for an uplink only connection, i.e., the downlink of the connection has ben closed.
	UplinkOnly time.Duration
	// Timeout for an downlink only connection, i.e., the uplink of the connection has ben closed.
	DownlinkOnly time.Duration
}

TimeoutPolicy contains limits for connection timeout.

func (TimeoutPolicy) OverrideWith

func (p TimeoutPolicy) OverrideWith(another TimeoutPolicy) TimeoutPolicy

OverrideWith overrides the current TimeoutPolicy with another one. All timeouts with zero value will be overridden with the new value.

Directories

Path Synopsis
app
dns
log
proxyman
Package proxyman defines applications for manageing inbound and outbound proxies.
Package proxyman defines applications for manageing 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
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.
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
tls
internet/kcp
Package kcp - A Fast and Reliable ARQ Protocol Acknowledgement: skywind3000@github for inventing the KCP protocol xtaci@github for translating to Golang
Package kcp - A Fast and Reliable ARQ Protocol Acknowledgement: skywind3000@github for inventing the KCP protocol xtaci@github for translating to Golang
internet/websocket
Package websocket implements Websocket transport Websocket transport implements a HTTP(S) compliable, surveillance proof transport method with plausible deniability.
Package websocket implements Websocket transport Websocket transport implements a HTTP(S) compliable, surveillance proof transport method with plausible deniability.
ray

Jump to

Keyboard shortcuts

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