| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_headers_stream.h" | 5 #include "net/quic/quic_headers_stream.h" |
| 6 | 6 |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "net/quic/quic_session.h" | 8 #include "net/quic/quic_spdy_session.h" |
| 9 | 9 |
| 10 using base::StringPiece; | 10 using base::StringPiece; |
| 11 using std::string; | 11 using std::string; |
| 12 | 12 |
| 13 namespace net { | 13 namespace net { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 const QuicStreamId kInvalidStreamId = 0; | 17 const QuicStreamId kInvalidStreamId = 0; |
| 18 | 18 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 } | 162 } |
| 163 } | 163 } |
| 164 | 164 |
| 165 private: | 165 private: |
| 166 SpdyMajorVersion spdy_version_; | 166 SpdyMajorVersion spdy_version_; |
| 167 QuicHeadersStream* stream_; | 167 QuicHeadersStream* stream_; |
| 168 | 168 |
| 169 DISALLOW_COPY_AND_ASSIGN(SpdyFramerVisitor); | 169 DISALLOW_COPY_AND_ASSIGN(SpdyFramerVisitor); |
| 170 }; | 170 }; |
| 171 | 171 |
| 172 QuicHeadersStream::QuicHeadersStream(QuicSession* session) | 172 QuicHeadersStream::QuicHeadersStream(QuicSpdySession* session) |
| 173 : ReliableQuicStream(kHeadersStreamId, session), | 173 : ReliableQuicStream(kHeadersStreamId, session), |
| 174 spdy_session_(session), |
| 174 stream_id_(kInvalidStreamId), | 175 stream_id_(kInvalidStreamId), |
| 175 fin_(false), | 176 fin_(false), |
| 176 frame_len_(0), | 177 frame_len_(0), |
| 177 spdy_framer_(SPDY4), | 178 spdy_framer_(SPDY4), |
| 178 spdy_framer_visitor_(new SpdyFramerVisitor(SPDY4, this)) { | 179 spdy_framer_visitor_(new SpdyFramerVisitor(SPDY4, this)) { |
| 179 spdy_framer_.set_visitor(spdy_framer_visitor_.get()); | 180 spdy_framer_.set_visitor(spdy_framer_visitor_.get()); |
| 180 spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get()); | 181 spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get()); |
| 181 // The headers stream is exempt from connection level flow control. | 182 // The headers stream is exempt from connection level flow control. |
| 182 DisableConnectionFlowControlForThisStream(); | 183 DisableConnectionFlowControlForThisStream(); |
| 183 } | 184 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 bool fin) { | 217 bool fin) { |
| 217 if (session()->perspective() == Perspective::IS_CLIENT) { | 218 if (session()->perspective() == Perspective::IS_CLIENT) { |
| 218 CloseConnectionWithDetails( | 219 CloseConnectionWithDetails( |
| 219 QUIC_INVALID_HEADERS_STREAM_DATA, | 220 QUIC_INVALID_HEADERS_STREAM_DATA, |
| 220 "SPDY SYN_STREAM frame received at the client"); | 221 "SPDY SYN_STREAM frame received at the client"); |
| 221 return; | 222 return; |
| 222 } | 223 } |
| 223 DCHECK_EQ(kInvalidStreamId, stream_id_); | 224 DCHECK_EQ(kInvalidStreamId, stream_id_); |
| 224 stream_id_ = stream_id; | 225 stream_id_ = stream_id; |
| 225 fin_ = fin; | 226 fin_ = fin; |
| 226 session()->OnStreamHeadersPriority(stream_id, priority); | 227 spdy_session_->OnStreamHeadersPriority(stream_id, priority); |
| 227 } | 228 } |
| 228 | 229 |
| 229 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { | 230 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { |
| 230 if (session()->perspective() == Perspective::IS_SERVER) { | 231 if (session()->perspective() == Perspective::IS_SERVER) { |
| 231 CloseConnectionWithDetails( | 232 CloseConnectionWithDetails( |
| 232 QUIC_INVALID_HEADERS_STREAM_DATA, | 233 QUIC_INVALID_HEADERS_STREAM_DATA, |
| 233 "SPDY SYN_REPLY frame received at the server"); | 234 "SPDY SYN_REPLY frame received at the server"); |
| 234 return; | 235 return; |
| 235 } | 236 } |
| 236 DCHECK_EQ(kInvalidStreamId, stream_id_); | 237 DCHECK_EQ(kInvalidStreamId, stream_id_); |
| 237 stream_id_ = stream_id; | 238 stream_id_ = stream_id; |
| 238 fin_ = fin; | 239 fin_ = fin; |
| 239 } | 240 } |
| 240 | 241 |
| 241 void QuicHeadersStream::OnControlFrameHeaderData(SpdyStreamId stream_id, | 242 void QuicHeadersStream::OnControlFrameHeaderData(SpdyStreamId stream_id, |
| 242 const char* header_data, | 243 const char* header_data, |
| 243 size_t len) { | 244 size_t len) { |
| 244 DCHECK_EQ(stream_id_, stream_id); | 245 DCHECK_EQ(stream_id_, stream_id); |
| 245 if (len == 0) { | 246 if (len == 0) { |
| 246 DCHECK_NE(0u, stream_id_); | 247 DCHECK_NE(0u, stream_id_); |
| 247 DCHECK_NE(0u, frame_len_); | 248 DCHECK_NE(0u, frame_len_); |
| 248 session()->OnStreamHeadersComplete(stream_id_, fin_, frame_len_); | 249 spdy_session_->OnStreamHeadersComplete(stream_id_, fin_, frame_len_); |
| 249 // Reset state for the next frame. | 250 // Reset state for the next frame. |
| 250 stream_id_ = kInvalidStreamId; | 251 stream_id_ = kInvalidStreamId; |
| 251 fin_ = false; | 252 fin_ = false; |
| 252 frame_len_ = 0; | 253 frame_len_ = 0; |
| 253 } else { | 254 } else { |
| 254 session()->OnStreamHeaders(stream_id_, StringPiece(header_data, len)); | 255 spdy_session_->OnStreamHeaders(stream_id_, StringPiece(header_data, len)); |
| 255 } | 256 } |
| 256 } | 257 } |
| 257 | 258 |
| 258 void QuicHeadersStream::OnCompressedFrameSize(size_t frame_len) { | 259 void QuicHeadersStream::OnCompressedFrameSize(size_t frame_len) { |
| 259 frame_len_ += frame_len; | 260 frame_len_ += frame_len; |
| 260 } | 261 } |
| 261 | 262 |
| 262 bool QuicHeadersStream::IsConnected() { | 263 bool QuicHeadersStream::IsConnected() { |
| 263 return session()->connection()->connected(); | 264 return session()->connection()->connected(); |
| 264 } | 265 } |
| 265 | 266 |
| 266 } // namespace net | 267 } // namespace net |
| OLD | NEW |