core

package
v0.0.0-...-6f818a0 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2023 License: MIT Imports: 31 Imported by: 0

Documentation

Overview

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

Netools 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.

Code generated by errors.codegen. DO NOT EDIT.

Index

Constants

This section is empty.

Variables

View Source
var (
	Version_x byte = 1
	Version_y byte = 8
	Version_z byte = 1
)
View Source
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

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

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

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 Netool. It dispatches the request to the given destination by the given Netool 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.

netool:api:stable

func DialUDP

func DialUDP(ctx context.Context, v *Instance) (net.PacketConn, error)

DialUDP provides a way to exchange UDP packets through Netool 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.

netool:api:beta

func GetFormatByExtension

func GetFormatByExtension(ext string) string

func RegisterConfigLoader

func RegisterConfigLoader(format *ConfigFormat) error

RegisterConfigLoader add a new ConfigLoader.

func RequireFeatures

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

func ServerType() interface{}

ServerType returns the type of the server.

func ToBackgroundDetachedContext

func ToBackgroundDetachedContext(ctx context.Context) context.Context

ToBackgroundDetachedContext create a detached context from another context Internal API

func Version

func Version() string

Version returns Netool'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 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 Netool. 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.
	// Deprecated. Each inbound and outbound should choose their own transport
	// config. Date to remove: 2020-01-13
	//
	// Deprecated: Marked as deprecated in core/config.proto.
	Transport *global.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 Netool. Netool 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 Netool. Netool takes this config as input and functions accordingly.

func LoadConfig

func LoadConfig(formatName string, input interface{}) (*Config, error)

func (*Config) Descriptor deprecated

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

Deprecated: Use Config.ProtoReflect.Descriptor instead.

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) GetTransport deprecated

func (x *Config) GetTransport() *global.Config

Deprecated: Marked as deprecated in core/config.proto.

func (*Config) ProtoMessage

func (*Config) ProtoMessage()

func (*Config) ProtoReflect

func (x *Config) ProtoReflect() protoreflect.Message

func (*Config) Reset

func (x *Config) Reset()

func (*Config) String

func (x *Config) String() string

type ConfigBuilder

type ConfigBuilder func(files []string, formats []string) (*Config, error)

ConfigBuilder is a builder to build core.Config from filenames and formats

var (
	ConfigBuilderForFiles ConfigBuilder
)

type ConfigFormat

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

ConfigFormat is a configurable format of Netool config file.

type ConfigLoader

type ConfigLoader func(input interface{}) (*Config, error)

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

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 Netool.

func FromContext

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

func MustFromContext(ctx context.Context) *Instance

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

func New

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

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

func NewWithContext

func NewWithContext(ctx context.Context, config *Config) (*Instance, error)

func StartInstance

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

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

netool:api:stable

func (*Instance) AddFeature

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

AddFeature registers a feature into current Instance.

func (*Instance) Close

func (s *Instance) Close() error

Close shutdown the Netool instance.

func (*Instance) GetFeature

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

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

func (s *Instance) Start() error

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

netool:api:stable

func (*Instance) Type

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

Type implements common.HasType.

type NetoolKey

type NetoolKey int

NetoolKey is the key type of Instance in Context, exported for test.

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

type Server

type Server interface {
	common.Runnable
}

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

Jump to

Keyboard shortcuts

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