mirror of https://github.com/XTLS/Xray-core
Update proxy.go
parent
74814a3b4c
commit
fa362f0514
|
@ -190,23 +190,17 @@ func NewVisionReader(reader buf.Reader, state *TrafficState, isUplink bool, cont
|
||||||
func (w *VisionReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
func (w *VisionReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
||||||
buffer, err := w.Reader.ReadMultiBuffer()
|
buffer, err := w.Reader.ReadMultiBuffer()
|
||||||
if !buffer.IsEmpty() {
|
if !buffer.IsEmpty() {
|
||||||
var withinPaddingBuffers *bool
|
var withinPaddingBuffers *bool = &w.trafficState.Outbound.WithinPaddingBuffers
|
||||||
var remainingContent *int32
|
var remainingContent *int32 = &w.trafficState.Outbound.RemainingContent
|
||||||
var remainingPadding *int32
|
var remainingPadding *int32 = &w.trafficState.Outbound.RemainingPadding
|
||||||
var currentCommand *int
|
var currentCommand *int = &w.trafficState.Outbound.CurrentCommand
|
||||||
var switchToDirectCopy *bool
|
var switchToDirectCopy *bool = &w.trafficState.Outbound.DownlinkReaderDirectCopy
|
||||||
if w.isUplink {
|
if w.isUplink {
|
||||||
withinPaddingBuffers = &w.trafficState.Inbound.WithinPaddingBuffers
|
withinPaddingBuffers = &w.trafficState.Inbound.WithinPaddingBuffers
|
||||||
remainingContent = &w.trafficState.Inbound.RemainingContent
|
remainingContent = &w.trafficState.Inbound.RemainingContent
|
||||||
remainingPadding = &w.trafficState.Inbound.RemainingPadding
|
remainingPadding = &w.trafficState.Inbound.RemainingPadding
|
||||||
currentCommand = &w.trafficState.Inbound.CurrentCommand
|
currentCommand = &w.trafficState.Inbound.CurrentCommand
|
||||||
switchToDirectCopy = &w.trafficState.Inbound.UplinkReaderDirectCopy
|
switchToDirectCopy = &w.trafficState.Inbound.UplinkReaderDirectCopy
|
||||||
} else {
|
|
||||||
withinPaddingBuffers = &w.trafficState.Outbound.WithinPaddingBuffers
|
|
||||||
remainingContent = &w.trafficState.Outbound.RemainingContent
|
|
||||||
remainingPadding = &w.trafficState.Outbound.RemainingPadding
|
|
||||||
currentCommand = &w.trafficState.Outbound.CurrentCommand
|
|
||||||
switchToDirectCopy = &w.trafficState.Outbound.DownlinkReaderDirectCopy
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if *withinPaddingBuffers || w.trafficState.NumberOfPacketToFilter > 0 {
|
if *withinPaddingBuffers || w.trafficState.NumberOfPacketToFilter > 0 {
|
||||||
|
@ -262,14 +256,11 @@ func (w *VisionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
|
||||||
if w.trafficState.NumberOfPacketToFilter > 0 {
|
if w.trafficState.NumberOfPacketToFilter > 0 {
|
||||||
XtlsFilterTls(mb, w.trafficState, w.ctx)
|
XtlsFilterTls(mb, w.trafficState, w.ctx)
|
||||||
}
|
}
|
||||||
var isPadding *bool
|
var isPadding *bool = &w.trafficState.Inbound.IsPadding
|
||||||
var switchToDirectCopy *bool
|
var switchToDirectCopy *bool = &w.trafficState.Inbound.DownlinkWriterDirectCopy
|
||||||
if w.isUplink {
|
if w.isUplink {
|
||||||
isPadding = &w.trafficState.Outbound.IsPadding
|
isPadding = &w.trafficState.Outbound.IsPadding
|
||||||
switchToDirectCopy = &w.trafficState.Outbound.UplinkWriterDirectCopy
|
switchToDirectCopy = &w.trafficState.Outbound.UplinkWriterDirectCopy
|
||||||
} else {
|
|
||||||
isPadding = &w.trafficState.Inbound.IsPadding
|
|
||||||
switchToDirectCopy = &w.trafficState.Inbound.DownlinkWriterDirectCopy
|
|
||||||
}
|
}
|
||||||
if *isPadding {
|
if *isPadding {
|
||||||
if len(mb) == 1 && mb[0] == nil {
|
if len(mb) == 1 && mb[0] == nil {
|
||||||
|
@ -388,20 +379,15 @@ func XtlsPadding(b *buf.Buffer, command byte, userUUID *[]byte, longPadding bool
|
||||||
|
|
||||||
// XtlsUnpadding remove padding and parse command
|
// XtlsUnpadding remove padding and parse command
|
||||||
func XtlsUnpadding(b *buf.Buffer, s *TrafficState, isUplink bool, ctx context.Context) *buf.Buffer {
|
func XtlsUnpadding(b *buf.Buffer, s *TrafficState, isUplink bool, ctx context.Context) *buf.Buffer {
|
||||||
var remainingCommand *int32
|
var remainingCommand *int32 = &s.Outbound.RemainingCommand
|
||||||
var remainingContent *int32
|
var remainingContent *int32 = &s.Outbound.RemainingContent
|
||||||
var remainingPadding *int32
|
var remainingPadding *int32 = &s.Outbound.RemainingPadding
|
||||||
var currentCommand *int
|
var currentCommand *int = &s.Outbound.CurrentCommand
|
||||||
if isUplink {
|
if isUplink {
|
||||||
remainingCommand = &s.Inbound.RemainingCommand
|
remainingCommand = &s.Inbound.RemainingCommand
|
||||||
remainingContent = &s.Inbound.RemainingContent
|
remainingContent = &s.Inbound.RemainingContent
|
||||||
remainingPadding = &s.Inbound.RemainingPadding
|
remainingPadding = &s.Inbound.RemainingPadding
|
||||||
currentCommand = &s.Inbound.CurrentCommand
|
currentCommand = &s.Inbound.CurrentCommand
|
||||||
} else {
|
|
||||||
remainingCommand = &s.Outbound.RemainingCommand
|
|
||||||
remainingContent = &s.Outbound.RemainingContent
|
|
||||||
remainingPadding = &s.Outbound.RemainingPadding
|
|
||||||
currentCommand = &s.Outbound.CurrentCommand
|
|
||||||
}
|
}
|
||||||
if *remainingCommand == -1 && *remainingContent == -1 && *remainingPadding == -1 { // initial state
|
if *remainingCommand == -1 && *remainingContent == -1 && *remainingPadding == -1 { // initial state
|
||||||
if b.Len() >= 21 && bytes.Equal(s.UserUUID, b.BytesTo(16)) {
|
if b.Len() >= 21 && bytes.Equal(s.UserUUID, b.BytesTo(16)) {
|
||||||
|
|
Loading…
Reference in New Issue