@@ -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" , "udpmasks header-* & mkcp-original & mkcp-aes128gcm" )
117104 }
118105
119106 return config , nil
@@ -1111,10 +1098,80 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) {
11111098
11121099var (
11131100 udpmaskLoader = NewJSONConfigLoader (ConfigCreatorCache {
1114- "salamander" : func () interface {} { return new (Salamander ) },
1101+ "header-dns" : func () interface {} { return new (Dns ) },
1102+ "header-dtls" : func () interface {} { return new (Dtls ) },
1103+ "header-srtp" : func () interface {} { return new (Srtp ) },
1104+ "header-utp" : func () interface {} { return new (Utp ) },
1105+ "header-wechat" : func () interface {} { return new (Wechat ) },
1106+ "header-wireguard" : func () interface {} { return new (Wireguard ) },
1107+ "mkcp-original" : func () interface {} { return new (Original ) },
1108+ "mkcp-aes128gcm" : func () interface {} { return new (Aes128Gcm ) },
1109+ "salamander" : func () interface {} { return new (Salamander ) },
1110+ "xdns" : func () interface {} { return new (Xdns ) },
11151111 }, "type" , "settings" )
11161112)
11171113
1114+ type Dns struct {
1115+ Domain string `json:"domain"`
1116+ }
1117+
1118+ func (c * Dns ) Build () (proto.Message , error ) {
1119+ config := & dns.Config {}
1120+ config .Domain = "www.baidu.com"
1121+
1122+ if len (c .Domain ) > 0 {
1123+ config .Domain = c .Domain
1124+ }
1125+
1126+ return config , nil
1127+ }
1128+
1129+ type Dtls struct {}
1130+
1131+ func (c * Dtls ) Build () (proto.Message , error ) {
1132+ return & dtls.Config {}, nil
1133+ }
1134+
1135+ type Srtp struct {}
1136+
1137+ func (c * Srtp ) Build () (proto.Message , error ) {
1138+ return & srtp.Config {}, nil
1139+ }
1140+
1141+ type Utp struct {}
1142+
1143+ func (c * Utp ) Build () (proto.Message , error ) {
1144+ return & utp.Config {}, nil
1145+ }
1146+
1147+ type Wechat struct {}
1148+
1149+ func (c * Wechat ) Build () (proto.Message , error ) {
1150+ return & wechat.Config {}, nil
1151+ }
1152+
1153+ type Wireguard struct {}
1154+
1155+ func (c * Wireguard ) Build () (proto.Message , error ) {
1156+ return & wireguard.Config {}, nil
1157+ }
1158+
1159+ type Original struct {}
1160+
1161+ func (c * Original ) Build () (proto.Message , error ) {
1162+ return & original.Config {}, nil
1163+ }
1164+
1165+ type Aes128Gcm struct {
1166+ Password string `json:"password"`
1167+ }
1168+
1169+ func (c * Aes128Gcm ) Build () (proto.Message , error ) {
1170+ return & aes128gcm.Config {
1171+ Password : c .Password ,
1172+ }, nil
1173+ }
1174+
11181175type Salamander struct {
11191176 Password string `json:"password"`
11201177}
@@ -1125,14 +1182,28 @@ func (c *Salamander) Build() (proto.Message, error) {
11251182 return config , nil
11261183}
11271184
1128- type FinalMask struct {
1185+ type Xdns struct {
1186+ Domain string `json:"domain"`
1187+ }
1188+
1189+ func (c * Xdns ) Build () (proto.Message , error ) {
1190+ if c .Domain == "" {
1191+ return nil , errors .New ("empty domain" )
1192+ }
1193+
1194+ return & xdns.Config {
1195+ Domain : c .Domain ,
1196+ }, nil
1197+ }
1198+
1199+ type Mask struct {
11291200 Type string `json:"type"`
11301201 Settings * json.RawMessage `json:"settings"`
11311202}
11321203
1133- func (c * FinalMask ) Build (tcpmaskLoader bool ) (proto.Message , error ) {
1204+ func (c * Mask ) Build (tcp bool ) (proto.Message , error ) {
11341205 loader := udpmaskLoader
1135- if tcpmaskLoader {
1206+ if tcp {
11361207 return nil , errors .New ("" )
11371208 }
11381209
@@ -1151,12 +1222,17 @@ func (c *FinalMask) Build(tcpmaskLoader bool) (proto.Message, error) {
11511222 return ts , nil
11521223}
11531224
1225+ type FinalMask struct {
1226+ Tcp []Mask `json:"tcp"`
1227+ Udp []Mask `json:"udp"`
1228+ }
1229+
11541230type StreamConfig struct {
11551231 Address * Address `json:"address"`
11561232 Port uint16 `json:"port"`
11571233 Network * TransportProtocol `json:"network"`
11581234 Security string `json:"security"`
1159- Udpmasks [] * FinalMask `json:"udpmasks "`
1235+ FinalMask * FinalMask `json:"finalmask "`
11601236 TLSSettings * TLSConfig `json:"tlsSettings"`
11611237 REALITYSettings * REALITYConfig `json:"realitySettings"`
11621238 RAWSettings * TCPConfig `json:"rawSettings"`
@@ -1306,12 +1382,21 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) {
13061382 config .SocketSettings = ss
13071383 }
13081384
1309- for _ , mask := range c .Udpmasks {
1310- u , err := mask .Build (false )
1311- if err != nil {
1312- return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1385+ if c .FinalMask != nil {
1386+ for _ , mask := range c .FinalMask .Tcp {
1387+ u , err := mask .Build (true )
1388+ if err != nil {
1389+ return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1390+ }
1391+ config .Tcpmasks = append (config .Tcpmasks , serial .ToTypedMessage (u ))
1392+ }
1393+ for _ , mask := range c .FinalMask .Udp {
1394+ u , err := mask .Build (false )
1395+ if err != nil {
1396+ return nil , errors .New ("failed to build mask with type " , mask .Type ).Base (err )
1397+ }
1398+ config .Udpmasks = append (config .Udpmasks , serial .ToTypedMessage (u ))
13131399 }
1314- config .Udpmasks = append (config .Udpmasks , serial .ToTypedMessage (u ))
13151400 }
13161401
13171402 return config , nil
0 commit comments