Add IceTransportInterface object

This creates the API for an ICE transport object, and lets it
be accessible from a DTLS transport object.

Bug: chromium:907849
Change-Id: Ieb24570217dec75ce0deca8420739c1f116fbba4
Reviewed-on: https://webrtc-review.googlesource.com/c/118703
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26472}
diff --git a/pc/dtls_transport.cc b/pc/dtls_transport.cc
index 4709107..62a75f2 100644
--- a/pc/dtls_transport.cc
+++ b/pc/dtls_transport.cc
@@ -12,6 +12,8 @@
 
 #include <utility>
 
+#include "pc/ice_transport.h"
+
 namespace webrtc {
 
 namespace {
@@ -46,6 +48,8 @@
   RTC_DCHECK(internal_dtls_transport_.get());
   internal_dtls_transport_->SignalDtlsState.connect(
       this, &DtlsTransport::OnInternalDtlsState);
+  ice_transport_ = new rtc::RefCountedObject<IceTransportWithPointer>(
+      internal_dtls_transport_->ice_transport());
 }
 
 DtlsTransport::~DtlsTransport() {
@@ -74,6 +78,10 @@
   observer_ = nullptr;
 }
 
+rtc::scoped_refptr<IceTransportInterface> DtlsTransport::ice_transport() {
+  return ice_transport_;
+}
+
 // Internal functions
 void DtlsTransport::Clear() {
   RTC_DCHECK(signaling_thread_->IsCurrent());
@@ -86,6 +94,7 @@
   } else {
     internal_dtls_transport_.reset();
   }
+  ice_transport_->Clear();
 }
 
 void DtlsTransport::OnInternalDtlsState(