|
|
@@ -11,6 +11,7 @@ import (
|
|
|
"strings"
|
|
|
|
|
|
"github.com/pires/go-proxyproto"
|
|
|
+ goxtls "github.com/xtls/go"
|
|
|
"golang.org/x/sys/unix"
|
|
|
|
|
|
"v2ray.com/core/common"
|
|
|
@@ -18,15 +19,17 @@ import (
|
|
|
"v2ray.com/core/common/session"
|
|
|
"v2ray.com/core/transport/internet"
|
|
|
"v2ray.com/core/transport/internet/tls"
|
|
|
+ "v2ray.com/core/transport/internet/xtls"
|
|
|
)
|
|
|
|
|
|
type Listener struct {
|
|
|
- addr *net.UnixAddr
|
|
|
- ln net.Listener
|
|
|
- tlsConfig *gotls.Config
|
|
|
- config *Config
|
|
|
- addConn internet.ConnHandler
|
|
|
- locker *fileLocker
|
|
|
+ addr *net.UnixAddr
|
|
|
+ ln net.Listener
|
|
|
+ tlsConfig *gotls.Config
|
|
|
+ xtlsConfig *goxtls.Config
|
|
|
+ config *Config
|
|
|
+ addConn internet.ConnHandler
|
|
|
+ locker *fileLocker
|
|
|
}
|
|
|
|
|
|
func Listen(ctx context.Context, address net.Address, port net.Port, streamSettings *internet.MemoryStreamConfig, handler internet.ConnHandler) (internet.Listener, error) {
|
|
|
@@ -73,6 +76,9 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti
|
|
|
if config := tls.ConfigFromStreamSettings(streamSettings); config != nil {
|
|
|
ln.tlsConfig = config.GetTLSConfig()
|
|
|
}
|
|
|
+ if config := xtls.ConfigFromStreamSettings(streamSettings); config != nil {
|
|
|
+ ln.xtlsConfig = config.GetXTLSConfig()
|
|
|
+ }
|
|
|
|
|
|
go ln.run()
|
|
|
|
|
|
@@ -103,6 +109,8 @@ func (ln *Listener) run() {
|
|
|
|
|
|
if ln.tlsConfig != nil {
|
|
|
conn = tls.Server(conn, ln.tlsConfig)
|
|
|
+ } else if ln.xtlsConfig != nil {
|
|
|
+ conn = xtls.Server(conn, ln.xtlsConfig)
|
|
|
}
|
|
|
|
|
|
ln.addConn(internet.Connection(conn))
|