|
@@ -225,15 +225,6 @@ func XtlsWrite(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdate
|
|
|
var ct stats.Counter
|
|
|
for {
|
|
|
buffer, err := reader.ReadMultiBuffer()
|
|
|
- if trafficState.WriterSwitchToDirectCopy {
|
|
|
- if inbound := session.InboundFromContext(ctx); inbound != nil && inbound.CanSpliceCopy == 2 {
|
|
|
- inbound.CanSpliceCopy = 1 // force the value to 1, don't use setter
|
|
|
- }
|
|
|
- rawConn, _, writerCounter := proxy.UnwrapRawConn(conn)
|
|
|
- writer = buf.NewWriter(rawConn)
|
|
|
- ct = writerCounter
|
|
|
- trafficState.WriterSwitchToDirectCopy = false
|
|
|
- }
|
|
|
if !buffer.IsEmpty() {
|
|
|
if ct != nil {
|
|
|
ct.Add(int64(buffer.Len()))
|
|
@@ -242,6 +233,15 @@ func XtlsWrite(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdate
|
|
|
if werr := writer.WriteMultiBuffer(buffer); werr != nil {
|
|
|
return werr
|
|
|
}
|
|
|
+ if trafficState.WriterSwitchToDirectCopy {
|
|
|
+ rawConn, _, writerCounter := proxy.UnwrapRawConn(conn)
|
|
|
+ writer = buf.NewWriter(rawConn)
|
|
|
+ ct = writerCounter
|
|
|
+ trafficState.WriterSwitchToDirectCopy = false
|
|
|
+ if inbound := session.InboundFromContext(ctx); inbound != nil && inbound.CanSpliceCopy == 2 {
|
|
|
+ inbound.CanSpliceCopy = 1 // force the value to 1, don't use setter
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if err != nil {
|
|
|
return err
|