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