Skip to content

Commit d169f20

Browse files
author
null
committed
kcp masks
1 parent 2c92339 commit d169f20

92 files changed

Lines changed: 5485 additions & 1969 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

core/core.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
var (
2020
Version_x byte = 26
2121
Version_y byte = 1
22-
Version_z byte = 23
22+
Version_z byte = 18
2323
)
2424

2525
var (

infra/conf/transport_authenticators.go

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,72 +4,17 @@ import (
44
"sort"
55

66
"github.com/xtls/xray-core/common/errors"
7-
"github.com/xtls/xray-core/transport/internet/headers/dns"
87
"github.com/xtls/xray-core/transport/internet/headers/http"
98
"github.com/xtls/xray-core/transport/internet/headers/noop"
10-
"github.com/xtls/xray-core/transport/internet/headers/srtp"
11-
"github.com/xtls/xray-core/transport/internet/headers/tls"
12-
"github.com/xtls/xray-core/transport/internet/headers/utp"
13-
"github.com/xtls/xray-core/transport/internet/headers/wechat"
14-
"github.com/xtls/xray-core/transport/internet/headers/wireguard"
159
"google.golang.org/protobuf/proto"
1610
)
1711

18-
type NoOpAuthenticator struct{}
19-
20-
func (NoOpAuthenticator) Build() (proto.Message, error) {
21-
return new(noop.Config), nil
22-
}
23-
2412
type NoOpConnectionAuthenticator struct{}
2513

2614
func (NoOpConnectionAuthenticator) Build() (proto.Message, error) {
2715
return new(noop.ConnectionConfig), nil
2816
}
2917

30-
type SRTPAuthenticator struct{}
31-
32-
func (SRTPAuthenticator) Build() (proto.Message, error) {
33-
return new(srtp.Config), nil
34-
}
35-
36-
type UTPAuthenticator struct{}
37-
38-
func (UTPAuthenticator) Build() (proto.Message, error) {
39-
return new(utp.Config), nil
40-
}
41-
42-
type WechatVideoAuthenticator struct{}
43-
44-
func (WechatVideoAuthenticator) Build() (proto.Message, error) {
45-
return new(wechat.VideoConfig), nil
46-
}
47-
48-
type WireguardAuthenticator struct{}
49-
50-
func (WireguardAuthenticator) Build() (proto.Message, error) {
51-
return new(wireguard.WireguardConfig), nil
52-
}
53-
54-
type DNSAuthenticator struct {
55-
Domain string `json:"domain"`
56-
}
57-
58-
func (v *DNSAuthenticator) Build() (proto.Message, error) {
59-
config := new(dns.Config)
60-
config.Domain = "www.baidu.com"
61-
if len(v.Domain) > 0 {
62-
config.Domain = v.Domain
63-
}
64-
return config, nil
65-
}
66-
67-
type DTLSAuthenticator struct{}
68-
69-
func (DTLSAuthenticator) Build() (proto.Message, error) {
70-
return new(tls.PacketConfig), nil
71-
}
72-
7318
type AuthenticatorRequest struct {
7419
Version string `json:"version"`
7520
Method string `json:"method"`

infra/conf/transport_internet.go

Lines changed: 122 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3140
var (
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

11121099
var (
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+
11181175
type 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+
11541230
type 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

main/distro/all/all.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,6 @@ import (
6363
// Transport headers
6464
_ "github.com/xtls/xray-core/transport/internet/headers/http"
6565
_ "github.com/xtls/xray-core/transport/internet/headers/noop"
66-
_ "github.com/xtls/xray-core/transport/internet/headers/srtp"
67-
_ "github.com/xtls/xray-core/transport/internet/headers/tls"
68-
_ "github.com/xtls/xray-core/transport/internet/headers/utp"
69-
_ "github.com/xtls/xray-core/transport/internet/headers/wechat"
70-
_ "github.com/xtls/xray-core/transport/internet/headers/wireguard"
7166

7267
// JSON & TOML & YAML
7368
_ "github.com/xtls/xray-core/main/json"

0 commit comments

Comments
 (0)