Chromium Code Reviews| 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* /*framer*/) { |
| + visitor_->OnError(); |
| +} |
| + |
| void BufferedSpdyFramer::OnControl(const SpdyControlFrame* frame) { |
| + frames_received_++; |
|
James Hawkins
2012/02/20 21:45:43
|frames_received_| is uninitialized.
|
| 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); |
| } |