OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/spdy/spdy_stream.h" | 5 #include "net/spdy/spdy_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 for (std::string::const_iterator i(str.begin()); i != str.end(); ++i) { | 50 for (std::string::const_iterator i(str.begin()); i != str.end(); ++i) { |
51 if (*i >= 'A' && *i <= 'Z') { | 51 if (*i >= 'A' && *i <= 'Z') { |
52 return true; | 52 return true; |
53 } | 53 } |
54 } | 54 } |
55 return false; | 55 return false; |
56 } | 56 } |
57 | 57 |
58 } // namespace | 58 } // namespace |
59 | 59 |
60 void SpdyStream::Delegate::OnTrailers(const SpdyHeaderBlock& trailers) {} | |
61 | |
60 // A wrapper around a stream that calls into ProduceSynStreamFrame(). | 62 // A wrapper around a stream that calls into ProduceSynStreamFrame(). |
61 class SpdyStream::SynStreamBufferProducer : public SpdyBufferProducer { | 63 class SpdyStream::SynStreamBufferProducer : public SpdyBufferProducer { |
62 public: | 64 public: |
63 SynStreamBufferProducer(const base::WeakPtr<SpdyStream>& stream) | 65 SynStreamBufferProducer(const base::WeakPtr<SpdyStream>& stream) |
64 : stream_(stream) { | 66 : stream_(stream) { |
65 DCHECK(stream_.get()); | 67 DCHECK(stream_.get()); |
66 } | 68 } |
67 | 69 |
68 ~SynStreamBufferProducer() override {} | 70 ~SynStreamBufferProducer() override {} |
69 | 71 |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
433 DCHECK_NE(io_state_, STATE_IDLE); | 435 DCHECK_NE(io_state_, STATE_IDLE); |
434 | 436 |
435 response_time_ = response_time; | 437 response_time_ = response_time; |
436 recv_first_byte_time_ = recv_first_byte_time; | 438 recv_first_byte_time_ = recv_first_byte_time; |
437 return MergeWithResponseHeaders(initial_response_headers); | 439 return MergeWithResponseHeaders(initial_response_headers); |
438 } | 440 } |
439 | 441 |
440 int SpdyStream::OnAdditionalResponseHeadersReceived( | 442 int SpdyStream::OnAdditionalResponseHeadersReceived( |
441 const SpdyHeaderBlock& additional_response_headers) { | 443 const SpdyHeaderBlock& additional_response_headers) { |
442 if (type_ == SPDY_REQUEST_RESPONSE_STREAM) { | 444 if (type_ == SPDY_REQUEST_RESPONSE_STREAM) { |
445 if (response_headers_status_ != RESPONSE_HEADERS_ARE_COMPLETE) { | |
443 session_->ResetStream( | 446 session_->ResetStream( |
444 stream_id_, RST_STREAM_PROTOCOL_ERROR, | 447 stream_id_, RST_STREAM_PROTOCOL_ERROR, |
445 "Additional headers received for request/response stream"); | 448 "Additional headers received for request/response stream"); |
446 return ERR_SPDY_PROTOCOL_ERROR; | 449 return ERR_SPDY_PROTOCOL_ERROR; |
450 } | |
451 response_headers_status_ = TRAILERS_RECEIVED; | |
452 delegate_->OnTrailers(additional_response_headers); | |
453 return OK; | |
447 } else if (type_ == SPDY_PUSH_STREAM && | 454 } else if (type_ == SPDY_PUSH_STREAM && |
Bence
2015/08/06 15:02:41
Once you are here, you might want to consider remo
xunjieli
2015/08/06 16:10:13
Done.
| |
448 response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) { | 455 response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) { |
449 session_->ResetStream( | 456 session_->ResetStream( |
450 stream_id_, RST_STREAM_PROTOCOL_ERROR, | 457 stream_id_, RST_STREAM_PROTOCOL_ERROR, |
451 "Additional headers received for push stream"); | 458 "Additional headers received for push stream"); |
452 return ERR_SPDY_PROTOCOL_ERROR; | 459 return ERR_SPDY_PROTOCOL_ERROR; |
453 } | 460 } |
454 return MergeWithResponseHeaders(additional_response_headers); | 461 return MergeWithResponseHeaders(additional_response_headers); |
455 } | 462 } |
456 | 463 |
457 void SpdyStream::OnPushPromiseHeadersReceived(const SpdyHeaderBlock& headers) { | 464 void SpdyStream::OnPushPromiseHeadersReceived(const SpdyHeaderBlock& headers) { |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
919 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, | 926 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, |
920 state); | 927 state); |
921 break; | 928 break; |
922 } | 929 } |
923 return description; | 930 return description; |
924 } | 931 } |
925 | 932 |
926 #undef STATE_CASE | 933 #undef STATE_CASE |
927 | 934 |
928 } // namespace net | 935 } // namespace net |
OLD | NEW |