Add mux
This commit is contained in:
@@ -35,6 +35,7 @@ type ConfigOptions struct {
|
|||||||
GeoIPPath string `json:"geoip-path"`
|
GeoIPPath string `json:"geoip-path"`
|
||||||
GeoSitePath string `json:"geosite-path"`
|
GeoSitePath string `json:"geosite-path"`
|
||||||
Rules []Rule `json:"rules"`
|
Rules []Rule `json:"rules"`
|
||||||
|
MuxOptions
|
||||||
TLSTricks
|
TLSTricks
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,6 +48,13 @@ type TLSTricks struct {
|
|||||||
PaddingSize string `json:"tls-padding-size"`
|
PaddingSize string `json:"tls-padding-size"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MuxOptions struct {
|
||||||
|
EnableMux bool `json:"enable-mux"`
|
||||||
|
MuxPadding bool `json:"mux-padding"`
|
||||||
|
MaxStreams int `json:"mux-max-streams"`
|
||||||
|
MuxProtocol string `json:"mux-protocol"`
|
||||||
|
}
|
||||||
|
|
||||||
func DefaultConfigOptions() *ConfigOptions {
|
func DefaultConfigOptions() *ConfigOptions {
|
||||||
return &ConfigOptions{
|
return &ConfigOptions{
|
||||||
ExecuteAsIs: false,
|
ExecuteAsIs: false,
|
||||||
@@ -76,6 +84,12 @@ func DefaultConfigOptions() *ConfigOptions {
|
|||||||
GeoIPPath: "geoip.db",
|
GeoIPPath: "geoip.db",
|
||||||
GeoSitePath: "geosite.db",
|
GeoSitePath: "geosite.db",
|
||||||
Rules: []Rule{},
|
Rules: []Rule{},
|
||||||
|
MuxOptions: MuxOptions{
|
||||||
|
EnableMux: true,
|
||||||
|
MuxPadding: true,
|
||||||
|
MaxStreams: 8,
|
||||||
|
MuxProtocol: "h2mux",
|
||||||
|
},
|
||||||
TLSTricks: TLSTricks{
|
TLSTricks: TLSTricks{
|
||||||
EnableFragment: false,
|
EnableFragment: false,
|
||||||
FragmentSize: "10-100",
|
FragmentSize: "10-100",
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import (
|
|||||||
"github.com/sagernet/sing-box/option"
|
"github.com/sagernet/sing-box/option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type outboundMap map[string]interface{}
|
||||||
|
|
||||||
func patchOutbound(base option.Outbound, configOpt ConfigOptions) (*option.Outbound, string, error) {
|
func patchOutbound(base option.Outbound, configOpt ConfigOptions) (*option.Outbound, string, error) {
|
||||||
var serverDomain string
|
var serverDomain string
|
||||||
var outbound option.Outbound
|
var outbound option.Outbound
|
||||||
@@ -22,7 +24,7 @@ func patchOutbound(base option.Outbound, configOpt ConfigOptions) (*option.Outbo
|
|||||||
return nil, "", formatErr(err)
|
return nil, "", formatErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var obj map[string]interface{}
|
var obj outboundMap
|
||||||
err = json.Unmarshal(jsonData, &obj)
|
err = json.Unmarshal(jsonData, &obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", formatErr(err)
|
return nil, "", formatErr(err)
|
||||||
@@ -64,6 +66,21 @@ func patchOutbound(base option.Outbound, configOpt ConfigOptions) (*option.Outbo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch base.Type {
|
||||||
|
case C.TypeVMess, C.TypeVLESS, C.TypeTrojan, C.TypeShadowsocks:
|
||||||
|
if configOpt.EnableMux {
|
||||||
|
multiplex := option.OutboundMultiplexOptions{
|
||||||
|
Enabled: true,
|
||||||
|
Padding: configOpt.MuxPadding,
|
||||||
|
MaxStreams: configOpt.MaxStreams,
|
||||||
|
Protocol: configOpt.MuxProtocol,
|
||||||
|
}
|
||||||
|
obj["multiplex"] = multiplex
|
||||||
|
} else {
|
||||||
|
delete(obj, "multiplex")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
modifiedJson, err := json.Marshal(obj)
|
modifiedJson, err := json.Marshal(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", formatErr(err)
|
return nil, "", formatErr(err)
|
||||||
@@ -76,3 +93,12 @@ func patchOutbound(base option.Outbound, configOpt ConfigOptions) (*option.Outbo
|
|||||||
|
|
||||||
return &outbound, serverDomain, nil
|
return &outbound, serverDomain, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (o outboundMap) transportType() string {
|
||||||
|
// if transport, ok := o["transport"].(map[string]interface{}); ok {
|
||||||
|
// if transportType, ok := transport["type"].(string); ok {
|
||||||
|
// return transportType
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return ""
|
||||||
|
// }
|
||||||
|
|||||||
Reference in New Issue
Block a user