Chromium Code Reviews| Index: net/quic/quic_chromium_client_session.cc |
| diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc |
| index 0e7cb7b2debfa3fb6c163c6e23da05be8ee73fe9..6ee1c66891919c45fa6af1e5b7aa60c9a6dda237 100644 |
| --- a/net/quic/quic_chromium_client_session.cc |
| +++ b/net/quic/quic_chromium_client_session.cc |
| @@ -40,6 +40,11 @@ const int k0RttHandshakeTimeoutMs = 300; |
| // IPv6 packets have an additional 20 bytes of overhead than IPv4 packets. |
| const size_t kAdditionalOverheadForIPv6 = 20; |
| +// Maximum number of Readers that are created for any session due to |
| +// connection migration. A new Reader is created every time this endpoint's |
| +// IP address changes. |
| +const size_t kMaxReadersPerQuicSession = 5; |
| + |
| // Histograms for tracking down the crashes from http://crbug.com/354669 |
| // Note: these values must be kept in sync with the corresponding values in: |
| // tools/metrics/histograms/histograms.xml |
| @@ -175,18 +180,19 @@ QuicChromiumClientSession::QuicChromiumClientSession( |
| server_id_(server_id), |
| require_confirmation_(false), |
| stream_factory_(stream_factory), |
| - socket_(socket.Pass()), |
| transport_security_state_(transport_security_state), |
| server_info_(server_info.Pass()), |
| num_total_streams_(0), |
| task_runner_(task_runner), |
| net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_QUIC_SESSION)), |
| - packet_reader_(socket_.get(), this, net_log_), |
| dns_resolution_end_time_(dns_resolution_end_time), |
| logger_(new QuicConnectionLogger(this, connection_description, net_log_)), |
| going_away_(false), |
| disabled_reason_(QUIC_DISABLED_NOT), |
| weak_factory_(this) { |
| + sockets_[0] = socket.Pass(); |
|
Ryan Hamilton
2015/09/08 04:09:37
nit: sockets_.push_back(socket.Pass())
Jana
2015/11/17 01:50:08
Done.
|
| + packet_readers_[0].reset( |
| + new QuicPacketReader(sockets_[0].get(), this, net_log_)); |
|
Ryan Hamilton
2015/09/08 04:09:37
ditto
Jana
2015/11/17 01:50:08
Done.
|
| crypto_stream_.reset( |
| crypto_client_stream_factory |
| ? crypto_client_stream_factory->CreateQuicCryptoClientStream( |
| @@ -744,7 +750,10 @@ void QuicChromiumClientSession::OnConnectionClosed(QuicErrorCode error, |
| if (!callback_.is_null()) { |
| base::ResetAndReturn(&callback_).Run(ERR_QUIC_PROTOCOL_ERROR); |
| } |
| - socket_->Close(); |
| + |
| + for (size_t i = 0; i < sockets_.size(); ++i) { |
|
Ryan Hamilton
2015/09/08 04:09:37
nit: for (Socket socket : sockets) { ... }
Jana
2015/11/17 01:50:08
Done.
|
| + sockets_[i]->Close(); |
| + } |
| QuicSession::OnConnectionClosed(error, from_peer); |
| DCHECK(dynamic_streams().empty()); |
| CloseAllStreams(ERR_UNEXPECTED); |
| @@ -788,7 +797,9 @@ void QuicChromiumClientSession::OnProofVerifyDetailsAvailable( |
| } |
| void QuicChromiumClientSession::StartReading() { |
| - packet_reader_.StartReading(); |
| + for (size_t i = 0; i < packet_readers_.size(); ++i) { |
|
Ryan Hamilton
2015/09/08 04:09:37
nit: c++11 foreach loop
Jana
2015/11/17 01:50:08
Done.
|
| + packet_readers_[i]->StartReading(); |
| + } |
| } |
| void QuicChromiumClientSession::CloseSessionOnError(int error, |
| @@ -953,4 +964,21 @@ void QuicChromiumClientSession::OnConnectTimeout() { |
| // DCHECK_EQ(0u, GetNumOpenStreams()); |
| } |
| +void QuicChromiumClientSession::AddSocket( |
| + scoped_ptr<DatagramClientSocket> socket) { |
| + size_t num_sockets = sockets_.size(); |
| + sockets_.resize(num_sockets + 1); |
| + sockets_[num_sockets - 1] = socket.Pass(); |
|
Ryan Hamilton
2015/09/08 04:09:37
I think you can just do sockets_.push_back(socket.
Jana
2015/11/17 01:50:08
Done.
|
| +} |
| + |
| +bool QuicChromiumClientSession::AddPacketReader(QuicPacketReader* reader) { |
| + size_t num_readers = packet_readers_.size(); |
| + if (num_readers >= kMaxReadersPerQuicSession) { |
| + return false; |
| + } |
| + packet_readers_.resize(num_readers + 1); |
| + packet_readers_[num_readers - 1].reset(reader); |
| + return true; |
| +} |
|
Ryan Hamilton
2015/09/08 04:09:37
It's a bit surprising that the AddSocket method re
Jana
2015/11/17 01:50:08
Yeah, this wasn't great, so I cleaned it up now, P
|
| + |
| } // namespace net |