sing-box/common/mux/client.go

43 lines
1.3 KiB
Go
Raw Normal View History

2022-07-30 00:29:22 +08:00
package mux
import (
C "github.com/sagernet/sing-box/constant"
2022-07-30 00:29:22 +08:00
"github.com/sagernet/sing-box/option"
2023-04-20 11:16:22 +08:00
"github.com/sagernet/sing-mux"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/logger"
2022-07-30 00:29:22 +08:00
N "github.com/sagernet/sing/common/network"
)
type Client = mux.Client
func NewClientWithOptions(dialer N.Dialer, logger logger.Logger, options option.OutboundMultiplexOptions) (*Client, error) {
2022-07-30 00:29:22 +08:00
if !options.Enabled {
2022-08-04 09:11:39 +08:00
return nil, nil
2022-07-30 00:29:22 +08:00
}
var brutalOptions mux.BrutalOptions
if options.Brutal != nil && options.Brutal.Enabled {
brutalOptions = mux.BrutalOptions{
Enabled: true,
SendBPS: uint64(options.Brutal.UpMbps * C.MbpsToBps),
ReceiveBPS: uint64(options.Brutal.DownMbps * C.MbpsToBps),
}
if brutalOptions.SendBPS < mux.BrutalMinSpeedBPS {
return nil, E.New("brutal: invalid upload speed")
}
if brutalOptions.ReceiveBPS < mux.BrutalMinSpeedBPS {
return nil, E.New("brutal: invalid download speed")
}
}
2023-04-20 11:16:22 +08:00
return mux.NewClient(mux.Options{
Dialer: dialer,
Logger: logger,
2023-04-20 11:16:22 +08:00
Protocol: options.Protocol,
MaxConnections: options.MaxConnections,
MinStreams: options.MinStreams,
MaxStreams: options.MaxStreams,
Padding: options.Padding,
Brutal: brutalOptions,
2023-04-20 11:16:22 +08:00
})
2022-07-30 00:29:22 +08:00
}