/* * Copyright 2020 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 PC_USAGE_PATTERN_H_ #define PC_USAGE_PATTERN_H_ #include "api/peer_connection_interface.h" namespace webrtc { class PeerConnectionObserver; // A bit in the usage pattern is registered when its defining event occurs // at least once. enum class UsageEvent : int { TURN_SERVER_ADDED = 0x01, STUN_SERVER_ADDED = 0x02, DATA_ADDED = 0x04, AUDIO_ADDED = 0x08, VIDEO_ADDED = 0x10, // `SetLocalDescription` returns successfully. SET_LOCAL_DESCRIPTION_SUCCEEDED = 0x20, // `SetRemoteDescription` returns successfully. SET_REMOTE_DESCRIPTION_SUCCEEDED = 0x40, // A local candidate (with type host, server-reflexive, or relay) is // collected. CANDIDATE_COLLECTED = 0x80, // A remote candidate is successfully added via `AddIceCandidate`. ADD_ICE_CANDIDATE_SUCCEEDED = 0x100, ICE_STATE_CONNECTED = 0x200, CLOSE_CALLED = 0x400, // A local candidate with private IP is collected. PRIVATE_CANDIDATE_COLLECTED = 0x800, // A remote candidate with private IP is added, either via AddiceCandidate // or from the remote description. REMOTE_PRIVATE_CANDIDATE_ADDED = 0x1000, // A local mDNS candidate is collected. MDNS_CANDIDATE_COLLECTED = 0x2000, // A remote mDNS candidate is added, either via AddIceCandidate or from the // remote description. REMOTE_MDNS_CANDIDATE_ADDED = 0x4000, // A local candidate with IPv6 address is collected. IPV6_CANDIDATE_COLLECTED = 0x8000, // A remote candidate with IPv6 address is added, either via AddIceCandidate // or from the remote description. REMOTE_IPV6_CANDIDATE_ADDED = 0x10000, // A remote candidate (with type host, server-reflexive, or relay) is // successfully added, either via AddIceCandidate or from the remote // description. REMOTE_CANDIDATE_ADDED = 0x20000, // An explicit host-host candidate pair is selected, i.e. both the local and // the remote candidates have the host type. This does not include candidate // pairs formed with equivalent prflx remote candidates, e.g. a host-prflx // pair where the prflx candidate has the same base as a host candidate of // the remote peer. DIRECT_CONNECTION_SELECTED = 0x40000, MAX_VALUE = 0x80000, }; class UsagePattern { public: void NoteUsageEvent(UsageEvent event); void ReportUsagePattern(PeerConnectionObserver* observer) const; private: int usage_event_accumulator_ = 0; }; } // namespace webrtc #endif // PC_USAGE_PATTERN_H_