| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | package muximport (	"context"	"net"	"github.com/sagernet/sing-box/adapter"	C "github.com/sagernet/sing-box/constant"	"github.com/sagernet/sing-box/option"	"github.com/sagernet/sing-mux"	E "github.com/sagernet/sing/common/exceptions"	"github.com/sagernet/sing/common/logger"	M "github.com/sagernet/sing/common/metadata"	N "github.com/sagernet/sing/common/network")type Client = mux.Clientfunc NewClientWithOptions(dialer N.Dialer, logger logger.Logger, options option.OutboundMultiplexOptions) (*Client, error) {	if !options.Enabled {		return nil, nil	}	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")		}	}	return mux.NewClient(mux.Options{		Dialer:         &clientDialer{dialer},		Logger:         logger,		Protocol:       options.Protocol,		MaxConnections: options.MaxConnections,		MinStreams:     options.MinStreams,		MaxStreams:     options.MaxStreams,		Padding:        options.Padding,		Brutal:         brutalOptions,	})}type clientDialer struct {	N.Dialer}func (d *clientDialer) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {	return d.Dialer.DialContext(adapter.OverrideContext(ctx), network, destination)}func (d *clientDialer) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {	return d.Dialer.ListenPacket(adapter.OverrideContext(ctx), destination)}
 |