client.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package mux
  2. import (
  3. C "github.com/sagernet/sing-box/constant"
  4. "github.com/sagernet/sing-box/option"
  5. "github.com/sagernet/sing-mux"
  6. E "github.com/sagernet/sing/common/exceptions"
  7. "github.com/sagernet/sing/common/logger"
  8. N "github.com/sagernet/sing/common/network"
  9. )
  10. type Client = mux.Client
  11. func NewClientWithOptions(dialer N.Dialer, logger logger.Logger, options option.OutboundMultiplexOptions) (*Client, error) {
  12. if !options.Enabled {
  13. return nil, nil
  14. }
  15. var brutalOptions mux.BrutalOptions
  16. if options.Brutal != nil && options.Brutal.Enabled {
  17. brutalOptions = mux.BrutalOptions{
  18. Enabled: true,
  19. SendBPS: uint64(options.Brutal.UpMbps * C.MbpsToBps),
  20. ReceiveBPS: uint64(options.Brutal.DownMbps * C.MbpsToBps),
  21. }
  22. if brutalOptions.SendBPS < mux.BrutalMinSpeedBPS {
  23. return nil, E.New("brutal: invalid upload speed")
  24. }
  25. if brutalOptions.ReceiveBPS < mux.BrutalMinSpeedBPS {
  26. return nil, E.New("brutal: invalid download speed")
  27. }
  28. }
  29. return mux.NewClient(mux.Options{
  30. Dialer: dialer,
  31. Logger: logger,
  32. Protocol: options.Protocol,
  33. MaxConnections: options.MaxConnections,
  34. MinStreams: options.MinStreams,
  35. MaxStreams: options.MaxStreams,
  36. Padding: options.Padding,
  37. Brutal: brutalOptions,
  38. })
  39. }