mirror of
https://github.com/DefinedNet/mobile_nebula.git
synced 2025-02-14 16:05:25 +00:00
Enable ExistentialAny swift feature flag
This commit is contained in:
parent
5b74b191da
commit
f00738d5d4
7 changed files with 23 additions and 20 deletions
|
@ -209,7 +209,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var error: Error?
|
var error: (any Error)?
|
||||||
var data: JSON?
|
var data: JSON?
|
||||||
|
|
||||||
// start command has special treatment due to needing to call two completers
|
// start command has special treatment due to needing to call two completers
|
||||||
|
@ -251,25 +251,25 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func listHostmap(pending: Bool) -> (JSON?, Error?) {
|
private func listHostmap(pending: Bool) -> (JSON?, (any Error)?) {
|
||||||
var err: NSError?
|
var err: NSError?
|
||||||
let res = nebula!.listHostmap(pending, error: &err)
|
let res = nebula!.listHostmap(pending, error: &err)
|
||||||
return (JSON(res), err)
|
return (JSON(res), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func getHostInfo(args: JSON) -> (JSON?, Error?) {
|
private func getHostInfo(args: JSON) -> (JSON?, (any Error)?) {
|
||||||
var err: NSError?
|
var err: NSError?
|
||||||
let res = nebula!.getHostInfo(byVpnIp: args["vpnIp"].string, pending: args["pending"].boolValue, error: &err)
|
let res = nebula!.getHostInfo(byVpnIp: args["vpnIp"].string, pending: args["pending"].boolValue, error: &err)
|
||||||
return (JSON(res), err)
|
return (JSON(res), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setRemoteForTunnel(args: JSON) -> (JSON?, Error?) {
|
private func setRemoteForTunnel(args: JSON) -> (JSON?, (any Error)?) {
|
||||||
var err: NSError?
|
var err: NSError?
|
||||||
let res = nebula!.setRemoteForTunnel(args["vpnIp"].string, addr: args["addr"].string, error: &err)
|
let res = nebula!.setRemoteForTunnel(args["vpnIp"].string, addr: args["addr"].string, error: &err)
|
||||||
return (JSON(res), err)
|
return (JSON(res), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func closeTunnel(args: JSON) -> (JSON?, Error?) {
|
private func closeTunnel(args: JSON) -> (JSON?, (any Error)?) {
|
||||||
let res = nebula!.closeTunnel(args["vpnIp"].string)
|
let res = nebula!.closeTunnel(args["vpnIp"].string)
|
||||||
return (JSON(res), nil)
|
return (JSON(res), nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -456,7 +456,7 @@ struct IncomingSite: Codable {
|
||||||
return try encoder.encode(config)
|
return try encoder.encode(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
func save(manager: NETunnelProviderManager?, saveToManager: Bool = true, callback: @escaping (Error?) -> ()) {
|
func save(manager: NETunnelProviderManager?, saveToManager: Bool = true, callback: @escaping ((any Error)?) -> ()) {
|
||||||
let configPath: URL
|
let configPath: URL
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -503,7 +503,7 @@ struct IncomingSite: Codable {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private func saveToManager(manager: NETunnelProviderManager?, callback: @escaping (Error?) -> ()) {
|
private func saveToManager(manager: NETunnelProviderManager?, callback: @escaping ((any Error)?) -> ()) {
|
||||||
if (manager != nil) {
|
if (manager != nil) {
|
||||||
// We need to refresh our settings to properly update config
|
// We need to refresh our settings to properly update config
|
||||||
manager?.loadFromPreferences { error in
|
manager?.loadFromPreferences { error in
|
||||||
|
@ -519,7 +519,7 @@ struct IncomingSite: Codable {
|
||||||
return finishSaveToManager(manager: NETunnelProviderManager(), callback: callback)
|
return finishSaveToManager(manager: NETunnelProviderManager(), callback: callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func finishSaveToManager(manager: NETunnelProviderManager, callback: @escaping (Error?) -> ()) {
|
private func finishSaveToManager(manager: NETunnelProviderManager, callback: @escaping ((any Error)?) -> ()) {
|
||||||
// Stuff our details in the protocol
|
// Stuff our details in the protocol
|
||||||
let proto = manager.protocolConfiguration as? NETunnelProviderProtocol ?? NETunnelProviderProtocol()
|
let proto = manager.protocolConfiguration as? NETunnelProviderProtocol ?? NETunnelProviderProtocol()
|
||||||
proto.providerBundleIdentifier = "net.defined.mobileNebula.NebulaNetworkExtension";
|
proto.providerBundleIdentifier = "net.defined.mobileNebula.NebulaNetworkExtension";
|
||||||
|
|
|
@ -45,7 +45,7 @@ class SiteList {
|
||||||
return try getSiteDir(id: id, create: createDir).appendingPathComponent("logs", isDirectory: false)
|
return try getSiteDir(id: id, create: createDir).appendingPathComponent("logs", isDirectory: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(completion: @escaping ([String: Site]?, Error?) -> ()) {
|
init(completion: @escaping ([String: Site]?, (any Error)?) -> ()) {
|
||||||
#if targetEnvironment(simulator)
|
#if targetEnvironment(simulator)
|
||||||
SiteList.loadAllFromFS { sites, err in
|
SiteList.loadAllFromFS { sites, err in
|
||||||
if sites != nil {
|
if sites != nil {
|
||||||
|
@ -63,7 +63,7 @@ class SiteList {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func loadAllFromFS(completion: @escaping ([String: Site]?, Error?) -> ()) {
|
private static func loadAllFromFS(completion: @escaping ([String: Site]?, (any Error)?) -> ()) {
|
||||||
let fileManager = FileManager.default
|
let fileManager = FileManager.default
|
||||||
var siteDirs: [URL]
|
var siteDirs: [URL]
|
||||||
var sites = [String: Site]()
|
var sites = [String: Site]()
|
||||||
|
@ -91,7 +91,7 @@ class SiteList {
|
||||||
completion(sites, nil)
|
completion(sites, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func loadAllFromNETPM(completion: @escaping ([String: Site]?, Error?) -> ()) {
|
private static func loadAllFromNETPM(completion: @escaping ([String: Site]?, (any Error)?) -> ()) {
|
||||||
var sites = [String: Site]()
|
var sites = [String: Site]()
|
||||||
|
|
||||||
// dispatchGroup is used to ensure we have migrated all sites before returning them
|
// dispatchGroup is used to ensure we have migrated all sites before returning them
|
||||||
|
|
|
@ -565,6 +565,7 @@
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
SWIFT_STRICT_CONCURRENCY = complete;
|
SWIFT_STRICT_CONCURRENCY = complete;
|
||||||
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
||||||
|
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -779,6 +780,7 @@
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_STRICT_CONCURRENCY = complete;
|
SWIFT_STRICT_CONCURRENCY = complete;
|
||||||
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
||||||
|
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -837,6 +839,7 @@
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_STRICT_CONCURRENCY = complete;
|
SWIFT_STRICT_CONCURRENCY = complete;
|
||||||
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
|
||||||
|
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
|
||||||
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
|
|
@ -284,11 +284,11 @@ func MissingArgumentError(message: String, details: Any?) -> FlutterError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MissingArgumentError(message: String, details: Error? = nil) -> FlutterError {
|
func MissingArgumentError(message: String, details: (any Error)? = nil) -> FlutterError {
|
||||||
return FlutterError(code: "missingArgument", message: message, details: details)
|
return FlutterError(code: "missingArgument", message: message, details: details)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NoArgumentsError(message: String? = "no arguments were provided or could not be deserialized", details: Error? = nil) -> FlutterError {
|
func NoArgumentsError(message: String? = "no arguments were provided or could not be deserialized", details: (any Error)? = nil) -> FlutterError {
|
||||||
return FlutterError(code: "noArguments", message: message, details: details)
|
return FlutterError(code: "noArguments", message: message, details: details)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ class RepeatingTimer {
|
||||||
self.timeInterval = timeInterval
|
self.timeInterval = timeInterval
|
||||||
}
|
}
|
||||||
|
|
||||||
private lazy var timer: DispatchSourceTimer = {
|
private lazy var timer: any DispatchSourceTimer = {
|
||||||
let t = DispatchSource.makeTimerSource()
|
let t = DispatchSource.makeTimerSource()
|
||||||
t.schedule(deadline: .now(), repeating: self.timeInterval)
|
t.schedule(deadline: .now(), repeating: self.timeInterval)
|
||||||
t.setEventHandler(handler: { [weak self] in
|
t.setEventHandler(handler: { [weak self] in
|
||||||
|
|
|
@ -13,13 +13,13 @@ class SiteContainer {
|
||||||
|
|
||||||
class Sites {
|
class Sites {
|
||||||
private var containers = [String: SiteContainer]()
|
private var containers = [String: SiteContainer]()
|
||||||
private var messenger: FlutterBinaryMessenger?
|
private var messenger: (any FlutterBinaryMessenger)?
|
||||||
|
|
||||||
init(messenger: FlutterBinaryMessenger?) {
|
init(messenger: (any FlutterBinaryMessenger)?) {
|
||||||
self.messenger = messenger
|
self.messenger = messenger
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadSites(completion: @escaping ([String: Site]?, Error?) -> ()) {
|
func loadSites(completion: @escaping ([String: Site]?, (any Error)?) -> ()) {
|
||||||
_ = SiteList { (sites, err) in
|
_ = SiteList { (sites, err) in
|
||||||
if (err != nil) {
|
if (err != nil) {
|
||||||
return completion(nil, err)
|
return completion(nil, err)
|
||||||
|
@ -42,7 +42,7 @@ class Sites {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteSite(id: String, callback: @escaping (Error?) -> ()) {
|
func deleteSite(id: String, callback: @escaping ((any Error)?) -> ()) {
|
||||||
if let site = self.containers.removeValue(forKey: id) {
|
if let site = self.containers.removeValue(forKey: id) {
|
||||||
_ = KeyChain.delete(key: "\(site.site.id).dnCredentials")
|
_ = KeyChain.delete(key: "\(site.site.id).dnCredentials")
|
||||||
_ = KeyChain.delete(key: "\(site.site.id).key")
|
_ = KeyChain.delete(key: "\(site.site.id).key")
|
||||||
|
@ -85,9 +85,9 @@ class SiteUpdater: NSObject, FlutterStreamHandler {
|
||||||
private var notification: Any?
|
private var notification: Any?
|
||||||
public var startFunc: (() -> Void)?
|
public var startFunc: (() -> Void)?
|
||||||
private var configFd: Int32? = nil
|
private var configFd: Int32? = nil
|
||||||
private var configObserver: DispatchSourceFileSystemObject? = nil
|
private var configObserver: (any DispatchSourceFileSystemObject)? = nil
|
||||||
|
|
||||||
init(messenger: FlutterBinaryMessenger, site: Site) {
|
init(messenger: any FlutterBinaryMessenger, site: Site) {
|
||||||
do {
|
do {
|
||||||
let configPath = try SiteList.getSiteConfigFile(id: site.id, createDir: false)
|
let configPath = try SiteList.getSiteConfigFile(id: site.id, createDir: false)
|
||||||
self.configFd = open(configPath.path, O_EVTONLY)
|
self.configFd = open(configPath.path, O_EVTONLY)
|
||||||
|
|
Loading…
Reference in a new issue