@@ -16,7 +16,16 @@ import (
1616 "github.com/xtls/xray-core/common/platform/filesystem"
1717 "github.com/xtls/xray-core/common/serial"
1818 "github.com/xtls/xray-core/transport/internet"
19+ "github.com/xtls/xray-core/transport/internet/finalmask/header/dns"
20+ "github.com/xtls/xray-core/transport/internet/finalmask/header/dtls"
21+ "github.com/xtls/xray-core/transport/internet/finalmask/header/srtp"
22+ "github.com/xtls/xray-core/transport/internet/finalmask/header/utp"
23+ "github.com/xtls/xray-core/transport/internet/finalmask/header/wechat"
24+ "github.com/xtls/xray-core/transport/internet/finalmask/header/wireguard"
25+ "github.com/xtls/xray-core/transport/internet/finalmask/mkcp/aes128gcm"
26+ "github.com/xtls/xray-core/transport/internet/finalmask/mkcp/original"
1927 "github.com/xtls/xray-core/transport/internet/finalmask/salamander"
28+ "github.com/xtls/xray-core/transport/internet/finalmask/xdns"
2029 "github.com/xtls/xray-core/transport/internet/httpupgrade"
2130 "github.com/xtls/xray-core/transport/internet/hysteria"
2231 "github.com/xtls/xray-core/transport/internet/kcp"
@@ -29,16 +38,6 @@ import (
2938)
3039
3140var (
32- kcpHeaderLoader = NewJSONConfigLoader (ConfigCreatorCache {
33- "none" : func () interface {} { return new (NoOpAuthenticator ) },
34- "srtp" : func () interface {} { return new (SRTPAuthenticator ) },
35- "utp" : func () interface {} { return new (UTPAuthenticator ) },
36- "wechat-video" : func () interface {} { return new (WechatVideoAuthenticator ) },
37- "dtls" : func () interface {} { return new (DTLSAuthenticator ) },
38- "wireguard" : func () interface {} { return new (WireguardAuthenticator ) },
39- "dns" : func () interface {} { return new (DNSAuthenticator ) },
40- }, "type" , "" )
41-
4241 tcpHeaderLoader = NewJSONConfigLoader (ConfigCreatorCache {
4342 "none" : func () interface {} { return new (NoOpConnectionAuthenticator ) },
4443 "http" : func () interface {} { return new (Authenticator ) },
@@ -63,9 +62,9 @@ func (c *KCPConfig) Build() (proto.Message, error) {
6362
6463 if c .Mtu != nil {
6564 mtu := * c .Mtu
66- if mtu < 576 || mtu > 1460 {
67- return nil , errors .New ("invalid mKCP MTU size: " , mtu ).AtError ()
68- }
65+ // if mtu < 576 || mtu > 1460 {
66+ // return nil, errors.New("invalid mKCP MTU size: ", mtu).AtError()
67+ // }
6968 config .Mtu = & kcp.MTU {Value : mtu }
7069 }
7170 if c .Tti != nil {
@@ -100,20 +99,8 @@ func (c *KCPConfig) Build() (proto.Message, error) {
10099 config .WriteBuffer = & kcp.WriteBuffer {Size : 512 * 1024 }
101100 }
102101 }
103- if len (c .HeaderConfig ) > 0 {
104- headerConfig , _ , err := kcpHeaderLoader .Load (c .HeaderConfig )
105- if err != nil {
106- return nil , errors .New ("invalid mKCP header config." ).Base (err ).AtError ()
107- }
108- ts , err := headerConfig .(Buildable ).Build ()
109- if err != nil {
110- return nil , errors .New ("invalid mKCP header config" ).Base (err ).AtError ()
111- }
112- config .HeaderConfig = serial .ToTypedMessage (ts )
113- }
114-
115- if c .Seed != nil {
116- config .Seed = & kcp.EncryptionSeed {Seed : * c .Seed }
102+ if c .HeaderConfig != nil || c .Seed != nil {
103+ return nil , errors .PrintRemovedFeatureError ("mkcp header & seed" , "finalmask/udp header-* & mkcp-original & mkcp-aes128gcm" )
117104 }
118105
119106 return config , nil
@@ -1242,10 +1229,80 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) {
12421229
12431230var (
12441231 udpmaskLoader = NewJSONConfigLoader (ConfigCreatorCache {
1245- "salamander" : func () interface {} { return new (Salamander ) },
1232+ "header-dns" : func () interface {} { return new (Dns ) },
1233+ "header-dtls" : func () interface {} { return new (Dtls ) },
1234+ "header-srtp" : func () interface {} { return new (Srtp ) },
1235+ "header-utp" : func () interface {} { return new (Utp ) },
1236+ "header-wechat" : func () interface {} { return new (Wechat ) },
1237+ "header-wireguard" : func () interface {} { return new (Wireguard ) },
1238+ "mkcp-original" : func () interface {} { return new (Original ) },
1239+ "mkcp-aes128gcm" : func () interface {} { return new (Aes128Gcm ) },
1240+ "salamander" : func () interface {} { return new (Salamander ) },
1241+ "xdns" : func () interface {} { return new (Xdns ) },
12461242 }, "type" , "settings" )
12471243)
12481244
1245+ type Dns struct {
1246+ Domain string `json:"domain"`
1247+ }
1248+
1249+ func (c * Dns ) Build () (proto.Message , error ) {
1250+ config := & dns.Config {}
1251+ config .Domain = "www.baidu.com"
1252+
1253+ if len (c .Domain ) > 0 {
1254+ config .Domain = c .Domain
1255+ }
1256+
1257+ return config , nil
1258+ }
1259+
1260+ type Dtls struct {}
1261+
1262+ func (c * Dtls ) Build () (proto.Message , error ) {
1263+ return & dtls.Config {}, nil
1264+ }
1265+
1266+ type Srtp struct {}
1267+
1268+ func (c * Srtp ) Build () (proto.Message , error ) {
1269+ return & srtp.Config {}, nil
1270+ }
1271+
1272+ type Utp struct {}
1273+
1274+ func (c * Utp ) Build () (proto.Message , error ) {
1275+ return & utp.Config {}, nil
1276+ }
1277+
1278+ type Wechat struct {}
1279+
1280+ func (c * Wechat ) Build () (proto.Message , error ) {
1281+ return & wechat.Config {}, nil
1282+ }
1283+
1284+ type Wireguard struct {}
1285+
1286+ func (c * Wireguard ) Build () (proto.Message , error ) {
1287+ return & wireguard.Config {}, nil
1288+ }
1289+
1290+ type Original struct {}
1291+
1292+ func (c * Original ) Build () (proto.Message , error ) {
1293+ return & original.Config {}, nil
1294+ }
1295+
1296+ type Aes128Gcm struct {
1297+ Password string `json:"password"`
1298+ }
1299+
1300+ func (c * Aes128Gcm ) Build () (proto.Message , error ) {
1301+ return & aes128gcm.Config {
1302+ Password : c .Password ,
1303+ }, nil
1304+ }
1305+
12491306type Salamander struct {
12501307 Password string `json:"password"`
12511308}
@@ -1256,14 +1313,28 @@ func (c *Salamander) Build() (proto.Message, error) {
12561313 return config , nil
12571314}
12581315
1259- type FinalMask struct {
1316+ type Xdns struct {
1317+ Domain string `json:"domain"`
1318+ }
1319+
1320+ func (c * Xdns ) Build () (proto.Message , error ) {
1321+ if c .Domain == "" {
1322+ return nil , errors .New ("empty domain" )
1323+ }
1324+
1325+ return & xdns.Config {
1326+ Domain : c .Domain ,
1327+ }, nil
1328+ }
1329+
1330+ type Mask struct {
12601331 Type string `json:"type"`
12611332 Settings * json.RawMessage `json:"settings"`
12621333}
12631334
1264- func (c * FinalMask ) Build (tcpmaskLoader bool ) (proto.Message , error ) {
1335+ func (c * Mask ) Build (tcp bool ) (proto.Message , error ) {
12651336 loader := udpmaskLoader
1266- if tcpmaskLoader {
1337+ if tcp {
12671338 return nil , errors .New ("" )
12681339 }
12691340
@@ -1282,12 +1353,17 @@ func (c *FinalMask) Build(tcpmaskLoader bool) (proto.Message, error) {
12821353 return ts , nil
12831354}
12841355
1356+ type FinalMask struct {
1357+ Tcp []Mask `json:"tcp"`
1358+ Udp []Mask `json:"udp"`
1359+ }
1360+
12851361type StreamConfig struct {
12861362 Address * Address `json:"address"`
12871363 Port uint16 `json:"port"`
12881364 Network * TransportProtocol `json:"network"`
12891365 Security string `json:"security"`
1290- Udpmasks [] * FinalMask `json:"udpmasks "`
1366+ FinalMask * FinalMask `json:"finalmask "`
12911367 TLSSettings * TLSConfig `json:"tlsSettings"`
12921368 REALITYSettings * REALITYConfig `json:"realitySettings"`
12931369 RAWSettings * TCPConfig `json:"rawSettings"`
@@ -1437,12 +1513,21 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) {
14371513 config .SocketSettings = ss
14381514 }
14391515
1440- for _ , mask := range c .Udpmasks {
1441- u , err := mask .Build (false )
1442- if err != nil {
1443- return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1516+ if c .FinalMask != nil {
1517+ for _ , mask := range c .FinalMask .Tcp {
1518+ u , err := mask .Build (true )
1519+ if err != nil {
1520+ return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1521+ }
1522+ config .Tcpmasks = append (config .Tcpmasks , serial .ToTypedMessage (u ))
1523+ }
1524+ for _ , mask := range c .FinalMask .Udp {
1525+ u , err := mask .Build (false )
1526+ if err != nil {
1527+ return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1528+ }
1529+ config .Udpmasks = append (config .Udpmasks , serial .ToTypedMessage (u ))
14441530 }
1445- config .Udpmasks = append (config .Udpmasks , serial .ToTypedMessage (u ))
14461531 }
14471532
14481533 return config , nil
0 commit comments