diff options
Diffstat (limited to 'net/tools/quic/quic_dispatcher.cc')
-rw-r--r-- | net/tools/quic/quic_dispatcher.cc | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc index dcb8d6a..e5fecc9 100644 --- a/net/tools/quic/quic_dispatcher.cc +++ b/net/tools/quic/quic_dispatcher.cc @@ -12,9 +12,11 @@ #include "net/quic/quic_utils.h" #include "net/tools/quic/quic_default_packet_writer.h" #include "net/tools/quic/quic_epoll_connection_helper.h" +#include "net/tools/quic/quic_packet_writer_wrapper.h" #include "net/tools/quic/quic_socket_utils.h" namespace net { + namespace tools { using base::StringPiece; @@ -39,8 +41,7 @@ class DeleteSessionsAlarm : public EpollAlarm { class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface { public: explicit QuicFramerVisitor(QuicDispatcher* dispatcher) - : dispatcher_(dispatcher) { - } + : dispatcher_(dispatcher) {} // QuicFramerVisitorInterface implementation virtual void OnPacket() OVERRIDE {} @@ -123,17 +124,12 @@ class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface { QuicDispatcher::QuicDispatcher(const QuicConfig& config, const QuicCryptoServerConfig& crypto_config, const QuicVersionVector& supported_versions, - int fd, EpollServer* epoll_server) : config_(config), crypto_config_(crypto_config), - time_wait_list_manager_( - new QuicTimeWaitListManager(this, epoll_server, supported_versions)), delete_sessions_alarm_(new DeleteSessionsAlarm(this)), epoll_server_(epoll_server), - fd_(fd), helper_(new QuicEpollConnectionHelper(epoll_server_)), - writer_(new QuicDefaultPacketWriter(fd)), supported_versions_(supported_versions), current_packet_(NULL), framer_(supported_versions, /*unused*/ QuicTime::Zero(), true), @@ -146,9 +142,12 @@ QuicDispatcher::~QuicDispatcher() { STLDeleteElements(&closed_session_list_); } -void QuicDispatcher::set_fd(int fd) { - fd_ = fd; - writer_.reset(new QuicDefaultPacketWriter(fd)); +void QuicDispatcher::Initialize(int fd) { + DCHECK(writer_ == NULL); + writer_.reset(CreateWriterWrapper(CreateWriter(fd))); + time_wait_list_manager_.reset( + new QuicTimeWaitListManager(writer_.get(), this, + epoll_server(), supported_versions())); } // TODO(fnk): remove the Writer interface implementation in favor of @@ -332,6 +331,11 @@ void QuicDispatcher::OnConnectionClosed(QuicGuid guid, QuicErrorCode error) { CleanUpSession(it); } +void QuicDispatcher::OnWriteBlocked(QuicBlockedWriterInterface* writer) { + DCHECK(writer_->IsWriteBlocked()); + write_blocked_list_.insert(make_pair(writer, true)); +} + QuicSession* QuicDispatcher::CreateQuicSession( QuicGuid guid, const IPEndPoint& server_address, @@ -343,6 +347,19 @@ QuicSession* QuicDispatcher::CreateQuicSession( return session; } +QuicPacketWriter* QuicDispatcher::CreateWriter(int fd) { + return new QuicDefaultPacketWriter(fd); +} + +QuicPacketWriterWrapper* QuicDispatcher::CreateWriterWrapper( + QuicPacketWriter* writer) { + return new QuicPacketWriterWrapper(writer); +} + +void QuicDispatcher::set_writer(QuicPacketWriter* writer) { + writer_->set_writer(writer); +} + bool QuicDispatcher::HandlePacketForTimeWait( const QuicPacketPublicHeader& header) { if (header.reset_flag) { |