Reinstate "iOS - Add iceRegatherIntervalRange."
This reverts commit 93adc3209b5ff10adaba54d5eab6b53bc2780685.
Reverted originally because it depended on a CL which was reverted.
That CL has been reinstated in:
https: //chromium-review.googlesource.com/#/c/572070/
Bug: webrtc:7969
Change-Id: I608bbeaaba02e84908433c8260cf236df0307a97
Reviewed-on: https://chromium-review.googlesource.com/572405
Reviewed-by: Zeke Chin <tkchin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19035}
diff --git a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCConfiguration.mm b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCConfiguration.mm
index ad11b30..24fcdef 100644
--- a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCConfiguration.mm
+++ b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCConfiguration.mm
@@ -13,6 +13,7 @@
#include <memory>
#import "RTCIceServer+Private.h"
+#import "RTCIntervalRange+Private.h"
#import "WebRTC/RTCLogging.h"
#include "webrtc/rtc_base/rtccertificategenerator.h"
@@ -38,6 +39,7 @@
@synthesize shouldPresumeWritableWhenFullyRelayed =
_shouldPresumeWritableWhenFullyRelayed;
@synthesize iceCheckMinInterval = _iceCheckMinInterval;
+@synthesize iceRegatherIntervalRange = _iceRegatherIntervalRange;
- (instancetype)init {
// Copy defaults.
@@ -83,13 +85,18 @@
_iceCheckMinInterval =
[NSNumber numberWithInt:*config.ice_check_min_interval];
}
+ if (config.ice_regather_interval_range) {
+ const rtc::IntervalRange &nativeIntervalRange = config.ice_regather_interval_range.value();
+ _iceRegatherIntervalRange =
+ [[RTCIntervalRange alloc] initWithNativeIntervalRange:nativeIntervalRange];
+ }
}
return self;
}
- (NSString *)description {
return [NSString stringWithFormat:
- @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%@\n}\n",
+ @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%@\n%@\n}\n",
_iceServers,
[[self class] stringForTransportPolicy:_iceTransportPolicy],
[[self class] stringForBundlePolicy:_bundlePolicy],
@@ -105,7 +112,8 @@
_iceCandidatePoolSize,
_shouldPruneTurnPorts,
_shouldPresumeWritableWhenFullyRelayed,
- _iceCheckMinInterval];
+ _iceCheckMinInterval,
+ _iceRegatherIntervalRange];
}
#pragma mark - Private
@@ -159,6 +167,12 @@
nativeConfig->ice_check_min_interval =
rtc::Optional<int>(_iceCheckMinInterval.intValue);
}
+ if (_iceRegatherIntervalRange != nil) {
+ std::unique_ptr<rtc::IntervalRange> nativeIntervalRange(
+ _iceRegatherIntervalRange.nativeIntervalRange);
+ nativeConfig->ice_regather_interval_range =
+ rtc::Optional<rtc::IntervalRange>(*nativeIntervalRange);
+ }
return nativeConfig.release();
}
diff --git a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange+Private.h b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange+Private.h
new file mode 100644
index 0000000..b958413
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange+Private.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import "WebRTC/RTCIntervalRange.h"
+
+#include "webrtc/rtc_base/timeutils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RTCIntervalRange ()
+
+@property(nonatomic, readonly)
+ std::unique_ptr<rtc::IntervalRange> nativeIntervalRange;
+
+- (instancetype)initWithNativeIntervalRange:(const rtc::IntervalRange &)config;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange.mm b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange.mm
new file mode 100644
index 0000000..40f5eb5
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCIntervalRange.mm
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import "RTCIntervalRange+Private.h"
+
+#include "webrtc/rtc_base/checks.h"
+
+@implementation RTCIntervalRange
+
+@synthesize min = _min;
+@synthesize max = _max;
+
+- (instancetype)init {
+ return [self initWithMin:0 max:0];
+}
+
+- (instancetype)initWithMin:(NSInteger)min
+ max:(NSInteger)max {
+ RTC_DCHECK_LE(min, max);
+ if (self = [super init]) {
+ _min = min;
+ _max = max;
+ }
+ return self;
+}
+
+- (instancetype)initWithNativeIntervalRange:(const rtc::IntervalRange &)config {
+ return [self initWithMin:config.min() max:config.max()];
+}
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"[%ld, %ld]", (long)_min, (long)_max];
+}
+
+#pragma mark - Private
+
+- (std::unique_ptr<rtc::IntervalRange>)nativeIntervalRange {
+ std::unique_ptr<rtc::IntervalRange> nativeIntervalRange(
+ new rtc::IntervalRange((int)_min, (int)_max));
+ return nativeIntervalRange;
+}
+
+@end
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
index 862a01d..17d79b2 100644
--- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h
@@ -13,6 +13,7 @@
#import <WebRTC/RTCMacros.h>
@class RTCIceServer;
+@class RTCIntervalRange;
/**
* Represents the ice transport policy. This exposes the same states in C++,
@@ -109,6 +110,13 @@
*/
@property(nonatomic, copy, nullable) NSNumber *iceCheckMinInterval;
+/** ICE Periodic Regathering
+ * If set, WebRTC will periodically create and propose candidates without
+ * starting a new ICE generation. The regathering happens continuously with
+ * interval specified in milliseconds by the uniform distribution [a, b].
+ */
+@property(nonatomic, strong, nullable) RTCIntervalRange *iceRegatherIntervalRange;
+
- (instancetype)init;
@end
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h
new file mode 100644
index 0000000..9384b15
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RTCIntervalRange : NSObject
+
+@property(nonatomic, readonly) NSInteger min;
+@property(nonatomic, readonly) NSInteger max;
+
+- (instancetype)init;
+- (instancetype)initWithMin:(NSInteger)min
+ max:(NSInteger)max
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
index 772cea1..17019a2 100644
--- a/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
@@ -27,6 +27,7 @@
#import <WebRTC/RTCFileLogger.h>
#import <WebRTC/RTCIceCandidate.h>
#import <WebRTC/RTCIceServer.h>
+#import <WebRTC/RTCIntervalRange.h>
#import <WebRTC/RTCLegacyStatsReport.h>
#import <WebRTC/RTCLogging.h>
#import <WebRTC/RTCMacros.h>
diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
index df94d4f..4b44fb1 100644
--- a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
+++ b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm
@@ -18,6 +18,7 @@
#import "RTCConfiguration+Private.h"
#import "WebRTC/RTCConfiguration.h"
#import "WebRTC/RTCIceServer.h"
+#import "WebRTC/RTCIntervalRange.h"
@interface RTCConfigurationTest : NSObject
- (void)testConversionToNativeConfiguration;
@@ -29,6 +30,7 @@
- (void)testConversionToNativeConfiguration {
NSArray *urlStrings = @[ @"stun:stun1.example.net" ];
RTCIceServer *server = [[RTCIceServer alloc] initWithURLStrings:urlStrings];
+ RTCIntervalRange *range = [[RTCIntervalRange alloc] initWithMin:0 max:100];
RTCConfiguration *config = [[RTCConfiguration alloc] init];
config.iceServers = @[ server ];
@@ -47,6 +49,7 @@
config.continualGatheringPolicy =
RTCContinualGatheringPolicyGatherContinually;
config.shouldPruneTurnPorts = YES;
+ config.iceRegatherIntervalRange = range;
std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration>
nativeConfig([config createNativeConfiguration]);
@@ -73,11 +76,14 @@
EXPECT_EQ(webrtc::PeerConnectionInterface::GATHER_CONTINUALLY,
nativeConfig->continual_gathering_policy);
EXPECT_EQ(true, nativeConfig->prune_turn_ports);
+ EXPECT_EQ(range.min, nativeConfig->ice_regather_interval_range->min());
+ EXPECT_EQ(range.max, nativeConfig->ice_regather_interval_range->max());
}
- (void)testNativeConversionToConfiguration {
NSArray *urlStrings = @[ @"stun:stun1.example.net" ];
RTCIceServer *server = [[RTCIceServer alloc] initWithURLStrings:urlStrings];
+ RTCIntervalRange *range = [[RTCIntervalRange alloc] initWithMin:0 max:100];
RTCConfiguration *config = [[RTCConfiguration alloc] init];
config.iceServers = @[ server ];
@@ -96,6 +102,7 @@
config.continualGatheringPolicy =
RTCContinualGatheringPolicyGatherContinually;
config.shouldPruneTurnPorts = YES;
+ config.iceRegatherIntervalRange = range;
webrtc::PeerConnectionInterface::RTCConfiguration *nativeConfig =
[config createNativeConfiguration];
@@ -121,6 +128,8 @@
newConfig.iceBackupCandidatePairPingInterval);
EXPECT_EQ(config.continualGatheringPolicy, newConfig.continualGatheringPolicy);
EXPECT_EQ(config.shouldPruneTurnPorts, newConfig.shouldPruneTurnPorts);
+ EXPECT_EQ(config.iceRegatherIntervalRange.min, newConfig.iceRegatherIntervalRange.min);
+ EXPECT_EQ(config.iceRegatherIntervalRange.max, newConfig.iceRegatherIntervalRange.max);
}
@end
diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCIntervalRangeTests.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCIntervalRangeTests.mm
new file mode 100644
index 0000000..b995221
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/UnitTests/RTCIntervalRangeTests.mm
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+#include "webrtc/rtc_base/gunit.h"
+
+#import "RTCIntervalRange+Private.h"
+#import "WebRTC/RTCIntervalRange.h"
+
+@interface RTCIntervalRangeTest : NSObject
+- (void)testConversionToNativeConfiguration;
+- (void)testNativeConversionToConfiguration;
+@end
+
+@implementation RTCIntervalRangeTest
+
+- (void)testConversionToNativeConfiguration {
+ NSInteger min = 0;
+ NSInteger max = 100;
+ RTCIntervalRange *range = [[RTCIntervalRange alloc] initWithMin:min max:max];
+ EXPECT_EQ(min, range.min);
+ EXPECT_EQ(max, range.max);
+ std::unique_ptr<rtc::IntervalRange> nativeRange = range.nativeIntervalRange;
+ EXPECT_EQ(min, nativeRange->min());
+ EXPECT_EQ(max, nativeRange->max());
+}
+
+- (void)testNativeConversionToConfiguration {
+ NSInteger min = 0;
+ NSInteger max = 100;
+ rtc::IntervalRange nativeRange((int)min, (int)max);
+ RTCIntervalRange *range =
+ [[RTCIntervalRange alloc] initWithNativeIntervalRange:nativeRange];
+ EXPECT_EQ(min, range.min);
+ EXPECT_EQ(max, range.max);
+}
+
+@end
+
+TEST(RTCIntervalRangeTest, NativeConfigurationConversionTest) {
+ @autoreleasepool {
+ RTCIntervalRangeTest *test = [[RTCIntervalRangeTest alloc] init];
+ [test testConversionToNativeConfiguration];
+ [test testNativeConversionToConfiguration];
+ }
+}