| 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/core/quic_connection.h" | 5 #include "net/quic/core/quic_connection.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <sys/types.h> | 8 #include <sys/types.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 } | 859 } |
| 860 | 860 |
| 861 bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) { | 861 bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) { |
| 862 DCHECK(connected_); | 862 DCHECK(connected_); |
| 863 if (debug_visitor_ != nullptr) { | 863 if (debug_visitor_ != nullptr) { |
| 864 debug_visitor_->OnRstStreamFrame(frame); | 864 debug_visitor_->OnRstStreamFrame(frame); |
| 865 } | 865 } |
| 866 DVLOG(1) << ENDPOINT | 866 DVLOG(1) << ENDPOINT |
| 867 << "RST_STREAM_FRAME received for stream: " << frame.stream_id | 867 << "RST_STREAM_FRAME received for stream: " << frame.stream_id |
| 868 << " with error: " | 868 << " with error: " |
| 869 << QuicUtils::StreamErrorToString(frame.error_code); | 869 << QuicRstStreamErrorCodeToString(frame.error_code); |
| 870 visitor_->OnRstStream(frame); | 870 visitor_->OnRstStream(frame); |
| 871 visitor_->PostProcessAfterData(); | 871 visitor_->PostProcessAfterData(); |
| 872 should_last_packet_instigate_acks_ = true; | 872 should_last_packet_instigate_acks_ = true; |
| 873 return connected_; | 873 return connected_; |
| 874 } | 874 } |
| 875 | 875 |
| 876 bool QuicConnection::OnConnectionCloseFrame( | 876 bool QuicConnection::OnConnectionCloseFrame( |
| 877 const QuicConnectionCloseFrame& frame) { | 877 const QuicConnectionCloseFrame& frame) { |
| 878 DCHECK(connected_); | 878 DCHECK(connected_); |
| 879 if (debug_visitor_ != nullptr) { | 879 if (debug_visitor_ != nullptr) { |
| 880 debug_visitor_->OnConnectionCloseFrame(frame); | 880 debug_visitor_->OnConnectionCloseFrame(frame); |
| 881 } | 881 } |
| 882 DVLOG(1) << ENDPOINT | 882 DVLOG(1) << ENDPOINT |
| 883 << "Received ConnectionClose for connection: " << connection_id() | 883 << "Received ConnectionClose for connection: " << connection_id() |
| 884 << ", with error: " << QuicUtils::ErrorToString(frame.error_code) | 884 << ", with error: " << QuicErrorCodeToString(frame.error_code) |
| 885 << " (" << frame.error_details << ")"; | 885 << " (" << frame.error_details << ")"; |
| 886 if (frame.error_code == QUIC_BAD_MULTIPATH_FLAG) { | 886 if (frame.error_code == QUIC_BAD_MULTIPATH_FLAG) { |
| 887 LOG(ERROR) << "Unexpected QUIC_BAD_MULTIPATH_FLAG error." | 887 LOG(ERROR) << "Unexpected QUIC_BAD_MULTIPATH_FLAG error." |
| 888 << " last_received_header: " << last_header_ | 888 << " last_received_header: " << last_header_ |
| 889 << " encryption_level: " << encryption_level_; | 889 << " encryption_level: " << encryption_level_; |
| 890 } | 890 } |
| 891 TearDownLocalConnectionState(frame.error_code, frame.error_details, | 891 TearDownLocalConnectionState(frame.error_code, frame.error_details, |
| 892 ConnectionCloseSource::FROM_PEER); | 892 ConnectionCloseSource::FROM_PEER); |
| 893 return connected_; | 893 return connected_; |
| 894 } | 894 } |
| 895 | 895 |
| 896 bool QuicConnection::OnGoAwayFrame(const QuicGoAwayFrame& frame) { | 896 bool QuicConnection::OnGoAwayFrame(const QuicGoAwayFrame& frame) { |
| 897 DCHECK(connected_); | 897 DCHECK(connected_); |
| 898 if (debug_visitor_ != nullptr) { | 898 if (debug_visitor_ != nullptr) { |
| 899 debug_visitor_->OnGoAwayFrame(frame); | 899 debug_visitor_->OnGoAwayFrame(frame); |
| 900 } | 900 } |
| 901 DVLOG(1) << ENDPOINT << "GOAWAY_FRAME received with last good stream: " | 901 DVLOG(1) << ENDPOINT << "GOAWAY_FRAME received with last good stream: " |
| 902 << frame.last_good_stream_id | 902 << frame.last_good_stream_id |
| 903 << " and error: " << QuicUtils::ErrorToString(frame.error_code) | 903 << " and error: " << QuicErrorCodeToString(frame.error_code) |
| 904 << " and reason: " << frame.reason_phrase; | 904 << " and reason: " << frame.reason_phrase; |
| 905 | 905 |
| 906 goaway_received_ = true; | 906 goaway_received_ = true; |
| 907 visitor_->OnGoAway(frame); | 907 visitor_->OnGoAway(frame); |
| 908 visitor_->PostProcessAfterData(); | 908 visitor_->PostProcessAfterData(); |
| 909 should_last_packet_instigate_acks_ = true; | 909 should_last_packet_instigate_acks_ = true; |
| 910 return connected_; | 910 return connected_; |
| 911 } | 911 } |
| 912 | 912 |
| 913 bool QuicConnection::OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) { | 913 bool QuicConnection::OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) { |
| (...skipping 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1955 QuicErrorCode error, | 1955 QuicErrorCode error, |
| 1956 const string& error_details, | 1956 const string& error_details, |
| 1957 ConnectionCloseBehavior connection_close_behavior) { | 1957 ConnectionCloseBehavior connection_close_behavior) { |
| 1958 DCHECK(!error_details.empty()); | 1958 DCHECK(!error_details.empty()); |
| 1959 if (!connected_) { | 1959 if (!connected_) { |
| 1960 DVLOG(1) << "Connection is already closed."; | 1960 DVLOG(1) << "Connection is already closed."; |
| 1961 return; | 1961 return; |
| 1962 } | 1962 } |
| 1963 | 1963 |
| 1964 DVLOG(1) << ENDPOINT << "Closing connection: " << connection_id() | 1964 DVLOG(1) << ENDPOINT << "Closing connection: " << connection_id() |
| 1965 << ", with error: " << QuicUtils::ErrorToString(error) << " (" | 1965 << ", with error: " << QuicErrorCodeToString(error) << " (" << error |
| 1966 << error << "), and details: " << error_details; | 1966 << "), and details: " << error_details; |
| 1967 | 1967 |
| 1968 if (connection_close_behavior == | 1968 if (connection_close_behavior == |
| 1969 ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET) { | 1969 ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET) { |
| 1970 SendConnectionClosePacket(error, error_details, SEND_ACK); | 1970 SendConnectionClosePacket(error, error_details, SEND_ACK); |
| 1971 } else if (connection_close_behavior == | 1971 } else if (connection_close_behavior == |
| 1972 ConnectionCloseBehavior:: | 1972 ConnectionCloseBehavior:: |
| 1973 SEND_CONNECTION_CLOSE_PACKET_WITH_NO_ACK) { | 1973 SEND_CONNECTION_CLOSE_PACKET_WITH_NO_ACK) { |
| 1974 SendConnectionClosePacket(error, error_details, NO_ACK); | 1974 SendConnectionClosePacket(error, error_details, NO_ACK); |
| 1975 } | 1975 } |
| 1976 | 1976 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2034 | 2034 |
| 2035 void QuicConnection::SendGoAway(QuicErrorCode error, | 2035 void QuicConnection::SendGoAway(QuicErrorCode error, |
| 2036 QuicStreamId last_good_stream_id, | 2036 QuicStreamId last_good_stream_id, |
| 2037 const string& reason) { | 2037 const string& reason) { |
| 2038 if (goaway_sent_) { | 2038 if (goaway_sent_) { |
| 2039 return; | 2039 return; |
| 2040 } | 2040 } |
| 2041 goaway_sent_ = true; | 2041 goaway_sent_ = true; |
| 2042 | 2042 |
| 2043 DVLOG(1) << ENDPOINT << "Going away with error " | 2043 DVLOG(1) << ENDPOINT << "Going away with error " |
| 2044 << QuicUtils::ErrorToString(error) << " (" << error << ")"; | 2044 << QuicErrorCodeToString(error) << " (" << error << ")"; |
| 2045 | 2045 |
| 2046 // Opportunistically bundle an ack with this outgoing packet. | 2046 // Opportunistically bundle an ack with this outgoing packet. |
| 2047 ScopedPacketBundler ack_bundler(this, SEND_ACK_IF_PENDING); | 2047 ScopedPacketBundler ack_bundler(this, SEND_ACK_IF_PENDING); |
| 2048 packet_generator_.AddControlFrame( | 2048 packet_generator_.AddControlFrame( |
| 2049 QuicFrame(new QuicGoAwayFrame(error, last_good_stream_id, reason))); | 2049 QuicFrame(new QuicGoAwayFrame(error, last_good_stream_id, reason))); |
| 2050 } | 2050 } |
| 2051 | 2051 |
| 2052 QuicByteCount QuicConnection::max_packet_length() const { | 2052 QuicByteCount QuicConnection::max_packet_length() const { |
| 2053 return packet_generator_.GetCurrentMaxPacketLength(); | 2053 return packet_generator_.GetCurrentMaxPacketLength(); |
| 2054 } | 2054 } |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2480 | 2480 |
| 2481 void QuicConnection::CheckIfApplicationLimited() { | 2481 void QuicConnection::CheckIfApplicationLimited() { |
| 2482 if (queued_packets_.empty() && | 2482 if (queued_packets_.empty() && |
| 2483 !sent_packet_manager_->HasPendingRetransmissions() && | 2483 !sent_packet_manager_->HasPendingRetransmissions() && |
| 2484 !visitor_->WillingAndAbleToWrite()) { | 2484 !visitor_->WillingAndAbleToWrite()) { |
| 2485 sent_packet_manager_->OnApplicationLimited(); | 2485 sent_packet_manager_->OnApplicationLimited(); |
| 2486 } | 2486 } |
| 2487 } | 2487 } |
| 2488 | 2488 |
| 2489 } // namespace net | 2489 } // namespace net |
| OLD | NEW |