From e66cf5264ad6980dae3f990b232c2f62c43608db Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Thu, 8 Nov 2018 15:54:12 +0530 Subject: Move logic to extension: NETunnelProviderProtocol extension code should be shared Signed-off-by: Roopesh Chander --- .../NETunnelProviderProtocol+Extension.swift | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 WireGuard/Shared/NETunnelProviderProtocol+Extension.swift (limited to 'WireGuard/Shared/NETunnelProviderProtocol+Extension.swift') diff --git a/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift new file mode 100644 index 0000000..ec8b294 --- /dev/null +++ b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018 WireGuard LLC. All Rights Reserved. + +import NetworkExtension + +extension NETunnelProviderProtocol { + convenience init?(tunnelConfiguration: TunnelConfiguration) { + assert(!tunnelConfiguration.interface.name.isEmpty) + guard let serializedTunnelConfiguration = try? JSONEncoder().encode(tunnelConfiguration) else { return nil } + + self.init() + + let appId = Bundle.main.bundleIdentifier! + providerBundleIdentifier = "\(appId).network-extension" + providerConfiguration = [ + "tunnelConfiguration": serializedTunnelConfiguration, + "tunnelConfigurationVersion": 1 + ] + + let endpoints = tunnelConfiguration.peers.compactMap({$0.endpoint}) + if endpoints.count == 1 { + serverAddress = endpoints.first!.stringRepresentation() + } else if endpoints.isEmpty { + serverAddress = "Unspecified" + } else { + serverAddress = "Multiple endpoints" + } + username = tunnelConfiguration.interface.name + } + + func tunnelConfiguration() -> TunnelConfiguration? { + guard let serializedTunnelConfiguration = providerConfiguration?["tunnelConfiguration"] as? Data else { return nil } + return try? JSONDecoder().decode(TunnelConfiguration.self, from: serializedTunnelConfiguration) + } +} -- cgit v1.2.3-59-g8ed1b