mirror of https://github.com/XTLS/Xray-core
Browse Source
Remove some code that was added to maintain compatibility with older Xray versions. This breaks compatibility with Xray-core v1.8.23 or older.pull/3757/head^2
mmmray
3 months ago
committed by
GitHub
3 changed files with 1 additions and 59 deletions
@ -1,48 +0,0 @@ |
|||||||
package splithttp |
|
||||||
|
|
||||||
import ( |
|
||||||
"bytes" |
|
||||||
"io" |
|
||||||
|
|
||||||
"github.com/xtls/xray-core/common/errors" |
|
||||||
) |
|
||||||
|
|
||||||
// in older versions of splithttp, the server would respond with `ok` to flush
|
|
||||||
// out HTTP response headers early. Response headers and a 200 OK were required
|
|
||||||
// to initiate the connection. Later versions of splithttp dropped this
|
|
||||||
// requirement, and in xray 1.8.24 the server stopped sending "ok" if it sees
|
|
||||||
// x_padding. For compatibility, we need to remove "ok" from the underlying
|
|
||||||
// reader if it exists, and otherwise forward the stream as-is.
|
|
||||||
type stripOkReader struct { |
|
||||||
io.ReadCloser |
|
||||||
firstDone bool |
|
||||||
prefixRead []byte |
|
||||||
} |
|
||||||
|
|
||||||
func (r *stripOkReader) Read(b []byte) (int, error) { |
|
||||||
if !r.firstDone { |
|
||||||
r.firstDone = true |
|
||||||
|
|
||||||
// skip "ok" response
|
|
||||||
prefixRead := []byte{0, 0} |
|
||||||
_, err := io.ReadFull(r.ReadCloser, prefixRead) |
|
||||||
if err != nil { |
|
||||||
return 0, errors.New("failed to read initial response").Base(err) |
|
||||||
} |
|
||||||
|
|
||||||
if !bytes.Equal(prefixRead, []byte("ok")) { |
|
||||||
// we read some garbage byte that may not have been "ok" at
|
|
||||||
// all. return a reader that replays what we have read so far
|
|
||||||
r.prefixRead = prefixRead |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if len(r.prefixRead) > 0 { |
|
||||||
n := copy(b, r.prefixRead) |
|
||||||
r.prefixRead = r.prefixRead[n:] |
|
||||||
return n, nil |
|
||||||
} |
|
||||||
|
|
||||||
n, err := r.ReadCloser.Read(b) |
|
||||||
return n, err |
|
||||||
} |
|
Loading…
Reference in new issue