Index: net/tools/quic/quic_client.cc |
diff --git a/net/tools/quic/quic_client.cc b/net/tools/quic/quic_client.cc |
index 9c14862d405f942427b86e764a1da93ad592af3c..dbae2df71071266b80da0eb2f853c37c221961b2 100644 |
--- a/net/tools/quic/quic_client.cc |
+++ b/net/tools/quic/quic_client.cc |
@@ -44,11 +44,6 @@ namespace net { |
const int kEpollFlags = EPOLLIN | EPOLLOUT | EPOLLET; |
-void QuicClient::ClientQuicDataToResend::Resend() { |
- client_->SendRequest(*headers_, body_, fin_); |
- headers_ = nullptr; |
-} |
- |
QuicClient::QuicClient(IPEndPoint server_address, |
const QuicServerId& server_id, |
const QuicVersionVector& supported_versions, |
@@ -174,15 +169,9 @@ bool QuicClient::Connect() { |
while (EncryptionBeingEstablished()) { |
WaitForEvents(); |
} |
- if (FLAGS_enable_quic_stateless_reject_support && connected() && |
- !data_to_resend_on_connect_.empty()) { |
- // A connection has been established and there was previously queued data |
- // to resend. Resend it and empty the queue. |
- std::vector<std::unique_ptr<QuicDataToResend>> old_data; |
- old_data.swap(data_to_resend_on_connect_); |
- for (const auto& data : old_data) { |
- data->Resend(); |
- } |
+ if (FLAGS_enable_quic_stateless_reject_support && connected()) { |
+ // Resend any previously queued data. |
+ ResendSavedData(); |
} |
if (session() != nullptr && |
session()->error() != QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT) { |
@@ -211,7 +200,7 @@ void QuicClient::StartConnect() { |
// If the last error was not a stateless reject, then the queued up data |
// does not need to be resent. |
if (session()->error() != QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT) { |
- data_to_resend_on_connect_.clear(); |
+ ClearDataToResend(); |
} |
// Before we destroy the last session and create a new one, gather its stats |
// and update the stats for the overall connection. |
@@ -239,7 +228,7 @@ void QuicClient::Disconnect() { |
ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET); |
} |
- data_to_resend_on_connect_.clear(); |
+ ClearDataToResend(); |
CleanUpAllUDPSockets(); |
@@ -276,10 +265,7 @@ void QuicClient::SendRequest(const SpdyHeaderBlock& headers, |
if (rv == QUIC_PENDING) { |
// May need to retry request if asynchronous rendezvous fails. |
- std::unique_ptr<SpdyHeaderBlock> new_headers( |
- new SpdyHeaderBlock(headers.Clone())); |
- push_promise_data_to_resend_.reset( |
- new ClientQuicDataToResend(std::move(new_headers), body, fin, this)); |
+ AddPromiseDataToResend(headers, body, fin); |
return; |
} |
@@ -289,29 +275,8 @@ void QuicClient::SendRequest(const SpdyHeaderBlock& headers, |
return; |
} |
stream->SendRequest(headers.Clone(), body, fin); |
- if (FLAGS_enable_quic_stateless_reject_support) { |
- // Record this in case we need to resend. |
- std::unique_ptr<SpdyHeaderBlock> new_headers( |
- new SpdyHeaderBlock(headers.Clone())); |
- auto data_to_resend = |
- new ClientQuicDataToResend(std::move(new_headers), body, fin, this); |
- MaybeAddQuicDataToResend(std::unique_ptr<QuicDataToResend>(data_to_resend)); |
- } |
-} |
- |
-void QuicClient::MaybeAddQuicDataToResend( |
- std::unique_ptr<QuicDataToResend> data_to_resend) { |
- DCHECK(FLAGS_enable_quic_stateless_reject_support); |
- if (session()->IsCryptoHandshakeConfirmed()) { |
- // The handshake is confirmed. No need to continue saving requests to |
- // resend. |
- data_to_resend_on_connect_.clear(); |
- return; |
- } |
- |
- // The handshake is not confirmed. Push the data onto the queue of data to |
- // resend if statelessly rejected. |
- data_to_resend_on_connect_.push_back(std::move(data_to_resend)); |
+ // Record this in case we need to resend. |
+ MaybeAddDataToResend(headers, body, fin); |
} |
void QuicClient::SendRequestAndWaitForResponse(const SpdyHeaderBlock& headers, |
@@ -431,23 +396,6 @@ void QuicClient::OnClose(QuicSpdyStream* stream) { |
} |
} |
-bool QuicClient::CheckVary(const SpdyHeaderBlock& client_request, |
- const SpdyHeaderBlock& promise_request, |
- const SpdyHeaderBlock& promise_response) { |
- return true; |
-} |
- |
-void QuicClient::OnRendezvousResult(QuicSpdyStream* stream) { |
- std::unique_ptr<ClientQuicDataToResend> data_to_resend = |
- std::move(push_promise_data_to_resend_); |
- if (stream) { |
- stream->set_visitor(this); |
- stream->OnDataAvailable(); |
- } else if (data_to_resend.get()) { |
- data_to_resend->Resend(); |
- } |
-} |
- |
size_t QuicClient::latest_response_code() const { |
QUIC_BUG_IF(!store_response_) << "Response not stored!"; |
return latest_response_code_; |