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 <map> | 7 #include <map> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
745 new NetLogSpdyCredentialParameter(credential.slot, | 745 new NetLogSpdyCredentialParameter(credential.slot, |
746 origin))); | 746 origin))); |
747 } | 747 } |
748 return ERR_IO_PENDING; | 748 return ERR_IO_PENDING; |
749 } | 749 } |
750 | 750 |
751 int SpdySession::WriteStreamData(SpdyStreamId stream_id, | 751 int SpdySession::WriteStreamData(SpdyStreamId stream_id, |
752 net::IOBuffer* data, int len, | 752 net::IOBuffer* data, int len, |
753 SpdyDataFlags flags) { | 753 SpdyDataFlags flags) { |
754 // Find our stream | 754 // Find our stream |
755 DCHECK(IsStreamActive(stream_id)); | 755 CHECK(IsStreamActive(stream_id)); |
756 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 756 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
757 if (!stream) | |
758 return ERR_INVALID_SPDY_STREAM; | |
759 CHECK_EQ(stream->stream_id(), stream_id); | 757 CHECK_EQ(stream->stream_id(), stream_id); |
760 | 758 |
761 if (len > kMaxSpdyFrameChunkSize) { | 759 if (len > kMaxSpdyFrameChunkSize) { |
762 len = kMaxSpdyFrameChunkSize; | 760 len = kMaxSpdyFrameChunkSize; |
763 flags = static_cast<SpdyDataFlags>(flags & ~DATA_FLAG_FIN); | 761 flags = static_cast<SpdyDataFlags>(flags & ~DATA_FLAG_FIN); |
764 } | 762 } |
765 | 763 |
766 // Obey send window size of the stream if flow control is enabled. | 764 // Obey send window size of the stream if flow control is enabled. |
767 if (flow_control_) { | 765 if (flow_control_) { |
768 if (stream->send_window_size() <= 0) { | 766 if (stream->send_window_size() <= 0) { |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1501 SpdyStreamId stream_id = frame.stream_id(); | 1499 SpdyStreamId stream_id = frame.stream_id(); |
1502 | 1500 |
1503 if (net_log().IsLoggingAllEvents()) { | 1501 if (net_log().IsLoggingAllEvents()) { |
1504 net_log().AddEvent( | 1502 net_log().AddEvent( |
1505 NetLog::TYPE_SPDY_SESSION_SYN_REPLY, | 1503 NetLog::TYPE_SPDY_SESSION_SYN_REPLY, |
1506 make_scoped_refptr(new NetLogSpdySynParameter( | 1504 make_scoped_refptr(new NetLogSpdySynParameter( |
1507 headers, static_cast<SpdyControlFlags>(frame.flags()), | 1505 headers, static_cast<SpdyControlFlags>(frame.flags()), |
1508 stream_id, 0))); | 1506 stream_id, 0))); |
1509 } | 1507 } |
1510 | 1508 |
1511 bool valid_stream = IsStreamActive(stream_id); | 1509 if (!IsStreamActive(stream_id)) { |
1512 if (!valid_stream) { | |
1513 // NOTE: it may just be that the stream was cancelled. | 1510 // NOTE: it may just be that the stream was cancelled. |
1514 LOG(WARNING) << "Received SYN_REPLY for invalid stream " << stream_id; | 1511 LOG(WARNING) << "Received SYN_REPLY for invalid stream " << stream_id; |
1515 return; | 1512 return; |
1516 } | 1513 } |
1517 | 1514 |
1518 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 1515 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
1519 CHECK_EQ(stream->stream_id(), stream_id); | 1516 CHECK_EQ(stream->stream_id(), stream_id); |
1520 CHECK(!stream->cancelled()); | 1517 CHECK(!stream->cancelled()); |
1521 | 1518 |
1522 if (stream->response_received()) { | 1519 if (stream->response_received()) { |
(...skipping 13 matching lines...) Expand all Loading... |
1536 SpdyStreamId stream_id = frame.stream_id(); | 1533 SpdyStreamId stream_id = frame.stream_id(); |
1537 | 1534 |
1538 if (net_log().IsLoggingAllEvents()) { | 1535 if (net_log().IsLoggingAllEvents()) { |
1539 net_log().AddEvent( | 1536 net_log().AddEvent( |
1540 NetLog::TYPE_SPDY_SESSION_HEADERS, | 1537 NetLog::TYPE_SPDY_SESSION_HEADERS, |
1541 make_scoped_refptr(new NetLogSpdySynParameter( | 1538 make_scoped_refptr(new NetLogSpdySynParameter( |
1542 headers, static_cast<SpdyControlFlags>(frame.flags()), | 1539 headers, static_cast<SpdyControlFlags>(frame.flags()), |
1543 stream_id, 0))); | 1540 stream_id, 0))); |
1544 } | 1541 } |
1545 | 1542 |
1546 bool valid_stream = IsStreamActive(stream_id); | 1543 if (!IsStreamActive(stream_id)) { |
1547 if (!valid_stream) { | |
1548 // NOTE: it may just be that the stream was cancelled. | 1544 // NOTE: it may just be that the stream was cancelled. |
1549 LOG(WARNING) << "Received HEADERS for invalid stream " << stream_id; | 1545 LOG(WARNING) << "Received HEADERS for invalid stream " << stream_id; |
1550 return; | 1546 return; |
1551 } | 1547 } |
1552 | 1548 |
1553 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 1549 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
1554 CHECK_EQ(stream->stream_id(), stream_id); | 1550 CHECK_EQ(stream->stream_id(), stream_id); |
1555 CHECK(!stream->cancelled()); | 1551 CHECK(!stream->cancelled()); |
1556 | 1552 |
1557 int rv = stream->OnHeaders(*headers); | 1553 int rv = stream->OnHeaders(*headers); |
1558 if (rv < 0) { | 1554 if (rv < 0) { |
1559 DCHECK_NE(rv, ERR_IO_PENDING); | 1555 DCHECK_NE(rv, ERR_IO_PENDING); |
1560 const SpdyStreamId stream_id = stream->stream_id(); | 1556 const SpdyStreamId stream_id = stream->stream_id(); |
1561 DeleteStream(stream_id, rv); | 1557 DeleteStream(stream_id, rv); |
1562 } | 1558 } |
1563 } | 1559 } |
1564 | 1560 |
1565 void SpdySession::OnRstStream(const SpdyRstStreamControlFrame& frame) { | 1561 void SpdySession::OnRstStream(const SpdyRstStreamControlFrame& frame) { |
1566 SpdyStreamId stream_id = frame.stream_id(); | 1562 SpdyStreamId stream_id = frame.stream_id(); |
1567 | 1563 |
1568 net_log().AddEvent( | 1564 net_log().AddEvent( |
1569 NetLog::TYPE_SPDY_SESSION_RST_STREAM, | 1565 NetLog::TYPE_SPDY_SESSION_RST_STREAM, |
1570 make_scoped_refptr( | 1566 make_scoped_refptr( |
1571 new NetLogSpdyRstParameter(stream_id, frame.status(), ""))); | 1567 new NetLogSpdyRstParameter(stream_id, frame.status(), ""))); |
1572 | 1568 |
1573 bool valid_stream = IsStreamActive(stream_id); | 1569 if (!IsStreamActive(stream_id)) { |
1574 if (!valid_stream) { | |
1575 // NOTE: it may just be that the stream was cancelled. | 1570 // NOTE: it may just be that the stream was cancelled. |
1576 LOG(WARNING) << "Received RST for invalid stream" << stream_id; | 1571 LOG(WARNING) << "Received RST for invalid stream" << stream_id; |
1577 return; | 1572 return; |
1578 } | 1573 } |
1579 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 1574 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
1580 CHECK_EQ(stream->stream_id(), stream_id); | 1575 CHECK_EQ(stream->stream_id(), stream_id); |
1581 CHECK(!stream->cancelled()); | 1576 CHECK(!stream->cancelled()); |
1582 | 1577 |
1583 if (frame.status() == 0) { | 1578 if (frame.status() == 0) { |
1584 stream->OnDataReceived(NULL, 0); | 1579 stream->OnDataReceived(NULL, 0); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 1667 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
1673 CHECK_EQ(stream->stream_id(), stream_id); | 1668 CHECK_EQ(stream->stream_id(), stream_id); |
1674 CHECK(!stream->cancelled()); | 1669 CHECK(!stream->cancelled()); |
1675 | 1670 |
1676 if (flow_control_) | 1671 if (flow_control_) |
1677 stream->IncreaseSendWindowSize(delta_window_size); | 1672 stream->IncreaseSendWindowSize(delta_window_size); |
1678 } | 1673 } |
1679 | 1674 |
1680 void SpdySession::SendWindowUpdate(SpdyStreamId stream_id, | 1675 void SpdySession::SendWindowUpdate(SpdyStreamId stream_id, |
1681 int32 delta_window_size) { | 1676 int32 delta_window_size) { |
1682 DCHECK(IsStreamActive(stream_id)); | 1677 CHECK(IsStreamActive(stream_id)); |
1683 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; | 1678 scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; |
1684 CHECK_EQ(stream->stream_id(), stream_id); | 1679 CHECK_EQ(stream->stream_id(), stream_id); |
1685 | 1680 |
1686 net_log_.AddEvent( | 1681 net_log_.AddEvent( |
1687 NetLog::TYPE_SPDY_SESSION_SENT_WINDOW_UPDATE, | 1682 NetLog::TYPE_SPDY_SESSION_SENT_WINDOW_UPDATE, |
1688 make_scoped_refptr(new NetLogSpdyWindowUpdateParameter( | 1683 make_scoped_refptr(new NetLogSpdyWindowUpdateParameter( |
1689 stream_id, delta_window_size))); | 1684 stream_id, delta_window_size))); |
1690 | 1685 |
1691 DCHECK(buffered_spdy_framer_.get()); | 1686 DCHECK(buffered_spdy_framer_.get()); |
1692 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( | 1687 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1987 SSLClientSocket* SpdySession::GetSSLClientSocket() const { | 1982 SSLClientSocket* SpdySession::GetSSLClientSocket() const { |
1988 if (!is_secure_) | 1983 if (!is_secure_) |
1989 return NULL; | 1984 return NULL; |
1990 SSLClientSocket* ssl_socket = | 1985 SSLClientSocket* ssl_socket = |
1991 reinterpret_cast<SSLClientSocket*>(connection_->socket()); | 1986 reinterpret_cast<SSLClientSocket*>(connection_->socket()); |
1992 DCHECK(ssl_socket); | 1987 DCHECK(ssl_socket); |
1993 return ssl_socket; | 1988 return ssl_socket; |
1994 } | 1989 } |
1995 | 1990 |
1996 } // namespace net | 1991 } // namespace net |
OLD | NEW |