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

Unified Diff: net/quic/quic_packet_reader.cc

Issue 1009803003: Factor out the QUIC socket reading code into a stand alone QuicPacketReader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 5 years, 9 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_packet_reader.cc
diff --git a/net/quic/quic_packet_reader.cc b/net/quic/quic_packet_reader.cc
new file mode 100644
index 0000000000000000000000000000000000000000..30b690d3e0499b76923d3833a2258bd211cbcfac
--- /dev/null
+++ b/net/quic/quic_packet_reader.cc
@@ -0,0 +1,79 @@
+
ramant (doing other things) 2015/03/19 19:12:35 nit: extra blank line.
Ryan Hamilton 2015/03/19 19:54:49 Done.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/quic/quic_packet_reader.h"
+
+#include "base/metrics/histogram.h"
+#include "net/base/net_errors.h"
+
+namespace net {
+
+QuicPacketReader::QuicPacketReader(DatagramClientSocket* socket,
+ Visitor* visitor,
+ const BoundNetLog& net_log)
+ : socket_(socket),
+ visitor_(visitor),
+ read_pending_(false),
+ num_packets_read_(0),
+ read_buffer_(new IOBufferWithSize(kMaxPacketSize)),
+ net_log_(net_log),
+ weak_factory_(this) {
+}
+
+QuicPacketReader::~QuicPacketReader() {
+}
+
+void QuicPacketReader::StartReading() {
+ if (read_pending_) {
+ return;
+ }
+ DCHECK(socket_);
+ read_pending_ = true;
+ int rv = socket_->Read(read_buffer_.get(), read_buffer_->size(),
+ base::Bind(&QuicPacketReader::OnReadComplete,
+ weak_factory_.GetWeakPtr()));
+ UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.AsyncRead", rv == ERR_IO_PENDING);
+ if (rv == ERR_IO_PENDING) {
+ num_packets_read_ = 0;
+ return;
+ }
+
+ if (++num_packets_read_ > 32) {
+ num_packets_read_ = 0;
+ // Data was read, process it.
+ // Schedule the work through the message loop to 1) prevent infinite
+ // recursion and 2) avoid blocking the thread for too long.
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&QuicPacketReader::OnReadComplete,
+ weak_factory_.GetWeakPtr(), rv));
+ } else {
+ OnReadComplete(rv);
+ }
+}
+
+void QuicPacketReader::OnReadComplete(int result) {
+ read_pending_ = false;
+ if (result == 0)
ramant (doing other things) 2015/03/19 19:12:35 overly nit: this was there in the old code. At lin
Ryan Hamilton 2015/03/19 19:54:49 Good catch. I'll fix line 29 to use chrome style s
+ result = ERR_CONNECTION_CLOSED;
+
+ if (result < 0) {
+ visitor_->OnReadError(result);
+ return;
+ }
+
+ QuicEncryptedPacket packet(read_buffer_->data(), result);
+ IPEndPoint local_address;
+ IPEndPoint peer_address;
+ socket_->GetLocalAddress(&local_address);
+ socket_->GetPeerAddress(&peer_address);
+ // ProcessUdpPacket might result in |this| being deleted, so we
ramant (doing other things) 2015/03/19 19:12:35 nit: Should we change "ProcessUdpPacket" to "OnPac
Ryan Hamilton 2015/03/19 19:54:49 Thanks, again. I should have just removed that com
+ // use a weak pointer to be safe.
+ if (!visitor_->OnPacket(packet, local_address, peer_address))
+ return;
+
+ StartReading();
+}
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698