Index: net/spdy/buffered_spdy_framer.cc |
diff --git a/net/spdy/buffered_spdy_framer.cc b/net/spdy/buffered_spdy_framer.cc |
deleted file mode 100644 |
index 568507e5bb407a1f635c6817d97bc2f2fea83b1a..0000000000000000000000000000000000000000 |
--- a/net/spdy/buffered_spdy_framer.cc |
+++ /dev/null |
@@ -1,412 +0,0 @@ |
-// 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/spdy/buffered_spdy_framer.h" |
- |
-#include "base/logging.h" |
- |
-namespace net { |
- |
-SpdyMajorVersion NextProtoToSpdyMajorVersion(NextProto next_proto) { |
- switch (next_proto) { |
- case kProtoDeprecatedSPDY2: |
- return SPDY2; |
- case kProtoSPDY3: |
- case kProtoSPDY31: |
- return SPDY3; |
- case kProtoSPDY4_14: |
- case kProtoSPDY4_15: |
- return SPDY4; |
- case kProtoUnknown: |
- case kProtoHTTP11: |
- case kProtoQUIC1SPDY3: |
- break; |
- } |
- NOTREACHED(); |
- return SPDY2; |
-} |
- |
-BufferedSpdyFramer::BufferedSpdyFramer(SpdyMajorVersion version, |
- bool enable_compression) |
- : spdy_framer_(version), |
- visitor_(NULL), |
- header_buffer_used_(0), |
- header_buffer_valid_(false), |
- header_stream_id_(SpdyFramer::kInvalidStream), |
- frames_received_(0) { |
- spdy_framer_.set_enable_compression(enable_compression); |
- memset(header_buffer_, 0, sizeof(header_buffer_)); |
-} |
- |
-BufferedSpdyFramer::~BufferedSpdyFramer() { |
-} |
- |
-void BufferedSpdyFramer::set_visitor( |
- BufferedSpdyFramerVisitorInterface* visitor) { |
- visitor_ = visitor; |
- spdy_framer_.set_visitor(this); |
-} |
- |
-void BufferedSpdyFramer::set_debug_visitor( |
- SpdyFramerDebugVisitorInterface* debug_visitor) { |
- spdy_framer_.set_debug_visitor(debug_visitor); |
-} |
- |
-void BufferedSpdyFramer::OnError(SpdyFramer* spdy_framer) { |
- DCHECK(spdy_framer); |
- visitor_->OnError(spdy_framer->error_code()); |
-} |
- |
-void BufferedSpdyFramer::OnSynStream(SpdyStreamId stream_id, |
- SpdyStreamId associated_stream_id, |
- SpdyPriority priority, |
- bool fin, |
- bool unidirectional) { |
- frames_received_++; |
- DCHECK(!control_frame_fields_.get()); |
- control_frame_fields_.reset(new ControlFrameFields()); |
- control_frame_fields_->type = SYN_STREAM; |
- control_frame_fields_->stream_id = stream_id; |
- control_frame_fields_->associated_stream_id = associated_stream_id; |
- control_frame_fields_->priority = priority; |
- control_frame_fields_->fin = fin; |
- control_frame_fields_->unidirectional = unidirectional; |
- |
- InitHeaderStreaming(stream_id); |
-} |
- |
-void BufferedSpdyFramer::OnHeaders(SpdyStreamId stream_id, |
- bool has_priority, |
- SpdyPriority priority, |
- bool fin, |
- bool end) { |
- frames_received_++; |
- DCHECK(!control_frame_fields_.get()); |
- control_frame_fields_.reset(new ControlFrameFields()); |
- control_frame_fields_->type = HEADERS; |
- control_frame_fields_->stream_id = stream_id; |
- control_frame_fields_->has_priority = has_priority; |
- if (control_frame_fields_->has_priority) { |
- control_frame_fields_->priority = priority; |
- } |
- control_frame_fields_->fin = fin; |
- |
- InitHeaderStreaming(stream_id); |
-} |
- |
-void BufferedSpdyFramer::OnSynReply(SpdyStreamId stream_id, |
- bool fin) { |
- frames_received_++; |
- DCHECK(!control_frame_fields_.get()); |
- control_frame_fields_.reset(new ControlFrameFields()); |
- control_frame_fields_->type = SYN_REPLY; |
- control_frame_fields_->stream_id = stream_id; |
- control_frame_fields_->fin = fin; |
- |
- InitHeaderStreaming(stream_id); |
-} |
- |
-bool BufferedSpdyFramer::OnControlFrameHeaderData(SpdyStreamId stream_id, |
- const char* header_data, |
- size_t len) { |
- CHECK_EQ(header_stream_id_, stream_id); |
- |
- if (len == 0) { |
- // Indicates end-of-header-block. |
- CHECK(header_buffer_valid_); |
- |
- SpdyHeaderBlock headers; |
- size_t parsed_len = spdy_framer_.ParseHeaderBlockInBuffer( |
- header_buffer_, header_buffer_used_, &headers); |
- // TODO(rch): this really should be checking parsed_len != len, |
- // but a bunch of tests fail. Need to figure out why. |
- if (parsed_len == 0) { |
- visitor_->OnStreamError( |
- stream_id, "Could not parse Spdy Control Frame Header."); |
- return false; |
- } |
- DCHECK(control_frame_fields_.get()); |
- switch (control_frame_fields_->type) { |
- case SYN_STREAM: |
- visitor_->OnSynStream(control_frame_fields_->stream_id, |
- control_frame_fields_->associated_stream_id, |
- control_frame_fields_->priority, |
- control_frame_fields_->fin, |
- control_frame_fields_->unidirectional, |
- headers); |
- break; |
- case SYN_REPLY: |
- visitor_->OnSynReply(control_frame_fields_->stream_id, |
- control_frame_fields_->fin, |
- headers); |
- break; |
- case HEADERS: |
- visitor_->OnHeaders(control_frame_fields_->stream_id, |
- control_frame_fields_->has_priority, |
- control_frame_fields_->priority, |
- control_frame_fields_->fin, |
- headers); |
- break; |
- case PUSH_PROMISE: |
- DCHECK_LT(SPDY3, protocol_version()); |
- visitor_->OnPushPromise(control_frame_fields_->stream_id, |
- control_frame_fields_->promised_stream_id, |
- headers); |
- break; |
- default: |
- DCHECK(false) << "Unexpect control frame type: " |
- << control_frame_fields_->type; |
- break; |
- } |
- control_frame_fields_.reset(NULL); |
- return true; |
- } |
- |
- const size_t available = kHeaderBufferSize - header_buffer_used_; |
- if (len > available) { |
- header_buffer_valid_ = false; |
- visitor_->OnStreamError( |
- stream_id, "Received more data than the allocated size."); |
- return false; |
- } |
- memcpy(header_buffer_ + header_buffer_used_, header_data, len); |
- header_buffer_used_ += len; |
- return true; |
-} |
- |
-void BufferedSpdyFramer::OnDataFrameHeader(SpdyStreamId stream_id, |
- size_t length, |
- bool fin) { |
- frames_received_++; |
- header_stream_id_ = stream_id; |
- visitor_->OnDataFrameHeader(stream_id, length, fin); |
-} |
- |
-void BufferedSpdyFramer::OnStreamFrameData(SpdyStreamId stream_id, |
- const char* data, |
- size_t len, |
- bool fin) { |
- visitor_->OnStreamFrameData(stream_id, data, len, fin); |
-} |
- |
-void BufferedSpdyFramer::OnSettings(bool clear_persisted) { |
- visitor_->OnSettings(clear_persisted); |
-} |
- |
-void BufferedSpdyFramer::OnSetting(SpdySettingsIds id, |
- uint8 flags, |
- uint32 value) { |
- visitor_->OnSetting(id, flags, value); |
-} |
- |
-void BufferedSpdyFramer::OnSettingsAck() { |
- visitor_->OnSettingsAck(); |
-} |
- |
-void BufferedSpdyFramer::OnSettingsEnd() { |
- visitor_->OnSettingsEnd(); |
-} |
- |
-void BufferedSpdyFramer::OnPing(SpdyPingId unique_id, bool is_ack) { |
- visitor_->OnPing(unique_id, is_ack); |
-} |
- |
-void BufferedSpdyFramer::OnRstStream(SpdyStreamId stream_id, |
- SpdyRstStreamStatus status) { |
- visitor_->OnRstStream(stream_id, status); |
-} |
-void BufferedSpdyFramer::OnGoAway(SpdyStreamId last_accepted_stream_id, |
- SpdyGoAwayStatus status) { |
- visitor_->OnGoAway(last_accepted_stream_id, status); |
-} |
- |
-void BufferedSpdyFramer::OnWindowUpdate(SpdyStreamId stream_id, |
- uint32 delta_window_size) { |
- visitor_->OnWindowUpdate(stream_id, delta_window_size); |
-} |
- |
-void BufferedSpdyFramer::OnPushPromise(SpdyStreamId stream_id, |
- SpdyStreamId promised_stream_id, |
- bool end) { |
- DCHECK_LT(SPDY3, protocol_version()); |
- frames_received_++; |
- DCHECK(!control_frame_fields_.get()); |
- control_frame_fields_.reset(new ControlFrameFields()); |
- control_frame_fields_->type = PUSH_PROMISE; |
- control_frame_fields_->stream_id = stream_id; |
- control_frame_fields_->promised_stream_id = promised_stream_id; |
- |
- InitHeaderStreaming(stream_id); |
-} |
- |
-void BufferedSpdyFramer::OnContinuation(SpdyStreamId stream_id, bool end) { |
-} |
- |
-bool BufferedSpdyFramer::OnUnknownFrame(SpdyStreamId stream_id, |
- int frame_type) { |
- return visitor_->OnUnknownFrame(stream_id, frame_type); |
-} |
- |
-SpdyMajorVersion BufferedSpdyFramer::protocol_version() { |
- return spdy_framer_.protocol_version(); |
-} |
- |
-size_t BufferedSpdyFramer::ProcessInput(const char* data, size_t len) { |
- return spdy_framer_.ProcessInput(data, len); |
-} |
- |
-void BufferedSpdyFramer::Reset() { |
- spdy_framer_.Reset(); |
-} |
- |
-SpdyFramer::SpdyError BufferedSpdyFramer::error_code() const { |
- return spdy_framer_.error_code(); |
-} |
- |
-SpdyFramer::SpdyState BufferedSpdyFramer::state() const { |
- return spdy_framer_.state(); |
-} |
- |
-bool BufferedSpdyFramer::MessageFullyRead() { |
- return state() == SpdyFramer::SPDY_AUTO_RESET; |
-} |
- |
-bool BufferedSpdyFramer::HasError() { |
- return spdy_framer_.HasError(); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer |
-// SpdySynStreamIR). |
-SpdyFrame* BufferedSpdyFramer::CreateSynStream( |
- SpdyStreamId stream_id, |
- SpdyStreamId associated_stream_id, |
- SpdyPriority priority, |
- SpdyControlFlags flags, |
- const SpdyHeaderBlock* headers) { |
- SpdySynStreamIR syn_stream(stream_id); |
- syn_stream.set_associated_to_stream_id(associated_stream_id); |
- syn_stream.set_priority(priority); |
- syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
- syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
- // TODO(hkhalil): Avoid copy here. |
- syn_stream.set_name_value_block(*headers); |
- return spdy_framer_.SerializeSynStream(syn_stream); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer |
-// SpdySynReplyIR). |
-SpdyFrame* BufferedSpdyFramer::CreateSynReply( |
- SpdyStreamId stream_id, |
- SpdyControlFlags flags, |
- const SpdyHeaderBlock* headers) { |
- SpdySynReplyIR syn_reply(stream_id); |
- syn_reply.set_fin(flags & CONTROL_FLAG_FIN); |
- // TODO(hkhalil): Avoid copy here. |
- syn_reply.set_name_value_block(*headers); |
- return spdy_framer_.SerializeSynReply(syn_reply); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer |
-// SpdyRstStreamIR). |
-SpdyFrame* BufferedSpdyFramer::CreateRstStream( |
- SpdyStreamId stream_id, |
- SpdyRstStreamStatus status) const { |
- // RST_STREAM payloads are not part of any SPDY spec. |
- // SpdyFramer will accept them, but don't create them. |
- SpdyRstStreamIR rst_ir(stream_id, status, ""); |
- return spdy_framer_.SerializeRstStream(rst_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer |
-// SpdySettingsIR). |
-SpdyFrame* BufferedSpdyFramer::CreateSettings( |
- const SettingsMap& values) const { |
- SpdySettingsIR settings_ir; |
- for (SettingsMap::const_iterator it = values.begin(); |
- it != values.end(); |
- ++it) { |
- settings_ir.AddSetting( |
- it->first, |
- (it->second.first & SETTINGS_FLAG_PLEASE_PERSIST) != 0, |
- (it->second.first & SETTINGS_FLAG_PERSISTED) != 0, |
- it->second.second); |
- } |
- return spdy_framer_.SerializeSettings(settings_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPingIR). |
-SpdyFrame* BufferedSpdyFramer::CreatePingFrame(SpdyPingId unique_id, |
- bool is_ack) const { |
- SpdyPingIR ping_ir(unique_id); |
- ping_ir.set_is_ack(is_ack); |
- return spdy_framer_.SerializePing(ping_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer SpdyGoAwayIR). |
-SpdyFrame* BufferedSpdyFramer::CreateGoAway( |
- SpdyStreamId last_accepted_stream_id, |
- SpdyGoAwayStatus status) const { |
- SpdyGoAwayIR go_ir(last_accepted_stream_id, status, ""); |
- return spdy_framer_.SerializeGoAway(go_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer SpdyHeadersIR). |
-SpdyFrame* BufferedSpdyFramer::CreateHeaders( |
- SpdyStreamId stream_id, |
- SpdyControlFlags flags, |
- SpdyPriority priority, |
- const SpdyHeaderBlock* headers) { |
- SpdyHeadersIR headers_ir(stream_id); |
- headers_ir.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
- if (flags & HEADERS_FLAG_PRIORITY) { |
- headers_ir.set_has_priority(true); |
- headers_ir.set_priority(priority); |
- } |
- headers_ir.set_name_value_block(*headers); |
- return spdy_framer_.SerializeHeaders(headers_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer |
-// SpdyWindowUpdateIR). |
-SpdyFrame* BufferedSpdyFramer::CreateWindowUpdate( |
- SpdyStreamId stream_id, |
- uint32 delta_window_size) const { |
- SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); |
- return spdy_framer_.SerializeWindowUpdate(update_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer SpdyDataIR). |
-SpdyFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, |
- const char* data, |
- uint32 len, |
- SpdyDataFlags flags) { |
- SpdyDataIR data_ir(stream_id, |
- base::StringPiece(data, len)); |
- data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); |
- return spdy_framer_.SerializeData(data_ir); |
-} |
- |
-// TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR). |
-SpdyFrame* BufferedSpdyFramer::CreatePushPromise( |
- SpdyStreamId stream_id, |
- SpdyStreamId promised_stream_id, |
- const SpdyHeaderBlock* headers) { |
- SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id); |
- push_promise_ir.set_name_value_block(*headers); |
- return spdy_framer_.SerializePushPromise(push_promise_ir); |
-} |
- |
-SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { |
- return spdy_framer_.GetHighestPriority(); |
-} |
- |
-void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { |
- memset(header_buffer_, 0, kHeaderBufferSize); |
- header_buffer_used_ = 0; |
- header_buffer_valid_ = true; |
- header_stream_id_ = stream_id; |
- DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
-} |
- |
-} // namespace net |