Browse Source

Export DefaultRouteMonitor

mirokuratczyk 3 years ago
parent
commit
47c4fd8afb

+ 2 - 2
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel.xcodeproj/project.pbxproj

@@ -44,7 +44,7 @@
 		CE3D1DA523906003009A4AF6 /* Backups.h in Headers */ = {isa = PBXBuildFile; fileRef = CE3D1DA323906003009A4AF6 /* Backups.h */; };
 		CE3D1DA623906003009A4AF6 /* Backups.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3D1DA423906003009A4AF6 /* Backups.m */; };
 		CE676F2525FA818200F7DB13 /* ReachabilityProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = CE676F2325FA818200F7DB13 /* ReachabilityProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		CE676F2A25FA82DA00F7DB13 /* DefaultRouteMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE676F2825FA82DA00F7DB13 /* DefaultRouteMonitor.h */; };
+		CE676F2A25FA82DA00F7DB13 /* DefaultRouteMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE676F2825FA82DA00F7DB13 /* DefaultRouteMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		CE676F2B25FA82DA00F7DB13 /* DefaultRouteMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = CE676F2925FA82DA00F7DB13 /* DefaultRouteMonitor.m */; };
 		CE676F2F25FA830C00F7DB13 /* Reachability+ReachabilityProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = CE676F2D25FA830C00F7DB13 /* Reachability+ReachabilityProtocol.h */; };
 		CE676F3025FA830C00F7DB13 /* Reachability+ReachabilityProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = CE676F2E25FA830C00F7DB13 /* Reachability+ReachabilityProtocol.m */; };
@@ -349,8 +349,8 @@
 				66BAD3351E525FBC00CD06DE /* JailbreakCheck.h in Headers */,
 				4E89F7FF1E2ED3CE00005F4C /* LookupIPv6.h in Headers */,
 				CE676F2F25FA830C00F7DB13 /* Reachability+ReachabilityProtocol.h in Headers */,
-				662659271DD270E900872F6C /* Reachability.h in Headers */,
 				CE676F2A25FA82DA00F7DB13 /* DefaultRouteMonitor.h in Headers */,
+				662659271DD270E900872F6C /* Reachability.h in Headers */,
 				66BDB05D1DC26CCC0079384C /* SBJson4StreamParser.h in Headers */,
 				6685BDD41E2EBB1000F0E414 /* GoPsi.objc.h in Headers */,
 				52BE676825B8A615002DB553 /* PsiphonClientPlatform.h in Headers */,

+ 0 - 11
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/Network/NetworkInterface.h

@@ -23,17 +23,6 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-/// NetworkPathState represents the state of the network path on the device.
-@interface NetworkPathState : NSObject
-
-/// Network path state.
-@property (nonatomic, nullable) nw_path_t path;
-
-/// Default active interface available to the network path.
-@property (nonatomic, nullable) NSString* defaultActiveInterfaceName;
-
-@end
-
 /// NetworkInterface provides a set of functions for discovering active network interfaces on the device.
 @interface NetworkInterface : NSObject
 

+ 11 - 12
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/Network/NetworkInterface.m

@@ -178,18 +178,6 @@
 
     *outError = nil;
 
-    NSError *err;
-    NSSet<NSString*>* upIffList = [NetworkInterface activeInterfaces:&err];
-    if (err != nil) {
-        NSString *localizedDescription = [NSString stringWithFormat:@"bindToDevice: error getting active interfaces %@", err.localizedDescription];
-        *outError = [[NSError alloc] initWithDomain:@"iOSLibrary" code:1 userInfo:@{NSLocalizedDescriptionKey: localizedDescription}];
-        return @"";
-    }
-    if (upIffList == nil) {
-        *outError = [[NSError alloc] initWithDomain:@"iOSLibrary" code:1 userInfo:@{NSLocalizedDescriptionKey: @"bindToDevice: no active interfaces"}];
-        return @"";
-    }
-
     NSString *activeInterface;
 
     if (@available(iOS 12.0, *)) {
@@ -217,6 +205,17 @@
         // Note: could fallback on heuristic for iOS <12.0 if nil
         activeInterface = state.defaultActiveInterfaceName;
     } else {
+        NSError *err;
+        NSSet<NSString*>* upIffList = [NetworkInterface activeInterfaces:&err];
+        if (err != nil) {
+            NSString *localizedDescription = [NSString stringWithFormat:@"bindToDevice: error getting active interfaces %@", err.localizedDescription];
+            *outError = [[NSError alloc] initWithDomain:@"iOSLibrary" code:1 userInfo:@{NSLocalizedDescriptionKey: localizedDescription}];
+            return @"";
+        }
+        if (upIffList == nil) {
+            *outError = [[NSError alloc] initWithDomain:@"iOSLibrary" code:1 userInfo:@{NSLocalizedDescriptionKey: @"bindToDevice: no active interfaces"}];
+            return @"";
+        }
         activeInterface = [NetworkInterface getActiveInterface:upIffList
                                           currentNetworkStatus:currentNetworkStatus];
     }

+ 12 - 5
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/Network/Reachability/DefaultRouteMonitor.h

@@ -18,18 +18,25 @@
  */
 
 #import <Foundation/Foundation.h>
+#import <Network/path.h>
 #import "ReachabilityProtocol.h"
-#import "NetworkInterface.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
+/// NetworkPathState represents the state of the network path on the device.
+@interface NetworkPathState : NSObject
+
+/// Network path state.
+@property (nonatomic, nullable) nw_path_t path;
+
+/// Default active interface available to the network path.
+@property (nonatomic, nullable) NSString* defaultActiveInterfaceName;
+
+@end
+
 /// ReachabilityChangedNotification represents the reachability state on the device.
 @interface ReachabilityChangedNotification : NSObject
 
-- (instancetype)initWithReachabilityStatus:(NetworkReachability)networkReachability
-             curDefaultActiveInterfaceName:(NSString*)curDefaultActiveInterfaceName
-            prevDefaultActiveInterfaceName:(NSString*)prevDefaultActiveInterfaceName;
-
 /// Current reachability status.
 @property (nonatomic, readonly) NetworkReachability reachabilityStatus;
 

+ 0 - 1
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/Network/Reachability/DefaultRouteMonitor.m

@@ -19,7 +19,6 @@
 
 #import "DefaultRouteMonitor.h"
 #import "NetworkInterface.h"
-#import <Network/path.h>
 #import <net/if.h>
 #import <ifaddrs.h>
 

+ 1 - 0
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/PsiphonTunnel.h

@@ -23,6 +23,7 @@
  */
 
 #import "Reachability.h"
+#import "DefaultRouteMonitor.h"
 #import "ReachabilityProtocol.h"
 #import "JailbreakCheck.h"
 #import "PsiphonClientPlatform.h"