Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Unified Diff: net/quic/quic_dispatcher.cc

Issue 340433002: Port QuicServer to Chrome network stack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Indentation fix Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_dispatcher.cc
diff --git a/net/quic/quic_dispatcher.cc b/net/quic/quic_dispatcher.cc
index 280622da381c178db3b7da98592df0c9664d3787..abb2baf1a20f3f3e1b0d06e250750bc249ad9598 100644
--- a/net/quic/quic_dispatcher.cc
+++ b/net/quic/quic_dispatcher.cc
@@ -177,7 +177,7 @@ QuicDispatcher::~QuicDispatcher() {
STLDeleteElements(&closed_session_list_);
}
-void QuicDispatcher::Initialize(QuicPacketWriter* writer) {
+void QuicDispatcher::Initialize(QuicServerPacketWriter* writer) {
DCHECK(writer_ == NULL);
writer_.reset(writer);
time_wait_list_manager_.reset(CreateQuicTimeWaitListManager());
@@ -301,24 +301,16 @@ void QuicDispatcher::DeleteSessions() {
}
void QuicDispatcher::OnCanWrite() {
- // We got an EPOLLOUT: the socket should not be blocked.
+ // We finished a write: the socket should not be blocked.
writer_->SetWritable();
- // Give each writer one attempt to write.
- int num_writers = write_blocked_list_.size();
- for (int i = 0; i < num_writers; ++i) {
- if (write_blocked_list_.empty()) {
- return;
- }
+ // Let all the blocked writers try to write, until we're blocked again or
+ // there's no work left.
+ while (!write_blocked_list_.empty() && !writer_->IsWriteBlocked()) {
QuicBlockedWriterInterface* blocked_writer =
write_blocked_list_.begin()->first;
write_blocked_list_.erase(write_blocked_list_.begin());
blocked_writer->OnCanWrite();
- if (writer_->IsWriteBlocked()) {
- // We were unable to write. Wait for the next EPOLLOUT. The writer is
- // responsible for adding itself to the blocked list via OnWriteBlocked().
- return;
- }
}
}
@@ -366,9 +358,17 @@ QuicSession* QuicDispatcher::CreateQuicSession(
QuicConnectionId connection_id,
const IPEndPoint& server_address,
const IPEndPoint& client_address) {
+ QuicPerConnectionPacketWriter* per_connection_packet_writer =
+ new QuicPerConnectionPacketWriter(writer_.get());
+ QuicConnection* connection =
+ CreateQuicConnection(connection_id,
+ server_address,
+ client_address,
+ per_connection_packet_writer);
QuicServerSession* session = new QuicServerSession(
config_,
- CreateQuicConnection(connection_id, server_address, client_address),
+ connection,
+ per_connection_packet_writer,
this);
session->InitializeSession(crypto_config_);
return session;
@@ -377,28 +377,31 @@ QuicSession* QuicDispatcher::CreateQuicSession(
QuicConnection* QuicDispatcher::CreateQuicConnection(
QuicConnectionId connection_id,
const IPEndPoint& server_address,
- const IPEndPoint& client_address) {
+ const IPEndPoint& client_address,
+ QuicPerConnectionPacketWriter* writer) {
+ QuicConnection* connection;
if (FLAGS_enable_quic_stream_flow_control_2 &&
FLAGS_enable_quic_connection_flow_control_2) {
DVLOG(1) << "Creating QuicDispatcher with all versions.";
- return new QuicConnection(connection_id, client_address, helper_,
- writer_.get(), true, supported_versions_);
- }
-
- if (FLAGS_enable_quic_stream_flow_control_2 &&
+ connection = new QuicConnection(connection_id, client_address, helper_,
+ writer, true, supported_versions_);
+ } else if (FLAGS_enable_quic_stream_flow_control_2 &&
!FLAGS_enable_quic_connection_flow_control_2) {
DVLOG(1) << "Connection flow control disabled, creating QuicDispatcher "
<< "WITHOUT version 19 or higher.";
- return new QuicConnection(connection_id, client_address, helper_,
- writer_.get(), true,
- supported_versions_no_connection_flow_control_);
- }
-
- DVLOG(1) << "Flow control disabled, creating QuicDispatcher WITHOUT "
- << "version 17 or higher.";
- return new QuicConnection(connection_id, client_address, helper_,
- writer_.get(), true,
- supported_versions_no_flow_control_);
+ connection = new QuicConnection(
+ connection_id, client_address, helper_,
+ writer, true,
+ supported_versions_no_connection_flow_control_);
+ } else {
+ DVLOG(1) << "Flow control disabled, creating QuicDispatcher WITHOUT "
+ << "version 17 or higher.";
+ connection = new QuicConnection(connection_id, client_address, helper_,
+ writer, true,
+ supported_versions_no_flow_control_);
+ }
+ writer->set_connection(connection);
+ return connection;
}
QuicTimeWaitListManager* QuicDispatcher::CreateQuicTimeWaitListManager() {

Powered by Google App Engine
This is Rietveld 408576698