1 /* 2 * Copyright 2018 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 PC_PEER_CONNECTION_INTERNAL_H_ 12 #define PC_PEER_CONNECTION_INTERNAL_H_ 13 14 #include <map> 15 #include <memory> 16 #include <set> 17 #include <string> 18 #include <vector> 19 20 #include "api/peer_connection_interface.h" 21 #include "call/call.h" 22 #include "pc/rtp_data_channel.h" 23 #include "pc/rtp_transceiver.h" 24 #include "pc/sctp_data_channel.h" 25 26 namespace webrtc { 27 28 // Internal interface for extra PeerConnection methods. 29 class PeerConnectionInternal : public PeerConnectionInterface { 30 public: 31 virtual rtc::Thread* network_thread() const = 0; 32 virtual rtc::Thread* worker_thread() const = 0; 33 virtual rtc::Thread* signaling_thread() const = 0; 34 35 // The SDP session ID as defined by RFC 3264. 36 virtual std::string session_id() const = 0; 37 38 // Returns true if we were the initial offerer. 39 virtual bool initial_offerer() const = 0; 40 41 virtual std::vector< 42 rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>> 43 GetTransceiversInternal() const = 0; 44 45 virtual sigslot::signal1<RtpDataChannel*>& SignalRtpDataChannelCreated() = 0; 46 virtual sigslot::signal1<SctpDataChannel*>& 47 SignalSctpDataChannelCreated() = 0; 48 49 // Only valid when using deprecated RTP data channels. 50 virtual cricket::RtpDataChannel* rtp_data_channel() const = 0; 51 52 // Call on the network thread to fetch stats for all the data channels. 53 // TODO(tommi): Make pure virtual after downstream updates. GetDataChannelStats()54 virtual std::vector<DataChannelStats> GetDataChannelStats() const { 55 return {}; 56 } 57 58 virtual absl::optional<std::string> sctp_transport_name() const = 0; 59 60 virtual cricket::CandidateStatsList GetPooledCandidateStats() const = 0; 61 62 // Returns a map from MID to transport name for all active media sections. 63 virtual std::map<std::string, std::string> GetTransportNamesByMid() const = 0; 64 65 // Returns a map from transport name to transport stats for all given 66 // transport names. 67 virtual std::map<std::string, cricket::TransportStats> 68 GetTransportStatsByNames(const std::set<std::string>& transport_names) = 0; 69 70 virtual Call::Stats GetCallStats() = 0; 71 72 virtual bool GetLocalCertificate( 73 const std::string& transport_name, 74 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) = 0; 75 virtual std::unique_ptr<rtc::SSLCertChain> GetRemoteSSLCertChain( 76 const std::string& transport_name) = 0; 77 78 // Returns true if there was an ICE restart initiated by the remote offer. 79 virtual bool IceRestartPending(const std::string& content_name) const = 0; 80 81 // Returns true if the ICE restart flag above was set, and no ICE restart has 82 // occurred yet for this transport (by applying a local description with 83 // changed ufrag/password). If the transport has been deleted as a result of 84 // bundling, returns false. 85 virtual bool NeedsIceRestart(const std::string& content_name) const = 0; 86 87 // Get SSL role for an arbitrary m= section (handles bundling correctly). 88 virtual bool GetSslRole(const std::string& content_name, 89 rtc::SSLRole* role) = 0; 90 }; 91 92 } // namespace webrtc 93 94 #endif // PC_PEER_CONNECTION_INTERNAL_H_ 95