add pkgs from core
This commit is contained in:
@ -13,7 +13,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -27,12 +28,12 @@ func (l *dnsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
writeTimeout = "writeTimeout"
|
||||
)
|
||||
|
||||
l.md.mode = mdata.GetString(md, mode)
|
||||
l.md.readBufferSize = mdata.GetInt(md, readBufferSize)
|
||||
l.md.readTimeout = mdata.GetDuration(md, readTimeout)
|
||||
l.md.writeTimeout = mdata.GetDuration(md, writeTimeout)
|
||||
l.md.mode = mdx.GetString(md, mode)
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
l.md.readTimeout = mdx.GetDuration(md, readTimeout)
|
||||
l.md.writeTimeout = mdx.GetDuration(md, writeTimeout)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/xtaci/tcpraw"
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,21 +30,21 @@ func (l *ftcpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.ttl = mdata.GetDuration(md, ttl)
|
||||
l.md.ttl = mdx.GetDuration(md, ttl)
|
||||
if l.md.ttl <= 0 {
|
||||
l.md.ttl = defaultTTL
|
||||
}
|
||||
l.md.readBufferSize = mdata.GetInt(md, readBufferSize)
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
if l.md.readBufferSize <= 0 {
|
||||
l.md.readBufferSize = defaultReadBufferSize
|
||||
}
|
||||
|
||||
l.md.readQueueSize = mdata.GetInt(md, readQueueSize)
|
||||
l.md.readQueueSize = mdx.GetInt(md, readQueueSize)
|
||||
if l.md.readQueueSize <= 0 {
|
||||
l.md.readQueueSize = defaultReadQueueSize
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -8,8 +8,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
pb "github.com/go-gost/x/internal/util/grpc/proto"
|
||||
"github.com/go-gost/x/registry"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials"
|
||||
)
|
||||
|
@ -2,6 +2,7 @@ package grpc
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -19,11 +20,11 @@ func (l *grpcListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
insecure = "grpcInsecure"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.insecure = mdata.GetBool(md, insecure)
|
||||
l.md.insecure = mdx.GetBool(md, insecure)
|
||||
return
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
"golang.org/x/net/http2"
|
||||
"golang.org/x/net/http2/h2c"
|
||||
)
|
||||
|
@ -2,6 +2,7 @@ package h2
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -19,11 +20,11 @@ func (l *h2Listener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.path = mdata.GetString(md, path)
|
||||
l.md.path = mdx.GetString(md, path)
|
||||
return
|
||||
}
|
||||
|
@ -10,7 +10,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
"github.com/go-gost/x/registry"
|
||||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
@ -111,10 +112,10 @@ func (l *http2Listener) handleFunc(w http.ResponseWriter, r *http.Request) {
|
||||
laddr: l.addr,
|
||||
raddr: raddr,
|
||||
closed: make(chan struct{}),
|
||||
md: md.MapMetadata{
|
||||
md: mdx.NewMetadata(map[string]any{
|
||||
"r": r,
|
||||
"w": w,
|
||||
},
|
||||
}),
|
||||
}
|
||||
select {
|
||||
case l.cqueue <- conn:
|
||||
|
@ -2,6 +2,7 @@ package http2
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -17,7 +18,7 @@ func (l *http2Listener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -7,8 +7,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
pht_util "github.com/go-gost/x/internal/util/pht"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"strings"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,20 +30,20 @@ func (l *http3Listener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.authorizePath = mdata.GetString(md, authorizePath)
|
||||
l.md.authorizePath = mdx.GetString(md, authorizePath)
|
||||
if !strings.HasPrefix(l.md.authorizePath, "/") {
|
||||
l.md.authorizePath = defaultAuthorizePath
|
||||
}
|
||||
l.md.pushPath = mdata.GetString(md, pushPath)
|
||||
l.md.pushPath = mdx.GetString(md, pushPath)
|
||||
if !strings.HasPrefix(l.md.pushPath, "/") {
|
||||
l.md.pushPath = defaultPushPath
|
||||
}
|
||||
l.md.pullPath = mdata.GetString(md, pullPath)
|
||||
l.md.pullPath = mdx.GetString(md, pullPath)
|
||||
if !strings.HasPrefix(l.md.pullPath, "/") {
|
||||
l.md.pullPath = defaultPullPath
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -9,8 +9,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
icmp_pkg "github.com/go-gost/x/internal/util/icmp"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
"golang.org/x/net/icmp"
|
||||
)
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -28,14 +29,14 @@ func (l *icmpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.keepAlive = mdata.GetBool(md, keepAlive)
|
||||
l.md.handshakeTimeout = mdata.GetDuration(md, handshakeTimeout)
|
||||
l.md.maxIdleTimeout = mdata.GetDuration(md, maxIdleTimeout)
|
||||
l.md.keepAlive = mdx.GetBool(md, keepAlive)
|
||||
l.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout)
|
||||
l.md.maxIdleTimeout = mdx.GetDuration(md, maxIdleTimeout)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -9,8 +9,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
kcp_util "github.com/go-gost/x/internal/util/kcp"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/xtaci/kcp-go/v5"
|
||||
"github.com/xtaci/smux"
|
||||
"github.com/xtaci/tcpraw"
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
kcp_util "github.com/go-gost/x/internal/util/kcp"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -22,7 +23,7 @@ func (l *kcpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
config = "config"
|
||||
)
|
||||
|
||||
if m := mdata.GetStringMap(md, config); len(m) > 0 {
|
||||
if m := mdx.GetStringMap(md, config); len(m) > 0 {
|
||||
b, err := json.Marshal(m)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -38,7 +39,7 @@ func (l *kcpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
l.md.config = kcp_util.DefaultConfig
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/xtaci/smux"
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -33,17 +34,17 @@ func (l *mtlsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
muxMaxStreamBuffer = "muxMaxStreamBuffer"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.muxKeepAliveDisabled = mdata.GetBool(md, muxKeepAliveDisabled)
|
||||
l.md.muxKeepAliveInterval = mdata.GetDuration(md, muxKeepAliveInterval)
|
||||
l.md.muxKeepAliveTimeout = mdata.GetDuration(md, muxKeepAliveTimeout)
|
||||
l.md.muxMaxFrameSize = mdata.GetInt(md, muxMaxFrameSize)
|
||||
l.md.muxMaxReceiveBuffer = mdata.GetInt(md, muxMaxReceiveBuffer)
|
||||
l.md.muxMaxStreamBuffer = mdata.GetInt(md, muxMaxStreamBuffer)
|
||||
l.md.muxKeepAliveDisabled = mdx.GetBool(md, muxKeepAliveDisabled)
|
||||
l.md.muxKeepAliveInterval = mdx.GetDuration(md, muxKeepAliveInterval)
|
||||
l.md.muxKeepAliveTimeout = mdx.GetDuration(md, muxKeepAliveTimeout)
|
||||
l.md.muxMaxFrameSize = mdx.GetInt(md, muxMaxFrameSize)
|
||||
l.md.muxMaxReceiveBuffer = mdx.GetInt(md, muxMaxReceiveBuffer)
|
||||
l.md.muxMaxStreamBuffer = mdx.GetInt(md, muxMaxStreamBuffer)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -11,8 +11,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
ws_util "github.com/go-gost/x/internal/util/ws"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/xtaci/smux"
|
||||
)
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -51,30 +52,30 @@ func (l *mwsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
muxMaxStreamBuffer = "muxMaxStreamBuffer"
|
||||
)
|
||||
|
||||
l.md.path = mdata.GetString(md, path)
|
||||
l.md.path = mdx.GetString(md, path)
|
||||
if l.md.path == "" {
|
||||
l.md.path = defaultPath
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.handshakeTimeout = mdata.GetDuration(md, handshakeTimeout)
|
||||
l.md.readHeaderTimeout = mdata.GetDuration(md, readHeaderTimeout)
|
||||
l.md.readBufferSize = mdata.GetInt(md, readBufferSize)
|
||||
l.md.writeBufferSize = mdata.GetInt(md, writeBufferSize)
|
||||
l.md.enableCompression = mdata.GetBool(md, enableCompression)
|
||||
l.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout)
|
||||
l.md.readHeaderTimeout = mdx.GetDuration(md, readHeaderTimeout)
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
l.md.writeBufferSize = mdx.GetInt(md, writeBufferSize)
|
||||
l.md.enableCompression = mdx.GetBool(md, enableCompression)
|
||||
|
||||
l.md.muxKeepAliveDisabled = mdata.GetBool(md, muxKeepAliveDisabled)
|
||||
l.md.muxKeepAliveInterval = mdata.GetDuration(md, muxKeepAliveInterval)
|
||||
l.md.muxKeepAliveTimeout = mdata.GetDuration(md, muxKeepAliveTimeout)
|
||||
l.md.muxMaxFrameSize = mdata.GetInt(md, muxMaxFrameSize)
|
||||
l.md.muxMaxReceiveBuffer = mdata.GetInt(md, muxMaxReceiveBuffer)
|
||||
l.md.muxMaxStreamBuffer = mdata.GetInt(md, muxMaxStreamBuffer)
|
||||
l.md.muxKeepAliveDisabled = mdx.GetBool(md, muxKeepAliveDisabled)
|
||||
l.md.muxKeepAliveInterval = mdx.GetDuration(md, muxKeepAliveInterval)
|
||||
l.md.muxKeepAliveTimeout = mdx.GetDuration(md, muxKeepAliveTimeout)
|
||||
l.md.muxMaxFrameSize = mdx.GetInt(md, muxMaxFrameSize)
|
||||
l.md.muxMaxReceiveBuffer = mdx.GetInt(md, muxMaxReceiveBuffer)
|
||||
l.md.muxMaxStreamBuffer = mdx.GetInt(md, muxMaxStreamBuffer)
|
||||
|
||||
if mm := mdata.GetStringMapString(md, header); len(mm) > 0 {
|
||||
if mm := mdx.GetStringMapString(md, header); len(mm) > 0 {
|
||||
hd := http.Header{}
|
||||
for k, v := range mm {
|
||||
hd.Add(k, v)
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
@ -15,7 +16,7 @@ func (l *obfsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
header = "header"
|
||||
)
|
||||
|
||||
if mm := mdata.GetStringMapString(md, header); len(mm) > 0 {
|
||||
if mm := mdx.GetStringMapString(md, header); len(mm) > 0 {
|
||||
hd := http.Header{}
|
||||
for k, v := range mm {
|
||||
hd.Add(k, v)
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -9,8 +9,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
pht_util "github.com/go-gost/x/internal/util/pht"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"strings"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,20 +30,20 @@ func (l *phtListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.authorizePath = mdata.GetString(md, authorizePath)
|
||||
l.md.authorizePath = mdx.GetString(md, authorizePath)
|
||||
if !strings.HasPrefix(l.md.authorizePath, "/") {
|
||||
l.md.authorizePath = defaultAuthorizePath
|
||||
}
|
||||
l.md.pushPath = mdata.GetString(md, pushPath)
|
||||
l.md.pushPath = mdx.GetString(md, pushPath)
|
||||
if !strings.HasPrefix(l.md.pushPath, "/") {
|
||||
l.md.pushPath = defaultPushPath
|
||||
}
|
||||
l.md.pullPath = mdata.GetString(md, pullPath)
|
||||
l.md.pullPath = mdx.GetString(md, pullPath)
|
||||
if !strings.HasPrefix(l.md.pullPath, "/") {
|
||||
l.md.pullPath = defaultPullPath
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -8,8 +8,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
quic_util "github.com/go-gost/x/internal/util/quic"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,18 +30,18 @@ func (l *quicListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
cipherKey = "cipherKey"
|
||||
)
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
if key := mdata.GetString(md, cipherKey); key != "" {
|
||||
if key := mdx.GetString(md, cipherKey); key != "" {
|
||||
l.md.cipherKey = []byte(key)
|
||||
}
|
||||
|
||||
l.md.keepAlive = mdata.GetBool(md, keepAlive)
|
||||
l.md.handshakeTimeout = mdata.GetDuration(md, handshakeTimeout)
|
||||
l.md.maxIdleTimeout = mdata.GetDuration(md, maxIdleTimeout)
|
||||
l.md.keepAlive = mdx.GetBool(md, keepAlive)
|
||||
l.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout)
|
||||
l.md.maxIdleTimeout = mdx.GetDuration(md, maxIdleTimeout)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -2,6 +2,7 @@ package tcp
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
@ -12,6 +13,6 @@ func (l *redirectListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
const (
|
||||
tproxy = "tproxy"
|
||||
)
|
||||
l.md.tproxy = mdata.GetBool(md, tproxy)
|
||||
l.md.tproxy = mdx.GetBool(md, tproxy)
|
||||
return
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -22,12 +23,12 @@ func (l *redirectListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
readBufferSize = "readBufferSize"
|
||||
)
|
||||
|
||||
l.md.ttl = mdata.GetDuration(md, ttl)
|
||||
l.md.ttl = mdx.GetDuration(md, ttl)
|
||||
if l.md.ttl <= 0 {
|
||||
l.md.ttl = defaultTTL
|
||||
}
|
||||
|
||||
l.md.readBufferSize = mdata.GetInt(md, readBufferSize)
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
if l.md.readBufferSize <= 0 {
|
||||
l.md.readBufferSize = defaultReadBufferSize
|
||||
}
|
||||
|
102
listener/rtcp/listener.go
Normal file
102
listener/rtcp/listener.go
Normal file
@ -0,0 +1,102 @@
|
||||
package rtcp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/connector"
|
||||
"github.com/go-gost/core/listener"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.ListenerRegistry().Register("rtcp", NewListener)
|
||||
}
|
||||
|
||||
type rtcpListener struct {
|
||||
laddr net.Addr
|
||||
ln net.Listener
|
||||
md metadata
|
||||
router *chain.Router
|
||||
logger logger.Logger
|
||||
closed chan struct{}
|
||||
options listener.Options
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
return &rtcpListener{
|
||||
closed: make(chan struct{}),
|
||||
logger: options.Logger,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *rtcpListener) Init(md md.Metadata) (err error) {
|
||||
if err = l.parseMetadata(md); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
laddr, err := net.ResolveTCPAddr("tcp", l.options.Addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
l.laddr = laddr
|
||||
l.router = (&chain.Router{}).
|
||||
WithChain(l.options.Chain).
|
||||
WithLogger(l.logger)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *rtcpListener) Accept() (conn net.Conn, err error) {
|
||||
select {
|
||||
case <-l.closed:
|
||||
return nil, net.ErrClosed
|
||||
default:
|
||||
}
|
||||
|
||||
if l.ln == nil {
|
||||
l.ln, err = l.router.Bind(
|
||||
context.Background(), "tcp", l.laddr.String(),
|
||||
connector.MuxBindOption(true),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, listener.NewAcceptError(err)
|
||||
}
|
||||
l.ln = metrics.WrapListener(l.options.Service, l.ln)
|
||||
}
|
||||
conn, err = l.ln.Accept()
|
||||
if err != nil {
|
||||
l.ln.Close()
|
||||
l.ln = nil
|
||||
return nil, listener.NewAcceptError(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (l *rtcpListener) Addr() net.Addr {
|
||||
return l.laddr
|
||||
}
|
||||
|
||||
func (l *rtcpListener) Close() error {
|
||||
select {
|
||||
case <-l.closed:
|
||||
default:
|
||||
close(l.closed)
|
||||
if l.ln != nil {
|
||||
l.ln.Close()
|
||||
l.ln = nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
11
listener/rtcp/metadata.go
Normal file
11
listener/rtcp/metadata.go
Normal file
@ -0,0 +1,11 @@
|
||||
package rtcp
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
)
|
||||
|
||||
type metadata struct{}
|
||||
|
||||
func (l *rtcpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
return
|
||||
}
|
109
listener/rudp/listener.go
Normal file
109
listener/rudp/listener.go
Normal file
@ -0,0 +1,109 @@
|
||||
package rudp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/connector"
|
||||
"github.com/go-gost/core/listener"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.ListenerRegistry().Register("rudp", NewListener)
|
||||
}
|
||||
|
||||
type rudpListener struct {
|
||||
laddr net.Addr
|
||||
ln net.Listener
|
||||
router *chain.Router
|
||||
closed chan struct{}
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
options listener.Options
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
return &rudpListener{
|
||||
closed: make(chan struct{}),
|
||||
logger: options.Logger,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *rudpListener) Init(md md.Metadata) (err error) {
|
||||
if err = l.parseMetadata(md); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
laddr, err := net.ResolveUDPAddr("udp", l.options.Addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
l.laddr = laddr
|
||||
l.router = (&chain.Router{}).
|
||||
WithChain(l.options.Chain).
|
||||
WithLogger(l.logger)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *rudpListener) Accept() (conn net.Conn, err error) {
|
||||
select {
|
||||
case <-l.closed:
|
||||
return nil, net.ErrClosed
|
||||
default:
|
||||
}
|
||||
|
||||
if l.ln == nil {
|
||||
l.ln, err = l.router.Bind(
|
||||
context.Background(), "udp", l.laddr.String(),
|
||||
connector.BacklogBindOption(l.md.backlog),
|
||||
connector.UDPConnTTLBindOption(l.md.ttl),
|
||||
connector.UDPDataBufferSizeBindOption(l.md.readBufferSize),
|
||||
connector.UDPDataQueueSizeBindOption(l.md.readQueueSize),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, listener.NewAcceptError(err)
|
||||
}
|
||||
}
|
||||
conn, err = l.ln.Accept()
|
||||
if err != nil {
|
||||
l.ln.Close()
|
||||
l.ln = nil
|
||||
return nil, listener.NewAcceptError(err)
|
||||
}
|
||||
|
||||
if pc, ok := conn.(net.PacketConn); ok {
|
||||
conn = metrics.WrapUDPConn(l.options.Service, pc)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *rudpListener) Addr() net.Addr {
|
||||
return l.laddr
|
||||
}
|
||||
|
||||
func (l *rudpListener) Close() error {
|
||||
select {
|
||||
case <-l.closed:
|
||||
default:
|
||||
close(l.closed)
|
||||
if l.ln != nil {
|
||||
l.ln.Close()
|
||||
l.ln = nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
52
listener/rudp/metadata.go
Normal file
52
listener/rudp/metadata.go
Normal file
@ -0,0 +1,52 @@
|
||||
package rudp
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultTTL = 5 * time.Second
|
||||
defaultReadBufferSize = 1500
|
||||
defaultReadQueueSize = 128
|
||||
defaultBacklog = 128
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
ttl time.Duration
|
||||
readBufferSize int
|
||||
readQueueSize int
|
||||
backlog int
|
||||
}
|
||||
|
||||
func (l *rudpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
const (
|
||||
ttl = "ttl"
|
||||
readBufferSize = "readBufferSize"
|
||||
readQueueSize = "readQueueSize"
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
l.md.ttl = mdx.GetDuration(md, ttl)
|
||||
if l.md.ttl <= 0 {
|
||||
l.md.ttl = defaultTTL
|
||||
}
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
if l.md.readBufferSize <= 0 {
|
||||
l.md.readBufferSize = defaultReadBufferSize
|
||||
}
|
||||
|
||||
l.md.readQueueSize = mdx.GetInt(md, readQueueSize)
|
||||
if l.md.readQueueSize <= 0 {
|
||||
l.md.readQueueSize = defaultReadQueueSize
|
||||
}
|
||||
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
return
|
||||
}
|
@ -10,8 +10,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
ssh_util "github.com/go-gost/x/internal/util/ssh"
|
||||
"github.com/go-gost/x/registry"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
|
@ -3,9 +3,9 @@ package ssh
|
||||
import (
|
||||
"io/ioutil"
|
||||
|
||||
tls_util "github.com/go-gost/core/common/util/tls"
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
ssh_util "github.com/go-gost/x/internal/util/ssh"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
@ -27,13 +27,13 @@ func (l *sshListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
if key := mdata.GetString(md, privateKeyFile); key != "" {
|
||||
if key := mdx.GetString(md, privateKeyFile); key != "" {
|
||||
data, err := ioutil.ReadFile(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pp := mdata.GetString(md, passphrase)
|
||||
pp := mdx.GetString(md, passphrase)
|
||||
if pp == "" {
|
||||
l.md.signer, err = ssh.ParsePrivateKey(data)
|
||||
} else {
|
||||
@ -44,14 +44,14 @@ func (l *sshListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
}
|
||||
}
|
||||
if l.md.signer == nil {
|
||||
signer, err := ssh.NewSignerFromKey(tls_util.DefaultConfig.Clone().Certificates[0].PrivateKey)
|
||||
signer, err := ssh.NewSignerFromKey(l.options.TLSConfig.Certificates[0].PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
l.md.signer = signer
|
||||
}
|
||||
|
||||
if name := mdata.GetString(md, authorizedKeys); name != "" {
|
||||
if name := mdx.GetString(md, authorizedKeys); name != "" {
|
||||
m, err := ssh_util.ParseAuthorizedKeysFile(name)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -59,7 +59,7 @@ func (l *sshListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
l.md.authorizedKeys = m
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -12,9 +12,9 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
ssh_util "github.com/go-gost/x/internal/util/ssh"
|
||||
sshd_util "github.com/go-gost/x/internal/util/sshd"
|
||||
"github.com/go-gost/x/registry"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
|
@ -3,9 +3,9 @@ package ssh
|
||||
import (
|
||||
"io/ioutil"
|
||||
|
||||
tls_util "github.com/go-gost/core/common/util/tls"
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
ssh_util "github.com/go-gost/x/internal/util/ssh"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
@ -27,13 +27,13 @@ func (l *sshdListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
backlog = "backlog"
|
||||
)
|
||||
|
||||
if key := mdata.GetString(md, privateKeyFile); key != "" {
|
||||
if key := mdx.GetString(md, privateKeyFile); key != "" {
|
||||
data, err := ioutil.ReadFile(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pp := mdata.GetString(md, passphrase)
|
||||
pp := mdx.GetString(md, passphrase)
|
||||
if pp == "" {
|
||||
l.md.signer, err = ssh.ParsePrivateKey(data)
|
||||
} else {
|
||||
@ -44,14 +44,14 @@ func (l *sshdListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
}
|
||||
}
|
||||
if l.md.signer == nil {
|
||||
signer, err := ssh.NewSignerFromKey(tls_util.DefaultConfig.Clone().Certificates[0].PrivateKey)
|
||||
signer, err := ssh.NewSignerFromKey(l.options.TLSConfig.Certificates[0].PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
l.md.signer = signer
|
||||
}
|
||||
|
||||
if name := mdata.GetString(md, authorizedKeys); name != "" {
|
||||
if name := mdx.GetString(md, authorizedKeys); name != "" {
|
||||
m, err := ssh_util.ParseAuthorizedKeysFile(name)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -59,7 +59,7 @@ func (l *sshdListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
l.md.authorizedKeys = m
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
@ -7,7 +7,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -73,9 +74,9 @@ func (l *tapListener) Init(md mdata.Metadata) (err error) {
|
||||
raddr: &net.IPAddr{IP: ip},
|
||||
}
|
||||
c = metrics.WrapConn(l.options.Service, c)
|
||||
c = withMetadata(mdata.MapMetadata{
|
||||
c = withMetadata(mdx.NewMetadata(map[string]any{
|
||||
"config": l.md.config,
|
||||
}, c)
|
||||
}), c)
|
||||
|
||||
l.cqueue <- c
|
||||
|
||||
|
@ -3,6 +3,7 @@ package tap
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
tap_util "github.com/go-gost/x/internal/util/tap"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -23,16 +24,16 @@ func (l *tapListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
)
|
||||
|
||||
config := &tap_util.Config{
|
||||
Name: mdata.GetString(md, name),
|
||||
Net: mdata.GetString(md, netKey),
|
||||
MTU: mdata.GetInt(md, mtu),
|
||||
Gateway: mdata.GetString(md, gateway),
|
||||
Name: mdx.GetString(md, name),
|
||||
Net: mdx.GetString(md, netKey),
|
||||
MTU: mdx.GetInt(md, mtu),
|
||||
Gateway: mdx.GetString(md, gateway),
|
||||
}
|
||||
if config.MTU <= 0 {
|
||||
config.MTU = DefaultMTU
|
||||
}
|
||||
|
||||
for _, s := range mdata.GetStrings(md, routes) {
|
||||
for _, s := range mdx.GetStrings(md, routes) {
|
||||
if s != "" {
|
||||
config.Routes = append(config.Routes, s)
|
||||
}
|
||||
|
60
listener/tcp/listener.go
Normal file
60
listener/tcp/listener.go
Normal file
@ -0,0 +1,60 @@
|
||||
package tcp
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/go-gost/core/listener"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.ListenerRegistry().Register("tcp", NewListener)
|
||||
}
|
||||
|
||||
type tcpListener struct {
|
||||
ln net.Listener
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
options listener.Options
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
return &tcpListener{
|
||||
logger: options.Logger,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *tcpListener) Init(md md.Metadata) (err error) {
|
||||
if err = l.parseMetadata(md); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
ln, err := net.Listen("tcp", l.options.Addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
l.ln = metrics.WrapListener(l.options.Service, ln)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *tcpListener) Accept() (conn net.Conn, err error) {
|
||||
return l.ln.Accept()
|
||||
}
|
||||
|
||||
func (l *tcpListener) Addr() net.Addr {
|
||||
return l.ln.Addr()
|
||||
}
|
||||
|
||||
func (l *tcpListener) Close() error {
|
||||
return l.ln.Close()
|
||||
}
|
12
listener/tcp/metadata.go
Normal file
12
listener/tcp/metadata.go
Normal file
@ -0,0 +1,12 @@
|
||||
package tcp
|
||||
|
||||
import (
|
||||
md "github.com/go-gost/core/metadata"
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
}
|
||||
|
||||
func (l *tcpListener) parseMetadata(md md.Metadata) (err error) {
|
||||
return
|
||||
}
|
64
listener/tls/listener.go
Normal file
64
listener/tls/listener.go
Normal file
@ -0,0 +1,64 @@
|
||||
package tls
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net"
|
||||
|
||||
admission "github.com/go-gost/core/admission/wrapper"
|
||||
"github.com/go-gost/core/listener"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.ListenerRegistry().Register("tls", NewListener)
|
||||
}
|
||||
|
||||
type tlsListener struct {
|
||||
ln net.Listener
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
options listener.Options
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
return &tlsListener{
|
||||
logger: options.Logger,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *tlsListener) Init(md md.Metadata) (err error) {
|
||||
if err = l.parseMetadata(md); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
ln, err := net.Listen("tcp", l.options.Addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ln = metrics.WrapListener(l.options.Service, ln)
|
||||
ln = admission.WrapListener(l.options.Admission, ln)
|
||||
|
||||
l.ln = tls.NewListener(ln, l.options.TLSConfig)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *tlsListener) Accept() (conn net.Conn, err error) {
|
||||
return l.ln.Accept()
|
||||
}
|
||||
|
||||
func (l *tlsListener) Addr() net.Addr {
|
||||
return l.ln.Addr()
|
||||
}
|
||||
|
||||
func (l *tlsListener) Close() error {
|
||||
return l.ln.Close()
|
||||
}
|
12
listener/tls/metadata.go
Normal file
12
listener/tls/metadata.go
Normal file
@ -0,0 +1,12 @@
|
||||
package tls
|
||||
|
||||
import (
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
}
|
||||
|
||||
func (l *tlsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
return
|
||||
}
|
@ -7,7 +7,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -71,9 +72,9 @@ func (l *tunListener) Init(md mdata.Metadata) (err error) {
|
||||
raddr: &net.IPAddr{IP: ip},
|
||||
}
|
||||
c = metrics.WrapConn(l.options.Service, c)
|
||||
c = withMetadata(mdata.MapMetadata{
|
||||
c = withMetadata(mdx.NewMetadata(map[string]any{
|
||||
"config": l.md.config,
|
||||
}, c)
|
||||
}), c)
|
||||
|
||||
l.cqueue <- c
|
||||
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
tun_util "github.com/go-gost/x/internal/util/tun"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -27,11 +28,11 @@ func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
)
|
||||
|
||||
config := &tun_util.Config{
|
||||
Name: mdata.GetString(md, name),
|
||||
Net: mdata.GetString(md, netKey),
|
||||
Peer: mdata.GetString(md, peer),
|
||||
MTU: mdata.GetInt(md, mtu),
|
||||
Gateway: mdata.GetString(md, gateway),
|
||||
Name: mdx.GetString(md, name),
|
||||
Net: mdx.GetString(md, netKey),
|
||||
Peer: mdx.GetString(md, peer),
|
||||
MTU: mdx.GetInt(md, mtu),
|
||||
Gateway: mdx.GetString(md, gateway),
|
||||
}
|
||||
if config.MTU <= 0 {
|
||||
config.MTU = DefaultMTU
|
||||
@ -39,7 +40,7 @@ func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
|
||||
gw := net.ParseIP(config.Gateway)
|
||||
|
||||
for _, s := range mdata.GetStrings(md, routes) {
|
||||
for _, s := range mdx.GetStrings(md, routes) {
|
||||
ss := strings.SplitN(s, " ", 2)
|
||||
if len(ss) == 2 {
|
||||
var route tun_util.Route
|
||||
|
74
listener/udp/listener.go
Normal file
74
listener/udp/listener.go
Normal file
@ -0,0 +1,74 @@
|
||||
package udp
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/go-gost/core/common/net/udp"
|
||||
"github.com/go-gost/core/listener"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/x/registry"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.ListenerRegistry().Register("udp", NewListener)
|
||||
}
|
||||
|
||||
type udpListener struct {
|
||||
ln net.Listener
|
||||
logger logger.Logger
|
||||
md metadata
|
||||
options listener.Options
|
||||
}
|
||||
|
||||
func NewListener(opts ...listener.Option) listener.Listener {
|
||||
options := listener.Options{}
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
return &udpListener{
|
||||
logger: options.Logger,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *udpListener) Init(md md.Metadata) (err error) {
|
||||
if err = l.parseMetadata(md); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
laddr, err := net.ResolveUDPAddr("udp", l.options.Addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var conn net.PacketConn
|
||||
conn, err = net.ListenUDP("udp", laddr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
conn = metrics.WrapPacketConn(l.options.Service, conn)
|
||||
|
||||
l.ln = udp.NewListener(conn, &udp.ListenConfig{
|
||||
Backlog: l.md.backlog,
|
||||
ReadQueueSize: l.md.readQueueSize,
|
||||
ReadBufferSize: l.md.readBufferSize,
|
||||
KeepAlive: l.md.keepalive,
|
||||
TTL: l.md.ttl,
|
||||
Logger: l.logger,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (l *udpListener) Accept() (conn net.Conn, err error) {
|
||||
return l.ln.Accept()
|
||||
}
|
||||
|
||||
func (l *udpListener) Addr() net.Addr {
|
||||
return l.ln.Addr()
|
||||
}
|
||||
|
||||
func (l *udpListener) Close() error {
|
||||
return l.ln.Close()
|
||||
}
|
55
listener/udp/metadata.go
Normal file
55
listener/udp/metadata.go
Normal file
@ -0,0 +1,55 @@
|
||||
package udp
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultTTL = 5 * time.Second
|
||||
defaultReadBufferSize = 1500
|
||||
defaultReadQueueSize = 128
|
||||
defaultBacklog = 128
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
readBufferSize int
|
||||
readQueueSize int
|
||||
backlog int
|
||||
keepalive bool
|
||||
ttl time.Duration
|
||||
}
|
||||
|
||||
func (l *udpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
const (
|
||||
readBufferSize = "readBufferSize"
|
||||
readQueueSize = "readQueueSize"
|
||||
backlog = "backlog"
|
||||
keepAlive = "keepAlive"
|
||||
ttl = "ttl"
|
||||
)
|
||||
|
||||
l.md.ttl = mdx.GetDuration(md, ttl)
|
||||
if l.md.ttl <= 0 {
|
||||
l.md.ttl = defaultTTL
|
||||
}
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
if l.md.readBufferSize <= 0 {
|
||||
l.md.readBufferSize = defaultReadBufferSize
|
||||
}
|
||||
|
||||
l.md.readQueueSize = mdx.GetInt(md, readQueueSize)
|
||||
if l.md.readQueueSize <= 0 {
|
||||
l.md.readQueueSize = defaultReadQueueSize
|
||||
}
|
||||
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
l.md.keepalive = mdx.GetBool(md, keepAlive)
|
||||
|
||||
return
|
||||
}
|
@ -11,8 +11,8 @@ import (
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
metrics "github.com/go-gost/core/metrics/wrapper"
|
||||
"github.com/go-gost/core/registry"
|
||||
ws_util "github.com/go-gost/x/internal/util/ws"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdx "github.com/go-gost/x/metadata"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -39,23 +40,23 @@ func (l *wsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
header = "header"
|
||||
)
|
||||
|
||||
l.md.path = mdata.GetString(md, path)
|
||||
l.md.path = mdx.GetString(md, path)
|
||||
if l.md.path == "" {
|
||||
l.md.path = defaultPath
|
||||
}
|
||||
|
||||
l.md.backlog = mdata.GetInt(md, backlog)
|
||||
l.md.backlog = mdx.GetInt(md, backlog)
|
||||
if l.md.backlog <= 0 {
|
||||
l.md.backlog = defaultBacklog
|
||||
}
|
||||
|
||||
l.md.handshakeTimeout = mdata.GetDuration(md, handshakeTimeout)
|
||||
l.md.readHeaderTimeout = mdata.GetDuration(md, readHeaderTimeout)
|
||||
l.md.readBufferSize = mdata.GetInt(md, readBufferSize)
|
||||
l.md.writeBufferSize = mdata.GetInt(md, writeBufferSize)
|
||||
l.md.enableCompression = mdata.GetBool(md, enableCompression)
|
||||
l.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout)
|
||||
l.md.readHeaderTimeout = mdx.GetDuration(md, readHeaderTimeout)
|
||||
l.md.readBufferSize = mdx.GetInt(md, readBufferSize)
|
||||
l.md.writeBufferSize = mdx.GetInt(md, writeBufferSize)
|
||||
l.md.enableCompression = mdx.GetBool(md, enableCompression)
|
||||
|
||||
if mm := mdata.GetStringMapString(md, header); len(mm) > 0 {
|
||||
if mm := mdx.GetStringMapString(md, header); len(mm) > 0 {
|
||||
hd := http.Header{}
|
||||
for k, v := range mm {
|
||||
hd.Add(k, v)
|
||||
|
Reference in New Issue
Block a user