Index: net/tools/quic/quic_dispatcher.cc |
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc |
index e684138f46a00f642480bee5936c47010f089100..20f1157506ad0b30fb28312e7749150caa511e30 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) { |