XHTTP client: Enable XMUX for download in U-D-S (#3965)

This commit is contained in:
RPRX 2024-11-03 07:25:41 +00:00 committed by GitHub
parent 85a1c33709
commit e3276df725
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 7 deletions

View file

@ -7,6 +7,7 @@ type MemoryStreamConfig struct {
SecurityType string
SecuritySettings interface{}
SocketSettings *SocketConfig
DownloadSettings *MemoryStreamConfig
}
// ToMemoryStreamConfig converts a StreamConfig to MemoryStreamConfig. It returns a default non-nil MemoryStreamConfig for nil input.

View file

@ -252,18 +252,24 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
requestURL.Path = transportConfiguration.GetNormalizedPath() + sessionIdUuid.String()
requestURL.RawQuery = transportConfiguration.GetNormalizedQuery()
httpClient, muxResource := getHTTPClient(ctx, dest, streamSettings)
httpClient, muxRes := getHTTPClient(ctx, dest, streamSettings)
var httpClient2 DialerClient
var muxRes2 *muxResource
var requestURL2 url.URL
if transportConfiguration.DownloadSettings != nil {
globalDialerAccess.Lock()
if streamSettings.DownloadSettings == nil {
streamSettings.DownloadSettings = common.Must2(internet.ToMemoryStreamConfig(transportConfiguration.DownloadSettings)).(*internet.MemoryStreamConfig)
}
globalDialerAccess.Unlock()
memory2 := streamSettings.DownloadSettings
dest2 := net.Destination{
Address: transportConfiguration.DownloadSettings.Address.AsAddress(), // just panic
Port: net.Port(transportConfiguration.DownloadSettings.Port),
Network: net.Network_TCP,
}
memory2 := common.Must2(internet.ToMemoryStreamConfig(transportConfiguration.DownloadSettings)).(*internet.MemoryStreamConfig)
httpClient2, _ = getHTTPClient(ctx, dest2, memory2) // no multiplex
httpClient2, muxRes2 = getHTTPClient(ctx, dest2, memory2)
if tls.ConfigFromStreamSettings(memory2) != nil || reality.ConfigFromStreamSettings(memory2) != nil {
requestURL2.Scheme = "https"
} else {
@ -284,13 +290,19 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
// uploadWriter wrapper, exact size limits can be enforced
uploadPipeReader, uploadPipeWriter := pipe.New(pipe.WithSizeLimit(maxUploadSize - 1))
if muxResource != nil {
muxResource.OpenRequests.Add(1)
if muxRes != nil {
muxRes.OpenRequests.Add(1)
}
if muxRes2 != nil {
muxRes2.OpenRequests.Add(1)
}
go func() {
if muxResource != nil {
defer muxResource.OpenRequests.Add(-1)
if muxRes != nil {
defer muxRes.OpenRequests.Add(-1)
}
if muxRes2 != nil {
defer muxRes2.OpenRequests.Add(-1)
}
requestsLimiter := semaphore.New(int(scMaxConcurrentPosts.roll()))