quic: Fix HTTP/3 Fast CONNECT behavior

SpdyProxyClientSocket uses read_callback_ for both Connect() and
Read(), and its OnIOComplete() calls read_callback_, thus its fast
connect code checks read_callback_. The code was ported to
QuicProxyClientSocket without much change.

But QuicProxyClientSocket uses a separate connect_callback_ apart from
read_callback_, and its OnIOComplete() calls connect_callback_, thus
when headers are received after Connect() it doesn't need to check
read_callback_ and should always avoid calling connect_callback_.
This commit is contained in:
klzgrad 2019-04-07 10:09:44 +08:00
parent 035a725844
commit fcbc4ace69

View File

@ -316,16 +316,12 @@ int QuicProxyClientSocket::DoLoop(int last_io_result) {
if (use_fastopen_ && read_headers_pending_) { if (use_fastopen_ && read_headers_pending_) {
read_headers_pending_ = false; read_headers_pending_ = false;
if (rv < 0) { if (rv < 0) {
// read_callback_ cannot be called.
if (!read_callback_)
rv = ERR_IO_PENDING;
// read_callback_ will be called with this error and be reset. // read_callback_ will be called with this error and be reset.
// Further data after that will be ignored. // Further data after that will be ignored.
next_state_ = STATE_DISCONNECTED; next_state_ = STATE_DISCONNECTED;
} else {
// Does not call read_callback_ from here if headers are OK.
rv = ERR_IO_PENDING;
} }
// Prevents calling connect_callback_.
rv = ERR_IO_PENDING;
} }
break; break;
default: default: