github.com/inazumav/sing-box@v0.0.0-20230926072359-ab51429a14f1/transport/tuic/congestion.go (about)

     1  package tuic
     2  
     3  import (
     4  	"context"
     5  	"github.com/sagernet/quic-go"
     6  	"time"
     7  
     8  	"github.com/inazumav/sing-box/transport/tuic/congestion"
     9  	"github.com/sagernet/sing/common/ntp"
    10  )
    11  
    12  func setCongestion(ctx context.Context, connection quic.Connection, congestionName string) {
    13  	timeFunc := ntp.TimeFuncFromContext(ctx)
    14  	if timeFunc == nil {
    15  		timeFunc = time.Now
    16  	}
    17  	switch congestionName {
    18  	case "cubic":
    19  		connection.SetCongestionControl(
    20  			congestion.NewCubicSender(
    21  				congestion.DefaultClock{TimeFunc: timeFunc},
    22  				congestion.GetInitialPacketSize(connection.RemoteAddr()),
    23  				false,
    24  				nil,
    25  			),
    26  		)
    27  	case "new_reno":
    28  		connection.SetCongestionControl(
    29  			congestion.NewCubicSender(
    30  				congestion.DefaultClock{TimeFunc: timeFunc},
    31  				congestion.GetInitialPacketSize(connection.RemoteAddr()),
    32  				true,
    33  				nil,
    34  			),
    35  		)
    36  	case "bbr":
    37  		connection.SetCongestionControl(
    38  			congestion.NewBBRSender(
    39  				congestion.DefaultClock{},
    40  				congestion.GetInitialPacketSize(connection.RemoteAddr()),
    41  				congestion.InitialCongestionWindow*congestion.InitialMaxDatagramSize,
    42  				congestion.DefaultBBRMaxCongestionWindow*congestion.InitialMaxDatagramSize,
    43  			),
    44  		)
    45  	}
    46  }