Documentation ¶
Overview ¶
Package core provides an entry point to use Xray core functionalities.
Xray 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 ¶
- Variables
- func AddInboundHandler(server *Instance, config *InboundHandlerConfig) error
- func AddOutboundHandler(server *Instance, config *OutboundHandlerConfig) error
- func CreateObject(v *Instance, config interface{}) (interface{}, error)
- func Dial(ctx context.Context, v *Instance, dest net.Destination) (net.Conn, error)
- func DialUDP(ctx context.Context, v *Instance) (net.PacketConn, error)
- func GetFormatByExtension(ext string) string
- func GetMergedConfig(args cmdarg.Arg) (string, error)
- func RegisterConfigLoader(format *ConfigFormat) error
- func RequireFeatures(ctx context.Context, callback interface{}) error
- func ServerType() interface{}
- func ToBackgroundDetachedContext(ctx context.Context) context.Context
- func Version() string
- func VersionStatement() []string
- type Annotation
- type Config
- func (*Config) Descriptor() ([]byte, []int)deprecated
- func (x *Config) GetApp() []*serial.TypedMessage
- func (x *Config) GetExtension() []*serial.TypedMessage
- func (x *Config) GetInbound() []*InboundHandlerConfig
- func (x *Config) GetOutbound() []*OutboundHandlerConfig
- func (*Config) ProtoMessage()
- func (x *Config) ProtoReflect() protoreflect.Message
- func (x *Config) Reset()
- func (x *Config) String() string
- type ConfigBuilder
- type ConfigFormat
- type ConfigLoader
- type ConfigSource
- type ConfigsMerger
- type InboundHandlerConfig
- func (*InboundHandlerConfig) Descriptor() ([]byte, []int)deprecated
- func (x *InboundHandlerConfig) GetProxySettings() *serial.TypedMessage
- func (x *InboundHandlerConfig) GetReceiverSettings() *serial.TypedMessage
- func (x *InboundHandlerConfig) GetTag() string
- func (*InboundHandlerConfig) ProtoMessage()
- func (x *InboundHandlerConfig) ProtoReflect() protoreflect.Message
- func (x *InboundHandlerConfig) Reset()
- func (x *InboundHandlerConfig) String() string
- type Instance
- func (s *Instance) AddFeature(feature features.Feature) error
- func (s *Instance) Close() error
- func (s *Instance) GetFeature(featureType interface{}) features.Feature
- func (s *Instance) RequireFeatures(callback interface{}) error
- func (s *Instance) Start() error
- func (s *Instance) Type() interface{}
- type OutboundHandlerConfig
- func (*OutboundHandlerConfig) Descriptor() ([]byte, []int)deprecated
- func (x *OutboundHandlerConfig) GetComment() string
- func (x *OutboundHandlerConfig) GetExpire() int64
- func (x *OutboundHandlerConfig) GetProxySettings() *serial.TypedMessage
- func (x *OutboundHandlerConfig) GetSenderSettings() *serial.TypedMessage
- func (x *OutboundHandlerConfig) GetTag() string
- func (*OutboundHandlerConfig) ProtoMessage()
- func (x *OutboundHandlerConfig) ProtoReflect() protoreflect.Message
- func (x *OutboundHandlerConfig) Reset()
- func (x *OutboundHandlerConfig) String() string
- type Server
- type XrayKey
Constants ¶
This section is empty.
Variables ¶
var ( ConfigBuilderForFiles ConfigBuilder ConfigMergedFormFiles ConfigsMerger )
var ( Version_x byte = 24 Version_y byte = 9 Version_z byte = 30 )
var File_core_config_proto protoreflect.FileDescriptor
Functions ¶
func AddInboundHandler ¶
func AddInboundHandler(server *Instance, config *InboundHandlerConfig) error
func AddOutboundHandler ¶
func AddOutboundHandler(server *Instance, config *OutboundHandlerConfig) error
func CreateObject ¶
CreateObject creates a new object based on the given Xray instance and config. The Xray instance may be nil.
func Dial ¶
Dial provides an easy way for upstream caller to create net.Conn through Xray. It dispatches the request to the given destination by the given Xray 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.
xray:api:stable
func DialUDP ¶
DialUDP provides a way to exchange UDP packets through Xray instance to remote servers. Since it is under a proxy context, the LocalAddr() in returned PacketConn will not show the real address.
TODO: SetDeadline() / SetReadDeadline() / SetWriteDeadline() are not implemented.
xray:api:beta
func GetFormatByExtension ¶
func RegisterConfigLoader ¶
func RegisterConfigLoader(format *ConfigFormat) error
RegisterConfigLoader add a new ConfigLoader.
func RequireFeatures ¶
RequireFeatures is a helper function to require features from Instance in context. See Instance.RequireFeatures for more information.
func ToBackgroundDetachedContext ¶
ToBackgroundDetachedContext create a detached context from another context Internal API
func Version ¶
func Version() string
Version returns Xray'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 ¶
func VersionStatement() []string
VersionStatement returns a list of strings representing the full version info.
Types ¶
type Annotation ¶
type Annotation struct { // API is for types or functions that can be used in other libs. Possible values are: // // * xray:api:beta for types or functions that are ready for use, but maybe changed in the future. // * xray:api:stable for types or functions with guarantee of backward compatibility. // * xray:api:deprecated for types or functions that should not be used anymore. // // Types or functions without api annotation should not be used externally. API string }
Annotation is a concept in Xray. This struct is only for documentation. It is not used anywhere. Annotations begin with "xray:" in comment, as metadata of functions or types.
type Config ¶
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 Xray. 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"` // Configuration for extensions. The config may not work if corresponding // extension is not loaded into Xray. Xray will ignore such config during // initialization. Extension []*serial.TypedMessage `protobuf:"bytes,6,rep,name=extension,proto3" json:"extension,omitempty"` // contains filtered or unexported fields }
Config is the master config of Xray. Xray takes this config as input and functions accordingly.
func LoadConfig ¶
func (*Config) Descriptor
deprecated
func (*Config) GetApp ¶
func (x *Config) GetApp() []*serial.TypedMessage
func (*Config) GetExtension ¶
func (x *Config) GetExtension() []*serial.TypedMessage
func (*Config) GetInbound ¶
func (x *Config) GetInbound() []*InboundHandlerConfig
func (*Config) GetOutbound ¶
func (x *Config) GetOutbound() []*OutboundHandlerConfig
func (*Config) ProtoMessage ¶
func (*Config) ProtoMessage()
func (*Config) ProtoReflect ¶
func (x *Config) ProtoReflect() protoreflect.Message
type ConfigBuilder ¶
type ConfigBuilder func(files []*ConfigSource) (*Config, error)
ConfigBuilder is a builder to build core.Config from filenames and formats
type ConfigFormat ¶
type ConfigFormat struct { Name string Extension []string Loader ConfigLoader }
ConfigFormat is a configurable format of Xray config file.
type ConfigLoader ¶
ConfigLoader is a utility to load Xray config from external source.
type ConfigSource ¶
type ConfigsMerger ¶
type ConfigsMerger func(files []*ConfigSource) (string, error)
ConfigsMerger merge multiple json configs into on config
type InboundHandlerConfig ¶
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"` // contains filtered or unexported fields }
InboundHandlerConfig is the configuration for inbound handler.
func (*InboundHandlerConfig) Descriptor
deprecated
func (*InboundHandlerConfig) Descriptor() ([]byte, []int)
Deprecated: Use InboundHandlerConfig.ProtoReflect.Descriptor instead.
func (*InboundHandlerConfig) GetProxySettings ¶
func (x *InboundHandlerConfig) GetProxySettings() *serial.TypedMessage
func (*InboundHandlerConfig) GetReceiverSettings ¶
func (x *InboundHandlerConfig) GetReceiverSettings() *serial.TypedMessage
func (*InboundHandlerConfig) GetTag ¶
func (x *InboundHandlerConfig) GetTag() string
func (*InboundHandlerConfig) ProtoMessage ¶
func (*InboundHandlerConfig) ProtoMessage()
func (*InboundHandlerConfig) ProtoReflect ¶
func (x *InboundHandlerConfig) ProtoReflect() protoreflect.Message
func (*InboundHandlerConfig) Reset ¶
func (x *InboundHandlerConfig) Reset()
func (*InboundHandlerConfig) String ¶
func (x *InboundHandlerConfig) String() string
type Instance ¶
type Instance struct {
// contains filtered or unexported fields
}
Instance combines all functionalities in Xray.
func FromContext ¶
FromContext returns an Instance from the given context, or nil if the context doesn't contain one.
func MustFromContext ¶
MustFromContext returns an Instance from the given context, or panics if not present.
func New ¶
New returns a new Xray instance based on given configuration. The instance is not started at this point. To ensure Xray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.
func StartInstance ¶
StartInstance starts a new Xray instance with given serialized config. By default Xray only support config in protobuf format, i.e., configFormat = "protobuf". Caller need to load other packages to add JSON support.
xray:api:stable
func (*Instance) AddFeature ¶
AddFeature registers a feature into current Instance.
func (*Instance) GetFeature ¶
GetFeature returns a feature of the given type, or nil if such feature is not registered.
func (*Instance) RequireFeatures ¶
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.
type OutboundHandlerConfig ¶
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"` // contains filtered or unexported fields }
OutboundHandlerConfig is the configuration for outbound handler.
func (*OutboundHandlerConfig) Descriptor
deprecated
func (*OutboundHandlerConfig) Descriptor() ([]byte, []int)
Deprecated: Use OutboundHandlerConfig.ProtoReflect.Descriptor instead.
func (*OutboundHandlerConfig) GetComment ¶
func (x *OutboundHandlerConfig) GetComment() string
func (*OutboundHandlerConfig) GetExpire ¶
func (x *OutboundHandlerConfig) GetExpire() int64
func (*OutboundHandlerConfig) GetProxySettings ¶
func (x *OutboundHandlerConfig) GetProxySettings() *serial.TypedMessage
func (*OutboundHandlerConfig) GetSenderSettings ¶
func (x *OutboundHandlerConfig) GetSenderSettings() *serial.TypedMessage
func (*OutboundHandlerConfig) GetTag ¶
func (x *OutboundHandlerConfig) GetTag() string
func (*OutboundHandlerConfig) ProtoMessage ¶
func (*OutboundHandlerConfig) ProtoMessage()
func (*OutboundHandlerConfig) ProtoReflect ¶
func (x *OutboundHandlerConfig) ProtoReflect() protoreflect.Message
func (*OutboundHandlerConfig) Reset ¶
func (x *OutboundHandlerConfig) Reset()
func (*OutboundHandlerConfig) String ¶
func (x *OutboundHandlerConfig) String() string