mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-05 19:28:45 +00:00
ptr
This commit is contained in:
@@ -439,19 +439,17 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
|
|||||||
var closed atomic.Int32
|
var closed atomic.Int32
|
||||||
|
|
||||||
reader, writer := io.Pipe()
|
reader, writer := io.Pipe()
|
||||||
initXmuxClient := xmuxClient
|
|
||||||
initXmuxClient2 := xmuxClient2
|
|
||||||
conn := splitConn{
|
conn := splitConn{
|
||||||
writer: writer,
|
writer: writer,
|
||||||
onClose: func() {
|
onClose: func() {
|
||||||
if closed.Add(1) > 1 {
|
if closed.Add(1) > 1 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if initXmuxClient != nil {
|
if xmuxClient != nil {
|
||||||
initXmuxClient.OpenUsage.Add(-1)
|
xmuxClient.OpenUsage.Add(-1)
|
||||||
}
|
}
|
||||||
if initXmuxClient2 != nil && initXmuxClient2 != initXmuxClient {
|
if xmuxClient2 != nil && xmuxClient2 != xmuxClient {
|
||||||
initXmuxClient2.OpenUsage.Add(-1)
|
xmuxClient2.OpenUsage.Add(-1)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -520,6 +518,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
|
|||||||
}
|
}
|
||||||
|
|
||||||
doSplit := atomic.Bool{}
|
doSplit := atomic.Bool{}
|
||||||
|
dynamicHTTPClient := httpClient
|
||||||
|
dynamicXmuxClient := xmuxClient
|
||||||
for doSplit.Store(true); doSplit.Load(); {
|
for doSplit.Store(true); doSplit.Load(); {
|
||||||
var chunk buf.MultiBuffer
|
var chunk buf.MultiBuffer
|
||||||
remainder, chunk = buf.SplitSize(remainder, maxUploadSize)
|
remainder, chunk = buf.SplitSize(remainder, maxUploadSize)
|
||||||
@@ -544,13 +544,13 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
|
|||||||
|
|
||||||
lastWrite = time.Now()
|
lastWrite = time.Now()
|
||||||
|
|
||||||
if xmuxClient != nil && (xmuxClient.LeftRequests.Add(-1) <= 0 ||
|
if dynamicXmuxClient != nil && (dynamicXmuxClient.LeftRequests.Add(-1) <= 0 ||
|
||||||
(xmuxClient.UnreusableAt != time.Time{} && lastWrite.After(xmuxClient.UnreusableAt))) {
|
(dynamicXmuxClient.UnreusableAt != time.Time{} && lastWrite.After(dynamicXmuxClient.UnreusableAt))) {
|
||||||
httpClient, xmuxClient = getHTTPClient(ctx, dest, streamSettings)
|
dynamicHTTPClient, dynamicXmuxClient = getHTTPClient(ctx, dest, streamSettings)
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func(hClient DialerClient) {
|
||||||
err := httpClient.PostPacket(
|
err := hClient.PostPacket(
|
||||||
ctx,
|
ctx,
|
||||||
requestURL.String(),
|
requestURL.String(),
|
||||||
sessionId,
|
sessionId,
|
||||||
@@ -563,9 +563,9 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
|
|||||||
uploadPipeReader.Interrupt()
|
uploadPipeReader.Interrupt()
|
||||||
doSplit.Store(false)
|
doSplit.Store(false)
|
||||||
}
|
}
|
||||||
}()
|
}(dynamicHTTPClient)
|
||||||
|
|
||||||
if _, ok := httpClient.(*DefaultDialerClient); ok {
|
if _, ok := dynamicHTTPClient.(*DefaultDialerClient); ok {
|
||||||
<-wroteRequest.Wait()
|
<-wroteRequest.Wait()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user