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 |