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

Unified Diff: net/spdy/buffered_spdy_framer.cc

Issue 9425023: Refactor BufferedSpdyFramer so that SpdySession is not a visitor of (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Move frame count tracking from SpdySession to BuffereSpdyFramer Created 8 years, 10 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/spdy/buffered_spdy_framer.cc
===================================================================
--- net/spdy/buffered_spdy_framer.cc (revision 122608)
+++ net/spdy/buffered_spdy_framer.cc (working copy)
@@ -22,22 +22,52 @@
void BufferedSpdyFramer::set_visitor(
BufferedSpdyFramerVisitorInterface* visitor) {
visitor_ = visitor;
- spdy_framer_.set_visitor(visitor);
+ spdy_framer_.set_visitor(this);
}
+void BufferedSpdyFramer::OnError(spdy::SpdyFramer*) {
+ visitor_->OnError();
+}
+
void BufferedSpdyFramer::OnControl(const SpdyControlFrame* frame) {
+ frames_received_++;
switch (frame->type()) {
case SYN_STREAM:
case SYN_REPLY:
case HEADERS:
InitHeaderStreaming(frame);
break;
+ case spdy::GOAWAY:
+ visitor_->OnGoAway(
+ *reinterpret_cast<const spdy::SpdyGoAwayControlFrame*>(frame));
+ break;
+ case spdy::PING:
+ visitor_->OnPing(
+ *reinterpret_cast<const spdy::SpdyPingControlFrame*>(frame));
+ break;
+ case spdy::SETTINGS:
+ visitor_->OnSettings(
+ *reinterpret_cast<const spdy::SpdySettingsControlFrame*>(frame));
+ break;
+ case spdy::RST_STREAM:
+ visitor_->OnRstStream(
+ *reinterpret_cast<const spdy::SpdyRstStreamControlFrame*>(frame));
+ break;
+ case spdy::WINDOW_UPDATE:
+ visitor_->OnWindowUpdate(
+ *reinterpret_cast<const spdy::SpdyWindowUpdateControlFrame*>(frame));
+ break;
default:
- DCHECK(false); // Error!
- break;
+ NOTREACHED(); // Error!
}
}
+bool BufferedSpdyFramer::OnCredentialFrameData(const char* frame_data,
+ size_t len) {
+ DCHECK(false);
+ return false;
+}
+
bool BufferedSpdyFramer::OnControlFrameHeaderData(SpdyStreamId stream_id,
const char* header_data,
size_t len) {
@@ -52,13 +82,14 @@
header_buffer_, header_buffer_used_, headers.get());
if (!parsed_headers) {
LOG(WARNING) << "Could not parse Spdy Control Frame Header.";
+ visitor_->OnStreamError(stream_id);
return false;
}
SpdyControlFrame* control_frame =
reinterpret_cast<SpdyControlFrame*>(control_frame_.get());
switch (control_frame->type()) {
case SYN_STREAM:
- visitor_->OnSyn(
+ visitor_->OnSynStream(
*reinterpret_cast<const SpdySynStreamControlFrame*>(
control_frame), headers);
break;
@@ -82,6 +113,7 @@
const size_t available = kHeaderBufferSize - header_buffer_used_;
if (len > available) {
header_buffer_valid_ = false;
+ visitor_->OnStreamError(stream_id);
return false;
}
memcpy(header_buffer_ + header_buffer_used_, header_data, len);
@@ -90,9 +122,17 @@
}
void BufferedSpdyFramer::OnDataFrameHeader(const SpdyDataFrame* frame) {
+ frames_received_++;
header_stream_id_ = frame->stream_id();
}
+void BufferedSpdyFramer::OnStreamFrameData(SpdyStreamId stream_id,
+ const char* data,
+ size_t len) {
+ visitor_->OnStreamFrameData(stream_id, data, len);
+}
+
+
size_t BufferedSpdyFramer::ProcessInput(const char* data, size_t len) {
return spdy_framer_.ProcessInput(data, len);
}

Powered by Google App Engine
This is Rietveld 408576698