From c327c5b1ec051ed1bd72ba34864eac3a1c723434 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 1 Dec 2019 20:55:20 -0800 Subject: [PATCH] Force remote streaming mode when a VPN is connected --- Limelight/Network/MDNSManager.m | 16 +--------------- Limelight/Stream/Connection.m | 14 +++++++++++--- Limelight/Utility/Utils.h | 2 +- Limelight/Utility/Utils.m | 29 ++++++++++------------------- 4 files changed, 23 insertions(+), 38 deletions(-) diff --git a/Limelight/Network/MDNSManager.m b/Limelight/Network/MDNSManager.m index 67facc9..b745858 100644 --- a/Limelight/Network/MDNSManager.m +++ b/Limelight/Network/MDNSManager.m @@ -163,20 +163,6 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp"; return nil; } -- (BOOL)isActiveNetworkVPN { - NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings()); - NSArray *keys = [dict[@"__SCOPED__"] allKeys]; - for (NSString *key in keys) { - if ([key containsString:@"tap"] || - [key containsString:@"tun"] || - [key containsString:@"ppp"] || - [key containsString:@"ipsec"]) { - return YES; - } - } - return NO; -} - - (void)netServiceDidResolveAddress:(NSNetService *)service { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSArray* addresses = [service addresses]; @@ -196,7 +182,7 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp"; // Don't send a STUN request if we're connected to a VPN. We'll likely get the VPN // gateway's external address rather than the external address of the LAN. - if (![self isActiveNetworkVPN]) { + if (![Utils isActiveNetworkVPN]) { // Since we discovered this host over IPv4 mDNS, we know we're on the same network // as the PC and we can use our current WAN address as a likely candidate // for our PC's external address. diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index c1fe4db..a9d2d3c 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -7,6 +7,7 @@ // #import "Connection.h" +#import "Utils.h" #import #import @@ -340,9 +341,16 @@ void ClConnectionStatusUpdate(int status) // quality improvement. _streamConfig.hevcBitratePercentageMultiplier = 75; - // Detect remote streaming automatically based on the IP address of the target - _streamConfig.streamingRemotely = STREAM_CFG_AUTO; - _streamConfig.packetSize = 1392; + if ([Utils isActiveNetworkVPN]) { + // Force remote streaming mode when a VPN is connected + _streamConfig.streamingRemotely = STREAM_CFG_REMOTE; + _streamConfig.packetSize = 1024; + } + else { + // Detect remote streaming automatically based on the IP address of the target + _streamConfig.streamingRemotely = STREAM_CFG_AUTO; + _streamConfig.packetSize = 1392; + } switch (config.audioChannelCount) { case 2: diff --git a/Limelight/Utility/Utils.h b/Limelight/Utility/Utils.h index 6c4fcdf..b2a6ebd 100644 --- a/Limelight/Utility/Utils.h +++ b/Limelight/Utility/Utils.h @@ -25,8 +25,8 @@ FOUNDATION_EXPORT NSString *const deviceName; + (NSData*) randomBytes:(NSInteger)length; + (NSString*) bytesToHex:(NSData*)data; + (NSData*) hexToBytes:(NSString*) hex; -+ (int) resolveHost:(NSString*)host; + (void) addHelpOptionToDialog:(UIAlertController*)dialog; ++ (BOOL) isActiveNetworkVPN; @end diff --git a/Limelight/Utility/Utils.m b/Limelight/Utility/Utils.m index 0f40e29..d0f19ec 100644 --- a/Limelight/Utility/Utils.m +++ b/Limelight/Utility/Utils.m @@ -50,27 +50,18 @@ NSString *const deviceName = @"roth"; return hex; } -+ (int) resolveHost:(NSString*)host { - struct hostent *hostent; - - if (inet_addr([host UTF8String]) != INADDR_NONE) { - // Already an IP address - int addr = inet_addr([host UTF8String]); - Log(LOG_I, @"host address: %d", addr); - return addr; - } else { - hostent = gethostbyname([host UTF8String]); - if (hostent != NULL) { - char* ipstr = inet_ntoa(*(struct in_addr*)hostent->h_addr_list[0]); - Log(LOG_I, @"Resolved %@ -> %s", host, ipstr); - int addr = inet_addr(ipstr); - Log(LOG_I, @"host address: %d", addr); - return addr; - } else { - Log(LOG_W, @"Failed to resolve host: %d", h_errno); - return 0; ++ (BOOL)isActiveNetworkVPN { + NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings()); + NSArray *keys = [dict[@"__SCOPED__"] allKeys]; + for (NSString *key in keys) { + if ([key containsString:@"tap"] || + [key containsString:@"tun"] || + [key containsString:@"ppp"] || + [key containsString:@"ipsec"]) { + return YES; } } + return NO; } + (void) addHelpOptionToDialog:(UIAlertController*)dialog {