| 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 988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 requests_.Clear(); | 999 requests_.Clear(); |
| 1000 set_write_state(STATE_WRITE_TIMEOUT); | 1000 set_write_state(STATE_WRITE_TIMEOUT); |
| 1001 } | 1001 } |
| 1002 } | 1002 } |
| 1003 | 1003 |
| 1004 void Connection::Destroy() { | 1004 void Connection::Destroy() { |
| 1005 LOG_J(LS_VERBOSE, this) << "Connection destroyed"; | 1005 LOG_J(LS_VERBOSE, this) << "Connection destroyed"; |
| 1006 port_->thread()->Post(this, MSG_DELETE); | 1006 port_->thread()->Post(this, MSG_DELETE); |
| 1007 } | 1007 } |
| 1008 | 1008 |
| 1009 void Connection::FailAndDestroy() { |
| 1010 set_state(Connection::STATE_FAILED); |
| 1011 Destroy(); |
| 1012 } |
| 1013 |
| 1009 void Connection::PrintPingsSinceLastResponse(std::string* s, size_t max) { | 1014 void Connection::PrintPingsSinceLastResponse(std::string* s, size_t max) { |
| 1010 std::ostringstream oss; | 1015 std::ostringstream oss; |
| 1011 oss << std::boolalpha; | 1016 oss << std::boolalpha; |
| 1012 if (pings_since_last_response_.size() > max) { | 1017 if (pings_since_last_response_.size() > max) { |
| 1013 for (size_t i = 0; i < max; i++) { | 1018 for (size_t i = 0; i < max; i++) { |
| 1014 const SentPing& ping = pings_since_last_response_[i]; | 1019 const SentPing& ping = pings_since_last_response_[i]; |
| 1015 oss << rtc::hex_encode(ping.id) << " "; | 1020 oss << rtc::hex_encode(ping.id) << " "; |
| 1016 } | 1021 } |
| 1017 oss << "... " << (pings_since_last_response_.size() - max) << " more"; | 1022 oss << "... " << (pings_since_last_response_.size() - max) << " more"; |
| 1018 } else { | 1023 } else { |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 error_code == STUN_ERROR_UNAUTHORIZED) { | 1246 error_code == STUN_ERROR_UNAUTHORIZED) { |
| 1242 // Recoverable error, retry | 1247 // Recoverable error, retry |
| 1243 } else if (error_code == STUN_ERROR_STALE_CREDENTIALS) { | 1248 } else if (error_code == STUN_ERROR_STALE_CREDENTIALS) { |
| 1244 // Race failure, retry | 1249 // Race failure, retry |
| 1245 } else if (error_code == STUN_ERROR_ROLE_CONFLICT) { | 1250 } else if (error_code == STUN_ERROR_ROLE_CONFLICT) { |
| 1246 HandleRoleConflictFromPeer(); | 1251 HandleRoleConflictFromPeer(); |
| 1247 } else { | 1252 } else { |
| 1248 // This is not a valid connection. | 1253 // This is not a valid connection. |
| 1249 LOG_J(LS_ERROR, this) << "Received STUN error response, code=" | 1254 LOG_J(LS_ERROR, this) << "Received STUN error response, code=" |
| 1250 << error_code << "; killing connection"; | 1255 << error_code << "; killing connection"; |
| 1251 set_state(STATE_FAILED); | 1256 FailAndDestroy(); |
| 1252 Destroy(); | |
| 1253 } | 1257 } |
| 1254 } | 1258 } |
| 1255 | 1259 |
| 1256 void Connection::OnConnectionRequestTimeout(ConnectionRequest* request) { | 1260 void Connection::OnConnectionRequestTimeout(ConnectionRequest* request) { |
| 1257 // Log at LS_INFO if we miss a ping on a writable connection. | 1261 // Log at LS_INFO if we miss a ping on a writable connection. |
| 1258 rtc::LoggingSeverity sev = writable() ? rtc::LS_INFO : rtc::LS_VERBOSE; | 1262 rtc::LoggingSeverity sev = writable() ? rtc::LS_INFO : rtc::LS_VERBOSE; |
| 1259 LOG_JV(sev, this) << "Timing-out STUN ping " | 1263 LOG_JV(sev, this) << "Timing-out STUN ping " |
| 1260 << rtc::hex_encode(request->id()) | 1264 << rtc::hex_encode(request->id()) |
| 1261 << " after " << request->Elapsed() << " ms"; | 1265 << " after " << request->Elapsed() << " ms"; |
| 1262 } | 1266 } |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1389 local_candidate().address())); | 1393 local_candidate().address())); |
| 1390 | 1394 |
| 1391 // Change the local candidate of this Connection to the new prflx candidate. | 1395 // Change the local candidate of this Connection to the new prflx candidate. |
| 1392 local_candidate_index_ = port_->AddPrflxCandidate(new_local_candidate); | 1396 local_candidate_index_ = port_->AddPrflxCandidate(new_local_candidate); |
| 1393 | 1397 |
| 1394 // SignalStateChange to force a re-sort in P2PTransportChannel as this | 1398 // SignalStateChange to force a re-sort in P2PTransportChannel as this |
| 1395 // Connection's local candidate has changed. | 1399 // Connection's local candidate has changed. |
| 1396 SignalStateChange(this); | 1400 SignalStateChange(this); |
| 1397 } | 1401 } |
| 1398 | 1402 |
| 1399 ProxyConnection::ProxyConnection(Port* port, size_t index, | 1403 ProxyConnection::ProxyConnection(Port* port, |
| 1400 const Candidate& candidate) | 1404 size_t index, |
| 1401 : Connection(port, index, candidate), error_(0) { | 1405 const Candidate& remote_candidate) |
| 1402 } | 1406 : Connection(port, index, remote_candidate) {} |
| 1403 | 1407 |
| 1404 int ProxyConnection::Send(const void* data, size_t size, | 1408 int ProxyConnection::Send(const void* data, size_t size, |
| 1405 const rtc::PacketOptions& options) { | 1409 const rtc::PacketOptions& options) { |
| 1406 if (write_state_ == STATE_WRITE_INIT || write_state_ == STATE_WRITE_TIMEOUT) { | 1410 if (write_state_ == STATE_WRITE_INIT || write_state_ == STATE_WRITE_TIMEOUT) { |
| 1407 error_ = EWOULDBLOCK; | 1411 error_ = EWOULDBLOCK; |
| 1408 return SOCKET_ERROR; | 1412 return SOCKET_ERROR; |
| 1409 } | 1413 } |
| 1410 sent_packets_total_++; | 1414 sent_packets_total_++; |
| 1411 int sent = port_->SendTo(data, size, remote_candidate_.address(), | 1415 int sent = port_->SendTo(data, size, remote_candidate_.address(), |
| 1412 options, true); | 1416 options, true); |
| 1413 if (sent <= 0) { | 1417 if (sent <= 0) { |
| 1414 ASSERT(sent < 0); | 1418 ASSERT(sent < 0); |
| 1415 error_ = port_->GetError(); | 1419 error_ = port_->GetError(); |
| 1416 sent_packets_discarded_++; | 1420 sent_packets_discarded_++; |
| 1417 } else { | 1421 } else { |
| 1418 send_rate_tracker_.AddSamples(sent); | 1422 send_rate_tracker_.AddSamples(sent); |
| 1419 } | 1423 } |
| 1420 return sent; | 1424 return sent; |
| 1421 } | 1425 } |
| 1422 | 1426 |
| 1423 } // namespace cricket | 1427 } // namespace cricket |
| OLD | NEW |