Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: net/spdy/spdy_session.cc

Issue 8892026: SPDY - add support for spdy/2.1 to support flow control. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_session.h ('k') | net/spdy/spdy_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/linked_ptr.h" 9 #include "base/memory/linked_ptr.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 bytes_received_(0), 275 bytes_received_(0),
276 sent_settings_(false), 276 sent_settings_(false),
277 received_settings_(false), 277 received_settings_(false),
278 stalled_streams_(0), 278 stalled_streams_(0),
279 pings_in_flight_(0), 279 pings_in_flight_(0),
280 next_ping_id_(1), 280 next_ping_id_(1),
281 received_data_time_(base::TimeTicks::Now()), 281 received_data_time_(base::TimeTicks::Now()),
282 trailing_ping_pending_(false), 282 trailing_ping_pending_(false),
283 check_ping_status_pending_(false), 283 check_ping_status_pending_(false),
284 need_to_send_ping_(false), 284 need_to_send_ping_(false),
285 flow_control_(use_flow_control_),
285 initial_send_window_size_(spdy::kSpdyStreamInitialWindowSize), 286 initial_send_window_size_(spdy::kSpdyStreamInitialWindowSize),
286 initial_recv_window_size_(spdy::kSpdyStreamInitialWindowSize), 287 initial_recv_window_size_(spdy::kSpdyStreamInitialWindowSize),
287 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SPDY_SESSION)), 288 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SPDY_SESSION)),
288 verify_domain_authentication_(verify_domain_authentication) { 289 verify_domain_authentication_(verify_domain_authentication) {
289 DCHECK(HttpStreamFactory::spdy_enabled()); 290 DCHECK(HttpStreamFactory::spdy_enabled());
290 net_log_.BeginEvent( 291 net_log_.BeginEvent(
291 NetLog::TYPE_SPDY_SESSION, 292 NetLog::TYPE_SPDY_SESSION,
292 make_scoped_refptr( 293 make_scoped_refptr(
293 new NetLogSpdySessionParameter(host_port_proxy_pair_))); 294 new NetLogSpdySessionParameter(host_port_proxy_pair_)));
294 295
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 int certificate_error_code) { 330 int certificate_error_code) {
330 base::StatsCounter spdy_sessions("spdy.sessions"); 331 base::StatsCounter spdy_sessions("spdy.sessions");
331 spdy_sessions.Increment(); 332 spdy_sessions.Increment();
332 333
333 state_ = CONNECTED; 334 state_ = CONNECTED;
334 connection_.reset(connection); 335 connection_.reset(connection);
335 connection_->AddLayeredPool(this); 336 connection_->AddLayeredPool(this);
336 is_secure_ = is_secure; 337 is_secure_ = is_secure;
337 certificate_error_code_ = certificate_error_code; 338 certificate_error_code_ = certificate_error_code;
338 339
340 if (is_secure_) {
341 SSLClientSocket* ssl_socket =
342 reinterpret_cast<SSLClientSocket*>(connection_->socket());
343 DCHECK(ssl_socket);
344 if (ssl_socket->next_protocol_negotiated() == SSLClientSocket::kProtoSPDY21)
345 flow_control_ = true;
346 }
347
339 // Write out any data that we might have to send, such as the settings frame. 348 // Write out any data that we might have to send, such as the settings frame.
340 WriteSocketLater(); 349 WriteSocketLater();
341 net::Error error = ReadSocket(); 350 net::Error error = ReadSocket();
342 if (error == ERR_IO_PENDING) 351 if (error == ERR_IO_PENDING)
343 return OK; 352 return OK;
344 return error; 353 return error;
345 } 354 }
346 355
347 bool SpdySession::VerifyDomainAuthentication(const std::string& domain) { 356 bool SpdySession::VerifyDomainAuthentication(const std::string& domain) {
348 if (!verify_domain_authentication_) 357 if (!verify_domain_authentication_)
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 CHECK_EQ(stream->stream_id(), stream_id); 559 CHECK_EQ(stream->stream_id(), stream_id);
551 if (!stream) 560 if (!stream)
552 return ERR_INVALID_SPDY_STREAM; 561 return ERR_INVALID_SPDY_STREAM;
553 562
554 if (len > kMaxSpdyFrameChunkSize) { 563 if (len > kMaxSpdyFrameChunkSize) {
555 len = kMaxSpdyFrameChunkSize; 564 len = kMaxSpdyFrameChunkSize;
556 flags = static_cast<spdy::SpdyDataFlags>(flags & ~spdy::DATA_FLAG_FIN); 565 flags = static_cast<spdy::SpdyDataFlags>(flags & ~spdy::DATA_FLAG_FIN);
557 } 566 }
558 567
559 // Obey send window size of the stream if flow control is enabled. 568 // Obey send window size of the stream if flow control is enabled.
560 if (use_flow_control_) { 569 if (flow_control_) {
561 if (stream->send_window_size() <= 0) { 570 if (stream->send_window_size() <= 0) {
562 // Because we queue frames onto the session, it is possible that 571 // Because we queue frames onto the session, it is possible that
563 // a stream was not flow controlled at the time it attempted the 572 // a stream was not flow controlled at the time it attempted the
564 // write, but when we go to fulfill the write, it is now flow 573 // write, but when we go to fulfill the write, it is now flow
565 // controlled. This is why we need the session to mark the stream 574 // controlled. This is why we need the session to mark the stream
566 // as stalled - because only the session knows for sure when the 575 // as stalled - because only the session knows for sure when the
567 // stall occurs. 576 // stall occurs.
568 stream->set_stalled_by_flow_control(true); 577 stream->set_stalled_by_flow_control(true);
569 net_log().AddEvent( 578 net_log().AddEvent(
570 NetLog::TYPE_SPDY_SESSION_STALLED_ON_SEND_WINDOW, 579 NetLog::TYPE_SPDY_SESSION_STALLED_ON_SEND_WINDOW,
(...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 LOG(WARNING) << "Received WINDOW_UPDATE with an invalid delta_window_size " 1465 LOG(WARNING) << "Received WINDOW_UPDATE with an invalid delta_window_size "
1457 << delta_window_size; 1466 << delta_window_size;
1458 ResetStream(stream_id, spdy::FLOW_CONTROL_ERROR); 1467 ResetStream(stream_id, spdy::FLOW_CONTROL_ERROR);
1459 return; 1468 return;
1460 } 1469 }
1461 1470
1462 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; 1471 scoped_refptr<SpdyStream> stream = active_streams_[stream_id];
1463 CHECK_EQ(stream->stream_id(), stream_id); 1472 CHECK_EQ(stream->stream_id(), stream_id);
1464 CHECK(!stream->cancelled()); 1473 CHECK(!stream->cancelled());
1465 1474
1466 if (use_flow_control_) 1475 if (flow_control_)
1467 stream->IncreaseSendWindowSize(delta_window_size); 1476 stream->IncreaseSendWindowSize(delta_window_size);
1468 1477
1469 net_log_.AddEvent( 1478 net_log_.AddEvent(
1470 NetLog::TYPE_SPDY_SESSION_SEND_WINDOW_UPDATE, 1479 NetLog::TYPE_SPDY_SESSION_SEND_WINDOW_UPDATE,
1471 make_scoped_refptr(new NetLogSpdyWindowUpdateParameter( 1480 make_scoped_refptr(new NetLogSpdyWindowUpdateParameter(
1472 stream_id, delta_window_size, stream->send_window_size()))); 1481 stream_id, delta_window_size, stream->send_window_size())));
1473 } 1482 }
1474 1483
1475 void SpdySession::SendWindowUpdate(spdy::SpdyStreamId stream_id, 1484 void SpdySession::SendWindowUpdate(spdy::SpdyStreamId stream_id,
1476 int delta_window_size) { 1485 int delta_window_size) {
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 if (it == pending_callback_map_.end()) 1763 if (it == pending_callback_map_.end())
1755 return; 1764 return;
1756 1765
1757 OldCompletionCallback* callback = it->second.callback; 1766 OldCompletionCallback* callback = it->second.callback;
1758 int result = it->second.result; 1767 int result = it->second.result;
1759 pending_callback_map_.erase(it); 1768 pending_callback_map_.erase(it);
1760 callback->Run(result); 1769 callback->Run(result);
1761 } 1770 }
1762 1771
1763 } // namespace net 1772 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session.h ('k') | net/spdy/spdy_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698