diff --git a/Library/Network/ExtensionPlatformInterface.swift b/Library/Network/ExtensionPlatformInterface.swift index 2095cd6..34e548c 100644 --- a/Library/Network/ExtensionPlatformInterface.swift +++ b/Library/Network/ExtensionPlatformInterface.swift @@ -43,24 +43,32 @@ public class ExtensionPlatformInterface: NSObject, LibboxPlatformInterfaceProtoc let ipv4AddressIterator = options.getInet4Address()! while ipv4AddressIterator.hasNext() { let ipv4Prefix = ipv4AddressIterator.next()! - ipv4Address.append(ipv4Prefix.address) + ipv4Address.append(ipv4Prefix.address()) ipv4Mask.append(ipv4Prefix.mask()) } + let ipv4Settings = NEIPv4Settings(addresses: ipv4Address, subnetMasks: ipv4Mask) var ipv4Routes: [NEIPv4Route] = [] + var ipv4ExcludeRoutes: [NEIPv4Route] = [] + let inet4RouteAddressIterator = options.getInet4RouteAddress()! if inet4RouteAddressIterator.hasNext() { while inet4RouteAddressIterator.hasNext() { let ipv4RoutePrefix = inet4RouteAddressIterator.next()! - ipv4Routes.append(NEIPv4Route(destinationAddress: ipv4RoutePrefix.address, subnetMask: ipv4RoutePrefix.mask())) + ipv4Routes.append(NEIPv4Route(destinationAddress: ipv4RoutePrefix.address(), subnetMask: ipv4RoutePrefix.mask())) } } else { ipv4Routes.append(NEIPv4Route.default()) } - for (index, address) in ipv4Address.enumerated() { - ipv4Routes.append(NEIPv4Route(destinationAddress: address, subnetMask: ipv4Mask[index])) + + let inet4RouteExcludeAddressIterator = options.getInet4RouteExcludeAddress()! + while inet4RouteExcludeAddressIterator.hasNext() { + let ipv4RoutePrefix = inet4RouteExcludeAddressIterator.next()! + ipv4ExcludeRoutes.append(NEIPv4Route(destinationAddress: ipv4RoutePrefix.address(), subnetMask: ipv4RoutePrefix.mask())) } + ipv4Settings.includedRoutes = ipv4Routes + ipv4Settings.excludedRoutes = ipv4ExcludeRoutes settings.ipv4Settings = ipv4Settings var ipv6Address: [String] = [] @@ -68,21 +76,31 @@ public class ExtensionPlatformInterface: NSObject, LibboxPlatformInterfaceProtoc let ipv6AddressIterator = options.getInet6Address()! while ipv6AddressIterator.hasNext() { let ipv6Prefix = ipv6AddressIterator.next()! - ipv6Address.append(ipv6Prefix.address) - ipv6Prefixes.append(NSNumber(value: ipv6Prefix.prefix)) + ipv6Address.append(ipv6Prefix.address()) + ipv6Prefixes.append(NSNumber(value: ipv6Prefix.prefix())) } let ipv6Settings = NEIPv6Settings(addresses: ipv6Address, networkPrefixLengths: ipv6Prefixes) var ipv6Routes: [NEIPv6Route] = [] + var ipv6ExcludeRoutes: [NEIPv6Route] = [] + let inet6RouteAddressIterator = options.getInet6RouteAddress()! if inet6RouteAddressIterator.hasNext() { while inet6RouteAddressIterator.hasNext() { let ipv6RoutePrefix = inet6RouteAddressIterator.next()! - ipv6Routes.append(NEIPv6Route(destinationAddress: ipv6RoutePrefix.description, networkPrefixLength: NSNumber(value: ipv6RoutePrefix.prefix))) + ipv6Routes.append(NEIPv6Route(destinationAddress: ipv6RoutePrefix.address(), networkPrefixLength: NSNumber(value: ipv6RoutePrefix.prefix()))) } } else { ipv6Routes.append(NEIPv6Route.default()) } + + let inet6RouteExcludeAddressIterator = options.getInet6RouteExcludeAddress()! + while inet6RouteExcludeAddressIterator.hasNext() { + let ipv6RoutePrefix = inet6RouteExcludeAddressIterator.next()! + ipv6ExcludeRoutes.append(NEIPv6Route(destinationAddress: ipv6RoutePrefix.address(), networkPrefixLength: NSNumber(value: ipv6RoutePrefix.prefix()))) + } + ipv6Settings.includedRoutes = ipv6Routes + ipv6Settings.excludedRoutes = ipv6ExcludeRoutes settings.ipv6Settings = ipv6Settings } diff --git a/sing-box.xcodeproj/project.pbxproj b/sing-box.xcodeproj/project.pbxproj index 704db71..b6f841f 100644 --- a/sing-box.xcodeproj/project.pbxproj +++ b/sing-box.xcodeproj/project.pbxproj @@ -2305,7 +2305,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 134; + CURRENT_PROJECT_VERSION = 136; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = Z56Z6NYZN2; ENABLE_HARDENED_RUNTIME = YES; @@ -2343,7 +2343,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 134; + CURRENT_PROJECT_VERSION = 136; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = Z56Z6NYZN2; ENABLE_HARDENED_RUNTIME = YES; @@ -2501,7 +2501,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = "1.8.0-alpha.15"; + MARKETING_VERSION = 1.8.0-alpha.17; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2537,7 +2537,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = "1.8.0-alpha.15"; + MARKETING_VERSION = 1.8.0-alpha.17; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2577,7 +2577,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = "1.8.0-alpha.15"; + MARKETING_VERSION = 1.8.0-alpha.17; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent; PRODUCT_NAME = SFM; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2616,7 +2616,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = "1.8.0-alpha.15"; + MARKETING_VERSION = 1.8.0-alpha.17; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent; PRODUCT_NAME = SFM; PROVISIONING_PROFILE_SPECIFIER = "";