| 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_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 certificate_error_code_ = certificate_error_code; | 714 certificate_error_code_ = certificate_error_code; |
| 715 | 715 |
| 716 NextProto protocol_negotiated = | 716 NextProto protocol_negotiated = |
| 717 connection_->socket()->GetNegotiatedProtocol(); | 717 connection_->socket()->GetNegotiatedProtocol(); |
| 718 if (protocol_negotiated != kProtoUnknown) { | 718 if (protocol_negotiated != kProtoUnknown) { |
| 719 protocol_ = protocol_negotiated; | 719 protocol_ = protocol_negotiated; |
| 720 } | 720 } |
| 721 DCHECK_GE(protocol_, kProtoSPDYMinimumVersion); | 721 DCHECK_GE(protocol_, kProtoSPDYMinimumVersion); |
| 722 DCHECK_LE(protocol_, kProtoSPDYMaximumVersion); | 722 DCHECK_LE(protocol_, kProtoSPDYMaximumVersion); |
| 723 | 723 |
| 724 if (protocol_ == kProtoSPDY4) | 724 if ((protocol_ >= kProtoSPDY4MinimumVersion) && |
| 725 (protocol_ <= kProtoSPDY4MaximumVersion)) |
| 725 send_connection_header_prefix_ = true; | 726 send_connection_header_prefix_ = true; |
| 726 | 727 |
| 727 if (protocol_ >= kProtoSPDY31) { | 728 if (protocol_ >= kProtoSPDY31) { |
| 728 flow_control_state_ = FLOW_CONTROL_STREAM_AND_SESSION; | 729 flow_control_state_ = FLOW_CONTROL_STREAM_AND_SESSION; |
| 729 session_send_window_size_ = kSpdySessionInitialWindowSize; | 730 session_send_window_size_ = kSpdySessionInitialWindowSize; |
| 730 session_recv_window_size_ = kSpdySessionInitialWindowSize; | 731 session_recv_window_size_ = kSpdySessionInitialWindowSize; |
| 731 } else if (protocol_ >= kProtoSPDY3) { | 732 } else if (protocol_ >= kProtoSPDY3) { |
| 732 flow_control_state_ = FLOW_CONTROL_STREAM; | 733 flow_control_state_ = FLOW_CONTROL_STREAM; |
| 733 } else { | 734 } else { |
| 734 flow_control_state_ = FLOW_CONTROL_NONE; | 735 flow_control_state_ = FLOW_CONTROL_NONE; |
| (...skipping 1715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2450 } | 2451 } |
| 2451 | 2452 |
| 2452 void SpdySession::OnPing(SpdyPingId unique_id, bool is_ack) { | 2453 void SpdySession::OnPing(SpdyPingId unique_id, bool is_ack) { |
| 2453 CHECK(in_io_loop_); | 2454 CHECK(in_io_loop_); |
| 2454 | 2455 |
| 2455 net_log_.AddEvent( | 2456 net_log_.AddEvent( |
| 2456 NetLog::TYPE_SPDY_SESSION_PING, | 2457 NetLog::TYPE_SPDY_SESSION_PING, |
| 2457 base::Bind(&NetLogSpdyPingCallback, unique_id, is_ack, "received")); | 2458 base::Bind(&NetLogSpdyPingCallback, unique_id, is_ack, "received")); |
| 2458 | 2459 |
| 2459 // Send response to a PING from server. | 2460 // Send response to a PING from server. |
| 2460 if ((protocol_ >= kProtoSPDY4 && !is_ack) || | 2461 if ((protocol_ >= kProtoSPDY4MinimumVersion && !is_ack) || |
| 2461 (protocol_ < kProtoSPDY4 && unique_id % 2 == 0)) { | 2462 (protocol_ < kProtoSPDY4MinimumVersion && unique_id % 2 == 0)) { |
| 2462 WritePingFrame(unique_id, true); | 2463 WritePingFrame(unique_id, true); |
| 2463 return; | 2464 return; |
| 2464 } | 2465 } |
| 2465 | 2466 |
| 2466 --pings_in_flight_; | 2467 --pings_in_flight_; |
| 2467 if (pings_in_flight_ < 0) { | 2468 if (pings_in_flight_ < 0) { |
| 2468 RecordProtocolErrorHistogram(PROTOCOL_ERROR_UNEXPECTED_PING); | 2469 RecordProtocolErrorHistogram(PROTOCOL_ERROR_UNEXPECTED_PING); |
| 2469 DoDrainSession(ERR_SPDY_PROTOCOL_ERROR, "pings_in_flight_ is < 0."); | 2470 DoDrainSession(ERR_SPDY_PROTOCOL_ERROR, "pings_in_flight_ is < 0."); |
| 2470 pings_in_flight_ = 0; | 2471 pings_in_flight_ = 0; |
| 2471 return; | 2472 return; |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2737 CHECK(it != active_streams_.end()); | 2738 CHECK(it != active_streams_.end()); |
| 2738 CHECK_EQ(it->second.stream->stream_id(), stream_id); | 2739 CHECK_EQ(it->second.stream->stream_id(), stream_id); |
| 2739 SendWindowUpdateFrame( | 2740 SendWindowUpdateFrame( |
| 2740 stream_id, delta_window_size, it->second.stream->priority()); | 2741 stream_id, delta_window_size, it->second.stream->priority()); |
| 2741 } | 2742 } |
| 2742 | 2743 |
| 2743 void SpdySession::SendInitialData() { | 2744 void SpdySession::SendInitialData() { |
| 2744 DCHECK(enable_sending_initial_data_); | 2745 DCHECK(enable_sending_initial_data_); |
| 2745 | 2746 |
| 2746 if (send_connection_header_prefix_) { | 2747 if (send_connection_header_prefix_) { |
| 2747 DCHECK_EQ(protocol_, kProtoSPDY4); | 2748 DCHECK_GE(protocol_, kProtoSPDY4MinimumVersion); |
| 2749 DCHECK_LE(protocol_, kProtoSPDY4MaximumVersion); |
| 2748 scoped_ptr<SpdyFrame> connection_header_prefix_frame( | 2750 scoped_ptr<SpdyFrame> connection_header_prefix_frame( |
| 2749 new SpdyFrame(const_cast<char*>(kHttp2ConnectionHeaderPrefix), | 2751 new SpdyFrame(const_cast<char*>(kHttp2ConnectionHeaderPrefix), |
| 2750 kHttp2ConnectionHeaderPrefixSize, | 2752 kHttp2ConnectionHeaderPrefixSize, |
| 2751 false /* take_ownership */)); | 2753 false /* take_ownership */)); |
| 2752 // Count the prefix as part of the subsequent SETTINGS frame. | 2754 // Count the prefix as part of the subsequent SETTINGS frame. |
| 2753 EnqueueSessionWrite(HIGHEST, SETTINGS, | 2755 EnqueueSessionWrite(HIGHEST, SETTINGS, |
| 2754 connection_header_prefix_frame.Pass()); | 2756 connection_header_prefix_frame.Pass()); |
| 2755 } | 2757 } |
| 2756 | 2758 |
| 2757 // First, notify the server about the settings they should use when | 2759 // First, notify the server about the settings they should use when |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3256 if (!queue->empty()) { | 3258 if (!queue->empty()) { |
| 3257 SpdyStreamId stream_id = queue->front(); | 3259 SpdyStreamId stream_id = queue->front(); |
| 3258 queue->pop_front(); | 3260 queue->pop_front(); |
| 3259 return stream_id; | 3261 return stream_id; |
| 3260 } | 3262 } |
| 3261 } | 3263 } |
| 3262 return 0; | 3264 return 0; |
| 3263 } | 3265 } |
| 3264 | 3266 |
| 3265 } // namespace net | 3267 } // namespace net |
| OLD | NEW |