| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_client_session_base.h" | 5 #include "net/quic/quic_client_session_base.h" |
| 6 | 6 |
| 7 #include "net/quic/quic_client_promised_info.h" | 7 #include "net/quic/quic_client_promised_info.h" |
| 8 #include "net/quic/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/spdy_utils.h" | 9 #include "net/quic/spdy_utils.h" |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 largest_promised_stream_id_ = promised_stream_id; | 73 largest_promised_stream_id_ = promised_stream_id; |
| 74 | 74 |
| 75 QuicSpdyStream* stream = GetSpdyDataStream(stream_id); | 75 QuicSpdyStream* stream = GetSpdyDataStream(stream_id); |
| 76 if (!stream) { | 76 if (!stream) { |
| 77 // It's quite possible to receive headers after a stream has been reset. | 77 // It's quite possible to receive headers after a stream has been reset. |
| 78 return; | 78 return; |
| 79 } | 79 } |
| 80 stream->OnPromiseHeadersComplete(promised_stream_id, frame_len); | 80 stream->OnPromiseHeadersComplete(promised_stream_id, frame_len); |
| 81 } | 81 } |
| 82 | 82 |
| 83 void QuicClientSessionBase::OnPromiseHeaderList( |
| 84 QuicStreamId stream_id, |
| 85 QuicStreamId promised_stream_id, |
| 86 size_t frame_len, |
| 87 const QuicHeaderList& header_list) { |
| 88 if (promised_stream_id != kInvalidStreamId && |
| 89 promised_stream_id <= largest_promised_stream_id_) { |
| 90 connection()->CloseConnection( |
| 91 QUIC_INVALID_STREAM_ID, |
| 92 "Received push stream id lesser or equal to the" |
| 93 " last accepted before", |
| 94 ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET); |
| 95 return; |
| 96 } |
| 97 largest_promised_stream_id_ = promised_stream_id; |
| 98 |
| 99 QuicSpdyStream* stream = GetSpdyDataStream(stream_id); |
| 100 if (!stream) { |
| 101 // It's quite possible to receive headers after a stream has been reset. |
| 102 return; |
| 103 } |
| 104 stream->OnPromiseHeaderList(promised_stream_id, frame_len, header_list); |
| 105 } |
| 106 |
| 83 void QuicClientSessionBase::HandlePromised(QuicStreamId /* associated_id */, | 107 void QuicClientSessionBase::HandlePromised(QuicStreamId /* associated_id */, |
| 84 QuicStreamId id, | 108 QuicStreamId id, |
| 85 const SpdyHeaderBlock& headers) { | 109 const SpdyHeaderBlock& headers) { |
| 86 // Due to pathalogical packet re-ordering, it is possible that | 110 // Due to pathalogical packet re-ordering, it is possible that |
| 87 // frames for the promised stream have already arrived, and the | 111 // frames for the promised stream have already arrived, and the |
| 88 // promised stream could be active or closed. | 112 // promised stream could be active or closed. |
| 89 if (IsClosedStream(id)) { | 113 if (IsClosedStream(id)) { |
| 90 // There was a RST on the data stream already, perhaps | 114 // There was a RST on the data stream already, perhaps |
| 91 // QUIC_REFUSED_STREAM? | 115 // QUIC_REFUSED_STREAM? |
| 92 DVLOG(1) << "Promise ignored for stream " << id | 116 DVLOG(1) << "Promise ignored for stream " << id |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 void QuicClientSessionBase::ResetPromised(QuicStreamId id, | 191 void QuicClientSessionBase::ResetPromised(QuicStreamId id, |
| 168 QuicRstStreamErrorCode error_code) { | 192 QuicRstStreamErrorCode error_code) { |
| 169 SendRstStream(id, error_code, 0); | 193 SendRstStream(id, error_code, 0); |
| 170 if (!IsOpenStream(id)) { | 194 if (!IsOpenStream(id)) { |
| 171 MaybeIncreaseLargestPeerStreamId(id); | 195 MaybeIncreaseLargestPeerStreamId(id); |
| 172 InsertLocallyClosedStreamsHighestOffset(id, 0); | 196 InsertLocallyClosedStreamsHighestOffset(id, 0); |
| 173 } | 197 } |
| 174 } | 198 } |
| 175 | 199 |
| 176 } // namespace net | 200 } // namespace net |
| OLD | NEW |