add metadata

This commit is contained in:
ginuerzh
2021-10-29 23:49:57 +08:00
parent 4969bc1067
commit 57a4d116d4
46 changed files with 466 additions and 381 deletions

View File

@ -1,12 +1,12 @@
package ftcp
import (
"errors"
"net"
"sync"
"sync/atomic"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/xtaci/tcpraw"
@ -17,6 +17,7 @@ func init() {
}
type Listener struct {
addr string
md metadata
conn net.PacketConn
connChan chan net.Conn
@ -31,13 +32,13 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
@ -118,14 +119,7 @@ func (l *Listener) listenLoop() {
}
}
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
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
return
}

View File

@ -14,8 +14,7 @@ const (
)
type metadata struct {
addr string
ttl time.Duration
ttl time.Duration
readBufferSize int
readQueueSize int

View File

@ -9,6 +9,7 @@ import (
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"golang.org/x/net/http2"
@ -19,6 +20,7 @@ func init() {
}
type Listener struct {
addr string
net.Listener
md metadata
server *http2.Server
@ -33,17 +35,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
ln, err := net.Listen("tcp", l.md.addr)
ln, err := net.Listen("tcp", l.addr)
if err != nil {
return
}
@ -170,15 +172,12 @@ func (l *Listener) upgrade(w http.ResponseWriter, r *http.Request) (*conn, error
}, nil
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}

View File

@ -7,7 +7,6 @@ import (
)
const (
addr = "addr"
path = "path"
certFile = "certFile"
keyFile = "keyFile"
@ -24,7 +23,6 @@ const (
)
type metadata struct {
addr string
path string
tlsConfig *tls.Config
handshakeTimeout time.Duration

View File

@ -2,12 +2,12 @@ package http2
import (
"crypto/tls"
"errors"
"net"
"net/http"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"golang.org/x/net/http2"
@ -18,6 +18,7 @@ func init() {
}
type Listener struct {
saddr string
md metadata
server *http.Server
addr net.Addr
@ -32,18 +33,18 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
saddr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
l.server = &http.Server{
Addr: l.md.addr,
Addr: l.saddr,
Handler: http.HandlerFunc(l.handleFunc),
TLSConfig: l.md.tlsConfig,
}
@ -51,7 +52,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
return err
}
ln, err := net.Listen("tcp", addr)
ln, err := net.Listen("tcp", l.saddr)
if err != nil {
return err
}
@ -124,15 +125,12 @@ func (l *Listener) handleFunc(w http.ResponseWriter, r *http.Request) {
<-conn.closed
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}

View File

@ -7,7 +7,6 @@ import (
)
const (
addr = "addr"
path = "path"
certFile = "certFile"
keyFile = "keyFile"
@ -24,7 +23,6 @@ const (
)
type metadata struct {
addr string
path string
tlsConfig *tls.Config
handshakeTimeout time.Duration

View File

@ -1,12 +1,12 @@
package kcp
import (
"errors"
"net"
"time"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/xtaci/kcp-go/v5"
@ -19,6 +19,7 @@ func init() {
}
type Listener struct {
addr string
md metadata
ln *kcp.Listener
connChan chan net.Conn
@ -32,13 +33,13 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
@ -52,14 +53,14 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
if config.TCP {
var conn net.PacketConn
conn, err = tcpraw.Listen("tcp", addr)
conn, err = tcpraw.Listen("tcp", l.addr)
if err != nil {
return
}
ln, err = kcp.ServeConn(
blockCrypt(config.Key, config.Crypt, Salt), config.DataShard, config.ParityShard, conn)
} else {
ln, err = kcp.ListenWithOptions(addr,
ln, err = kcp.ListenWithOptions(l.addr,
blockCrypt(config.Key, config.Crypt, Salt), config.DataShard, config.ParityShard)
}
if err != nil {
@ -168,13 +169,6 @@ func (l *Listener) mux(conn net.Conn) {
}
}
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
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
return
}

View File

@ -1,8 +1,6 @@
package kcp
const (
addr = "addr"
connQueueSize = "connQueueSize"
)
@ -11,7 +9,6 @@ const (
)
type metadata struct {
addr string
config *Config
connQueueSize int

View File

@ -3,6 +3,8 @@ package listener
import (
"errors"
"net"
"github.com/go-gost/gost/pkg/components/metadata"
)
var (
@ -11,7 +13,7 @@ var (
// Listener is a server listener, just like a net.Listener.
type Listener interface {
Init(Metadata) error
Init(metadata.Metadata) error
net.Listener
}

View File

@ -1,3 +0,0 @@
package listener
type Metadata map[string]string

View File

@ -1,13 +1,11 @@
package http
import (
"errors"
"net"
"strconv"
"time"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -17,7 +15,8 @@ func init() {
}
type Listener struct {
md metadata
addr string
md metadata
net.Listener
logger logger.Logger
}
@ -28,17 +27,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
laddr, err := net.ResolveTCPAddr("tcp", l.md.addr)
laddr, err := net.ResolveTCPAddr("tcp", l.addr)
if err != nil {
return
}
@ -68,22 +67,9 @@ func (l *Listener) Accept() (net.Conn, error) {
return &conn{Conn: c}, nil
}
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)
}
if val, ok := md[keepAlivePeriod]; ok {
m.keepAlivePeriod, _ = time.ParseDuration(val)
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.keepAlive = md.GetBool(keepAlive)
l.md.keepAlivePeriod = md.GetDuration(keepAlivePeriod)
return
}

View File

@ -3,7 +3,6 @@ package http
import "time"
const (
addr = "addr"
keepAlive = "keepAlive"
keepAlivePeriod = "keepAlivePeriod"
)
@ -13,7 +12,6 @@ const (
)
type metadata struct {
addr string
keepAlive bool
keepAlivePeriod time.Duration
}

View File

@ -1,13 +1,11 @@
package tls
import (
"errors"
"net"
"strconv"
"time"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -17,7 +15,8 @@ func init() {
}
type Listener struct {
md metadata
addr string
md metadata
net.Listener
logger logger.Logger
}
@ -28,17 +27,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
laddr, err := net.ResolveTCPAddr("tcp", l.md.addr)
laddr, err := net.ResolveTCPAddr("tcp", l.addr)
if err != nil {
return
}
@ -68,22 +67,9 @@ func (l *Listener) Accept() (net.Conn, error) {
return &conn{Conn: c}, nil
}
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)
}
if val, ok := md[keepAlivePeriod]; ok {
m.keepAlivePeriod, _ = time.ParseDuration(val)
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.keepAlive = md.GetBool(keepAlive)
l.md.keepAlivePeriod = md.GetDuration(keepAlivePeriod)
return
}

View File

@ -3,7 +3,6 @@ package tls
import "time"
const (
addr = "addr"
keepAlive = "keepAlive"
keepAlivePeriod = "keepAlivePeriod"
)
@ -13,7 +12,6 @@ const (
)
type metadata struct {
addr string
keepAlive bool
keepAlivePeriod time.Duration
}

View File

@ -2,11 +2,11 @@ package quic
import (
"context"
"errors"
"net"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/lucas-clemente/quic-go"
@ -17,6 +17,7 @@ func init() {
}
type Listener struct {
addr string
md metadata
ln quic.Listener
connChan chan net.Conn
@ -30,17 +31,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
laddr, err := net.ResolveUDPAddr("udp", l.md.addr)
laddr, err := net.ResolveUDPAddr("udp", l.addr)
if err != nil {
return
}
@ -131,13 +132,7 @@ func (l *Listener) mux(ctx context.Context, session quic.Session) {
}
}
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
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
return
}

View File

@ -6,8 +6,6 @@ import (
)
const (
addr = "addr"
certFile = "certFile"
keyFile = "keyFile"
caFile = "caFile"
@ -21,7 +19,6 @@ const (
)
type metadata struct {
addr string
tlsConfig *tls.Config
keepAlive bool
HandshakeTimeout time.Duration

View File

@ -2,11 +2,10 @@ package tcp
import (
"net"
"strconv"
"time"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -33,9 +32,8 @@ func NewListener(opts ...listener.Option) listener.Listener {
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
@ -57,18 +55,13 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
}
l.Listener = ln
l.logger.Info("listening on:", l.Listener.Addr())
return
}
func (l *Listener) parseMetadata(md listener.Metadata) (m metadata, err error) {
m.keepAlive = true
if val, ok := md[keepAlive]; ok {
m.keepAlive, _ = strconv.ParseBool(val)
}
if val, ok := md[keepAlivePeriod]; ok {
m.keepAlivePeriod, _ = time.ParseDuration(val)
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.keepAlive = md.GetBool(keepAlive)
l.md.keepAlivePeriod = md.GetDuration(keepAlivePeriod)
return
}

View File

@ -2,12 +2,11 @@ package tls
import (
"crypto/tls"
"errors"
"net"
"time"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -17,7 +16,8 @@ func init() {
}
type Listener struct {
md metadata
addr string
md metadata
net.Listener
logger logger.Logger
}
@ -28,17 +28,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
ln, err := net.Listen("tcp", l.md.addr)
ln, err := net.Listen("tcp", l.addr)
if err != nil {
return
}
@ -55,22 +55,16 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
return
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}
if val, ok := md[keepAlivePeriod]; ok {
m.keepAlivePeriod, _ = time.ParseDuration(val)
}
l.md.keepAlivePeriod = md.GetDuration(keepAlivePeriod)
return
}

View File

@ -6,7 +6,6 @@ import (
)
const (
addr = "addr"
certFile = "certFile"
keyFile = "keyFile"
caFile = "caFile"
@ -14,7 +13,6 @@ const (
)
type metadata struct {
addr string
tlsConfig *tls.Config
keepAlivePeriod time.Duration
}

View File

@ -2,11 +2,11 @@ package mux
import (
"crypto/tls"
"errors"
"net"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/xtaci/smux"
@ -17,7 +17,8 @@ func init() {
}
type Listener struct {
md metadata
addr string
md metadata
net.Listener
connChan chan net.Conn
errChan chan error
@ -30,17 +31,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
ln, err := net.Listen("tcp", l.md.addr)
ln, err := net.Listen("tcp", l.addr)
if err != nil {
return
}
@ -125,15 +126,12 @@ func (l *Listener) Accept() (conn net.Conn, err error) {
return
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}

View File

@ -6,7 +6,6 @@ import (
)
const (
addr = "addr"
certFile = "certFile"
keyFile = "keyFile"
caFile = "caFile"
@ -24,7 +23,6 @@ const (
)
type metadata struct {
addr string
tlsConfig *tls.Config
muxKeepAliveDisabled bool

View File

@ -1,12 +1,12 @@
package udp
import (
"errors"
"net"
"sync"
"sync/atomic"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -16,6 +16,7 @@ func init() {
}
type Listener struct {
addr string
md metadata
conn net.PacketConn
connChan chan net.Conn
@ -30,17 +31,17 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
laddr, err := net.ResolveUDPAddr("udp", l.md.addr)
laddr, err := net.ResolveUDPAddr("udp", l.addr)
if err != nil {
return
}
@ -124,14 +125,7 @@ func (l *Listener) listenLoop() {
}
}
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
}
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
return
}

View File

@ -9,13 +9,8 @@ const (
defaultConnQueueSize = 128
)
const (
addr = "addr"
)
type metadata struct {
addr string
ttl time.Duration
ttl time.Duration
readBufferSize int
readQueueSize int

View File

@ -2,12 +2,12 @@ package ws
import (
"crypto/tls"
"errors"
"net"
"net/http"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/gorilla/websocket"
@ -19,6 +19,7 @@ func init() {
}
type Listener struct {
saddr string
md metadata
addr net.Addr
upgrader *websocket.Upgrader
@ -34,13 +35,13 @@ func NewListener(opts ...listener.Option) listener.Listener {
opt(options)
}
return &Listener{
saddr: options.Addr,
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
@ -59,7 +60,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
mux := http.NewServeMux()
mux.Handle(path, http.HandlerFunc(l.upgrade))
l.srv = &http.Server{
Addr: l.md.addr,
Addr: l.saddr,
TLSConfig: l.md.tlsConfig,
Handler: mux,
ReadHeaderTimeout: l.md.readHeaderTimeout,
@ -72,7 +73,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
l.connChan = make(chan net.Conn, queueSize)
l.errChan = make(chan error, 1)
ln, err := net.Listen("tcp", l.md.addr)
ln, err := net.Listen("tcp", l.saddr)
if err != nil {
return
}
@ -113,15 +114,12 @@ func (l *Listener) Addr() net.Addr {
return l.addr
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}

View File

@ -7,7 +7,6 @@ import (
)
const (
addr = "addr"
path = "path"
certFile = "certFile"
keyFile = "keyFile"
@ -27,7 +26,6 @@ const (
)
type metadata struct {
addr string
path string
tlsConfig *tls.Config
handshakeTimeout time.Duration

View File

@ -2,12 +2,12 @@ package mux
import (
"crypto/tls"
"errors"
"net"
"net/http"
"github.com/go-gost/gost/pkg/components/internal/utils"
"github.com/go-gost/gost/pkg/components/listener"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/gorilla/websocket"
@ -20,6 +20,7 @@ func init() {
}
type Listener struct {
saddr string
md metadata
addr net.Addr
upgrader *websocket.Upgrader
@ -39,9 +40,8 @@ func NewListener(opts ...listener.Option) listener.Listener {
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
l.md, err = l.parseMetadata(md)
if err != nil {
func (l *Listener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
@ -60,7 +60,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
mux := http.NewServeMux()
mux.Handle(path, http.HandlerFunc(l.upgrade))
l.srv = &http.Server{
Addr: l.md.addr,
Addr: l.saddr,
TLSConfig: l.md.tlsConfig,
Handler: mux,
ReadHeaderTimeout: l.md.readHeaderTimeout,
@ -69,7 +69,7 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
l.connChan = make(chan net.Conn, l.md.connQueueSize)
l.errChan = make(chan error, 1)
ln, err := net.Listen("tcp", l.md.addr)
ln, err := net.Listen("tcp", l.saddr)
if err != nil {
return
}
@ -110,15 +110,12 @@ func (l *Listener) Addr() net.Addr {
return l.addr
}
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.tlsConfig, err = utils.LoadTLSConfig(md[certFile], md[keyFile], md[caFile])
func (l *Listener) parseMetadata(md md.Metadata) (err error) {
l.md.tlsConfig, err = utils.LoadTLSConfig(
md.GetString(certFile),
md.GetString(keyFile),
md.GetString(caFile),
)
if err != nil {
return
}

View File

@ -7,7 +7,6 @@ import (
)
const (
addr = "addr"
path = "path"
certFile = "certFile"
keyFile = "keyFile"
@ -34,7 +33,6 @@ const (
)
type metadata struct {
addr string
path string
tlsConfig *tls.Config
handshakeTimeout time.Duration