Refactor: HTTP clients, unified HTTP2/QUIC options, Apple engines
This commit is contained in:
@@ -77,15 +77,9 @@ func NewInbound(ctx context.Context, router adapter.Router, logger log.ContextLo
|
||||
ReceiveBPS: receiveBps,
|
||||
XPlusPassword: options.Obfs,
|
||||
TLSConfig: tlsConfig,
|
||||
QUICOptions: buildInboundQUICOptions(options),
|
||||
UDPTimeout: udpTimeout,
|
||||
Handler: inbound,
|
||||
|
||||
// Legacy options
|
||||
|
||||
ConnReceiveWindow: options.ReceiveWindowConn,
|
||||
StreamReceiveWindow: options.ReceiveWindowClient,
|
||||
MaxIncomingStreams: int64(options.MaxConnClient),
|
||||
DisableMTUDiscovery: options.DisableMTUDiscovery,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -70,21 +70,19 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
|
||||
receiveBps = uint64(options.DownMbps) * hysteria.MbpsToBps
|
||||
}
|
||||
client, err := hysteria.NewClient(hysteria.ClientOptions{
|
||||
Context: ctx,
|
||||
Dialer: outboundDialer,
|
||||
Logger: logger,
|
||||
ServerAddress: options.ServerOptions.Build(),
|
||||
ServerPorts: options.ServerPorts,
|
||||
HopInterval: time.Duration(options.HopInterval),
|
||||
SendBPS: sendBps,
|
||||
ReceiveBPS: receiveBps,
|
||||
XPlusPassword: options.Obfs,
|
||||
Password: password,
|
||||
TLSConfig: tlsConfig,
|
||||
UDPDisabled: !common.Contains(networkList, N.NetworkUDP),
|
||||
ConnReceiveWindow: options.ReceiveWindowConn,
|
||||
StreamReceiveWindow: options.ReceiveWindow,
|
||||
DisableMTUDiscovery: options.DisableMTUDiscovery,
|
||||
Context: ctx,
|
||||
Dialer: outboundDialer,
|
||||
Logger: logger,
|
||||
ServerAddress: options.ServerOptions.Build(),
|
||||
ServerPorts: options.ServerPorts,
|
||||
HopInterval: time.Duration(options.HopInterval),
|
||||
SendBPS: sendBps,
|
||||
ReceiveBPS: receiveBps,
|
||||
XPlusPassword: options.Obfs,
|
||||
Password: password,
|
||||
TLSConfig: tlsConfig,
|
||||
QUICOptions: buildOutboundQUICOptions(options),
|
||||
UDPDisabled: !common.Contains(networkList, N.NetworkUDP),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package hysteria
|
||||
|
||||
import (
|
||||
"github.com/sagernet/sing-box/option"
|
||||
qtls "github.com/sagernet/sing-quic"
|
||||
)
|
||||
|
||||
func buildBaseQUICOptions(options option.QUICOptions) qtls.QUICOptions {
|
||||
return qtls.QUICOptions{
|
||||
IdleTimeout: options.IdleTimeout.Build(),
|
||||
KeepAlivePeriod: options.KeepAlivePeriod.Build(),
|
||||
StreamReceiveWindow: options.StreamReceiveWindow.Value(),
|
||||
ConnectionReceiveWindow: options.ConnectionReceiveWindow.Value(),
|
||||
MaxConcurrentStreams: options.MaxConcurrentStreams,
|
||||
InitialPacketSize: options.InitialPacketSize,
|
||||
DisablePathMTUDiscovery: options.DisablePathMTUDiscovery,
|
||||
}
|
||||
}
|
||||
|
||||
func buildInboundQUICOptions(options option.HysteriaInboundOptions) qtls.QUICOptions {
|
||||
quicOptions := buildBaseQUICOptions(options.QUICOptions)
|
||||
if quicOptions.ConnectionReceiveWindow == 0 {
|
||||
quicOptions.ConnectionReceiveWindow = options.ReceiveWindowConn //nolint:staticcheck
|
||||
}
|
||||
if quicOptions.StreamReceiveWindow == 0 {
|
||||
quicOptions.StreamReceiveWindow = options.ReceiveWindowClient //nolint:staticcheck
|
||||
}
|
||||
if quicOptions.MaxConcurrentStreams == 0 {
|
||||
quicOptions.MaxConcurrentStreams = options.MaxConnClient //nolint:staticcheck
|
||||
}
|
||||
if !quicOptions.DisablePathMTUDiscovery {
|
||||
quicOptions.DisablePathMTUDiscovery = options.DisableMTUDiscovery //nolint:staticcheck
|
||||
}
|
||||
return quicOptions
|
||||
}
|
||||
|
||||
func buildOutboundQUICOptions(options option.HysteriaOutboundOptions) qtls.QUICOptions {
|
||||
quicOptions := buildBaseQUICOptions(options.QUICOptions)
|
||||
if quicOptions.ConnectionReceiveWindow == 0 {
|
||||
quicOptions.ConnectionReceiveWindow = options.ReceiveWindowConn //nolint:staticcheck
|
||||
}
|
||||
if quicOptions.StreamReceiveWindow == 0 {
|
||||
quicOptions.StreamReceiveWindow = options.ReceiveWindow //nolint:staticcheck
|
||||
}
|
||||
if !quicOptions.DisablePathMTUDiscovery {
|
||||
quicOptions.DisablePathMTUDiscovery = options.DisableMTUDiscovery //nolint:staticcheck
|
||||
}
|
||||
return quicOptions
|
||||
}
|
||||
Reference in New Issue
Block a user