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/quic/quic_session.h" | 5 #include "net/quic/quic_session.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/crypto/proof_verifier.h" | 8 #include "net/quic/crypto/proof_verifier.h" |
9 #include "net/quic/quic_connection.h" | 9 #include "net/quic/quic_connection.h" |
10 #include "net/quic/quic_headers_stream.h" | 10 #include "net/quic/quic_headers_stream.h" |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 CloseStream(id); | 266 CloseStream(id); |
267 } | 267 } |
268 } | 268 } |
269 } | 269 } |
270 | 270 |
271 bool QuicSession::OnCanWrite() { | 271 bool QuicSession::OnCanWrite() { |
272 // We latch this here rather than doing a traditional loop, because streams | 272 // We latch this here rather than doing a traditional loop, because streams |
273 // may be modifying the list as we loop. | 273 // may be modifying the list as we loop. |
274 int remaining_writes = write_blocked_streams_.NumBlockedStreams(); | 274 int remaining_writes = write_blocked_streams_.NumBlockedStreams(); |
275 | 275 |
276 while (!connection_->HasQueuedData() && | 276 while (remaining_writes > 0 && connection_->CanWriteStreamData()) { |
277 remaining_writes > 0) { | |
278 DCHECK(write_blocked_streams_.HasWriteBlockedStreams()); | 277 DCHECK(write_blocked_streams_.HasWriteBlockedStreams()); |
279 if (!write_blocked_streams_.HasWriteBlockedStreams()) { | 278 if (!write_blocked_streams_.HasWriteBlockedStreams()) { |
280 LOG(DFATAL) << "WriteBlockedStream is missing"; | 279 LOG(DFATAL) << "WriteBlockedStream is missing"; |
281 connection_->CloseConnection(QUIC_INTERNAL_ERROR, false); | 280 connection_->CloseConnection(QUIC_INTERNAL_ERROR, false); |
282 return true; // We have no write blocked streams. | 281 return true; // We have no write blocked streams. |
283 } | 282 } |
284 QuicStreamId stream_id = write_blocked_streams_.PopFront(); | 283 QuicStreamId stream_id = write_blocked_streams_.PopFront(); |
285 if (stream_id == kCryptoStreamId) { | 284 if (stream_id == kCryptoStreamId) { |
286 has_pending_handshake_ = false; // We just popped it. | 285 has_pending_handshake_ = false; // We just popped it. |
287 } | 286 } |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 DCHECK(!has_pending_handshake_); | 605 DCHECK(!has_pending_handshake_); |
607 has_pending_handshake_ = true; | 606 has_pending_handshake_ = true; |
608 // TODO(jar): Be sure to use the highest priority for the crypto stream, | 607 // TODO(jar): Be sure to use the highest priority for the crypto stream, |
609 // perhaps by adding a "special" priority for it that is higher than | 608 // perhaps by adding a "special" priority for it that is higher than |
610 // kHighestPriority. | 609 // kHighestPriority. |
611 priority = kHighestPriority; | 610 priority = kHighestPriority; |
612 } | 611 } |
613 write_blocked_streams_.PushBack(id, priority, connection()->version()); | 612 write_blocked_streams_.PushBack(id, priority, connection()->version()); |
614 } | 613 } |
615 | 614 |
616 bool QuicSession::HasQueuedData() const { | 615 bool QuicSession::HasDataToWrite() const { |
617 return write_blocked_streams_.HasWriteBlockedStreams() || | 616 return write_blocked_streams_.HasWriteBlockedStreams() || |
618 connection_->HasQueuedData(); | 617 connection_->HasQueuedData(); |
619 } | 618 } |
620 | 619 |
621 void QuicSession::MarkDecompressionBlocked(QuicHeaderId header_id, | 620 void QuicSession::MarkDecompressionBlocked(QuicHeaderId header_id, |
622 QuicStreamId stream_id) { | 621 QuicStreamId stream_id) { |
623 DCHECK_GE(QUIC_VERSION_12, connection()->version()); | 622 DCHECK_GE(QUIC_VERSION_12, connection()->version()); |
624 decompression_blocked_streams_[header_id] = stream_id; | 623 decompression_blocked_streams_[header_id] = stream_id; |
625 } | 624 } |
626 | 625 |
627 bool QuicSession::GetSSLInfo(SSLInfo* ssl_info) { | 626 bool QuicSession::GetSSLInfo(SSLInfo* ssl_info) { |
628 NOTIMPLEMENTED(); | 627 NOTIMPLEMENTED(); |
629 return false; | 628 return false; |
630 } | 629 } |
631 | 630 |
632 void QuicSession::PostProcessAfterData() { | 631 void QuicSession::PostProcessAfterData() { |
633 STLDeleteElements(&closed_streams_); | 632 STLDeleteElements(&closed_streams_); |
634 closed_streams_.clear(); | 633 closed_streams_.clear(); |
635 } | 634 } |
636 | 635 |
637 } // namespace net | 636 } // namespace net |
OLD | NEW |