Index: net/quic/quic_stream_factory.cc |
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc |
index aa1c0f838f7f211aed56b5778e35eaca45763b70..b012913e78d9354a08bb961efb2a263c3237414a 100644 |
--- a/net/quic/quic_stream_factory.cc |
+++ b/net/quic/quic_stream_factory.cc |
@@ -98,6 +98,26 @@ QuicConfig InitializeQuicConfig(bool enable_time_based_loss_detection, |
return config; |
} |
+class DefaultPacketWriterFactory : public QuicConnection::PacketWriterFactory { |
+ public: |
+ explicit DefaultPacketWriterFactory(DatagramClientSocket* socket) |
+ : socket_(socket) {} |
+ virtual ~DefaultPacketWriterFactory() {} |
+ |
+ virtual QuicPacketWriter* Create(QuicConnection* connection) const OVERRIDE; |
+ |
+ private: |
+ DatagramClientSocket* socket_; |
+}; |
+ |
+QuicPacketWriter* DefaultPacketWriterFactory::Create( |
+ QuicConnection* connection) const { |
+ scoped_ptr<QuicDefaultPacketWriter> writer( |
+ new QuicDefaultPacketWriter(socket_)); |
+ writer->SetConnection(connection); |
+ return writer.release(); |
+} |
+ |
} // namespace |
QuicStreamFactory::IpAliasKey::IpAliasKey() {} |
@@ -820,8 +840,7 @@ int QuicStreamFactory::CreateSession( |
return rv; |
} |
- scoped_ptr<QuicDefaultPacketWriter> writer( |
- new QuicDefaultPacketWriter(socket.get())); |
+ DefaultPacketWriterFactory packet_writer_factory(socket.get()); |
if (!helper_.get()) { |
helper_.reset(new QuicConnectionHelper( |
@@ -832,11 +851,10 @@ int QuicStreamFactory::CreateSession( |
QuicConnection* connection = new QuicConnection(connection_id, |
addr, |
helper_.get(), |
- writer.get(), |
- false /* owns_writer */, |
+ packet_writer_factory, |
+ true /* owns_writer */, |
false /* is_server */, |
supported_versions_); |
- writer->SetConnection(connection); |
connection->set_max_packet_length(max_packet_length_); |
InitializeCachedStateInCryptoConfig(server_id, server_info); |
@@ -858,7 +876,7 @@ int QuicStreamFactory::CreateSession( |
} |
*session = new QuicClientSession( |
- connection, socket.Pass(), writer.Pass(), this, |
+ connection, socket.Pass(), this, |
quic_crypto_client_stream_factory_, transport_security_state_, |
server_info.Pass(), server_id, config, &crypto_config_, |
base::MessageLoop::current()->message_loop_proxy().get(), |