diff --git a/conf/sing.go b/conf/sing.go index 117416a3..1efc2303 100644 --- a/conf/sing.go +++ b/conf/sing.go @@ -40,6 +40,7 @@ type SingOptions struct { DomainStrategy option.DomainStrategy `json:"DomainStrategy"` SniffOverrideDestination bool `json:"SniffOverrideDestination"` FallBackConfigs *FallBackConfigForSing `json:"FallBackConfigs"` + Multiplex *MultiplexConfig `json:"MultiplexConfig"` } type SingNtpConfig struct { @@ -59,6 +60,18 @@ type FallBack struct { ServerPort string `json:"ServerPort"` } +type MultiplexConfig struct { + Enabled bool `json:"Enable"` + Padding bool `json:"Padding"` + Brutal BrutalOptions `json:"Brutal"` +} + +type BrutalOptions struct { + Enabled bool `json:"Enable"` + UpMbps int `json:"UpMbps"` + DownMbps int `json:"DownMbps"` +} + func NewSingOptions() *SingOptions { return &SingOptions{ EnableDNS: false, @@ -67,5 +80,6 @@ func NewSingOptions() *SingOptions { SniffEnabled: true, SniffOverrideDestination: true, FallBackConfigs: &FallBackConfigForSing{}, + Multiplex: &MultiplexConfig{}, } } diff --git a/core/sing/node.go b/core/sing/node.go index bc875d22..b48b7f14 100644 --- a/core/sing/node.go +++ b/core/sing/node.go @@ -69,6 +69,19 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio DomainStrategy: domainStrategy, }, } + var multiplex *option.InboundMultiplexOptions + if c.SingOptions.Multiplex != nil { + multiplexOption := option.InboundMultiplexOptions{ + Enabled: c.SingOptions.Multiplex.Enabled, + Padding: c.SingOptions.Multiplex.Padding, + Brutal: &option.BrutalOptions{ + Enabled: c.SingOptions.Multiplex.Brutal.Enabled, + UpMbps: c.SingOptions.Multiplex.Brutal.UpMbps, + DownMbps: c.SingOptions.Multiplex.Brutal.DownMbps, + }, + } + multiplex = &multiplexOption + } var tls option.InboundTLSOptions switch info.Security { case panel.Tls: @@ -210,6 +223,7 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio TLS: &tls, }, Transport: &t, + Multiplex: multiplex, } } else { in.Type = "vmess" @@ -219,6 +233,7 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio TLS: &tls, }, Transport: &t, + Multiplex: multiplex, } } case "shadowsocks": @@ -236,6 +251,7 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio in.ShadowsocksOptions = option.ShadowsocksInboundOptions{ ListenOptions: listen, Method: n.Cipher, + Multiplex: multiplex, } p := make([]byte, keyLength) _, _ = rand.Read(p) @@ -308,6 +324,7 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio TLS: &tls, }, Transport: &t, + Multiplex: multiplex, } if c.SingOptions.FallBackConfigs != nil { // fallback handling