Add shadowsocks-2022 inbound/outbound (#1061)

This commit is contained in:
世界 2022-05-23 11:55:48 +08:00 committed by GitHub
parent 3f64f3206c
commit 087f0d1240
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 897 additions and 35 deletions

View file

@ -0,0 +1,46 @@
package conf
import (
"github.com/golang/protobuf/proto"
"github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/proxy/shadowsocks_2022"
)
type Shadowsocks2022ServerConfig struct {
Cipher string `json:"method"`
Key string `json:"key"`
NetworkList *NetworkList `json:"network"`
}
func (v *Shadowsocks2022ServerConfig) Build() (proto.Message, error) {
var network []net.Network
if v.NetworkList != nil {
network = v.NetworkList.Build()
}
return &shadowsocks_2022.ServerConfig{
Method: v.Cipher,
Key: v.Key,
Network: network,
}, nil
}
type Shadowsocks2022ClientConfig struct {
Address *Address `json:"address"`
Port uint16 `json:"port"`
Cipher string `json:"method"`
Key string `json:"key"`
ReducedIvHeadEntropy bool `json:"reducedIvHeadEntropy"`
}
func (v *Shadowsocks2022ClientConfig) Build() (proto.Message, error) {
if v.Address == nil {
return nil, newError("shadowsocks 2022: missing server address")
}
return &shadowsocks_2022.ClientConfig{
Address: v.Address.Build(),
Port: uint32(v.Port),
Method: v.Cipher,
Key: v.Key,
ReducedIvHeadEntropy: v.ReducedIvHeadEntropy,
}, nil
}

View file

@ -18,28 +18,30 @@ import (
var (
inboundConfigLoader = NewJSONConfigLoader(ConfigCreatorCache{
"dokodemo-door": func() interface{} { return new(DokodemoConfig) },
"http": func() interface{} { return new(HTTPServerConfig) },
"shadowsocks": func() interface{} { return new(ShadowsocksServerConfig) },
"socks": func() interface{} { return new(SocksServerConfig) },
"vless": func() interface{} { return new(VLessInboundConfig) },
"vmess": func() interface{} { return new(VMessInboundConfig) },
"trojan": func() interface{} { return new(TrojanServerConfig) },
"mtproto": func() interface{} { return new(MTProtoServerConfig) },
"dokodemo-door": func() interface{} { return new(DokodemoConfig) },
"http": func() interface{} { return new(HTTPServerConfig) },
"shadowsocks": func() interface{} { return new(ShadowsocksServerConfig) },
"socks": func() interface{} { return new(SocksServerConfig) },
"vless": func() interface{} { return new(VLessInboundConfig) },
"vmess": func() interface{} { return new(VMessInboundConfig) },
"trojan": func() interface{} { return new(TrojanServerConfig) },
"mtproto": func() interface{} { return new(MTProtoServerConfig) },
"shadowsocks-2022": func() interface{} { return new(Shadowsocks2022ServerConfig) },
}, "protocol", "settings")
outboundConfigLoader = NewJSONConfigLoader(ConfigCreatorCache{
"blackhole": func() interface{} { return new(BlackholeConfig) },
"loopback": func() interface{} { return new(LoopbackConfig) },
"freedom": func() interface{} { return new(FreedomConfig) },
"http": func() interface{} { return new(HTTPClientConfig) },
"shadowsocks": func() interface{} { return new(ShadowsocksClientConfig) },
"socks": func() interface{} { return new(SocksClientConfig) },
"vless": func() interface{} { return new(VLessOutboundConfig) },
"vmess": func() interface{} { return new(VMessOutboundConfig) },
"trojan": func() interface{} { return new(TrojanClientConfig) },
"mtproto": func() interface{} { return new(MTProtoClientConfig) },
"dns": func() interface{} { return new(DNSOutboundConfig) },
"blackhole": func() interface{} { return new(BlackholeConfig) },
"loopback": func() interface{} { return new(LoopbackConfig) },
"freedom": func() interface{} { return new(FreedomConfig) },
"http": func() interface{} { return new(HTTPClientConfig) },
"shadowsocks": func() interface{} { return new(ShadowsocksClientConfig) },
"socks": func() interface{} { return new(SocksClientConfig) },
"vless": func() interface{} { return new(VLessOutboundConfig) },
"vmess": func() interface{} { return new(VMessOutboundConfig) },
"trojan": func() interface{} { return new(TrojanClientConfig) },
"mtproto": func() interface{} { return new(MTProtoClientConfig) },
"dns": func() interface{} { return new(DNSOutboundConfig) },
"shadowsocks-2022": func() interface{} { return new(Shadowsocks2022ClientConfig) },
}, "protocol", "settings")
ctllog = log.New(os.Stderr, "xctl> ", 0)