Implement network monitor for iOS.

Notably, this should detect whether an interface is "available" or not,
which should prevent the failure is with dual SIM card setups.

This is gated behind a field trial for now, to ensure this doesn't cause
any regressions due to false negatives (interfaces that are usable
but not listed as available by NWPathMonitor).

Bug: webrtc:10966
Change-Id: Ia3942c4c57b525d08d8b340e2325f3705cfd0304
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180923
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31977}
diff --git a/sdk/objc/helpers/RTCDispatcher.m b/sdk/objc/helpers/RTCDispatcher.m
index 2e83573..4df19bc 100644
--- a/sdk/objc/helpers/RTCDispatcher.m
+++ b/sdk/objc/helpers/RTCDispatcher.m
@@ -12,6 +12,7 @@
 
 static dispatch_queue_t kAudioSessionQueue = nil;
 static dispatch_queue_t kCaptureSessionQueue = nil;
+static dispatch_queue_t kNetworkMonitorQueue = nil;
 
 @implementation RTC_OBJC_TYPE (RTCDispatcher)
 
@@ -24,6 +25,8 @@
     kCaptureSessionQueue = dispatch_queue_create(
         "org.webrtc.RTCDispatcherCaptureSession",
         DISPATCH_QUEUE_SERIAL);
+    kNetworkMonitorQueue =
+        dispatch_queue_create("org.webrtc.RTCDispatcherNetworkMonitor", DISPATCH_QUEUE_SERIAL);
   });
 }
 
@@ -54,6 +57,8 @@
       return kCaptureSessionQueue;
     case RTCDispatcherTypeAudioSession:
       return kAudioSessionQueue;
+    case RTCDispatcherTypeNetworkMonitor:
+      return kNetworkMonitorQueue;
   }
 }