Index: net/tools/quic/quic_dispatcher.cc |
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc |
index cf3a46b3bf0a38e343bdedb3f06cf10e382c3186..05cb39d4432cb8742131582068bf3837fe718592 100644 |
--- a/net/tools/quic/quic_dispatcher.cc |
+++ b/net/tools/quic/quic_dispatcher.cc |
@@ -15,6 +15,7 @@ |
#include "net/tools/epoll_server/epoll_server.h" |
#include "net/tools/quic/quic_default_packet_writer.h" |
#include "net/tools/quic/quic_epoll_connection_helper.h" |
+#include "net/tools/quic/quic_per_connection_packet_writer.h" |
#include "net/tools/quic/quic_socket_utils.h" |
#include "net/tools/quic/quic_time_wait_list_manager.h" |
@@ -159,15 +160,37 @@ class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface { |
QuicConnectionId connection_id_; |
}; |
+QuicPacketWriter* QuicDispatcher::DefaultPacketWriterFactory::Create( |
+ QuicPacketWriter* writer, |
+ QuicConnection* connection) { |
+ return new QuicPerConnectionPacketWriter(writer, connection); |
+} |
+ |
+QuicDispatcher::PacketWriterFactoryAdapter::PacketWriterFactoryAdapter( |
+ QuicDispatcher* dispatcher) |
+ : dispatcher_(dispatcher) {} |
+ |
+QuicDispatcher::PacketWriterFactoryAdapter::~PacketWriterFactoryAdapter() {} |
+ |
+QuicPacketWriter* QuicDispatcher::PacketWriterFactoryAdapter::Create( |
+ QuicConnection* connection) const { |
+ return dispatcher_->packet_writer_factory_->Create( |
+ dispatcher_->writer_.get(), |
+ connection); |
+} |
+ |
QuicDispatcher::QuicDispatcher(const QuicConfig& config, |
const QuicCryptoServerConfig& crypto_config, |
const QuicVersionVector& supported_versions, |
+ PacketWriterFactory* packet_writer_factory, |
EpollServer* epoll_server) |
: config_(config), |
crypto_config_(crypto_config), |
delete_sessions_alarm_(new DeleteSessionsAlarm(this)), |
epoll_server_(epoll_server), |
helper_(new QuicEpollConnectionHelper(epoll_server_)), |
+ packet_writer_factory_(packet_writer_factory), |
+ connection_writer_factory_(this), |
supported_versions_(supported_versions), |
current_packet_(NULL), |
framer_(supported_versions, /*unused*/ QuicTime::Zero(), true), |
@@ -366,9 +389,9 @@ QuicConnection* QuicDispatcher::CreateQuicConnection( |
return new QuicConnection(connection_id, |
client_address, |
helper_.get(), |
- writer_.get(), |
- false /* owns_writer */, |
- true /* is_server */, |
+ connection_writer_factory_, |
+ /* owns_writer= */ true, |
+ /* is_server= */ true, |
supported_versions_); |
} |