Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 949 std::string remote_ufrag; | 949 std::string remote_ufrag; |
| 950 const rtc::SocketAddress& addr(remote_candidate_.address()); | 950 const rtc::SocketAddress& addr(remote_candidate_.address()); |
| 951 if (!port_->GetStunMessage(data, size, addr, &msg, &remote_ufrag)) { | 951 if (!port_->GetStunMessage(data, size, addr, &msg, &remote_ufrag)) { |
| 952 // The packet did not parse as a valid STUN message | 952 // The packet did not parse as a valid STUN message |
| 953 // This is a data packet, pass it along. | 953 // This is a data packet, pass it along. |
| 954 set_receiving(true); | 954 set_receiving(true); |
| 955 last_data_received_ = rtc::TimeMillis(); | 955 last_data_received_ = rtc::TimeMillis(); |
| 956 recv_rate_tracker_.AddSamples(size); | 956 recv_rate_tracker_.AddSamples(size); |
| 957 SignalReadPacket(this, data, size, packet_time); | 957 SignalReadPacket(this, data, size, packet_time); |
| 958 | 958 |
| 959 // If timed out sending writability checks, start up again | 959 // Start up again if timed out sending writability checks, or |
| 960 if (!pruned_ && (write_state_ == STATE_WRITE_TIMEOUT)) { | 960 // this is nominated on the controlled side because on the controlled side, |
| 961 // because receiving data will increase its priority in the pruning process. | |
|
pthatcher1
2016/06/22 06:36:34
I don't understand this comment.
honghaiz3
2016/06/22 08:03:17
Revised.
| |
| 962 if (write_state_ == STATE_WRITE_TIMEOUT && (nominated() || !pruned_)) { | |
| 961 LOG(LS_WARNING) << "Received a data packet on a timed-out Connection. " | 963 LOG(LS_WARNING) << "Received a data packet on a timed-out Connection. " |
| 962 << "Resetting state to STATE_WRITE_INIT."; | 964 << "Resetting state to STATE_WRITE_INIT."; |
| 963 set_write_state(STATE_WRITE_INIT); | 965 ResetWriteStateAndUnprune(); |
|
pthatcher1
2016/06/22 06:36:34
So the change is to unprune when we received media
honghaiz3
2016/06/22 08:03:17
I think there is a bug in the existing code that s
| |
| 964 } | 966 } |
| 965 } else if (!msg) { | 967 } else if (!msg) { |
| 966 // The packet was STUN, but failed a check and was handled internally. | 968 // The packet was STUN, but failed a check and was handled internally. |
| 967 } else { | 969 } else { |
| 968 // The packet is STUN and passed the Port checks. | 970 // The packet is STUN and passed the Port checks. |
| 969 // Perform our own checks to ensure this packet is valid. | 971 // Perform our own checks to ensure this packet is valid. |
| 970 // If this is a STUN request, then update the receiving bit and respond. | 972 // If this is a STUN request, then update the receiving bit and respond. |
| 971 // If this is a STUN response, then update the writable bit. | 973 // If this is a STUN response, then update the writable bit. |
| 972 // Log at LS_INFO if we receive a ping on an unwritable connection. | 974 // Log at LS_INFO if we receive a ping on an unwritable connection. |
| 973 rtc::LoggingSeverity sev = (!writable() ? rtc::LS_INFO : rtc::LS_VERBOSE); | 975 rtc::LoggingSeverity sev = (!writable() ? rtc::LS_INFO : rtc::LS_VERBOSE); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1028 // Received conflicting role from the peer. | 1030 // Received conflicting role from the peer. |
| 1029 LOG(LS_INFO) << "Received conflicting role from the peer."; | 1031 LOG(LS_INFO) << "Received conflicting role from the peer."; |
| 1030 return; | 1032 return; |
| 1031 } | 1033 } |
| 1032 | 1034 |
| 1033 stats_.recv_ping_requests++; | 1035 stats_.recv_ping_requests++; |
| 1034 | 1036 |
| 1035 // This is a validated stun request from remote peer. | 1037 // This is a validated stun request from remote peer. |
| 1036 port_->SendBindingResponse(msg, remote_addr); | 1038 port_->SendBindingResponse(msg, remote_addr); |
| 1037 | 1039 |
| 1038 // If it timed out on writing check, start up again | 1040 // Whether it is nominated in this request but not nominated before. |
| 1039 if (!pruned_ && write_state_ == STATE_WRITE_TIMEOUT) { | 1041 bool just_nominated = false; |
| 1040 set_write_state(STATE_WRITE_INIT); | |
| 1041 } | |
| 1042 | |
| 1043 if (port_->GetIceRole() == ICEROLE_CONTROLLED) { | 1042 if (port_->GetIceRole() == ICEROLE_CONTROLLED) { |
| 1044 const StunByteStringAttribute* use_candidate_attr = | 1043 bool use_candidate = msg->GetByteString(STUN_ATTR_USE_CANDIDATE) != nullptr; |
| 1045 msg->GetByteString(STUN_ATTR_USE_CANDIDATE); | 1044 if (use_candidate) { |
| 1046 if (use_candidate_attr) { | 1045 if (!nominated()) { |
| 1046 just_nominated = true; | |
| 1047 } | |
| 1047 set_nominated(true); | 1048 set_nominated(true); |
| 1048 SignalNominated(this); | 1049 SignalNominated(this); |
| 1049 } | 1050 } |
| 1050 } | 1051 } |
| 1052 // If it timed out on writing check, start up again if it is not pruned or | |
| 1053 // it is just nominated now, because the nomination may increase its priority | |
| 1054 // in the pruning process. | |
| 1055 if (write_state_ == STATE_WRITE_TIMEOUT && (just_nominated || !pruned_)) { | |
|
Taylor Brandstetter
2016/06/21 18:33:26
Why is the connection only restored if it's "just_
pthatcher1
2016/06/22 06:36:34
Yeah, I don't understand the "just nominated" logi
honghaiz3
2016/06/22 08:03:17
I think you are right. I may have over-thought thi
honghaiz3
2016/06/22 08:03:17
See my reply in the above comments.
| |
| 1056 ResetWriteStateAndUnprune(); | |
| 1057 } | |
| 1058 | |
| 1051 // Set the remote cost if the network_info attribute is available. | 1059 // Set the remote cost if the network_info attribute is available. |
| 1052 // Note: If packets are re-ordered, we may get incorrect network cost | 1060 // Note: If packets are re-ordered, we may get incorrect network cost |
| 1053 // temporarily, but it should get the correct value shortly after that. | 1061 // temporarily, but it should get the correct value shortly after that. |
| 1054 const StunUInt32Attribute* network_attr = | 1062 const StunUInt32Attribute* network_attr = |
| 1055 msg->GetUInt32(STUN_ATTR_NETWORK_INFO); | 1063 msg->GetUInt32(STUN_ATTR_NETWORK_INFO); |
| 1056 if (network_attr) { | 1064 if (network_attr) { |
| 1057 uint32_t network_info = network_attr->value(); | 1065 uint32_t network_info = network_attr->value(); |
| 1058 uint16_t network_cost = static_cast<uint16_t>(network_info); | 1066 uint16_t network_cost = static_cast<uint16_t>(network_info); |
| 1059 if (network_cost != remote_candidate_.network_cost()) { | 1067 if (network_cost != remote_candidate_.network_cost()) { |
| 1060 remote_candidate_.set_network_cost(network_cost); | 1068 remote_candidate_.set_network_cost(network_cost); |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1508 ASSERT(sent < 0); | 1516 ASSERT(sent < 0); |
| 1509 error_ = port_->GetError(); | 1517 error_ = port_->GetError(); |
| 1510 stats_.sent_discarded_packets++; | 1518 stats_.sent_discarded_packets++; |
| 1511 } else { | 1519 } else { |
| 1512 send_rate_tracker_.AddSamples(sent); | 1520 send_rate_tracker_.AddSamples(sent); |
| 1513 } | 1521 } |
| 1514 return sent; | 1522 return sent; |
| 1515 } | 1523 } |
| 1516 | 1524 |
| 1517 } // namespace cricket | 1525 } // namespace cricket |
| OLD | NEW |