| 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_session.h" |
| 9 | 9 |
| 10 using base::StringPiece; | 10 using base::StringPiece; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 QuicHeadersStream::~QuicHeadersStream() {} | 215 QuicHeadersStream::~QuicHeadersStream() {} |
| 216 | 216 |
| 217 size_t QuicHeadersStream::WriteHeaders( | 217 size_t QuicHeadersStream::WriteHeaders( |
| 218 QuicStreamId stream_id, | 218 QuicStreamId stream_id, |
| 219 const SpdyHeaderBlock& headers, | 219 const SpdyHeaderBlock& headers, |
| 220 bool fin, | 220 bool fin, |
| 221 QuicPriority priority, | 221 QuicPriority priority, |
| 222 QuicAckNotifier::DelegateInterface* ack_notifier_delegate) { | 222 QuicAckNotifier::DelegateInterface* ack_notifier_delegate) { |
| 223 scoped_ptr<SpdySerializedFrame> frame; | 223 scoped_ptr<SpdySerializedFrame> frame; |
| 224 if (spdy_framer_->protocol_version() == SPDY3) { | 224 if (spdy_framer_->protocol_version() == SPDY3) { |
| 225 if (session()->is_server()) { | 225 if (session()->perspective() == Perspective::IS_SERVER) { |
| 226 SpdySynReplyIR syn_reply(stream_id); | 226 SpdySynReplyIR syn_reply(stream_id); |
| 227 syn_reply.set_name_value_block(headers); | 227 syn_reply.set_name_value_block(headers); |
| 228 syn_reply.set_fin(fin); | 228 syn_reply.set_fin(fin); |
| 229 frame.reset(spdy_framer_->SerializeFrame(syn_reply)); | 229 frame.reset(spdy_framer_->SerializeFrame(syn_reply)); |
| 230 } else { | 230 } else { |
| 231 SpdySynStreamIR syn_stream(stream_id); | 231 SpdySynStreamIR syn_stream(stream_id); |
| 232 syn_stream.set_name_value_block(headers); | 232 syn_stream.set_name_value_block(headers); |
| 233 syn_stream.set_fin(fin); | 233 syn_stream.set_fin(fin); |
| 234 syn_stream.set_priority(priority); | 234 syn_stream.set_priority(priority); |
| 235 frame.reset(spdy_framer_->SerializeFrame(syn_stream)); | 235 frame.reset(spdy_framer_->SerializeFrame(syn_stream)); |
| 236 } | 236 } |
| 237 } else { | 237 } else { |
| 238 SpdyHeadersIR headers_frame(stream_id); | 238 SpdyHeadersIR headers_frame(stream_id); |
| 239 headers_frame.set_name_value_block(headers); | 239 headers_frame.set_name_value_block(headers); |
| 240 headers_frame.set_fin(fin); | 240 headers_frame.set_fin(fin); |
| 241 if (!session()->is_server()) { | 241 if (session()->perspective() == Perspective::IS_CLIENT) { |
| 242 headers_frame.set_has_priority(true); | 242 headers_frame.set_has_priority(true); |
| 243 headers_frame.set_priority(priority); | 243 headers_frame.set_priority(priority); |
| 244 } | 244 } |
| 245 frame.reset(spdy_framer_->SerializeFrame(headers_frame)); | 245 frame.reset(spdy_framer_->SerializeFrame(headers_frame)); |
| 246 } | 246 } |
| 247 WriteOrBufferData(StringPiece(frame->data(), frame->size()), false, | 247 WriteOrBufferData(StringPiece(frame->data(), frame->size()), false, |
| 248 ack_notifier_delegate); | 248 ack_notifier_delegate); |
| 249 return frame->size(); | 249 return frame->size(); |
| 250 } | 250 } |
| 251 | 251 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 268 } | 268 } |
| 269 spdy_framer_.reset(new SpdyFramer(spdy_version)); | 269 spdy_framer_.reset(new SpdyFramer(spdy_version)); |
| 270 spdy_framer_visitor_.reset(new SpdyFramerVisitor(spdy_version, this)); | 270 spdy_framer_visitor_.reset(new SpdyFramerVisitor(spdy_version, this)); |
| 271 spdy_framer_->set_visitor(spdy_framer_visitor_.get()); | 271 spdy_framer_->set_visitor(spdy_framer_visitor_.get()); |
| 272 spdy_framer_->set_debug_visitor(spdy_framer_visitor_.get()); | 272 spdy_framer_->set_debug_visitor(spdy_framer_visitor_.get()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id, | 275 void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id, |
| 276 SpdyPriority priority, | 276 SpdyPriority priority, |
| 277 bool fin) { | 277 bool fin) { |
| 278 if (!session()->is_server()) { | 278 if (session()->perspective() == Perspective::IS_CLIENT) { |
| 279 CloseConnectionWithDetails( | 279 CloseConnectionWithDetails( |
| 280 QUIC_INVALID_HEADERS_STREAM_DATA, | 280 QUIC_INVALID_HEADERS_STREAM_DATA, |
| 281 "SPDY SYN_STREAM frame received at the client"); | 281 "SPDY SYN_STREAM frame received at the client"); |
| 282 return; | 282 return; |
| 283 } | 283 } |
| 284 DCHECK_EQ(kInvalidStreamId, stream_id_); | 284 DCHECK_EQ(kInvalidStreamId, stream_id_); |
| 285 stream_id_ = stream_id; | 285 stream_id_ = stream_id; |
| 286 fin_ = fin; | 286 fin_ = fin; |
| 287 session()->OnStreamHeadersPriority(stream_id, priority); | 287 session()->OnStreamHeadersPriority(stream_id, priority); |
| 288 } | 288 } |
| 289 | 289 |
| 290 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { | 290 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { |
| 291 if (session()->is_server()) { | 291 if (session()->perspective() == Perspective::IS_SERVER) { |
| 292 CloseConnectionWithDetails( | 292 CloseConnectionWithDetails( |
| 293 QUIC_INVALID_HEADERS_STREAM_DATA, | 293 QUIC_INVALID_HEADERS_STREAM_DATA, |
| 294 "SPDY SYN_REPLY frame received at the server"); | 294 "SPDY SYN_REPLY frame received at the server"); |
| 295 return; | 295 return; |
| 296 } | 296 } |
| 297 DCHECK_EQ(kInvalidStreamId, stream_id_); | 297 DCHECK_EQ(kInvalidStreamId, stream_id_); |
| 298 stream_id_ = stream_id; | 298 stream_id_ = stream_id; |
| 299 fin_ = fin; | 299 fin_ = fin; |
| 300 } | 300 } |
| 301 | 301 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 324 DCHECK_EQ(0u, frame_len_); | 324 DCHECK_EQ(0u, frame_len_); |
| 325 } | 325 } |
| 326 frame_len_ += frame_len; | 326 frame_len_ += frame_len; |
| 327 } | 327 } |
| 328 | 328 |
| 329 bool QuicHeadersStream::IsConnected() { | 329 bool QuicHeadersStream::IsConnected() { |
| 330 return session()->connection()->connected(); | 330 return session()->connection()->connected(); |
| 331 } | 331 } |
| 332 | 332 |
| 333 } // namespace net | 333 } // namespace net |
| OLD | NEW |