mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-12-22 19:33:32 +02:00
XHTTP client: Enable XMUX for download in U-D-S (#3965)
This commit is contained in:
parent
85a1c33709
commit
e3276df725
2 changed files with 20 additions and 7 deletions
|
@ -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.
|
||||
|
|
|
@ -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()))
|
||||
|
|
Loading…
Reference in a new issue