add config
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package chain
|
||||
|
||||
type Chain struct {
|
||||
Name string
|
||||
groups []*NodeGroup
|
||||
}
|
||||
|
||||
|
@ -7,5 +7,6 @@ import (
|
||||
|
||||
// Connector is responsible for connecting to the destination address.
|
||||
type Connector interface {
|
||||
Init(Metadata) error
|
||||
Connect(ctx context.Context, conn net.Conn, network, address string, opts ...ConnectOption) (net.Conn, error)
|
||||
}
|
||||
|
@ -12,18 +12,19 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/connector"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ connector.Connector = (*Connector)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegiserConnector("http", NewConnector)
|
||||
}
|
||||
|
||||
type Connector struct {
|
||||
md metadata
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewConnector(opts ...connector.Option) *Connector {
|
||||
func NewConnector(opts ...connector.Option) connector.Connector {
|
||||
options := &connector.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -6,18 +6,19 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/connector"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ connector.Connector = (*Connector)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegiserConnector("ss", NewConnector)
|
||||
}
|
||||
|
||||
type Connector struct {
|
||||
md metadata
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewConnector(opts ...connector.Option) *Connector {
|
||||
func NewConnector(opts ...connector.Option) connector.Connector {
|
||||
options := &connector.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
|
||||
// Transporter is responsible for dialing to the proxy server.
|
||||
type Dialer interface {
|
||||
Init(Metadata) error
|
||||
Dial(ctx context.Context, addr string, opts ...DialOption) (net.Conn, error)
|
||||
}
|
||||
|
||||
|
@ -6,18 +6,19 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/dialer"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ dialer.Dialer = (*Dialer)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterDialer("tcp", NewDialer)
|
||||
}
|
||||
|
||||
type Dialer struct {
|
||||
md metadata
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewDialer(opts ...dialer.Option) *Dialer {
|
||||
func NewDialer(opts ...dialer.Option) dialer.Dialer {
|
||||
options := &dialer.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -6,5 +6,6 @@ import (
|
||||
)
|
||||
|
||||
type Handler interface {
|
||||
Init(Metadata) error
|
||||
Handle(context.Context, net.Conn)
|
||||
}
|
||||
|
@ -9,11 +9,12 @@ import (
|
||||
"github.com/go-gost/gost/pkg/chain"
|
||||
"github.com/go-gost/gost/pkg/components/handler"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ handler.Handler = (*Handler)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterHandler("http", NewHandler)
|
||||
}
|
||||
|
||||
type Handler struct {
|
||||
chain *chain.Chain
|
||||
@ -21,7 +22,7 @@ type Handler struct {
|
||||
md metadata
|
||||
}
|
||||
|
||||
func NewHandler(opts ...handler.Option) *Handler {
|
||||
func NewHandler(opts ...handler.Option) handler.Handler {
|
||||
options := &handler.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
1
pkg/components/handler/http/middleware.go
Normal file
1
pkg/components/handler/http/middleware.go
Normal file
@ -0,0 +1 @@
|
||||
package http
|
@ -9,20 +9,21 @@ import (
|
||||
"github.com/go-gost/gosocks5"
|
||||
"github.com/go-gost/gost/pkg/components/handler"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/shadowsocks/go-shadowsocks2/core"
|
||||
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
|
||||
)
|
||||
|
||||
var (
|
||||
_ handler.Handler = (*Handler)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterHandler("ss", NewHandler)
|
||||
}
|
||||
|
||||
type Handler struct {
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
}
|
||||
|
||||
func NewHandler(opts ...handler.Option) *Handler {
|
||||
func NewHandler(opts ...handler.Option) handler.Handler {
|
||||
options := &handler.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -7,20 +7,21 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/handler"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/shadowsocks/go-shadowsocks2/core"
|
||||
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
|
||||
)
|
||||
|
||||
var (
|
||||
_ handler.Handler = (*Handler)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterHandler("ssu", NewHandler)
|
||||
}
|
||||
|
||||
type Handler struct {
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
}
|
||||
|
||||
func NewHandler(opts ...handler.Option) *Handler {
|
||||
func NewHandler(opts ...handler.Option) handler.Handler {
|
||||
options := &handler.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -8,12 +8,13 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/xtaci/tcpraw"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("ftcp", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -24,7 +25,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -10,12 +10,13 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("h2", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
net.Listener
|
||||
@ -26,7 +27,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -9,12 +9,13 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("http2", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -25,7 +26,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -8,14 +8,15 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/xtaci/kcp-go/v5"
|
||||
"github.com/xtaci/smux"
|
||||
"github.com/xtaci/tcpraw"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("kcp", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -25,7 +26,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -11,6 +11,7 @@ var (
|
||||
|
||||
// Listener is a server listener, just like a net.Listener.
|
||||
type Listener interface {
|
||||
Init(Metadata) error
|
||||
net.Listener
|
||||
}
|
||||
|
||||
|
@ -9,11 +9,12 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("obfs-http", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -21,7 +22,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -9,11 +9,12 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("obfs-tls", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -21,7 +22,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -5,11 +5,18 @@ import (
|
||||
)
|
||||
|
||||
type Options struct {
|
||||
Addr string
|
||||
Logger logger.Logger
|
||||
}
|
||||
|
||||
type Option func(opts *Options)
|
||||
|
||||
func AddrOption(addr string) Option {
|
||||
return func(opts *Options) {
|
||||
opts.Addr = addr
|
||||
}
|
||||
}
|
||||
|
||||
func LoggerOption(logger logger.Logger) Option {
|
||||
return func(opts *Options) {
|
||||
opts.Logger = logger
|
||||
|
@ -8,12 +8,13 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("quic", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -23,7 +24,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -1,7 +1,6 @@
|
||||
package tcp
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
"strconv"
|
||||
"time"
|
||||
@ -9,24 +8,27 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("tcp", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
addr string
|
||||
md metadata
|
||||
net.Listener
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
}
|
||||
return &Listener{
|
||||
addr: options.Addr,
|
||||
logger: options.Logger,
|
||||
}
|
||||
}
|
||||
@ -37,7 +39,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
laddr, err := net.ResolveTCPAddr("tcp", l.md.addr)
|
||||
laddr, err := net.ResolveTCPAddr("tcp", l.addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -59,13 +61,6 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
|
||||
}
|
||||
|
||||
func (l *Listener) parseMetadata(md listener.Metadata) (m metadata, err error) {
|
||||
if val, ok := md[addr]; ok {
|
||||
m.addr = val
|
||||
} else {
|
||||
err = errors.New("missing address")
|
||||
return
|
||||
}
|
||||
|
||||
m.keepAlive = true
|
||||
if val, ok := md[keepAlive]; ok {
|
||||
m.keepAlive, _ = strconv.ParseBool(val)
|
||||
|
@ -3,7 +3,6 @@ package tcp
|
||||
import "time"
|
||||
|
||||
const (
|
||||
addr = "addr"
|
||||
keepAlive = "keepAlive"
|
||||
keepAlivePeriod = "keepAlivePeriod"
|
||||
)
|
||||
@ -13,7 +12,6 @@ const (
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
addr string
|
||||
keepAlive bool
|
||||
keepAlivePeriod time.Duration
|
||||
}
|
||||
|
@ -9,11 +9,12 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("tls", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -21,7 +22,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -8,12 +8,13 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/xtaci/smux"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("mtls", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -23,7 +24,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -8,11 +8,12 @@ import (
|
||||
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("udp", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -23,7 +24,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -9,12 +9,14 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("ws", NewListener)
|
||||
registry.RegisterListener("wss", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -26,7 +28,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
@ -9,13 +9,15 @@ import (
|
||||
"github.com/go-gost/gost/pkg/components/internal/utils"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
"github.com/go-gost/gost/pkg/logger"
|
||||
"github.com/go-gost/gost/pkg/registry"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/xtaci/smux"
|
||||
)
|
||||
|
||||
var (
|
||||
_ listener.Listener = (*Listener)(nil)
|
||||
)
|
||||
func init() {
|
||||
registry.RegisterListener("mws", NewListener)
|
||||
registry.RegisterListener("mwss", NewListener)
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
md metadata
|
||||
@ -27,7 +29,7 @@ type Listener struct {
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) *Listener {
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := &listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(options)
|
||||
|
106
pkg/config/config.go
Normal file
106
pkg/config/config.go
Normal file
@ -0,0 +1,106 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var (
|
||||
v = viper.GetViper()
|
||||
)
|
||||
|
||||
func init() {
|
||||
v.SetConfigName("gost")
|
||||
v.AddConfigPath("/etc/gost/")
|
||||
v.AddConfigPath("$HOME/.gost/")
|
||||
v.AddConfigPath(".")
|
||||
}
|
||||
|
||||
type LogConfig struct {
|
||||
Level string
|
||||
Format string
|
||||
}
|
||||
|
||||
type LoadbalancingConfig struct {
|
||||
Strategy string
|
||||
Filters []string
|
||||
}
|
||||
|
||||
type ListenerConfig struct {
|
||||
Type string
|
||||
Metadata map[string]string
|
||||
}
|
||||
|
||||
type HandlerConfig struct {
|
||||
Type string
|
||||
Metadata map[string]string
|
||||
}
|
||||
|
||||
type DialerConfig struct {
|
||||
Type string
|
||||
Metadata map[string]string
|
||||
}
|
||||
|
||||
type ConnectorConfig struct {
|
||||
Type string
|
||||
Metadata map[string]string
|
||||
}
|
||||
|
||||
type ServiceConfig struct {
|
||||
URL string
|
||||
Addr string
|
||||
Listener *ListenerConfig
|
||||
Handler *HandlerConfig
|
||||
Chain string
|
||||
}
|
||||
|
||||
type ChainConfig struct {
|
||||
Name string
|
||||
LB *LoadbalancingConfig
|
||||
Hops []HopConfig
|
||||
}
|
||||
|
||||
type HopConfig struct {
|
||||
Name string
|
||||
LB *LoadbalancingConfig
|
||||
Nodes []NodeConfig
|
||||
}
|
||||
|
||||
type NodeConfig struct {
|
||||
Name string
|
||||
URL string
|
||||
Addr string
|
||||
Dialer *DialerConfig
|
||||
Connector *ConnectorConfig
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Log *LogConfig
|
||||
Services []ServiceConfig
|
||||
Chains []ChainConfig
|
||||
}
|
||||
|
||||
func (c *Config) Load() error {
|
||||
if err := v.ReadInConfig(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return v.Unmarshal(c)
|
||||
}
|
||||
|
||||
func (c *Config) Read(r io.Reader) error {
|
||||
if err := v.ReadConfig(r); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return v.Unmarshal(c)
|
||||
}
|
||||
|
||||
func (c *Config) ReadFile(file string) error {
|
||||
v.SetConfigFile(file)
|
||||
if err := v.ReadInConfig(); err != nil {
|
||||
return err
|
||||
}
|
||||
return v.Unmarshal(c)
|
||||
}
|
@ -29,7 +29,7 @@ func newLogger(name string) *logger {
|
||||
|
||||
// EnableJSONOutput enables JSON formatted output log.
|
||||
func (l *logger) EnableJSONOutput(enabled bool) {
|
||||
|
||||
l.logger.Logger.SetFormatter(&logrus.JSONFormatter{})
|
||||
}
|
||||
|
||||
// SetOutputLevel sets log output level
|
||||
@ -45,44 +45,44 @@ func (l *logger) WithFields(fields map[string]interface{}) Logger {
|
||||
}
|
||||
}
|
||||
|
||||
// Info logs a message at level Info.
|
||||
func (l *logger) Info(args ...interface{}) {
|
||||
l.logger.Log(logrus.InfoLevel, args...)
|
||||
}
|
||||
|
||||
// Infof logs a message at level Info.
|
||||
func (l *logger) Infof(format string, args ...interface{}) {
|
||||
l.logger.Logf(logrus.InfoLevel, format, args...)
|
||||
}
|
||||
|
||||
// Debug logs a message at level Debug.
|
||||
func (l *logger) Debug(args ...interface{}) {
|
||||
l.logger.Log(logrus.DebugLevel, args...)
|
||||
l.logger.Debug(args...)
|
||||
}
|
||||
|
||||
// Debugf logs a message at level Debug.
|
||||
func (l *logger) Debugf(format string, args ...interface{}) {
|
||||
l.logger.Logf(logrus.DebugLevel, format, args...)
|
||||
l.logger.Debugf(format, args...)
|
||||
}
|
||||
|
||||
// Info logs a message at level Info.
|
||||
func (l *logger) Info(args ...interface{}) {
|
||||
l.logger.Info(args...)
|
||||
}
|
||||
|
||||
// Infof logs a message at level Info.
|
||||
func (l *logger) Infof(format string, args ...interface{}) {
|
||||
l.logger.Infof(format, args...)
|
||||
}
|
||||
|
||||
// Warn logs a message at level Warn.
|
||||
func (l *logger) Warn(args ...interface{}) {
|
||||
l.logger.Log(logrus.WarnLevel, args...)
|
||||
l.logger.Warn(args...)
|
||||
}
|
||||
|
||||
// Warnf logs a message at level Warn.
|
||||
func (l *logger) Warnf(format string, args ...interface{}) {
|
||||
l.logger.Logf(logrus.WarnLevel, format, args...)
|
||||
l.logger.Warnf(format, args...)
|
||||
}
|
||||
|
||||
// Error logs a message at level Error.
|
||||
func (l *logger) Error(args ...interface{}) {
|
||||
l.logger.Log(logrus.ErrorLevel, args...)
|
||||
l.logger.Error(args...)
|
||||
}
|
||||
|
||||
// Errorf logs a message at level Error.
|
||||
func (l *logger) Errorf(format string, args ...interface{}) {
|
||||
l.logger.Logf(logrus.ErrorLevel, format, args...)
|
||||
l.logger.Errorf(format, args...)
|
||||
}
|
||||
|
||||
// Fatal logs a message at level Fatal then the process will exit with status set to 1.
|
||||
|
52
pkg/registry/registry.go
Normal file
52
pkg/registry/registry.go
Normal file
@ -0,0 +1,52 @@
|
||||
package registry
|
||||
|
||||
import (
|
||||
"github.com/go-gost/gost/pkg/components/connector"
|
||||
"github.com/go-gost/gost/pkg/components/dialer"
|
||||
"github.com/go-gost/gost/pkg/components/handler"
|
||||
"github.com/go-gost/gost/pkg/components/listener"
|
||||
)
|
||||
|
||||
type NewListener func(opts ...listener.Option) listener.Listener
|
||||
type NewHandler func(opts ...handler.Option) handler.Handler
|
||||
type NewDialer func(opts ...dialer.Option) dialer.Dialer
|
||||
type NewConnector func(opts ...connector.Option) connector.Connector
|
||||
|
||||
var (
|
||||
listeners = make(map[string]NewListener)
|
||||
handlers = make(map[string]NewHandler)
|
||||
dialers = make(map[string]NewDialer)
|
||||
connectors = make(map[string]NewConnector)
|
||||
)
|
||||
|
||||
func RegisterListener(name string, newf NewListener) {
|
||||
listeners[name] = newf
|
||||
}
|
||||
|
||||
func GetListener(name string) NewListener {
|
||||
return listeners[name]
|
||||
}
|
||||
|
||||
func RegisterHandler(name string, newf NewHandler) {
|
||||
handlers[name] = newf
|
||||
}
|
||||
|
||||
func GetHandler(name string) NewHandler {
|
||||
return handlers[name]
|
||||
}
|
||||
|
||||
func RegisterDialer(name string, newf NewDialer) {
|
||||
dialers[name] = newf
|
||||
}
|
||||
|
||||
func GetDialer(name string) NewDialer {
|
||||
return dialers[name]
|
||||
}
|
||||
|
||||
func RegiserConnector(name string, newf NewConnector) {
|
||||
connectors[name] = newf
|
||||
}
|
||||
|
||||
func GetConnector(name string) NewConnector {
|
||||
return connectors[name]
|
||||
}
|
Reference in New Issue
Block a user