Index: net/quic/quic_chromium_client_session.h |
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h |
index 72424c2c026daa009434afe73dc1d5e978c4d544..b8fec03d26301e09eb7203affd26ee801a4323d7 100644 |
--- a/net/quic/quic_chromium_client_session.h |
+++ b/net/quic/quic_chromium_client_session.h |
@@ -174,7 +174,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession |
void OnSuccessfulVersionNegotiation(const QuicVersion& version) override; |
// QuicPacketReader::Visitor methods: |
- void OnReadError(int result) override; |
+ void OnReadError(int result, const DatagramClientSocket* socket) override; |
bool OnPacket(const QuicEncryptedPacket& packet, |
IPEndPoint local_address, |
IPEndPoint peer_address) override; |
@@ -189,7 +189,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession |
// Resumes a crypto handshake with the server after a timeout. |
int ResumeCryptoConnect(const CompletionCallback& callback); |
- // Causes the QuicConnectionHelper to start reading from the socket |
+ // Causes the QuicConnectionHelper to start reading from all sockets |
// and passing the data along to the QuicConnection. |
void StartReading(); |
@@ -222,6 +222,21 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession |
QuicDisabledReason disabled_reason() const { return disabled_reason_; } |
+ // Migrates session onto new socket, i.e., starts reading from |socket| |
+ // in addition to any previous sockets, and sets |writer| to be the new |
+ // default writer. Returns true if socket was successfully added to the |
+ // session and the session was successfully migrated to using the new socket. |
+ // Returns false if number of migrations exceeds kMaxReadersPerQuicSession. |
+ // Takes ownership of |socket|, |reader|, and |writer|. |
+ bool MigrateToSocket(scoped_ptr<DatagramClientSocket> socket, |
+ scoped_ptr<QuicPacketReader> reader, |
+ scoped_ptr<QuicPacketWriter> writer); |
+ |
+ // Returns current default socket. This is the socket over which all |
+ // QUIC packets are sent. This default socket can change, so do not store the |
+ // returned socket. |
+ const DatagramClientSocket* GetDefaultSocket() const; |
+ |
protected: |
// QuicSession methods: |
QuicSpdyStream* CreateIncomingDynamicStream(QuicStreamId id) override; |
@@ -271,7 +286,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession |
bool require_confirmation_; |
scoped_ptr<QuicCryptoClientStream> crypto_stream_; |
QuicStreamFactory* stream_factory_; |
- scoped_ptr<DatagramClientSocket> socket_; |
+ std::vector<scoped_ptr<DatagramClientSocket>> sockets_; |
TransportSecurityState* transport_security_state_; |
scoped_ptr<QuicServerInfo> server_info_; |
scoped_ptr<CertVerifyResult> cert_verify_result_; |
@@ -283,7 +298,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession |
size_t num_total_streams_; |
base::TaskRunner* task_runner_; |
BoundNetLog net_log_; |
- QuicPacketReader packet_reader_; |
+ std::vector<scoped_ptr<QuicPacketReader>> packet_readers_; |
base::TimeTicks dns_resolution_end_time_; |
base::TimeTicks handshake_start_; // Time the handshake was started. |
scoped_ptr<QuicConnectionLogger> logger_; |