@@ -16,8 +16,8 @@ import (
1616 "github.com/xtls/xray-core/common"
1717 "github.com/xtls/xray-core/common/errors"
1818 "github.com/xtls/xray-core/common/net"
19- "github.com/xtls/xray-core/common/session"
2019 "github.com/xtls/xray-core/common/task"
20+ hyCtx "github.com/xtls/xray-core/proxy/hysteria/ctx"
2121 "github.com/xtls/xray-core/transport/internet"
2222 "github.com/xtls/xray-core/transport/internet/finalmask"
2323 "github.com/xtls/xray-core/transport/internet/hysteria/congestion"
@@ -115,8 +115,8 @@ type client struct {
115115 conn * quic.Conn
116116 config * Config
117117 tlsConfig * go_tls.Config
118- udpmaskManager * finalmask.UdpmaskManager
119118 socketConfig * internet.SocketConfig
119+ udpmaskManager * finalmask.UdpmaskManager
120120 udpSM * udpSessionManager
121121 mutex sync.Mutex
122122}
@@ -243,10 +243,25 @@ func (c *client) dial() error {
243243 serverAuto := resp .Header .Get (CommonHeaderCCRX )
244244 serverDown , _ := strconv .ParseUint (serverAuto , 10 , 64 )
245245
246- if serverAuto == "auto" || c .config .Up == 0 || serverDown == 0 {
246+ switch c .config .Congestion {
247+ case "reno" :
248+ errors .LogDebug (c .ctx , "congestion reno" )
249+ case "bbr" :
250+ errors .LogDebug (c .ctx , "congestion bbr" )
247251 congestion .UseBBR (quicConn )
248- } else {
249- congestion .UseBrutal (quicConn , min (c .config .Up , serverDown ))
252+ case "brutal" , "" :
253+ if serverAuto == "auto" || c .config .Up == 0 || serverDown == 0 {
254+ errors .LogDebug (c .ctx , "congestion bbr" )
255+ congestion .UseBBR (quicConn )
256+ } else {
257+ errors .LogDebug (c .ctx , "congestion brutal bytes per second " , min (c .config .Up , serverDown ))
258+ congestion .UseBrutal (quicConn , min (c .config .Up , serverDown ))
259+ }
260+ case "force-brutal" :
261+ errors .LogDebug (c .ctx , "congestion brutal bytes per second " , c .config .Up )
262+ congestion .UseBrutal (quicConn , c .config .Up )
263+ default :
264+ errors .LogDebug (c .ctx , "congestion reno" )
250265 }
251266
252267 c .pktConn = pktConn
@@ -363,6 +378,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
363378 return nil , errors .New ("tls config is nil" )
364379 }
365380
381+ requireDatagram := hyCtx .RequireDatagramFromContext (ctx )
366382 addr := dest .NetAddr ()
367383 config := streamSettings .ProtocolSettings .(* Config )
368384
@@ -375,18 +391,15 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
375391 dest : dest ,
376392 config : config ,
377393 tlsConfig : tlsConfig .GetTLSConfig (),
378- udpmaskManager : streamSettings .UdpmaskManager ,
379394 socketConfig : streamSettings .SocketSettings ,
395+ udpmaskManager : streamSettings .UdpmaskManager ,
380396 }
381397 manger .m [addr ] = c
382398 }
383399 c .setCtx (ctx )
384400 manger .mutex .Unlock ()
385401
386- outbounds := session .OutboundsFromContext (ctx )
387- targetUdp := len (outbounds ) > 0 && outbounds [len (outbounds )- 1 ].Target .Network == net .Network_UDP
388-
389- if targetUdp {
402+ if requireDatagram {
390403 return c .udp ()
391404 }
392405 return c .tcp ()
0 commit comments