xref: /aosp_15_r20/external/webrtc/p2p/base/connection_info.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright 2019 The WebRTC Project Authors. All rights reserved.
3  *
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
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef P2P_BASE_CONNECTION_INFO_H_
12 #define P2P_BASE_CONNECTION_INFO_H_
13 
14 #include <vector>
15 
16 #include "absl/types/optional.h"
17 #include "api/candidate.h"
18 #include "api/units/timestamp.h"
19 
20 namespace cricket {
21 
22 // States are from RFC 5245. http://tools.ietf.org/html/rfc5245#section-5.7.4
23 enum class IceCandidatePairState {
24   WAITING = 0,  // Check has not been performed, Waiting pair on CL.
25   IN_PROGRESS,  // Check has been sent, transaction is in progress.
26   SUCCEEDED,    // Check already done, produced a successful result.
27   FAILED,       // Check for this connection failed.
28   // According to spec there should also be a frozen state, but nothing is ever
29   // frozen because we have not implemented ICE freezing logic.
30 };
31 
32 // Stats that we can return about the connections for a transport channel.
33 // TODO(hta): Rename to ConnectionStats
34 struct ConnectionInfo {
35   ConnectionInfo();
36   ConnectionInfo(const ConnectionInfo&);
37   ~ConnectionInfo();
38 
39   bool best_connection;      // Is this the best connection we have?
40   bool writable;             // Has this connection received a STUN response?
41   bool receiving;            // Has this connection received anything?
42   bool timeout;              // Has this connection timed out?
43   size_t rtt;                // The STUN RTT for this connection.
44   size_t sent_discarded_bytes;  // Number of outgoing bytes discarded due to
45                                 // socket errors.
46   size_t sent_total_bytes;      // Total bytes sent on this connection. Does not
47                                 // include discarded bytes.
48   size_t sent_bytes_second;  // Bps over the last measurement interval.
49   size_t sent_discarded_packets;  // Number of outgoing packets discarded due to
50                                   // socket errors.
51   size_t sent_total_packets;  // Number of total outgoing packets attempted for
52                               // sending, including discarded packets.
53   size_t sent_ping_requests_total;  // Number of STUN ping request sent.
54   size_t sent_ping_requests_before_first_response;  // Number of STUN ping
55   // sent before receiving the first response.
56   size_t sent_ping_responses;  // Number of STUN ping response sent.
57 
58   size_t recv_total_bytes;     // Total bytes received on this connection.
59   size_t recv_bytes_second;    // Bps over the last measurement interval.
60   size_t packets_received;     // Number of packets that were received.
61   size_t recv_ping_requests;   // Number of STUN ping request received.
62   size_t recv_ping_responses;  // Number of STUN ping response received.
63   Candidate local_candidate;   // The local candidate for this connection.
64   Candidate remote_candidate;  // The remote candidate for this connection.
65   void* key;                   // A static value that identifies this conn.
66   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-state
67   IceCandidatePairState state;
68   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-priority
69   uint64_t priority;
70   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-nominated
71   bool nominated;
72   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-totalroundtriptime
73   uint64_t total_round_trip_time_ms;
74   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-currentroundtriptime
75   absl::optional<uint32_t> current_round_trip_time_ms;
76 
77   // https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-lastpacketreceivedtimestamp
78   absl::optional<webrtc::Timestamp> last_data_received;
79   absl::optional<webrtc::Timestamp> last_data_sent;
80 };
81 
82 // Information about all the candidate pairs of a channel.
83 typedef std::vector<ConnectionInfo> ConnectionInfos;
84 
85 }  // namespace cricket
86 
87 #endif  // P2P_BASE_CONNECTION_INFO_H_
88