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

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: Add three more counters for stun ping. Created 4 years, 7 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
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 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 } else { 590 } else {
591 // Log at LS_INFO if we send a stun ping response on an unwritable 591 // Log at LS_INFO if we send a stun ping response on an unwritable
592 // connection. 592 // connection.
593 Connection* conn = GetConnection(addr); 593 Connection* conn = GetConnection(addr);
594 rtc::LoggingSeverity sev = (conn && !conn->writable()) ? 594 rtc::LoggingSeverity sev = (conn && !conn->writable()) ?
595 rtc::LS_INFO : rtc::LS_VERBOSE; 595 rtc::LS_INFO : rtc::LS_VERBOSE;
596 LOG_JV(sev, this) 596 LOG_JV(sev, this)
597 << "Sent STUN ping response" 597 << "Sent STUN ping response"
598 << ", to=" << addr.ToSensitiveString() 598 << ", to=" << addr.ToSensitiveString()
599 << ", id=" << rtc::hex_encode(response.transaction_id()); 599 << ", id=" << rtc::hex_encode(response.transaction_id());
600
601 // Update the stats of corresponding connection.
602 conn->sent_ping_responses_++;
600 } 603 }
601 } 604 }
602 605
603 void Port::SendBindingErrorResponse(StunMessage* request, 606 void Port::SendBindingErrorResponse(StunMessage* request,
604 const rtc::SocketAddress& addr, 607 const rtc::SocketAddress& addr,
605 int error_code, const std::string& reason) { 608 int error_code, const std::string& reason) {
606 ASSERT(request->type() == STUN_BINDING_REQUEST); 609 ASSERT(request->type() == STUN_BINDING_REQUEST);
607 610
608 // Fill in the response message. 611 // Fill in the response message.
609 StunMessage response; 612 StunMessage response;
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 requests_(port->thread()), 802 requests_(port->thread()),
800 rtt_(DEFAULT_RTT), 803 rtt_(DEFAULT_RTT),
801 last_ping_sent_(0), 804 last_ping_sent_(0),
802 last_ping_received_(0), 805 last_ping_received_(0),
803 last_data_received_(0), 806 last_data_received_(0),
804 last_ping_response_received_(0), 807 last_ping_response_received_(0),
805 recv_rate_tracker_(100, 10u), 808 recv_rate_tracker_(100, 10u),
806 send_rate_tracker_(100, 10u), 809 send_rate_tracker_(100, 10u),
807 sent_packets_discarded_(0), 810 sent_packets_discarded_(0),
808 sent_packets_total_(0), 811 sent_packets_total_(0),
812 sent_ping_requests_total_(0),
813 sent_ping_requests_before_first_response_(0),
814 sent_ping_responses_(0),
815 recv_ping_requests_(0),
816 recv_ping_responses_(0),
809 reported_(false), 817 reported_(false),
810 state_(STATE_WAITING), 818 state_(STATE_WAITING),
811 receiving_timeout_(WEAK_CONNECTION_RECEIVE_TIMEOUT), 819 receiving_timeout_(WEAK_CONNECTION_RECEIVE_TIMEOUT),
812 time_created_ms_(rtc::TimeMillis()) { 820 time_created_ms_(rtc::TimeMillis()),
821 received_first_response_(false) {
813 // All of our connections start in WAITING state. 822 // All of our connections start in WAITING state.
814 // TODO(mallinath) - Start connections from STATE_FROZEN. 823 // TODO(mallinath) - Start connections from STATE_FROZEN.
815 // Wire up to send stun packets 824 // Wire up to send stun packets
816 requests_.SignalSendPacket.connect(this, &Connection::OnSendStunPacket); 825 requests_.SignalSendPacket.connect(this, &Connection::OnSendStunPacket);
817 LOG_J(LS_INFO, this) << "Connection created"; 826 LOG_J(LS_INFO, this) << "Connection created";
818 } 827 }
819 828
820 Connection::~Connection() { 829 Connection::~Connection() {
821 } 830 }
822 831
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 994
986 const rtc::SocketAddress& remote_addr = remote_candidate_.address(); 995 const rtc::SocketAddress& remote_addr = remote_candidate_.address();
987 const std::string& remote_ufrag = remote_candidate_.username(); 996 const std::string& remote_ufrag = remote_candidate_.username();
988 // Check for role conflicts. 997 // Check for role conflicts.
989 if (!port_->MaybeIceRoleConflict(remote_addr, msg, remote_ufrag)) { 998 if (!port_->MaybeIceRoleConflict(remote_addr, msg, remote_ufrag)) {
990 // Received conflicting role from the peer. 999 // Received conflicting role from the peer.
991 LOG(LS_INFO) << "Received conflicting role from the peer."; 1000 LOG(LS_INFO) << "Received conflicting role from the peer.";
992 return; 1001 return;
993 } 1002 }
994 1003
1004 recv_ping_requests_++;
1005
995 // This is a validated stun request from remote peer. 1006 // This is a validated stun request from remote peer.
996 port_->SendBindingResponse(msg, remote_addr); 1007 port_->SendBindingResponse(msg, remote_addr);
997 1008
998 // If it timed out on writing check, start up again 1009 // If it timed out on writing check, start up again
999 if (!pruned_ && write_state_ == STATE_WRITE_TIMEOUT) { 1010 if (!pruned_ && write_state_ == STATE_WRITE_TIMEOUT) {
1000 set_write_state(STATE_WRITE_INIT); 1011 set_write_state(STATE_WRITE_INIT);
1001 } 1012 }
1002 1013
1003 if (port_->GetIceRole() == ICEROLE_CONTROLLED) { 1014 if (port_->GetIceRole() == ICEROLE_CONTROLLED) {
1004 const StunByteStringAttribute* use_candidate_attr = 1015 const StunByteStringAttribute* use_candidate_attr =
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 PrintPingsSinceLastResponse(&pings, 5); 1260 PrintPingsSinceLastResponse(&pings, 5);
1250 LOG_JV(sev, this) << "Received STUN ping response" 1261 LOG_JV(sev, this) << "Received STUN ping response"
1251 << ", id=" << rtc::hex_encode(request->id()) 1262 << ", id=" << rtc::hex_encode(request->id())
1252 << ", code=0" // Makes logging easier to parse. 1263 << ", code=0" // Makes logging easier to parse.
1253 << ", rtt=" << rtt 1264 << ", rtt=" << rtt
1254 << ", use_candidate=" << use_candidate 1265 << ", use_candidate=" << use_candidate
1255 << ", pings_since_last_response=" << pings; 1266 << ", pings_since_last_response=" << pings;
1256 } 1267 }
1257 1268
1258 rtt_ = (RTT_RATIO * rtt_ + rtt) / (RTT_RATIO + 1); 1269 rtt_ = (RTT_RATIO * rtt_ + rtt) / (RTT_RATIO + 1);
1270 recv_ping_responses_++;
1271 if (!received_first_response_) {
1272 received_first_response_ = true;
1273 }
1259 1274
1260 MaybeAddPrflxCandidate(request, response); 1275 MaybeAddPrflxCandidate(request, response);
1261 } 1276 }
1262 1277
1263 void Connection::OnConnectionRequestErrorResponse(ConnectionRequest* request, 1278 void Connection::OnConnectionRequestErrorResponse(ConnectionRequest* request,
1264 StunMessage* response) { 1279 StunMessage* response) {
1265 const StunErrorCodeAttribute* error_attr = response->GetErrorCode(); 1280 const StunErrorCodeAttribute* error_attr = response->GetErrorCode();
1266 int error_code = STUN_ERROR_GLOBAL_FAILURE; 1281 int error_code = STUN_ERROR_GLOBAL_FAILURE;
1267 if (error_attr) { 1282 if (error_attr) {
1268 error_code = error_attr->code(); 1283 error_code = error_attr->code();
(...skipping 28 matching lines...) Expand all
1297 << " after " << request->Elapsed() << " ms"; 1312 << " after " << request->Elapsed() << " ms";
1298 } 1313 }
1299 1314
1300 void Connection::OnConnectionRequestSent(ConnectionRequest* request) { 1315 void Connection::OnConnectionRequestSent(ConnectionRequest* request) {
1301 // Log at LS_INFO if we send a ping on an unwritable connection. 1316 // Log at LS_INFO if we send a ping on an unwritable connection.
1302 rtc::LoggingSeverity sev = !writable() ? rtc::LS_INFO : rtc::LS_VERBOSE; 1317 rtc::LoggingSeverity sev = !writable() ? rtc::LS_INFO : rtc::LS_VERBOSE;
1303 bool use_candidate = use_candidate_attr(); 1318 bool use_candidate = use_candidate_attr();
1304 LOG_JV(sev, this) << "Sent STUN ping" 1319 LOG_JV(sev, this) << "Sent STUN ping"
1305 << ", id=" << rtc::hex_encode(request->id()) 1320 << ", id=" << rtc::hex_encode(request->id())
1306 << ", use_candidate=" << use_candidate; 1321 << ", use_candidate=" << use_candidate;
1322 sent_ping_requests_total_++;
1323 if (!received_first_response_) {
1324 sent_ping_requests_before_first_response_++;
1325 }
1307 } 1326 }
1308 1327
1309 void Connection::HandleRoleConflictFromPeer() { 1328 void Connection::HandleRoleConflictFromPeer() {
1310 port_->SignalRoleConflict(port_); 1329 port_->SignalRoleConflict(port_);
1311 } 1330 }
1312 1331
1313 void Connection::MaybeSetRemoteIceCredentialsAndGeneration( 1332 void Connection::MaybeSetRemoteIceCredentialsAndGeneration(
1314 const std::string& ice_ufrag, 1333 const std::string& ice_ufrag,
1315 const std::string& ice_pwd, 1334 const std::string& ice_pwd,
1316 int generation) { 1335 int generation) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1370 } 1389 }
1371 1390
1372 size_t Connection::sent_discarded_packets() { 1391 size_t Connection::sent_discarded_packets() {
1373 return sent_packets_discarded_; 1392 return sent_packets_discarded_;
1374 } 1393 }
1375 1394
1376 size_t Connection::sent_total_packets() { 1395 size_t Connection::sent_total_packets() {
1377 return sent_packets_total_; 1396 return sent_packets_total_;
1378 } 1397 }
1379 1398
1399 size_t Connection::sent_ping_requests_total() {
1400 return sent_ping_requests_total_;
1401 }
1402
1403 size_t Connection::sent_ping_requests_before_first_response() {
1404 return sent_ping_requests_before_first_response_;
1405 }
1406
1407 size_t Connection::sent_ping_responses() {
1408 return sent_ping_responses_;
1409 }
1410
1411 size_t Connection::recv_ping_responses() {
1412 return recv_ping_responses_;
1413 }
1414
1415 size_t Connection::recv_ping_requests() {
1416 return recv_ping_requests_;
1417 }
1418
1380 void Connection::MaybeAddPrflxCandidate(ConnectionRequest* request, 1419 void Connection::MaybeAddPrflxCandidate(ConnectionRequest* request,
1381 StunMessage* response) { 1420 StunMessage* response) {
1382 // RFC 5245 1421 // RFC 5245
1383 // The agent checks the mapped address from the STUN response. If the 1422 // The agent checks the mapped address from the STUN response. If the
1384 // transport address does not match any of the local candidates that the 1423 // transport address does not match any of the local candidates that the
1385 // agent knows about, the mapped address represents a new candidate -- a 1424 // agent knows about, the mapped address represents a new candidate -- a
1386 // peer reflexive candidate. 1425 // peer reflexive candidate.
1387 const StunAddressAttribute* addr = 1426 const StunAddressAttribute* addr =
1388 response->GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); 1427 response->GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS);
1389 if (!addr) { 1428 if (!addr) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 ASSERT(sent < 0); 1501 ASSERT(sent < 0);
1463 error_ = port_->GetError(); 1502 error_ = port_->GetError();
1464 sent_packets_discarded_++; 1503 sent_packets_discarded_++;
1465 } else { 1504 } else {
1466 send_rate_tracker_.AddSamples(sent); 1505 send_rate_tracker_.AddSamples(sent);
1467 } 1506 }
1468 return sent; 1507 return sent;
1469 } 1508 }
1470 1509
1471 } // namespace cricket 1510 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698