fix dtls connection
This commit is contained in:
@ -12,6 +12,7 @@ import (
|
||||
admission "github.com/go-gost/x/admission/wrapper"
|
||||
xnet "github.com/go-gost/x/internal/net"
|
||||
"github.com/go-gost/x/internal/net/proxyproto"
|
||||
xdtls "github.com/go-gost/x/internal/util/dtls"
|
||||
climiter "github.com/go-gost/x/limiter/conn/wrapper"
|
||||
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
|
||||
metrics "github.com/go-gost/x/metrics/wrapper"
|
||||
@ -88,7 +89,12 @@ func (l *dtlsListener) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
func (l *dtlsListener) Accept() (conn net.Conn, err error) {
|
||||
return l.ln.Accept()
|
||||
c, err := l.ln.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
conn = xdtls.Conn(c, l.md.bufferSize)
|
||||
return
|
||||
}
|
||||
|
||||
func (l *dtlsListener) Addr() net.Addr {
|
||||
|
@ -7,19 +7,24 @@ import (
|
||||
mdutil "github.com/go-gost/core/metadata/util"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultBufferSize = 1200
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
mtu int
|
||||
bufferSize int
|
||||
flightInterval time.Duration
|
||||
}
|
||||
|
||||
func (l *dtlsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
const (
|
||||
mtu = "mtu"
|
||||
flightInterval = "flightInterval"
|
||||
)
|
||||
l.md.mtu = mdutil.GetInt(md, "dtls.mtu", "mtu")
|
||||
l.md.bufferSize = mdutil.GetInt(md, "dtls.bufferSize", "bufferSize")
|
||||
if l.md.bufferSize <= 0 {
|
||||
l.md.bufferSize = defaultBufferSize
|
||||
}
|
||||
|
||||
l.md.mtu = mdutil.GetInt(md, mtu)
|
||||
l.md.flightInterval = mdutil.GetDuration(md, flightInterval)
|
||||
l.md.flightInterval = mdutil.GetDuration(md, "dtls.flightInterval", "flightInterval")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -10,11 +10,13 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultMTU = 1350
|
||||
defaultMTU = 1350
|
||||
defaultReadBufferSize = 4096
|
||||
)
|
||||
|
||||
type metadata struct {
|
||||
config *tun_util.Config
|
||||
config *tun_util.Config
|
||||
readBufferSize int
|
||||
}
|
||||
|
||||
func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
@ -28,13 +30,18 @@ func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
gateway = "gw"
|
||||
)
|
||||
|
||||
l.md.readBufferSize = mdutil.GetInt(md, "tun.rbuf", "rbuf", "readBufferSize")
|
||||
if l.md.readBufferSize <= 0 {
|
||||
l.md.readBufferSize = defaultReadBufferSize
|
||||
}
|
||||
|
||||
config := &tun_util.Config{
|
||||
Name: mdutil.GetString(md, name),
|
||||
Peer: mdutil.GetString(md, peer),
|
||||
MTU: mdutil.GetInt(md, mtu),
|
||||
}
|
||||
if config.MTU <= 0 {
|
||||
config.MTU = DefaultMTU
|
||||
config.MTU = defaultMTU
|
||||
}
|
||||
if gw := mdutil.GetString(md, gateway); gw != "" {
|
||||
config.Gateway = net.ParseIP(gw)
|
||||
|
@ -12,11 +12,16 @@ const (
|
||||
)
|
||||
|
||||
type tunDevice struct {
|
||||
dev tun.Device
|
||||
dev tun.Device
|
||||
readBufferSize int
|
||||
}
|
||||
|
||||
func (d *tunDevice) Read(p []byte) (n int, err error) {
|
||||
b := bufpool.Get(tunOffsetBytes + 65535)
|
||||
rbuf := d.readBufferSize
|
||||
if rbuf <= tunOffsetBytes {
|
||||
rbuf = defaultReadBufferSize
|
||||
}
|
||||
b := bufpool.Get(rbuf)
|
||||
defer bufpool.Put(b)
|
||||
|
||||
n, err = d.dev.Read(*b, tunOffsetBytes)
|
||||
@ -51,7 +56,8 @@ func (l *tunListener) createTunDevice() (dev io.ReadWriteCloser, name string, er
|
||||
}
|
||||
|
||||
dev = &tunDevice{
|
||||
dev: ifce,
|
||||
dev: ifce,
|
||||
readBufferSize: l.md.readBufferSize,
|
||||
}
|
||||
name, err = ifce.Name()
|
||||
|
||||
|
Reference in New Issue
Block a user