Add pruneTurnPorts to the IOS RTCConfiguration.

BUG=
R=pthatcher@webrtc.org
TBR=tkchin@webrt.org

Review URL: https://codereview.webrtc.org/2120553002 .

Cr-Commit-Position: refs/heads/master@{#13368}
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm
index 2a11f2d..74b5c5d 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm
@@ -33,6 +33,7 @@
     _iceBackupCandidatePairPingInterval;
 @synthesize keyType = _keyType;
 @synthesize iceCandidatePoolSize = _iceCandidatePoolSize;
+@synthesize pruneTurnPorts = _pruneTurnPorts;
 @synthesize presumeWritableWhenFullyRelayed = _presumeWritableWhenFullyRelayed;
 
 - (instancetype)init {
@@ -60,6 +61,7 @@
         config.ice_backup_candidate_pair_ping_interval;
     _keyType = RTCEncryptionKeyTypeECDSA;
     _iceCandidatePoolSize = config.ice_candidate_pool_size;
+    _pruneTurnPorts = config.prune_turn_ports;
     _presumeWritableWhenFullyRelayed =
         config.presume_writable_when_fully_relayed;
   }
@@ -68,7 +70,7 @@
 
 - (NSString *)description {
   return [NSString stringWithFormat:
-      @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n}\n",
+      @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n}\n",
       _iceServers,
       [[self class] stringForTransportPolicy:_iceTransportPolicy],
       [[self class] stringForBundlePolicy:_bundlePolicy],
@@ -81,6 +83,7 @@
       _iceConnectionReceivingTimeout,
       _iceBackupCandidatePairPingInterval,
       _iceCandidatePoolSize,
+      _pruneTurnPorts,
       _presumeWritableWhenFullyRelayed];
 }
 
@@ -125,6 +128,7 @@
     nativeConfig->certificates.push_back(certificate);
   }
   nativeConfig->ice_candidate_pool_size = _iceCandidatePoolSize;
+  nativeConfig->prune_turn_ports = _pruneTurnPorts;
   nativeConfig->presume_writable_when_fully_relayed =
       _presumeWritableWhenFullyRelayed;
 
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
index 04cf9fc..fcd2244 100644
--- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
@@ -93,6 +93,9 @@
 /** ICE candidate pool size as defined in JSEP. Default is 0. */
 @property(nonatomic, assign) int iceCandidatePoolSize;
 
+/** Prune turn ports on the same network to the same turn server. Default is false. */
+@property(nonatomic, assign) bool pruneTurnPorts;
+
 /** If set to true, this means the ICE transport should presume TURN-to-TURN
  *  candidate pairs will succeed, even before a binding response is received.
  */
diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
index cd271f4..51591f4 100644
--- a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
+++ b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
@@ -44,6 +44,7 @@
   config.iceBackupCandidatePairPingInterval = interval;
   config.continualGatheringPolicy =
       RTCContinualGatheringPolicyGatherContinually;
+  config.pruneTurnPorts = true;
 
   std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration>
       nativeConfig([config createNativeConfiguration]);
@@ -68,6 +69,7 @@
   EXPECT_EQ(interval, nativeConfig->ice_backup_candidate_pair_ping_interval);
   EXPECT_EQ(webrtc::PeerConnectionInterface::GATHER_CONTINUALLY,
             nativeConfig->continual_gathering_policy);
+  EXPECT_EQ(true, nativeConfig->prune_turn_ports);
 }
 
 @end