@@ -5,15 +5,18 @@ package kcp
55import (
66 "context"
77 "crypto/cipher"
8- "crypto/tls"
8+ gotls "crypto/tls"
99 "sync"
1010
11+ goxtls "github.com/xtls/go"
12+
1113 "v2ray.com/core/common"
1214 "v2ray.com/core/common/buf"
1315 "v2ray.com/core/common/net"
1416 "v2ray.com/core/transport/internet"
15- v2tls "v2ray.com/core/transport/internet/tls"
17+ "v2ray.com/core/transport/internet/tls"
1618 "v2ray.com/core/transport/internet/udp"
19+ "v2ray.com/core/transport/internet/xtls"
1720)
1821
1922type ConnectionID struct {
@@ -25,14 +28,15 @@ type ConnectionID struct {
2528// Listener defines a server listening for connections
2629type Listener struct {
2730 sync.Mutex
28- sessions map [ConnectionID ]* Connection
29- hub * udp.Hub
30- tlsConfig * tls.Config
31- config * Config
32- reader PacketReader
33- header internet.PacketHeader
34- security cipher.AEAD
35- addConn internet.ConnHandler
31+ sessions map [ConnectionID ]* Connection
32+ hub * udp.Hub
33+ tlsConfig * gotls.Config
34+ xtlsConfig * goxtls.Config
35+ config * Config
36+ reader PacketReader
37+ header internet.PacketHeader
38+ security cipher.AEAD
39+ addConn internet.ConnHandler
3640}
3741
3842func NewListener (ctx context.Context , address net.Address , port net.Port , streamSettings * internet.MemoryStreamConfig , addConn internet.ConnHandler ) (* Listener , error ) {
@@ -57,9 +61,12 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, stream
5761 addConn : addConn ,
5862 }
5963
60- if config := v2tls .ConfigFromStreamSettings (streamSettings ); config != nil {
64+ if config := tls .ConfigFromStreamSettings (streamSettings ); config != nil {
6165 l .tlsConfig = config .GetTLSConfig ()
6266 }
67+ if config := xtls .ConfigFromStreamSettings (streamSettings ); config != nil {
68+ l .xtlsConfig = config .GetXTLSConfig ()
69+ }
6370
6471 hub , err := udp .ListenUDP (ctx , address , port , streamSettings , udp .HubCapacity (1024 ))
6572 if err != nil {
@@ -131,8 +138,9 @@ func (l *Listener) OnReceive(payload *buf.Buffer, src net.Destination) {
131138 }, writer , l .config )
132139 var netConn internet.Connection = conn
133140 if l .tlsConfig != nil {
134- tlsConn := tls .Server (conn , l .tlsConfig )
135- netConn = tlsConn
141+ netConn = gotls .Server (conn , l .tlsConfig )
142+ } else if l .xtlsConfig != nil {
143+ netConn = goxtls .Server (conn , l .xtlsConfig )
136144 }
137145
138146 l .addConn (netConn )
0 commit comments