Move internal PeerConnection methods to PeerConnectionInternal
PeerConnectionInternal is being introduced so that it can be mocked in
tests and so that a fake can be written for it to be used by stats
tests.
Bug: webrtc:8764
Change-Id: I375d12ce352523e8ac584402685a7870bc399fac
Reviewed-on: https://webrtc-review.googlesource.com/43202
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21747}
diff --git a/pc/peerconnectioninternal.h b/pc/peerconnectioninternal.h
new file mode 100644
index 0000000..4e179f5
--- /dev/null
+++ b/pc/peerconnectioninternal.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2018 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_PEERCONNECTIONINTERNAL_H_
+#define PC_PEERCONNECTIONINTERNAL_H_
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "api/peerconnectioninterface.h"
+#include "pc/datachannel.h"
+#include "pc/rtptransceiver.h"
+
+namespace webrtc {
+
+// Statistics for all the transports of the session.
+// TODO(pthatcher): Think of a better name for this. We already have
+// a TransportStats in transport.h. Perhaps TransportsStats?
+struct SessionStats {
+ std::map<std::string, cricket::TransportStats> transport_stats;
+};
+
+struct ChannelNamePair {
+ ChannelNamePair(const std::string& content_name,
+ const std::string& transport_name)
+ : content_name(content_name), transport_name(transport_name) {}
+ std::string content_name;
+ std::string transport_name;
+};
+
+struct ChannelNamePairs {
+ rtc::Optional<ChannelNamePair> voice;
+ rtc::Optional<ChannelNamePair> video;
+ rtc::Optional<ChannelNamePair> data;
+};
+
+// Internal interface for extra PeerConnection methods.
+class PeerConnectionInternal : public PeerConnectionInterface {
+ public:
+ virtual rtc::Thread* network_thread() const = 0;
+ virtual rtc::Thread* worker_thread() const = 0;
+ virtual rtc::Thread* signaling_thread() const = 0;
+
+ // The SDP session ID as defined by RFC 3264.
+ virtual const std::string& session_id() const = 0;
+
+ // Returns true if we were the initial offerer.
+ virtual bool initial_offerer() const = 0;
+
+ // TODO(steveanton): Remove these.
+ virtual cricket::VoiceChannel* voice_channel() const = 0;
+ virtual cricket::VideoChannel* video_channel() const = 0;
+
+ // Exposed for tests.
+ virtual std::vector<
+ rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>>
+ GetTransceiversForTesting() const = 0;
+
+ // Get the id used as a media stream track's "id" field from ssrc.
+ virtual bool GetLocalTrackIdBySsrc(uint32_t ssrc, std::string* track_id) = 0;
+ virtual bool GetRemoteTrackIdBySsrc(uint32_t ssrc, std::string* track_id) = 0;
+
+ virtual sigslot::signal1<DataChannel*>& SignalDataChannelCreated() = 0;
+
+ // Only valid when using deprecated RTP data channels.
+ virtual cricket::RtpDataChannel* rtp_data_channel() const = 0;
+
+ virtual const std::vector<rtc::scoped_refptr<DataChannel>>&
+ sctp_data_channels() const = 0;
+
+ virtual rtc::Optional<std::string> sctp_content_name() const = 0;
+ virtual rtc::Optional<std::string> sctp_transport_name() const = 0;
+
+ // Returns stats for all channels of all transports.
+ // This avoids exposing the internal structures used to track them.
+ // The parameterless version creates |ChannelNamePairs| from |voice_channel|,
+ // |video_channel| and |voice_channel| if available - this requires it to be
+ // called on the signaling thread - and invokes the other |GetStats|. The
+ // other |GetStats| can be invoked on any thread; if not invoked on the
+ // network thread a thread hop will happen.
+ virtual std::unique_ptr<SessionStats> GetSessionStats_s() = 0;
+ virtual std::unique_ptr<SessionStats> GetSessionStats(
+ const ChannelNamePairs& channel_name_pairs) = 0;
+
+ virtual Call::Stats GetCallStats() = 0;
+
+ virtual bool GetLocalCertificate(
+ const std::string& transport_name,
+ rtc::scoped_refptr<rtc::RTCCertificate>* certificate) = 0;
+ virtual std::unique_ptr<rtc::SSLCertificate> GetRemoteSSLCertificate(
+ const std::string& transport_name) = 0;
+
+ // Returns true if there was an ICE restart initiated by the remote offer.
+ virtual bool IceRestartPending(const std::string& content_name) const = 0;
+
+ // Returns true if the ICE restart flag above was set, and no ICE restart has
+ // occurred yet for this transport (by applying a local description with
+ // changed ufrag/password). If the transport has been deleted as a result of
+ // bundling, returns false.
+ virtual bool NeedsIceRestart(const std::string& content_name) const = 0;
+
+ // Get SSL role for an arbitrary m= section (handles bundling correctly).
+ virtual bool GetSslRole(const std::string& content_name,
+ rtc::SSLRole* role) = 0;
+};
+
+} // namespace webrtc
+
+#endif // PC_PEERCONNECTIONINTERNAL_H_