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

Side by Side Diff: webrtc/p2p/base/port.cc

Issue 1940493002: Add Stats to Stun ping. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rename. Created 4 years, 6 months 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
« no previous file with comments | « webrtc/p2p/base/port.h ('k') | webrtc/p2p/base/port_unittest.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 /* 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 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 } else { 587 } else {
588 // Log at LS_INFO if we send a stun ping response on an unwritable 588 // Log at LS_INFO if we send a stun ping response on an unwritable
589 // connection. 589 // connection.
590 Connection* conn = GetConnection(addr); 590 Connection* conn = GetConnection(addr);
591 rtc::LoggingSeverity sev = (conn && !conn->writable()) ? 591 rtc::LoggingSeverity sev = (conn && !conn->writable()) ?
592 rtc::LS_INFO : rtc::LS_VERBOSE; 592 rtc::LS_INFO : rtc::LS_VERBOSE;
593 LOG_JV(sev, this) 593 LOG_JV(sev, this)
594 << "Sent STUN ping response" 594 << "Sent STUN ping response"
595 << ", to=" << addr.ToSensitiveString() 595 << ", to=" << addr.ToSensitiveString()
596 << ", id=" << rtc::hex_encode(response.transaction_id()); 596 << ", id=" << rtc::hex_encode(response.transaction_id());
597
598 conn->stats_.sent_ping_responses++;
597 } 599 }
598 } 600 }
599 601
600 void Port::SendBindingErrorResponse(StunMessage* request, 602 void Port::SendBindingErrorResponse(StunMessage* request,
601 const rtc::SocketAddress& addr, 603 const rtc::SocketAddress& addr,
602 int error_code, const std::string& reason) { 604 int error_code, const std::string& reason) {
603 ASSERT(request->type() == STUN_BINDING_REQUEST); 605 ASSERT(request->type() == STUN_BINDING_REQUEST);
604 606
605 // Fill in the response message. 607 // Fill in the response message.
606 StunMessage response; 608 StunMessage response;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 nominated_(false), 825 nominated_(false),
824 remote_ice_mode_(ICEMODE_FULL), 826 remote_ice_mode_(ICEMODE_FULL),
825 requests_(port->thread()), 827 requests_(port->thread()),
826 rtt_(DEFAULT_RTT), 828 rtt_(DEFAULT_RTT),
827 last_ping_sent_(0), 829 last_ping_sent_(0),
828 last_ping_received_(0), 830 last_ping_received_(0),
829 last_data_received_(0), 831 last_data_received_(0),
830 last_ping_response_received_(0), 832 last_ping_response_received_(0),
831 recv_rate_tracker_(100, 10u), 833 recv_rate_tracker_(100, 10u),
832 send_rate_tracker_(100, 10u), 834 send_rate_tracker_(100, 10u),
833 sent_packets_discarded_(0),
834 sent_packets_total_(0),
835 reported_(false), 835 reported_(false),
836 state_(STATE_WAITING), 836 state_(STATE_WAITING),
837 receiving_timeout_(WEAK_CONNECTION_RECEIVE_TIMEOUT), 837 receiving_timeout_(WEAK_CONNECTION_RECEIVE_TIMEOUT),
838 time_created_ms_(rtc::TimeMillis()) { 838 time_created_ms_(rtc::TimeMillis()) {
839 // All of our connections start in WAITING state. 839 // All of our connections start in WAITING state.
840 // TODO(mallinath) - Start connections from STATE_FROZEN. 840 // TODO(mallinath) - Start connections from STATE_FROZEN.
841 // Wire up to send stun packets 841 // Wire up to send stun packets
842 requests_.SignalSendPacket.connect(this, &Connection::OnSendStunPacket); 842 requests_.SignalSendPacket.connect(this, &Connection::OnSendStunPacket);
843 LOG_J(LS_INFO, this) << "Connection created"; 843 LOG_J(LS_INFO, this) << "Connection created";
844 } 844 }
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 1011
1012 const rtc::SocketAddress& remote_addr = remote_candidate_.address(); 1012 const rtc::SocketAddress& remote_addr = remote_candidate_.address();
1013 const std::string& remote_ufrag = remote_candidate_.username(); 1013 const std::string& remote_ufrag = remote_candidate_.username();
1014 // Check for role conflicts. 1014 // Check for role conflicts.
1015 if (!port_->MaybeIceRoleConflict(remote_addr, msg, remote_ufrag)) { 1015 if (!port_->MaybeIceRoleConflict(remote_addr, msg, remote_ufrag)) {
1016 // Received conflicting role from the peer. 1016 // Received conflicting role from the peer.
1017 LOG(LS_INFO) << "Received conflicting role from the peer."; 1017 LOG(LS_INFO) << "Received conflicting role from the peer.";
1018 return; 1018 return;
1019 } 1019 }
1020 1020
1021 stats_.recv_ping_requests++;
1022
1021 // This is a validated stun request from remote peer. 1023 // This is a validated stun request from remote peer.
1022 port_->SendBindingResponse(msg, remote_addr); 1024 port_->SendBindingResponse(msg, remote_addr);
1023 1025
1024 // If it timed out on writing check, start up again 1026 // If it timed out on writing check, start up again
1025 if (!pruned_ && write_state_ == STATE_WRITE_TIMEOUT) { 1027 if (!pruned_ && write_state_ == STATE_WRITE_TIMEOUT) {
1026 set_write_state(STATE_WRITE_INIT); 1028 set_write_state(STATE_WRITE_INIT);
1027 } 1029 }
1028 1030
1029 if (port_->GetIceRole() == ICEROLE_CONTROLLED) { 1031 if (port_->GetIceRole() == ICEROLE_CONTROLLED) {
1030 const StunByteStringAttribute* use_candidate_attr = 1032 const StunByteStringAttribute* use_candidate_attr =
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 PrintPingsSinceLastResponse(&pings, 5); 1293 PrintPingsSinceLastResponse(&pings, 5);
1292 LOG_JV(sev, this) << "Received STUN ping response" 1294 LOG_JV(sev, this) << "Received STUN ping response"
1293 << ", id=" << rtc::hex_encode(request->id()) 1295 << ", id=" << rtc::hex_encode(request->id())
1294 << ", code=0" // Makes logging easier to parse. 1296 << ", code=0" // Makes logging easier to parse.
1295 << ", rtt=" << rtt 1297 << ", rtt=" << rtt
1296 << ", use_candidate=" << use_candidate 1298 << ", use_candidate=" << use_candidate
1297 << ", pings_since_last_response=" << pings; 1299 << ", pings_since_last_response=" << pings;
1298 } 1300 }
1299 1301
1300 rtt_ = (RTT_RATIO * rtt_ + rtt) / (RTT_RATIO + 1); 1302 rtt_ = (RTT_RATIO * rtt_ + rtt) / (RTT_RATIO + 1);
1303 stats_.recv_ping_responses++;
1301 1304
1302 MaybeAddPrflxCandidate(request, response); 1305 MaybeAddPrflxCandidate(request, response);
1303 } 1306 }
1304 1307
1305 void Connection::OnConnectionRequestErrorResponse(ConnectionRequest* request, 1308 void Connection::OnConnectionRequestErrorResponse(ConnectionRequest* request,
1306 StunMessage* response) { 1309 StunMessage* response) {
1307 const StunErrorCodeAttribute* error_attr = response->GetErrorCode(); 1310 const StunErrorCodeAttribute* error_attr = response->GetErrorCode();
1308 int error_code = STUN_ERROR_GLOBAL_FAILURE; 1311 int error_code = STUN_ERROR_GLOBAL_FAILURE;
1309 if (error_attr) { 1312 if (error_attr) {
1310 error_code = error_attr->code(); 1313 error_code = error_attr->code();
(...skipping 28 matching lines...) Expand all
1339 << " after " << request->Elapsed() << " ms"; 1342 << " after " << request->Elapsed() << " ms";
1340 } 1343 }
1341 1344
1342 void Connection::OnConnectionRequestSent(ConnectionRequest* request) { 1345 void Connection::OnConnectionRequestSent(ConnectionRequest* request) {
1343 // Log at LS_INFO if we send a ping on an unwritable connection. 1346 // Log at LS_INFO if we send a ping on an unwritable connection.
1344 rtc::LoggingSeverity sev = !writable() ? rtc::LS_INFO : rtc::LS_VERBOSE; 1347 rtc::LoggingSeverity sev = !writable() ? rtc::LS_INFO : rtc::LS_VERBOSE;
1345 bool use_candidate = use_candidate_attr(); 1348 bool use_candidate = use_candidate_attr();
1346 LOG_JV(sev, this) << "Sent STUN ping" 1349 LOG_JV(sev, this) << "Sent STUN ping"
1347 << ", id=" << rtc::hex_encode(request->id()) 1350 << ", id=" << rtc::hex_encode(request->id())
1348 << ", use_candidate=" << use_candidate; 1351 << ", use_candidate=" << use_candidate;
1352 stats_.sent_ping_requests_total++;
1353 if (stats_.recv_ping_responses == 0) {
1354 stats_.sent_ping_requests_before_first_response++;
1355 }
1349 } 1356 }
1350 1357
1351 void Connection::HandleRoleConflictFromPeer() { 1358 void Connection::HandleRoleConflictFromPeer() {
1352 port_->SignalRoleConflict(port_); 1359 port_->SignalRoleConflict(port_);
1353 } 1360 }
1354 1361
1355 void Connection::MaybeSetRemoteIceCredentialsAndGeneration( 1362 void Connection::MaybeSetRemoteIceCredentialsAndGeneration(
1356 const std::string& ice_ufrag, 1363 const std::string& ice_ufrag,
1357 const std::string& ice_pwd, 1364 const std::string& ice_pwd,
1358 int generation) { 1365 int generation) {
(...skipping 30 matching lines...) Expand all
1389 << num_pings_sent_; 1396 << num_pings_sent_;
1390 SignalDestroyed(this); 1397 SignalDestroyed(this);
1391 delete this; 1398 delete this;
1392 } 1399 }
1393 1400
1394 int64_t Connection::last_received() const { 1401 int64_t Connection::last_received() const {
1395 return std::max(last_data_received_, 1402 return std::max(last_data_received_,
1396 std::max(last_ping_received_, last_ping_response_received_)); 1403 std::max(last_ping_received_, last_ping_response_received_));
1397 } 1404 }
1398 1405
1399 size_t Connection::recv_bytes_second() { 1406 ConnectionInfo Connection::stats() {
1400 return round(recv_rate_tracker_.ComputeRate()); 1407 stats_.recv_bytes_second = round(recv_rate_tracker_.ComputeRate());
1401 } 1408 stats_.recv_total_bytes = recv_rate_tracker_.TotalSampleCount();
1402 1409 stats_.sent_bytes_second = round(send_rate_tracker_.ComputeRate());
1403 size_t Connection::recv_total_bytes() { 1410 stats_.sent_total_bytes = send_rate_tracker_.TotalSampleCount();
1404 return recv_rate_tracker_.TotalSampleCount(); 1411 return stats_;
1405 }
1406
1407 size_t Connection::sent_bytes_second() {
1408 return round(send_rate_tracker_.ComputeRate());
1409 }
1410
1411 size_t Connection::sent_total_bytes() {
1412 return send_rate_tracker_.TotalSampleCount();
1413 }
1414
1415 size_t Connection::sent_discarded_packets() {
1416 return sent_packets_discarded_;
1417 }
1418
1419 size_t Connection::sent_total_packets() {
1420 return sent_packets_total_;
1421 } 1412 }
1422 1413
1423 void Connection::MaybeAddPrflxCandidate(ConnectionRequest* request, 1414 void Connection::MaybeAddPrflxCandidate(ConnectionRequest* request,
1424 StunMessage* response) { 1415 StunMessage* response) {
1425 // RFC 5245 1416 // RFC 5245
1426 // The agent checks the mapped address from the STUN response. If the 1417 // The agent checks the mapped address from the STUN response. If the
1427 // transport address does not match any of the local candidates that the 1418 // transport address does not match any of the local candidates that the
1428 // agent knows about, the mapped address represents a new candidate -- a 1419 // agent knows about, the mapped address represents a new candidate -- a
1429 // peer reflexive candidate. 1420 // peer reflexive candidate.
1430 const StunAddressAttribute* addr = 1421 const StunAddressAttribute* addr =
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 size_t index, 1482 size_t index,
1492 const Candidate& remote_candidate) 1483 const Candidate& remote_candidate)
1493 : Connection(port, index, remote_candidate) {} 1484 : Connection(port, index, remote_candidate) {}
1494 1485
1495 int ProxyConnection::Send(const void* data, size_t size, 1486 int ProxyConnection::Send(const void* data, size_t size,
1496 const rtc::PacketOptions& options) { 1487 const rtc::PacketOptions& options) {
1497 if (write_state_ == STATE_WRITE_INIT || write_state_ == STATE_WRITE_TIMEOUT) { 1488 if (write_state_ == STATE_WRITE_INIT || write_state_ == STATE_WRITE_TIMEOUT) {
1498 error_ = EWOULDBLOCK; 1489 error_ = EWOULDBLOCK;
1499 return SOCKET_ERROR; 1490 return SOCKET_ERROR;
1500 } 1491 }
1501 sent_packets_total_++; 1492 stats_.sent_total_packets++;
1502 int sent = port_->SendTo(data, size, remote_candidate_.address(), 1493 int sent = port_->SendTo(data, size, remote_candidate_.address(),
1503 options, true); 1494 options, true);
1504 if (sent <= 0) { 1495 if (sent <= 0) {
1505 ASSERT(sent < 0); 1496 ASSERT(sent < 0);
1506 error_ = port_->GetError(); 1497 error_ = port_->GetError();
1507 sent_packets_discarded_++; 1498 stats_.sent_discarded_packets++;
1508 } else { 1499 } else {
1509 send_rate_tracker_.AddSamples(sent); 1500 send_rate_tracker_.AddSamples(sent);
1510 } 1501 }
1511 return sent; 1502 return sent;
1512 } 1503 }
1513 1504
1514 } // namespace cricket 1505 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/port.h ('k') | webrtc/p2p/base/port_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698