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 }