/* * Copyright 2016 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_ #define WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_ #include #include "webrtc/api/stats/rtcstats.h" namespace webrtc { // https://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelstate struct RTCDataChannelState { static const char* kConnecting; static const char* kOpen; static const char* kClosing; static const char* kClosed; }; // https://w3c.github.io/webrtc-stats/#dom-rtcstatsicecandidatepairstate struct RTCStatsIceCandidatePairState { static const char* kFrozen; static const char* kWaiting; static const char* kInProgress; static const char* kFailed; static const char* kSucceeded; static const char* kCancelled; }; // https://w3c.github.io/webrtc-pc/#rtcicecandidatetype-enum struct RTCIceCandidateType { static const char* kHost; static const char* kSrflx; static const char* kPrflx; static const char* kRelay; }; // https://w3c.github.io/webrtc-stats/#certificatestats-dict* class RTCCertificateStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCCertificateStats(const std::string& id, int64_t timestamp_us); RTCCertificateStats(std::string&& id, int64_t timestamp_us); RTCCertificateStats(const RTCCertificateStats& other); ~RTCCertificateStats() override; RTCStatsMember fingerprint; RTCStatsMember fingerprint_algorithm; RTCStatsMember base64_certificate; RTCStatsMember issuer_certificate_id; }; // https://w3c.github.io/webrtc-stats/#dcstats-dict* class RTCDataChannelStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCDataChannelStats(const std::string& id, int64_t timestamp_us); RTCDataChannelStats(std::string&& id, int64_t timestamp_us); RTCDataChannelStats(const RTCDataChannelStats& other); ~RTCDataChannelStats() override; RTCStatsMember label; RTCStatsMember protocol; RTCStatsMember datachannelid; // TODO(hbos): Support enum types? "RTCStatsMember"? RTCStatsMember state; RTCStatsMember messages_sent; RTCStatsMember bytes_sent; RTCStatsMember messages_received; RTCStatsMember bytes_received; }; // https://w3c.github.io/webrtc-stats/#candidatepair-dict* // TODO(hbos): Finish implementation. Tracking bug crbug.com/633550 class RTCIceCandidatePairStats : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCIceCandidatePairStats(const std::string& id, int64_t timestamp_us); RTCIceCandidatePairStats(std::string&& id, int64_t timestamp_us); RTCIceCandidatePairStats(const RTCIceCandidatePairStats& other); ~RTCIceCandidatePairStats() override; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550, 653873 RTCStatsMember transport_id; RTCStatsMember local_candidate_id; RTCStatsMember remote_candidate_id; // TODO(hbos): Support enum types? // "RTCStatsMember"? // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember state; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember priority; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember nominated; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/633550 RTCStatsMember writable; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember readable; RTCStatsMember bytes_sent; RTCStatsMember bytes_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember total_rtt; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/633550 RTCStatsMember current_rtt; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember available_outgoing_bitrate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember available_incoming_bitrate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember requests_received; RTCStatsMember requests_sent; RTCStatsMember responses_received; RTCStatsMember responses_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember retransmissions_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember retransmissions_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_requests_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_requests_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_responses_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_responses_sent; }; // https://w3c.github.io/webrtc-stats/#icecandidate-dict* // TODO(hbos): |RTCStatsCollector| only collects candidates that are part of // ice candidate pairs, but there could be candidates not paired with anything. // crbug.com/632723 class RTCIceCandidateStats : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCIceCandidateStats(const RTCIceCandidateStats& other); ~RTCIceCandidateStats() override; RTCStatsMember ip; RTCStatsMember port; RTCStatsMember protocol; // TODO(hbos): Support enum types? "RTCStatsMember"? RTCStatsMember candidate_type; RTCStatsMember priority; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/632723 RTCStatsMember url; protected: RTCIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCIceCandidateStats(std::string&& id, int64_t timestamp_us); }; // In the spec both local and remote varieties are of type RTCIceCandidateStats. // But here we define them as subclasses of |RTCIceCandidateStats| because the // |kType| need to be different ("RTCStatsType type") in the local/remote case. // https://w3c.github.io/webrtc-stats/#rtcstatstype-str* class RTCLocalIceCandidateStats final : public RTCIceCandidateStats { public: static const char kType[]; RTCLocalIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCLocalIceCandidateStats(std::string&& id, int64_t timestamp_us); const char* type() const override; }; class RTCRemoteIceCandidateStats final : public RTCIceCandidateStats { public: static const char kType[]; RTCRemoteIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCRemoteIceCandidateStats(std::string&& id, int64_t timestamp_us); const char* type() const override; }; // https://w3c.github.io/webrtc-stats/#pcstats-dict* // TODO(hbos): Finish implementation. Tracking bug crbug.com/636818 class RTCPeerConnectionStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCPeerConnectionStats(const std::string& id, int64_t timestamp_us); RTCPeerConnectionStats(std::string&& id, int64_t timestamp_us); RTCPeerConnectionStats(const RTCPeerConnectionStats& other); ~RTCPeerConnectionStats() override; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/636818 RTCStatsMember data_channels_opened; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/636818 RTCStatsMember data_channels_closed; }; // https://w3c.github.io/webrtc-stats/#transportstats-dict* class RTCTransportStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCTransportStats(const std::string& id, int64_t timestamp_us); RTCTransportStats(std::string&& id, int64_t timestamp_us); RTCTransportStats(const RTCTransportStats& other); ~RTCTransportStats() override; RTCStatsMember bytes_sent; RTCStatsMember bytes_received; RTCStatsMember rtcp_transport_stats_id; RTCStatsMember active_connection; RTCStatsMember selected_candidate_pair_id; RTCStatsMember local_certificate_id; RTCStatsMember remote_certificate_id; }; } // namespace webrtc #endif // WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_