mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-05-01 09:54:15 +00:00
Add shadow-tls support
This commit is contained in:
parent
4d5c3195d2
commit
d6c2a9aab7
25 changed files with 1311 additions and 130 deletions
75
infra/conf/shadowtls.go
Normal file
75
infra/conf/shadowtls.go
Normal file
|
@ -0,0 +1,75 @@
|
|||
package conf
|
||||
|
||||
import (
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/sagernet/sing/common"
|
||||
"github.com/xtls/xray-core/proxy/shadowtls"
|
||||
)
|
||||
|
||||
type ShadowTLSServerConfig struct {
|
||||
Version uint16 `json:"version"`
|
||||
Password string `json:"password,omitempty"`
|
||||
Users []ShadowTLSUser `json:"users,omitempty"`
|
||||
Handshake *ShadowTLSHandshakeConfig `json:"handshake"`
|
||||
HandshakeForServerName map[string]*ShadowTLSHandshakeConfig `json:"handshakeForServerName,omitempty"`
|
||||
StrictMode bool `json:"strictMode,omitempty"`
|
||||
Detour string `json:"detour"`
|
||||
}
|
||||
|
||||
type ShadowTLSUser struct {
|
||||
Email string `json:"email,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
}
|
||||
|
||||
func (c ShadowTLSUser) Build() *shadowtls.User {
|
||||
return &shadowtls.User{
|
||||
Email: c.Email,
|
||||
Password: c.Password,
|
||||
}
|
||||
}
|
||||
|
||||
type ShadowTLSHandshakeConfig struct {
|
||||
Address *Address `json:"address"`
|
||||
Port uint16 `json:"port"`
|
||||
}
|
||||
|
||||
func (c ShadowTLSHandshakeConfig) Build() *shadowtls.HandshakeConfig {
|
||||
return &shadowtls.HandshakeConfig{
|
||||
Address: c.Address.Build(),
|
||||
Port: uint32(c.Port),
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ShadowTLSServerConfig) Build() (proto.Message, error) {
|
||||
var handshakeForServerName map[string]*shadowtls.HandshakeConfig
|
||||
if c.HandshakeForServerName != nil {
|
||||
for serverName, serverConfig := range c.HandshakeForServerName {
|
||||
handshakeForServerName[serverName] = serverConfig.Build()
|
||||
}
|
||||
}
|
||||
return &shadowtls.ServerConfig{
|
||||
Version: uint32(c.Version),
|
||||
Password: c.Password,
|
||||
Users: common.Map(c.Users, ShadowTLSUser.Build),
|
||||
Handshake: c.Handshake.Build(),
|
||||
HandshakeForServerName: handshakeForServerName,
|
||||
StrictMode: c.StrictMode,
|
||||
Detour: c.Detour,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type ShadowTLSClientConfig struct {
|
||||
Address *Address `json:"address"`
|
||||
Port uint16 `json:"port"`
|
||||
Version uint16 `json:"version"`
|
||||
Password string `json:"password,omitempty"`
|
||||
}
|
||||
|
||||
func (c *ShadowTLSClientConfig) Build() (proto.Message, error) {
|
||||
return &shadowtls.ClientConfig{
|
||||
Address: c.Address.Build(),
|
||||
Port: uint32(c.Port),
|
||||
Version: uint32(c.Version),
|
||||
Password: c.Password,
|
||||
}, nil
|
||||
}
|
|
@ -26,6 +26,7 @@ var (
|
|||
"vmess": func() interface{} { return new(VMessInboundConfig) },
|
||||
"trojan": func() interface{} { return new(TrojanServerConfig) },
|
||||
"mtproto": func() interface{} { return new(MTProtoServerConfig) },
|
||||
"shadow-tls": func() interface{} { return new(ShadowTLSServerConfig) },
|
||||
}, "protocol", "settings")
|
||||
|
||||
outboundConfigLoader = NewJSONConfigLoader(ConfigCreatorCache{
|
||||
|
@ -41,6 +42,7 @@ var (
|
|||
"mtproto": func() interface{} { return new(MTProtoClientConfig) },
|
||||
"dns": func() interface{} { return new(DNSOutboundConfig) },
|
||||
"wireguard": func() interface{} { return new(WireGuardConfig) },
|
||||
"shadow-tls": func() interface{} { return new(ShadowTLSClientConfig) },
|
||||
}, "protocol", "settings")
|
||||
|
||||
ctllog = log.New(os.Stderr, "xctl> ", 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue