webrtc_ice/stats/mod.rs
1use tokio::time::Instant;
2
3use crate::candidate::*;
4use crate::network_type::*;
5
6// CandidatePairStats contains ICE candidate pair statistics
7#[derive(Debug, Clone)]
8pub struct CandidatePairStats {
9 // timestamp is the timestamp associated with this object.
10 pub timestamp: Instant,
11
12 // local_candidate_id is the id of the local candidate
13 pub local_candidate_id: String,
14
15 // remote_candidate_id is the id of the remote candidate
16 pub remote_candidate_id: String,
17
18 // state represents the state of the checklist for the local and remote
19 // candidates in a pair.
20 pub state: CandidatePairState,
21
22 // nominated is true when this valid pair that should be used for media
23 // if it is the highest-priority one amongst those whose nominated flag is set
24 pub nominated: bool,
25
26 // packets_sent represents the total number of packets sent on this candidate pair.
27 pub packets_sent: u32,
28
29 // packets_received represents the total number of packets received on this candidate pair.
30 pub packets_received: u32,
31
32 // bytes_sent represents the total number of payload bytes sent on this candidate pair
33 // not including headers or padding.
34 pub bytes_sent: u64,
35
36 // bytes_received represents the total number of payload bytes received on this candidate pair
37 // not including headers or padding.
38 pub bytes_received: u64,
39
40 // last_packet_sent_timestamp represents the timestamp at which the last packet was
41 // sent on this particular candidate pair, excluding STUN packets.
42 pub last_packet_sent_timestamp: Instant,
43
44 // last_packet_received_timestamp represents the timestamp at which the last packet
45 // was received on this particular candidate pair, excluding STUN packets.
46 pub last_packet_received_timestamp: Instant,
47
48 // first_request_timestamp represents the timestamp at which the first STUN request
49 // was sent on this particular candidate pair.
50 pub first_request_timestamp: Instant,
51
52 // last_request_timestamp represents the timestamp at which the last STUN request
53 // was sent on this particular candidate pair. The average interval between two
54 // consecutive connectivity checks sent can be calculated with
55 // (last_request_timestamp - first_request_timestamp) / requests_sent.
56 pub last_request_timestamp: Instant,
57
58 // last_response_timestamp represents the timestamp at which the last STUN response
59 // was received on this particular candidate pair.
60 pub last_response_timestamp: Instant,
61
62 // total_round_trip_time represents the sum of all round trip time measurements
63 // in seconds since the beginning of the session, based on STUN connectivity
64 // check responses (responses_received), including those that reply to requests
65 // that are sent in order to verify consent. The average round trip time can
66 // be computed from total_round_trip_time by dividing it by responses_received.
67 pub total_round_trip_time: f64,
68
69 // current_round_trip_time represents the latest round trip time measured in seconds,
70 // computed from both STUN connectivity checks, including those that are sent
71 // for consent verification.
72 pub current_round_trip_time: f64,
73
74 // available_outgoing_bitrate is calculated by the underlying congestion control
75 // by combining the available bitrate for all the outgoing RTP streams using
76 // this candidate pair. The bitrate measurement does not count the size of the
77 // ip or other transport layers like TCP or UDP. It is similar to the TIAS defined
78 // in RFC 3890, i.e., it is measured in bits per second and the bitrate is calculated
79 // over a 1 second window.
80 pub available_outgoing_bitrate: f64,
81
82 // available_incoming_bitrate is calculated by the underlying congestion control
83 // by combining the available bitrate for all the incoming RTP streams using
84 // this candidate pair. The bitrate measurement does not count the size of the
85 // ip or other transport layers like TCP or UDP. It is similar to the TIAS defined
86 // in RFC 3890, i.e., it is measured in bits per second and the bitrate is
87 // calculated over a 1 second window.
88 pub available_incoming_bitrate: f64,
89
90 // circuit_breaker_trigger_count represents the number of times the circuit breaker
91 // is triggered for this particular 5-tuple, ceasing transmission.
92 pub circuit_breaker_trigger_count: u32,
93
94 // requests_received represents the total number of connectivity check requests
95 // received (including retransmissions). It is impossible for the receiver to
96 // tell whether the request was sent in order to check connectivity or check
97 // consent, so all connectivity checks requests are counted here.
98 pub requests_received: u64,
99
100 // requests_sent represents the total number of connectivity check requests
101 // sent (not including retransmissions).
102 pub requests_sent: u64,
103
104 // responses_received represents the total number of connectivity check responses received.
105 pub responses_received: u64,
106
107 // responses_sent epresents the total number of connectivity check responses sent.
108 // Since we cannot distinguish connectivity check requests and consent requests,
109 // all responses are counted.
110 pub responses_sent: u64,
111
112 // retransmissions_received represents the total number of connectivity check
113 // request retransmissions received.
114 pub retransmissions_received: u64,
115
116 // retransmissions_sent represents the total number of connectivity check
117 // request retransmissions sent.
118 pub retransmissions_sent: u64,
119
120 // consent_requests_sent represents the total number of consent requests sent.
121 pub consent_requests_sent: u64,
122
123 // consent_expired_timestamp represents the timestamp at which the latest valid
124 // STUN binding response expired.
125 pub consent_expired_timestamp: Instant,
126}
127
128// CandidateStats contains ICE candidate statistics related to the ICETransport objects.
129#[derive(Debug, Clone)]
130pub struct CandidateStats {
131 // timestamp is the timestamp associated with this object.
132 pub timestamp: Instant,
133
134 // id is the candidate id
135 pub id: String,
136
137 // network_type represents the type of network interface used by the base of a
138 // local candidate (the address the ICE agent sends from). Only present for
139 // local candidates; it's not possible to know what type of network interface
140 // a remote candidate is using.
141 //
142 // Note:
143 // This stat only tells you about the network interface used by the first "hop";
144 // it's possible that a connection will be bottlenecked by another type of network.
145 // For example, when using Wi-Fi tethering, the networkType of the relevant candidate
146 // would be "wifi", even when the next hop is over a cellular connection.
147 pub network_type: NetworkType,
148
149 // ip is the ip address of the candidate, allowing for IPv4 addresses and
150 // IPv6 addresses, but fully qualified domain names (FQDNs) are not allowed.
151 pub ip: String,
152
153 // port is the port number of the candidate.
154 pub port: u16,
155
156 // candidate_type is the "Type" field of the ICECandidate.
157 pub candidate_type: CandidateType,
158
159 // priority is the "priority" field of the ICECandidate.
160 pub priority: u32,
161
162 // url is the url of the TURN or STUN server indicated in the that translated
163 // this ip address. It is the url address surfaced in an PeerConnectionICEEvent.
164 pub url: String,
165
166 // relay_protocol is the protocol used by the endpoint to communicate with the
167 // TURN server. This is only present for local candidates. Valid values for
168 // the TURN url protocol is one of udp, tcp, or tls.
169 pub relay_protocol: String,
170
171 // deleted is true if the candidate has been deleted/freed. For host candidates,
172 // this means that any network resources (typically a socket) associated with the
173 // candidate have been released. For TURN candidates, this means the TURN allocation
174 // is no longer active.
175 //
176 // Only defined for local candidates. For remote candidates, this property is not applicable.
177 pub deleted: bool,
178}