Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/root/api/starting_envoy.rst
Original file line number Diff line number Diff line change
Expand Up @@ -370,19 +370,19 @@ Specify a closure to be called by Envoy to access arbitrary strings from Platfor
builder.addStringAccessor(name: "demo-accessor", accessor: { return "PlatformString" })

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``enableNetworkPathMonitor``
``setNetworkMonitoringMode``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Configure the engine to use ``NWPathMonitor`` rather than ``SCNetworkReachability``
to update the preferred Envoy network cluster (e.g. WLAN vs WWAN). Defaults to true.
Configure how the engine observes network reachability state changes to update the preferred Envoy network cluster (e.g. WLAN vs WWAN).
Defaults to ``NWPathMonitor``, but can be configured to use ``SCNetworkReachability`` or be disabled completely.

**Example**::

// Kotlin
// N/A

// Swift
builder.enableNetworkPathMonitor(false)
builder.setNetworkMonitoringMode(.pathMonitor)

~~~~~~~~~~~~~~~~~~~~~~~
``enableHappyEyeballs``
Expand Down
1 change: 1 addition & 0 deletions docs/root/intro/version_history.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Breaking changes:
- net: enable happy eyeballs by default (:issue:`#2272 <2272>`)
- iOS: remove support for installing via CocoaPods, which had not worked since 2020 (:issue:`#2215 <2215>`)
- iOS: enable usage of ``NWPathMonitor`` by default (:issue:`#2329 <2329>`)
- iOS: replace ``enableNetworkPathMonitor`` with a new ``setNetworkMonitoringMode`` API to allow disabling monitoring (:issue:`#2345 <2345>`)

Bugfixes:

Expand Down
5 changes: 2 additions & 3 deletions library/objective-c/EnvoyEngine.h
Original file line number Diff line number Diff line change
Expand Up @@ -456,13 +456,12 @@ extern const int kEnvoyFailure;
running.
@param logger Logging interface.
@param eventTracker Event tracking interface.
@param enableNetworkPathMonitor Configure the engine to use `NWPathMonitor` to observe network
reachability.
@param networkMonitoringMode Configure how the engines observe network reachability.
*/
- (instancetype)initWithRunningCallback:(nullable void (^)())onEngineRunning
logger:(nullable void (^)(NSString *))logger
eventTracker:(nullable void (^)(EnvoyEvent *))eventTracker
enableNetworkPathMonitor:(BOOL)enableNetworkPathMonitor;
networkMonitoringMode:(int)networkMonitoringMode;
/**
Run the Envoy engine with the provided configuration and log level.

Expand Down
8 changes: 4 additions & 4 deletions library/objective-c/EnvoyEngineImpl.m
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ @implementation EnvoyEngineImpl {
- (instancetype)initWithRunningCallback:(nullable void (^)())onEngineRunning
logger:(nullable void (^)(NSString *))logger
eventTracker:(nullable void (^)(EnvoyEvent *))eventTracker
enableNetworkPathMonitor:(BOOL)enableNetworkPathMonitor {
networkMonitoringMode:(int)networkMonitoringMode {
self = [super init];
if (!self) {
return nil;
Expand Down Expand Up @@ -483,10 +483,10 @@ - (instancetype)initWithRunningCallback:(nullable void (^)())onEngineRunning
_engineHandle = init_engine(native_callbacks, native_logger, native_event_tracker);
_networkMonitor = [[EnvoyNetworkMonitor alloc] initWithEngine:_engineHandle];

if (enableNetworkPathMonitor) {
[_networkMonitor startPathMonitor];
} else {
if (networkMonitoringMode == 1) {
[_networkMonitor startReachability];
} else if (networkMonitoringMode == 2) {
[_networkMonitor startPathMonitor];
}

return self;
Expand Down
1 change: 1 addition & 0 deletions library/swift/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ swift_library(
"HeadersBuilder.swift",
"KeyValueStore.swift",
"LogLevel.swift",
"NetworkMonitoringMode.swift",
"PulseClient.swift",
"PulseClientImpl.swift",
"RequestHeaders.swift",
Expand Down
12 changes: 6 additions & 6 deletions library/swift/EngineBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ open class EngineBuilder: NSObject {
private var onEngineRunning: (() -> Void)?
private var logger: ((String) -> Void)?
private var eventTracker: (([String: String]) -> Void)?
private(set) var enableNetworkPathMonitor = true
private(set) var monitoringMode: NetworkMonitoringMode = .pathMonitor
private var nativeFilterChain: [EnvoyNativeFilterConfig] = []
private var platformFilterChain: [EnvoyHTTPFilterFactory] = []
private var stringAccessors: [String: EnvoyStringAccessor] = [:]
Expand Down Expand Up @@ -401,13 +401,13 @@ open class EngineBuilder: NSObject {
return self
}

/// Configure the engine to use `NWPathMonitor` to observe network reachability.
/// Defaults to `true`. Set to `false` to use `SCNetworkReachability`.
/// Configure how the engine observes network reachability state changes.
/// Defaults to `.pathMonitor`.
///
/// - returns: This builder.
@discardableResult
public func enableNetworkPathMonitor(_ enableNetworkPathMonitor: Bool) -> Self {
self.enableNetworkPathMonitor = enableNetworkPathMonitor
public func setNetworkMonitoringMode(_ mode: NetworkMonitoringMode) -> Self {
self.monitoringMode = mode
return self
}

Expand Down Expand Up @@ -460,7 +460,7 @@ open class EngineBuilder: NSObject {
public func build() -> Engine {
let engine = self.engineType.init(runningCallback: self.onEngineRunning, logger: self.logger,
eventTracker: self.eventTracker,
enableNetworkPathMonitor: self.enableNetworkPathMonitor)
networkMonitoringMode: Int32(self.monitoringMode.rawValue))
let config = EnvoyConfiguration(
adminInterfaceEnabled: self.adminInterfaceEnabled,
grpcStatsDomain: self.grpcStatsDomain,
Expand Down
13 changes: 13 additions & 0 deletions library/swift/NetworkMonitoringMode.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import Foundation

/// The different ways Envoy Mobile can monitor network reachability
/// state.
@objc
public enum NetworkMonitoringMode: Int {
/// Do not monitor changes to the network reachability state.
case disabled = 0
/// Monitor changes to the network reachability state using `SCNetworkReachability`.
case reachability = 1
/// Monitor changes to the network reachability state using `NWPathMonitor`.
case pathMonitor = 2
}
2 changes: 1 addition & 1 deletion library/swift/mocks/MockEnvoyEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Foundation
/// Mock implementation of `EnvoyEngine`. Used internally for testing the bridging layer & mocking.
final class MockEnvoyEngine: NSObject {
init(runningCallback onEngineRunning: (() -> Void)? = nil, logger: ((String) -> Void)? = nil,
eventTracker: (([String: String]) -> Void)? = nil, enableNetworkPathMonitor: Bool = true) {}
eventTracker: (([String: String]) -> Void)? = nil, networkMonitoringMode: Int32 = 0) {}

/// Closure called when `run(withConfig:)` is called.
static var onRunWithConfig: ((_ config: EnvoyConfiguration, _ logLevel: String?) -> Void)?
Expand Down
14 changes: 7 additions & 7 deletions test/swift/EngineBuilderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@ final class EngineBuilderTests: XCTestCase {
MockEnvoyEngine.onRunWithTemplate = nil
}

func testEnableNetworkPathMonitorDefaultsToTrue() {
func testMonitoringModeDefaultsToPathMonitor() {
let builder = EngineBuilder()
XCTAssertTrue(builder.enableNetworkPathMonitor)
XCTAssertEqual(builder.monitoringMode, .pathMonitor)
}

func testEnableNetworkPathMonitorSetsToValue() {
func testMonitoringModeSetsToValue() {
let builder = EngineBuilder()
.enableNetworkPathMonitor(false)
XCTAssertFalse(builder.enableNetworkPathMonitor)
builder.enableNetworkPathMonitor(true)
XCTAssertTrue(builder.enableNetworkPathMonitor)
.setNetworkMonitoringMode(.disabled)
XCTAssertEqual(builder.monitoringMode, .disabled)
builder.setNetworkMonitoringMode(.reachability)
XCTAssertEqual(builder.monitoringMode, .reachability)
}

func testCustomConfigTemplateUsesSpecifiedYAMLWhenRunningEnvoy() {
Expand Down