mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-11-12 18:13:03 +00:00
Vision server allow multiple blocks of padding
This commit is contained in:
parent
a5b297f968
commit
fd6973b3c6
@ -256,7 +256,7 @@ func XtlsRead(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater
|
|||||||
) error {
|
) error {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
var ct stats.Counter
|
var ct stats.Counter
|
||||||
filterUUID := true
|
withinPaddingBuffers := false
|
||||||
shouldSwitchToDirectCopy := false
|
shouldSwitchToDirectCopy := false
|
||||||
var remainingContent int32 = -1
|
var remainingContent int32 = -1
|
||||||
var remainingPadding int32 = -1
|
var remainingPadding int32 = -1
|
||||||
@ -294,13 +294,15 @@ func XtlsRead(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater
|
|||||||
}
|
}
|
||||||
buffer, err := reader.ReadMultiBuffer()
|
buffer, err := reader.ReadMultiBuffer()
|
||||||
if !buffer.IsEmpty() {
|
if !buffer.IsEmpty() {
|
||||||
if filterUUID && (*isTLS || *numberOfPacketToFilter > 0) {
|
if withinPaddingBuffers || *numberOfPacketToFilter > 0 {
|
||||||
buffer = XtlsUnpadding(ctx, buffer, userUUID, &remainingContent, &remainingPadding, ¤tCommand)
|
buffer = XtlsUnpadding(ctx, buffer, userUUID, &remainingContent, &remainingPadding, ¤tCommand)
|
||||||
if remainingContent == 0 && remainingPadding == 0 {
|
if remainingContent == 0 && remainingPadding == 0 {
|
||||||
if currentCommand == 1 {
|
if currentCommand == 1 {
|
||||||
filterUUID = false
|
withinPaddingBuffers = false
|
||||||
|
remainingContent = -1
|
||||||
|
remainingPadding = -1 // set to initial state to parse the next padding
|
||||||
} else if currentCommand == 2 {
|
} else if currentCommand == 2 {
|
||||||
filterUUID = false
|
withinPaddingBuffers = false
|
||||||
shouldSwitchToDirectCopy = true
|
shouldSwitchToDirectCopy = true
|
||||||
// XTLS Vision processes struct TLS Conn's input and rawInput
|
// XTLS Vision processes struct TLS Conn's input and rawInput
|
||||||
if inputBuffer, err := buf.ReadFrom(input); err == nil {
|
if inputBuffer, err := buf.ReadFrom(input); err == nil {
|
||||||
@ -313,9 +315,13 @@ func XtlsRead(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater
|
|||||||
buffer, _ = buf.MergeMulti(buffer, rawInputBuffer)
|
buffer, _ = buf.MergeMulti(buffer, rawInputBuffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if currentCommand != 0 {
|
} else if currentCommand == 0 {
|
||||||
|
withinPaddingBuffers = true
|
||||||
|
} else {
|
||||||
newError("XtlsRead unknown command ", currentCommand, buffer.Len()).WriteToLog(session.ExportIDToError(ctx))
|
newError("XtlsRead unknown command ", currentCommand, buffer.Len()).WriteToLog(session.ExportIDToError(ctx))
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
withinPaddingBuffers = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if *numberOfPacketToFilter > 0 {
|
if *numberOfPacketToFilter > 0 {
|
||||||
@ -543,6 +549,7 @@ func XtlsUnpadding(ctx context.Context, buffer buf.MultiBuffer, userUUID []byte,
|
|||||||
posByte = 16
|
posByte = 16
|
||||||
*remainingContent = 0
|
*remainingContent = 0
|
||||||
*remainingPadding = 0
|
*remainingPadding = 0
|
||||||
|
*currentCommand = 0
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user