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

Unified Diff: net/quic/quic_connection.cc

Issue 340433002: Port QuicServer to Chrome network stack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments and fix blocked writers using callbacks 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_connection.cc
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc
index d4f1593616651437b1ad11ee4463f3df80c32f70..9228b91091071702c7287cca330ff7d654666069 100644
--- a/net/quic/quic_connection.cc
+++ b/net/quic/quic_connection.cc
@@ -235,7 +235,8 @@ QuicConnection::QuicConnection(QuicConnectionId connection_id,
peer_ip_changed_(false),
peer_port_changed_(false),
self_ip_changed_(false),
- self_port_changed_(false) {
+ self_port_changed_(false),
+ weak_factory_(this) {
if (!is_server_) {
// Pacing will be enabled if the client negotiates it.
sent_packet_manager_.MaybeEnablePacing();
@@ -970,8 +971,11 @@ void QuicConnection::SendVersionNegotiationPacket() {
packet_generator_.SerializeVersionNegotiationPacket(
framer_.supported_versions()));
WriteResult result = writer_->WritePacket(
- version_packet->data(), version_packet->length(),
- self_address().address(), peer_address());
+ version_packet->data(),
+ version_packet->length(),
+ self_address().address(),
+ peer_address(),
+ base::Callback<void(WriteResult wr)>());
if (result.status == WRITE_STATUS_ERROR) {
// We can't send an error as the socket is presumably borked.
@@ -1390,10 +1394,13 @@ bool QuicConnection::WritePacket(QueuedPacket packet) {
DCHECK(pending_write_.get() == NULL);
pending_write_.reset(new QueuedPacket(packet));
- WriteResult result = writer_->WritePacket(encrypted->data(),
- encrypted->length(),
- self_address().address(),
- peer_address());
+ WriteResult result = writer_->WritePacket(
+ encrypted->data(),
+ encrypted->length(),
+ self_address().address(),
+ peer_address(),
+ base::Bind(base::IgnoreResult(&QuicConnection::OnPacketSent),
+ weak_factory_.GetWeakPtr()));
if (result.error_code == ERR_IO_PENDING) {
DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status);
}

Powered by Google App Engine
This is Rietveld 408576698