1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-27 22:36:12 -04:00

fix a regression that mux doesn't handle passive connection. fixes #1061

This commit is contained in:
Darien Raymond 2018-04-18 22:13:31 +02:00
parent 2e6985a98b
commit 0c66016d5f
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

View File

@ -144,6 +144,19 @@ func (m *Client) monitor() {
}
}
func copyFirstPayload(reader *pipe.Reader, writer *Writer) error {
data, err := reader.ReadMultiBufferWithTimeout(time.Millisecond * 200)
if err == buf.ErrReadTimeout {
return writer.writeMetaOnly()
}
if err != nil {
return err
}
return writer.WriteMultiBuffer(data)
}
func fetchInput(ctx context.Context, s *Session, output buf.Writer) {
dest, _ := proxy.TargetFromContext(ctx)
transferType := protocol.TransferTypeStream
@ -153,14 +166,22 @@ func fetchInput(ctx context.Context, s *Session, output buf.Writer) {
s.transferType = transferType
writer := NewWriter(s.ID, dest, output, transferType)
defer s.Close()
defer writer.Close()
newError("dispatching request to ", dest).WithContext(ctx).WriteToLog()
if pReader, ok := s.input.(*pipe.Reader); ok {
if err := copyFirstPayload(pReader, writer); err != nil {
newError("failed to fetch first payload").Base(err).WithContext(ctx).WriteToLog()
writer.hasError = true
return
}
}
if err := buf.Copy(s.input, writer); err != nil {
newError("failed to fetch all input").Base(err).WithContext(ctx).WriteToLog()
writer.hasError = true
return
}
writer.Close()
}
func (m *Client) Dispatch(ctx context.Context, link *core.Link) bool {