Commit c99f380c authored by rch's avatar rch Committed by Commit bot

Unify the QUIC dispatcher and make the QuicServer work.

Initialize the QuicDispatcher with a PacketWriter instead of an int fd.
QuicDispatcher::Initialize() used to take an fd which chromium does not make
use of. Instead, it should simply take a PacketWriter* which the caller
should be responsible for creating. Renamed Initialize() to
InitializeWithWriter() to reflect this. Removed the CreateWriter() method
from the QuicDispatcher and moved it to QuicServer.
Merge internal change: 89495510

Review URL: https://codereview.chromium.org/1031243002

Cr-Commit-Position: refs/heads/master@{#322450}
parent 47295d7a
...@@ -1145,8 +1145,6 @@ if (is_linux) { ...@@ -1145,8 +1145,6 @@ if (is_linux) {
"tools/quic/quic_client.h", "tools/quic/quic_client.h",
"tools/quic/quic_default_packet_writer.cc", "tools/quic/quic_default_packet_writer.cc",
"tools/quic/quic_default_packet_writer.h", "tools/quic/quic_default_packet_writer.h",
"tools/quic/quic_dispatcher.cc",
"tools/quic/quic_dispatcher.h",
"tools/quic/quic_epoll_clock.cc", "tools/quic/quic_epoll_clock.cc",
"tools/quic/quic_epoll_clock.h", "tools/quic/quic_epoll_clock.h",
"tools/quic/quic_epoll_connection_helper.cc", "tools/quic/quic_epoll_connection_helper.cc",
...@@ -1155,8 +1153,6 @@ if (is_linux) { ...@@ -1155,8 +1153,6 @@ if (is_linux) {
"tools/quic/quic_packet_reader.h", "tools/quic/quic_packet_reader.h",
"tools/quic/quic_packet_writer_wrapper.cc", "tools/quic/quic_packet_writer_wrapper.cc",
"tools/quic/quic_packet_writer_wrapper.h", "tools/quic/quic_packet_writer_wrapper.h",
"tools/quic/quic_per_connection_packet_writer.cc",
"tools/quic/quic_per_connection_packet_writer.h",
"tools/quic/quic_server.cc", "tools/quic/quic_server.cc",
"tools/quic/quic_server.h", "tools/quic/quic_server.h",
"tools/quic/quic_socket_utils.cc", "tools/quic/quic_socket_utils.cc",
...@@ -1229,8 +1225,6 @@ if (is_android || is_linux) { ...@@ -1229,8 +1225,6 @@ if (is_android || is_linux) {
# such as when all dependees are not buildable for the chosen OS. # such as when all dependees are not buildable for the chosen OS.
source_set("quic_tools") { source_set("quic_tools") {
sources = [ sources = [
"quic/quic_dispatcher.cc",
"quic/quic_dispatcher.h",
"quic/quic_per_connection_packet_writer.cc", "quic/quic_per_connection_packet_writer.cc",
"quic/quic_per_connection_packet_writer.h", "quic/quic_per_connection_packet_writer.h",
"quic/quic_server.cc", "quic/quic_server.cc",
...@@ -1250,8 +1244,12 @@ source_set("simple_quic_tools") { ...@@ -1250,8 +1244,12 @@ source_set("simple_quic_tools") {
sources = [ sources = [
"tools/quic/quic_client_session.cc", "tools/quic/quic_client_session.cc",
"tools/quic/quic_client_session.h", "tools/quic/quic_client_session.h",
"tools/quic/quic_dispatcher.cc",
"tools/quic/quic_dispatcher.h",
"tools/quic/quic_in_memory_cache.cc", "tools/quic/quic_in_memory_cache.cc",
"tools/quic/quic_in_memory_cache.h", "tools/quic/quic_in_memory_cache.h",
"tools/quic/quic_per_connection_packet_writer.cc",
"tools/quic/quic_per_connection_packet_writer.h",
"tools/quic/quic_server_session.cc", "tools/quic/quic_server_session.cc",
"tools/quic/quic_server_session.h", "tools/quic/quic_server_session.h",
"tools/quic/quic_simple_client.cc", "tools/quic/quic_simple_client.cc",
......
...@@ -785,8 +785,6 @@ ...@@ -785,8 +785,6 @@
'simple_quic_tools', 'simple_quic_tools',
], ],
'sources': [ 'sources': [
'quic/quic_dispatcher.cc',
'quic/quic_dispatcher.h',
'quic/quic_per_connection_packet_writer.cc', 'quic/quic_per_connection_packet_writer.cc',
'quic/quic_per_connection_packet_writer.h', 'quic/quic_per_connection_packet_writer.h',
'quic/quic_server.cc', 'quic/quic_server.cc',
...@@ -805,14 +803,18 @@ ...@@ -805,14 +803,18 @@
'net', 'net',
], ],
'sources': [ 'sources': [
'tools/quic/quic_client_session.cc',
'tools/quic/quic_client_session.h',
'tools/quic/quic_dispatcher.cc',
'tools/quic/quic_dispatcher.h',
'tools/quic/quic_in_memory_cache.cc', 'tools/quic/quic_in_memory_cache.cc',
'tools/quic/quic_in_memory_cache.h', 'tools/quic/quic_in_memory_cache.h',
'tools/quic/quic_per_connection_packet_writer.cc',
'tools/quic/quic_per_connection_packet_writer.h',
'tools/quic/quic_server_session.cc', 'tools/quic/quic_server_session.cc',
'tools/quic/quic_server_session.h', 'tools/quic/quic_server_session.h',
'tools/quic/quic_simple_client.cc', 'tools/quic/quic_simple_client.cc',
'tools/quic/quic_simple_client.h', 'tools/quic/quic_simple_client.h',
'tools/quic/quic_client_session.cc',
'tools/quic/quic_client_session.h',
'tools/quic/quic_spdy_client_stream.cc', 'tools/quic/quic_spdy_client_stream.cc',
'tools/quic/quic_spdy_client_stream.h', 'tools/quic/quic_spdy_client_stream.h',
'tools/quic/quic_spdy_server_stream.cc', 'tools/quic/quic_spdy_server_stream.cc',
...@@ -1240,8 +1242,6 @@ ...@@ -1240,8 +1242,6 @@
'tools/quic/quic_client.h', 'tools/quic/quic_client.h',
'tools/quic/quic_default_packet_writer.cc', 'tools/quic/quic_default_packet_writer.cc',
'tools/quic/quic_default_packet_writer.h', 'tools/quic/quic_default_packet_writer.h',
'tools/quic/quic_dispatcher.cc',
'tools/quic/quic_dispatcher.h',
'tools/quic/quic_epoll_clock.cc', 'tools/quic/quic_epoll_clock.cc',
'tools/quic/quic_epoll_clock.h', 'tools/quic/quic_epoll_clock.h',
'tools/quic/quic_epoll_connection_helper.cc', 'tools/quic/quic_epoll_connection_helper.cc',
...@@ -1250,8 +1250,6 @@ ...@@ -1250,8 +1250,6 @@
'tools/quic/quic_packet_reader.h', 'tools/quic/quic_packet_reader.h',
'tools/quic/quic_packet_writer_wrapper.cc', 'tools/quic/quic_packet_writer_wrapper.cc',
'tools/quic/quic_packet_writer_wrapper.h', 'tools/quic/quic_packet_writer_wrapper.h',
'tools/quic/quic_per_connection_packet_writer.cc',
'tools/quic/quic_per_connection_packet_writer.h',
'tools/quic/quic_server.cc', 'tools/quic/quic_server.cc',
'tools/quic/quic_server.h', 'tools/quic/quic_server.h',
'tools/quic/quic_socket_utils.cc', 'tools/quic/quic_socket_utils.cc',
......
...@@ -12,13 +12,16 @@ ...@@ -12,13 +12,16 @@
#include "net/quic/crypto/quic_random.h" #include "net/quic/crypto/quic_random.h"
#include "net/quic/quic_crypto_stream.h" #include "net/quic/quic_crypto_stream.h"
#include "net/quic/quic_data_reader.h" #include "net/quic/quic_data_reader.h"
#include "net/quic/quic_dispatcher.h" #include "net/quic/quic_per_connection_packet_writer.h"
#include "net/quic/quic_protocol.h" #include "net/quic/quic_protocol.h"
#include "net/quic/quic_server_packet_writer.h" #include "net/quic/quic_server_packet_writer.h"
#include "net/tools/quic/quic_dispatcher.h"
#include "net/udp/udp_server_socket.h" #include "net/udp/udp_server_socket.h"
namespace net { namespace net {
using tools::QuicDispatcher;
namespace { namespace {
const char kSourceAddressTokenSecret[] = "secret"; const char kSourceAddressTokenSecret[] = "secret";
...@@ -27,6 +30,35 @@ const char kSourceAddressTokenSecret[] = "secret"; ...@@ -27,6 +30,35 @@ const char kSourceAddressTokenSecret[] = "secret";
// the limit. // the limit.
const int kReadBufferSize = 2 * kMaxPacketSize; const int kReadBufferSize = 2 * kMaxPacketSize;
// A packet writer factory which wraps a shared QuicServerPacketWriter
// inside of a QuicPerConnectionPacketWriter. Instead of checking that
// the shared_writer is the expected writer, this could instead cast
// from QuicPacketWriter to QuicServerPacketWriter.
class CustomPacketWriterFactory : public QuicDispatcher::PacketWriterFactory {
public:
~CustomPacketWriterFactory() override {}
QuicPacketWriter* Create(QuicPacketWriter* writer,
QuicConnection* connection) override {
if (writer == nullptr) {
LOG(DFATAL) << "shared_writer not initialized";
return nullptr;
}
if (writer != shared_writer_) {
LOG(DFATAL) << "writer mismatch";
return nullptr;
}
return new QuicPerConnectionPacketWriter(shared_writer_, connection);
}
void set_shared_writer(QuicServerPacketWriter* shared_writer) {
shared_writer_ = shared_writer;
}
private:
QuicServerPacketWriter* shared_writer_; // Not owned.
};
} // namespace } // namespace
QuicServer::QuicServer(const QuicConfig& config, QuicServer::QuicServer(const QuicConfig& config,
...@@ -111,16 +143,18 @@ int QuicServer::Listen(const IPEndPoint& address) { ...@@ -111,16 +143,18 @@ int QuicServer::Listen(const IPEndPoint& address) {
socket_.swap(socket); socket_.swap(socket);
CustomPacketWriterFactory* factory = new CustomPacketWriterFactory();
dispatcher_.reset( dispatcher_.reset(
new QuicDispatcher(config_, new QuicDispatcher(config_,
crypto_config_, crypto_config_,
supported_versions_, supported_versions_,
new QuicDispatcher::DefaultPacketWriterFactory(), factory,
&helper_)); &helper_));
QuicServerPacketWriter* writer = new QuicServerPacketWriter( QuicServerPacketWriter* writer = new QuicServerPacketWriter(
socket_.get(), socket_.get(),
dispatcher_.get()); dispatcher_.get());
dispatcher_->Initialize(writer); factory->set_shared_writer(writer);
dispatcher_->InitializeWithWriter(writer);
StartReading(); StartReading();
......
...@@ -25,7 +25,10 @@ namespace test { ...@@ -25,7 +25,10 @@ namespace test {
class QuicServerPeer; class QuicServerPeer;
} // namespace test } // namespace test
namespace tools {
class QuicDispatcher; class QuicDispatcher;
} // namespace tools
class UDPServerSocket; class UDPServerSocket;
class QuicServer { class QuicServer {
...@@ -59,7 +62,7 @@ class QuicServer { ...@@ -59,7 +62,7 @@ class QuicServer {
crypto_config_.SetProofSource(source); crypto_config_.SetProofSource(source);
} }
QuicDispatcher* dispatcher() { return dispatcher_.get(); } tools::QuicDispatcher* dispatcher() { return dispatcher_.get(); }
private: private:
friend class net::test::QuicServerPeer; friend class net::test::QuicServerPeer;
...@@ -68,7 +71,7 @@ class QuicServer { ...@@ -68,7 +71,7 @@ class QuicServer {
void Initialize(); void Initialize();
// Accepts data from the framer and demuxes clients to sessions. // Accepts data from the framer and demuxes clients to sessions.
scoped_ptr<QuicDispatcher> dispatcher_; scoped_ptr<tools::QuicDispatcher> dispatcher_;
// Used by the helper_ to time alarms. // Used by the helper_ to time alarms.
QuicClock clock_; QuicClock clock_;
......
...@@ -24,9 +24,9 @@ class QuicChromeServerDispatchPacketTest : public ::testing::Test { ...@@ -24,9 +24,9 @@ class QuicChromeServerDispatchPacketTest : public ::testing::Test {
: crypto_config_("blah", QuicRandom::GetInstance()), : crypto_config_("blah", QuicRandom::GetInstance()),
dispatcher_(config_, dispatcher_(config_,
crypto_config_, crypto_config_,
new QuicDispatcher::DefaultPacketWriterFactory(), new tools::QuicDispatcher::DefaultPacketWriterFactory(),
&helper_) { new MockHelper) {
dispatcher_.Initialize(nullptr); dispatcher_.InitializeWithWriter(nullptr);
} }
void DispatchPacket(const QuicEncryptedPacket& packet) { void DispatchPacket(const QuicEncryptedPacket& packet) {
...@@ -37,7 +37,6 @@ class QuicChromeServerDispatchPacketTest : public ::testing::Test { ...@@ -37,7 +37,6 @@ class QuicChromeServerDispatchPacketTest : public ::testing::Test {
protected: protected:
QuicConfig config_; QuicConfig config_;
QuicCryptoServerConfig crypto_config_; QuicCryptoServerConfig crypto_config_;
MockHelper helper_;
MockQuicDispatcher dispatcher_; MockQuicDispatcher dispatcher_;
}; };
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
#include "net/base/ip_endpoint.h" #include "net/base/ip_endpoint.h"
#include "net/quic/crypto/quic_crypto_server_config.h" #include "net/quic/crypto/quic_crypto_server_config.h"
#include "net/quic/quic_config.h" #include "net/quic/quic_config.h"
#include "net/quic/quic_dispatcher.h"
#include "net/quic/quic_protocol.h" #include "net/quic/quic_protocol.h"
#include "net/tools/quic/quic_dispatcher.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace net { namespace net {
namespace test { namespace test {
class MockQuicDispatcher : public QuicDispatcher { class MockQuicDispatcher : public tools::QuicDispatcher {
public: public:
MockQuicDispatcher(const QuicConfig& config, MockQuicDispatcher(const QuicConfig& config,
const QuicCryptoServerConfig& crypto_config, const QuicCryptoServerConfig& crypto_config,
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "net/quic/quic_utils.h" #include "net/quic/quic_utils.h"
#include "net/quic/test_tools/quic_connection_peer.h" #include "net/quic/test_tools/quic_connection_peer.h"
#include "net/spdy/spdy_frame_builder.h" #include "net/spdy/spdy_frame_builder.h"
#include "net/tools/quic/quic_per_connection_packet_writer.h"
using base::StringPiece; using base::StringPiece;
using std::max; using std::max;
...@@ -667,7 +668,7 @@ QuicVersionVector SupportedVersions(QuicVersion version) { ...@@ -667,7 +668,7 @@ QuicVersionVector SupportedVersions(QuicVersion version) {
TestWriterFactory::TestWriterFactory() : current_writer_(nullptr) {} TestWriterFactory::TestWriterFactory() : current_writer_(nullptr) {}
TestWriterFactory::~TestWriterFactory() {} TestWriterFactory::~TestWriterFactory() {}
QuicPacketWriter* TestWriterFactory::Create(QuicServerPacketWriter* writer, QuicPacketWriter* TestWriterFactory::Create(QuicPacketWriter* writer,
QuicConnection* connection) { QuicConnection* connection) {
return new PerConnectionPacketWriter(this, writer, connection); return new PerConnectionPacketWriter(this, writer, connection);
} }
...@@ -687,7 +688,7 @@ void TestWriterFactory::Unregister(PerConnectionPacketWriter* writer) { ...@@ -687,7 +688,7 @@ void TestWriterFactory::Unregister(PerConnectionPacketWriter* writer) {
TestWriterFactory::PerConnectionPacketWriter::PerConnectionPacketWriter( TestWriterFactory::PerConnectionPacketWriter::PerConnectionPacketWriter(
TestWriterFactory* factory, TestWriterFactory* factory,
QuicServerPacketWriter* writer, QuicPacketWriter* writer,
QuicConnection* connection) QuicConnection* connection)
: QuicPerConnectionPacketWriter(writer, connection), : QuicPerConnectionPacketWriter(writer, connection),
factory_(factory) { factory_(factory) {
...@@ -707,7 +708,7 @@ WriteResult TestWriterFactory::PerConnectionPacketWriter::WritePacket( ...@@ -707,7 +708,7 @@ WriteResult TestWriterFactory::PerConnectionPacketWriter::WritePacket(
// in a different way, so TestWriterFactory::OnPacketSent might never be // in a different way, so TestWriterFactory::OnPacketSent might never be
// called. // called.
factory_->current_writer_ = this; factory_->current_writer_ = this;
return QuicPerConnectionPacketWriter::WritePacket(buffer, return tools::QuicPerConnectionPacketWriter::WritePacket(buffer,
buf_len, buf_len,
self_address, self_address,
peer_address); peer_address);
......
...@@ -17,15 +17,15 @@ ...@@ -17,15 +17,15 @@
#include "net/quic/quic_ack_notifier.h" #include "net/quic/quic_ack_notifier.h"
#include "net/quic/quic_client_session_base.h" #include "net/quic/quic_client_session_base.h"
#include "net/quic/quic_connection.h" #include "net/quic/quic_connection.h"
#include "net/quic/quic_dispatcher.h"
#include "net/quic/quic_framer.h" #include "net/quic/quic_framer.h"
#include "net/quic/quic_per_connection_packet_writer.h"
#include "net/quic/quic_protocol.h" #include "net/quic/quic_protocol.h"
#include "net/quic/quic_sent_packet_manager.h" #include "net/quic/quic_sent_packet_manager.h"
#include "net/quic/quic_session.h" #include "net/quic/quic_session.h"
#include "net/quic/test_tools/mock_clock.h" #include "net/quic/test_tools/mock_clock.h"
#include "net/quic/test_tools/mock_random.h" #include "net/quic/test_tools/mock_random.h"
#include "net/spdy/spdy_framer.h" #include "net/spdy/spdy_framer.h"
#include "net/tools/quic/quic_dispatcher.h"
#include "net/tools/quic/quic_per_connection_packet_writer.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace net { namespace net {
...@@ -586,12 +586,12 @@ class MockNetworkChangeVisitor : ...@@ -586,12 +586,12 @@ class MockNetworkChangeVisitor :
// Creates per-connection packet writers that register themselves with the // Creates per-connection packet writers that register themselves with the
// TestWriterFactory on each write so that TestWriterFactory::OnPacketSent can // TestWriterFactory on each write so that TestWriterFactory::OnPacketSent can
// be routed to the appropriate QuicConnection. // be routed to the appropriate QuicConnection.
class TestWriterFactory : public QuicDispatcher::PacketWriterFactory { class TestWriterFactory : public tools::QuicDispatcher::PacketWriterFactory {
public: public:
TestWriterFactory(); TestWriterFactory();
~TestWriterFactory() override; ~TestWriterFactory() override;
QuicPacketWriter* Create(QuicServerPacketWriter* writer, QuicPacketWriter* Create(QuicPacketWriter* writer,
QuicConnection* connection) override; QuicConnection* connection) override;
// Calls OnPacketSent on the last QuicConnection to write through one of the // Calls OnPacketSent on the last QuicConnection to write through one of the
...@@ -599,10 +599,11 @@ class TestWriterFactory : public QuicDispatcher::PacketWriterFactory { ...@@ -599,10 +599,11 @@ class TestWriterFactory : public QuicDispatcher::PacketWriterFactory {
void OnPacketSent(WriteResult result); void OnPacketSent(WriteResult result);
private: private:
class PerConnectionPacketWriter : public QuicPerConnectionPacketWriter { class PerConnectionPacketWriter
: public tools::QuicPerConnectionPacketWriter {
public: public:
PerConnectionPacketWriter(TestWriterFactory* factory, PerConnectionPacketWriter(TestWriterFactory* factory,
QuicServerPacketWriter* writer, QuicPacketWriter* writer,
QuicConnection* connection); QuicConnection* connection);
~PerConnectionPacketWriter() override; ~PerConnectionPacketWriter() override;
......
...@@ -11,11 +11,7 @@ ...@@ -11,11 +11,7 @@
#include "net/quic/quic_blocked_writer_interface.h" #include "net/quic/quic_blocked_writer_interface.h"
#include "net/quic/quic_flags.h" #include "net/quic/quic_flags.h"
#include "net/quic/quic_utils.h" #include "net/quic/quic_utils.h"
#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_per_connection_packet_writer.h"
#include "net/tools/quic/quic_socket_utils.h"
#include "net/tools/quic/quic_time_wait_list_manager.h" #include "net/tools/quic/quic_time_wait_list_manager.h"
namespace net { namespace net {
...@@ -193,9 +189,9 @@ QuicDispatcher::~QuicDispatcher() { ...@@ -193,9 +189,9 @@ QuicDispatcher::~QuicDispatcher() {
STLDeleteElements(&closed_session_list_); STLDeleteElements(&closed_session_list_);
} }
void QuicDispatcher::Initialize(int fd) { void QuicDispatcher::InitializeWithWriter(QuicPacketWriter* writer) {
DCHECK(writer_ == nullptr); DCHECK(writer_ == nullptr);
writer_.reset(CreateWriter(fd)); writer_.reset(writer);
time_wait_list_manager_.reset(CreateQuicTimeWaitListManager()); time_wait_list_manager_.reset(CreateQuicTimeWaitListManager());
} }
...@@ -401,10 +397,6 @@ void QuicDispatcher::OnConnectionRemovedFromTimeWaitList( ...@@ -401,10 +397,6 @@ void QuicDispatcher::OnConnectionRemovedFromTimeWaitList(
DVLOG(1) << "Connection " << connection_id << " removed from time wait list."; DVLOG(1) << "Connection " << connection_id << " removed from time wait list.";
} }
QuicPacketWriter* QuicDispatcher::CreateWriter(int fd) {
return new QuicDefaultPacketWriter(fd);
}
QuicServerSession* QuicDispatcher::CreateQuicSession( QuicServerSession* QuicDispatcher::CreateQuicSession(
QuicConnectionId connection_id, QuicConnectionId connection_id,
const IPEndPoint& server_address, const IPEndPoint& server_address,
......
...@@ -41,7 +41,8 @@ class ProcessPacketInterface { ...@@ -41,7 +41,8 @@ class ProcessPacketInterface {
}; };
class QuicDispatcher : public QuicServerSessionVisitor, class QuicDispatcher : public QuicServerSessionVisitor,
public ProcessPacketInterface { public ProcessPacketInterface,
public QuicBlockedWriterInterface {
public: public:
// Creates per-connection packet writers out of the QuicDispatcher's shared // Creates per-connection packet writers out of the QuicDispatcher's shared
// QuicPacketWriter. The per-connection writers' IsWriteBlocked() state must // QuicPacketWriter. The per-connection writers' IsWriteBlocked() state must
...@@ -80,7 +81,8 @@ class QuicDispatcher : public QuicServerSessionVisitor, ...@@ -80,7 +81,8 @@ class QuicDispatcher : public QuicServerSessionVisitor,
~QuicDispatcher() override; ~QuicDispatcher() override;
virtual void Initialize(int fd); // Takes ownership of |writer|.
void InitializeWithWriter(QuicPacketWriter* writer);
// Process the incoming packet by creating a new session, passing it to // Process the incoming packet by creating a new session, passing it to
// an existing session, or passing it to the TimeWaitListManager. // an existing session, or passing it to the TimeWaitListManager.
...@@ -89,7 +91,7 @@ class QuicDispatcher : public QuicServerSessionVisitor, ...@@ -89,7 +91,7 @@ class QuicDispatcher : public QuicServerSessionVisitor,
const QuicEncryptedPacket& packet) override; const QuicEncryptedPacket& packet) override;
// Called when the socket becomes writable to allow queued writes to happen. // Called when the socket becomes writable to allow queued writes to happen.
virtual void OnCanWrite(); void OnCanWrite() override;
// Returns true if there's anything in the blocked writer list. // Returns true if there's anything in the blocked writer list.
virtual bool HasPendingWrites() const; virtual bool HasPendingWrites() const;
...@@ -122,10 +124,6 @@ class QuicDispatcher : public QuicServerSessionVisitor, ...@@ -122,10 +124,6 @@ class QuicDispatcher : public QuicServerSessionVisitor,
void DeleteSessions(); void DeleteSessions();
protected: protected:
// Instantiates a new low-level packet writer. Caller takes ownership of the
// returned object.
virtual QuicPacketWriter* CreateWriter(int fd);
virtual QuicServerSession* CreateQuicSession( virtual QuicServerSession* CreateQuicSession(
QuicConnectionId connection_id, QuicConnectionId connection_id,
const IPEndPoint& server_address, const IPEndPoint& server_address,
......
...@@ -125,7 +125,7 @@ class QuicDispatcherTest : public ::testing::Test { ...@@ -125,7 +125,7 @@ class QuicDispatcherTest : public ::testing::Test {
time_wait_list_manager_(nullptr), time_wait_list_manager_(nullptr),
session1_(nullptr), session1_(nullptr),
session2_(nullptr) { session2_(nullptr) {
dispatcher_.Initialize(1); dispatcher_.InitializeWithWriter(new QuicDefaultPacketWriter(1));
} }
~QuicDispatcherTest() override {} ~QuicDispatcherTest() override {}
......
...@@ -183,11 +183,15 @@ bool QuicServer::Listen(const IPEndPoint& address) { ...@@ -183,11 +183,15 @@ bool QuicServer::Listen(const IPEndPoint& address) {
epoll_server_.RegisterFD(fd_, this, kEpollFlags); epoll_server_.RegisterFD(fd_, this, kEpollFlags);
dispatcher_.reset(CreateQuicDispatcher()); dispatcher_.reset(CreateQuicDispatcher());
dispatcher_->Initialize(fd_); dispatcher_->InitializeWithWriter(CreateWriter(fd_));
return true; return true;
} }
QuicDefaultPacketWriter* QuicServer::CreateWriter(int fd) {
return new QuicDefaultPacketWriter(fd);
}
QuicDispatcher* QuicServer::CreateQuicDispatcher() { QuicDispatcher* QuicServer::CreateQuicDispatcher() {
return new QuicDispatcher( return new QuicDispatcher(
config_, config_,
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "net/quic/quic_connection_helper.h" #include "net/quic/quic_connection_helper.h"
#include "net/quic/quic_framer.h" #include "net/quic/quic_framer.h"
#include "net/tools/epoll_server/epoll_server.h" #include "net/tools/epoll_server/epoll_server.h"
#include "net/tools/quic/quic_default_packet_writer.h"
namespace net { namespace net {
...@@ -81,6 +82,8 @@ class QuicServer : public EpollCallbackInterface { ...@@ -81,6 +82,8 @@ class QuicServer : public EpollCallbackInterface {
int port() { return port_; } int port() { return port_; }
protected: protected:
virtual QuicDefaultPacketWriter* CreateWriter(int fd);
virtual QuicDispatcher* CreateQuicDispatcher(); virtual QuicDispatcher* CreateQuicDispatcher();
const QuicConfig& config() const { return config_; } const QuicConfig& config() const { return config_; }
......
...@@ -26,7 +26,7 @@ class QuicServerDispatchPacketTest : public ::testing::Test { ...@@ -26,7 +26,7 @@ class QuicServerDispatchPacketTest : public ::testing::Test {
crypto_config_, crypto_config_,
new QuicDispatcher::DefaultPacketWriterFactory(), new QuicDispatcher::DefaultPacketWriterFactory(),
new QuicEpollConnectionHelper(&eps_)) { new QuicEpollConnectionHelper(&eps_)) {
dispatcher_.Initialize(1234); dispatcher_.InitializeWithWriter(new QuicDefaultPacketWriter(1234));
} }
void DispatchPacket(const QuicEncryptedPacket& packet) { void DispatchPacket(const QuicEncryptedPacket& packet) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment