Use message to extension to obtain version info.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
47a75bbd57
commit
18d82d07af
|
@ -0,0 +1,25 @@
|
||||||
|
//
|
||||||
|
// Copyright © 2018 WireGuard LLC. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class ExtensionMessage: Equatable {
|
||||||
|
|
||||||
|
public static let requestVersion = ExtensionMessage(0xff)
|
||||||
|
|
||||||
|
public let data: Data
|
||||||
|
|
||||||
|
private init(_ byte: UInt8) {
|
||||||
|
data = Data(bytes: [byte])
|
||||||
|
}
|
||||||
|
|
||||||
|
init(_ data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Equatable
|
||||||
|
public static func ==(lhs: ExtensionMessage, rhs: ExtensionMessage) -> Bool {
|
||||||
|
return (lhs.data == rhs.data)
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,7 +10,6 @@
|
||||||
48CF751B34E9703133F1B1AF /* Pods_WireGuard.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 861983CAE8FDC13BC83E7E04 /* Pods_WireGuard.framework */; };
|
48CF751B34E9703133F1B1AF /* Pods_WireGuard.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 861983CAE8FDC13BC83E7E04 /* Pods_WireGuard.framework */; };
|
||||||
4A430E802139DC8F0078172C /* icon_20pt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4A430E7F2139DC8F0078172C /* icon_20pt@3x.png */; };
|
4A430E802139DC8F0078172C /* icon_20pt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4A430E7F2139DC8F0078172C /* icon_20pt@3x.png */; };
|
||||||
4A430E842139DCFB0078172C /* icon_60pt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4A430E832139DCFB0078172C /* icon_60pt@3x.png */; };
|
4A430E842139DCFB0078172C /* icon_60pt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4A430E832139DCFB0078172C /* icon_60pt@3x.png */; };
|
||||||
4A4349752151865E00EF92F8 /* libwg-go.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD0900120DC4171000E9CF5 /* libwg-go.a */; };
|
|
||||||
4A4351592124956200261999 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4351582124956200261999 /* Validators.swift */; };
|
4A4351592124956200261999 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4351582124956200261999 /* Validators.swift */; };
|
||||||
4A43515A2124956200261999 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4351582124956200261999 /* Validators.swift */; };
|
4A43515A2124956200261999 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4351582124956200261999 /* Validators.swift */; };
|
||||||
4A43515C21249E5700261999 /* ValidatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A43515B21249E5700261999 /* ValidatorsTests.swift */; };
|
4A43515C21249E5700261999 /* ValidatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A43515B21249E5700261999 /* ValidatorsTests.swift */; };
|
||||||
|
@ -39,6 +38,8 @@
|
||||||
4A8A229A215B782E00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A2299215B782D00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift */; };
|
4A8A229A215B782E00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A2299215B782D00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift */; };
|
||||||
4A8A229C215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229B215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift */; };
|
4A8A229C215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229B215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift */; };
|
||||||
4A8A229E215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229D215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift */; };
|
4A8A229E215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229D215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift */; };
|
||||||
|
4A8A22A0215B821A00736141 /* ExtensionMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229F215B821A00736141 /* ExtensionMessage.swift */; };
|
||||||
|
4A8A22A1215B823100736141 /* ExtensionMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8A229F215B821A00736141 /* ExtensionMessage.swift */; };
|
||||||
4A8AABD820B6A79100B6D8C1 /* UITableView+WireGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8AABD720B6A79100B6D8C1 /* UITableView+WireGuard.swift */; };
|
4A8AABD820B6A79100B6D8C1 /* UITableView+WireGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8AABD720B6A79100B6D8C1 /* UITableView+WireGuard.swift */; };
|
||||||
4AADEA2B212616F7008C24FD /* String+Arrays.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA1D50F2124D80C00DBA2E6 /* String+Arrays.swift */; };
|
4AADEA2B212616F7008C24FD /* String+Arrays.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA1D50F2124D80C00DBA2E6 /* String+Arrays.swift */; };
|
||||||
4ABF718E214D8B0300A1E0BF /* TunnelInfoTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ABF718D214D8B0300A1E0BF /* TunnelInfoTableViewController.swift */; };
|
4ABF718E214D8B0300A1E0BF /* TunnelInfoTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ABF718D214D8B0300A1E0BF /* TunnelInfoTableViewController.swift */; };
|
||||||
|
@ -133,6 +134,7 @@
|
||||||
4A8A2299215B782D00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
4A8A2299215B782D00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
||||||
4A8A229B215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelsTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
4A8A229B215B787E00736141 /* AppCoordinator+TunnelsTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelsTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
||||||
4A8A229D215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelInfoTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
4A8A229D215B793C00736141 /* AppCoordinator+TunnelInfoTableViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppCoordinator+TunnelInfoTableViewControllerDelegate.swift"; sourceTree = "<group>"; };
|
||||||
|
4A8A229F215B821A00736141 /* ExtensionMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionMessage.swift; sourceTree = "<group>"; };
|
||||||
4A8AABD720B6A79100B6D8C1 /* UITableView+WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+WireGuard.swift"; sourceTree = "<group>"; };
|
4A8AABD720B6A79100B6D8C1 /* UITableView+WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+WireGuard.swift"; sourceTree = "<group>"; };
|
||||||
4ABF718D214D8B0300A1E0BF /* TunnelInfoTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelInfoTableViewController.swift; sourceTree = "<group>"; };
|
4ABF718D214D8B0300A1E0BF /* TunnelInfoTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelInfoTableViewController.swift; sourceTree = "<group>"; };
|
||||||
4ABFFE9D212D399F00107136 /* WireGuard-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WireGuard-Bridging-Header.h"; sourceTree = "<group>"; };
|
4ABFFE9D212D399F00107136 /* WireGuard-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WireGuard-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
|
@ -162,7 +164,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
4ABFFEA3212D3C8300107136 /* Security.framework in Frameworks */,
|
4ABFFEA3212D3C8300107136 /* Security.framework in Frameworks */,
|
||||||
4A4349752151865E00EF92F8 /* libwg-go.a in Frameworks */,
|
|
||||||
48CF751B34E9703133F1B1AF /* Pods_WireGuard.framework in Frameworks */,
|
48CF751B34E9703133F1B1AF /* Pods_WireGuard.framework in Frameworks */,
|
||||||
4A61D83520D98D25006C7A76 /* NetworkExtension.framework in Frameworks */,
|
4A61D83520D98D25006C7A76 /* NetworkExtension.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
|
@ -325,6 +326,7 @@
|
||||||
children = (
|
children = (
|
||||||
4AC086822120B9F900CEE5ED /* ProviderConfigurationKeys.swift */,
|
4AC086822120B9F900CEE5ED /* ProviderConfigurationKeys.swift */,
|
||||||
4A4351582124956200261999 /* Validators.swift */,
|
4A4351582124956200261999 /* Validators.swift */,
|
||||||
|
4A8A229F215B821A00736141 /* ExtensionMessage.swift */,
|
||||||
);
|
);
|
||||||
path = Shared;
|
path = Shared;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -601,6 +603,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
4A8A229A215B782E00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift in Sources */,
|
4A8A229A215B782E00736141 /* AppCoordinator+TunnelConfigurationTableViewControllerDelegate.swift in Sources */,
|
||||||
|
4A8A22A0215B821A00736141 /* ExtensionMessage.swift in Sources */,
|
||||||
4A4BAD0C20B5F6AA00F12B28 /* AppCoordinator.swift in Sources */,
|
4A4BAD0C20B5F6AA00F12B28 /* AppCoordinator.swift in Sources */,
|
||||||
4A4BAD2220B6026900F12B28 /* Interface+CoreDataProperties.swift in Sources */,
|
4A4BAD2220B6026900F12B28 /* Interface+CoreDataProperties.swift in Sources */,
|
||||||
4A8A2298215B780600736141 /* AppCoordinator+SettingsTableViewControllerDelegate.swift in Sources */,
|
4A8A2298215B780600736141 /* AppCoordinator+SettingsTableViewControllerDelegate.swift in Sources */,
|
||||||
|
@ -653,6 +656,7 @@
|
||||||
4A43515A2124956200261999 /* Validators.swift in Sources */,
|
4A43515A2124956200261999 /* Validators.swift in Sources */,
|
||||||
4AADEA2B212616F7008C24FD /* String+Arrays.swift in Sources */,
|
4AADEA2B212616F7008C24FD /* String+Arrays.swift in Sources */,
|
||||||
4AEAC32920F14B3B007B67AB /* Log.swift in Sources */,
|
4AEAC32920F14B3B007B67AB /* Log.swift in Sources */,
|
||||||
|
4A8A22A1215B823100736141 /* ExtensionMessage.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -816,7 +820,6 @@
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
DEVELOPMENT_TEAM = L82V4Y2P3C;
|
DEVELOPMENT_TEAM = L82V4Y2P3C;
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
INFOPLIST_FILE = WireGuard/Info.plist;
|
INFOPLIST_FILE = WireGuard/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -848,7 +851,6 @@
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
DEVELOPMENT_TEAM = L82V4Y2P3C;
|
DEVELOPMENT_TEAM = L82V4Y2P3C;
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
INFOPLIST_FILE = WireGuard/Info.plist;
|
INFOPLIST_FILE = WireGuard/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
|
|
@ -11,6 +11,21 @@ enum GoVersionCoordinatorError: Error {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AppCoordinator: SettingsTableViewControllerDelegate {
|
extension AppCoordinator: SettingsTableViewControllerDelegate {
|
||||||
|
func goVersionInformation() -> Promise<String> {
|
||||||
|
return Promise(resolver: { (resolver) in
|
||||||
|
guard let session = self.providerManagers?.first?.connection as? NETunnelProviderSession else {
|
||||||
|
resolver.reject(GoVersionCoordinatorError.noSession)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try session.sendProviderMessage(ExtensionMessage.requestVersion.data, responseHandler: { (data) in
|
||||||
|
guard let responseString = String(data: data!, encoding: .utf8) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resolver.fulfill(responseString)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func exportTunnels(settingsTableViewController: SettingsTableViewController, sourceView: UIView) {
|
func exportTunnels(settingsTableViewController: SettingsTableViewController, sourceView: UIView) {
|
||||||
self.exportConfigs(sourceView: sourceView)
|
self.exportConfigs(sourceView: sourceView)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,15 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import PromiseKit
|
||||||
|
|
||||||
|
enum GoVersionError: Error {
|
||||||
|
case noDelegate
|
||||||
|
}
|
||||||
|
|
||||||
protocol SettingsTableViewControllerDelegate: class {
|
protocol SettingsTableViewControllerDelegate: class {
|
||||||
func exportTunnels(settingsTableViewController: SettingsTableViewController, sourceView: UIView)
|
func exportTunnels(settingsTableViewController: SettingsTableViewController, sourceView: UIView)
|
||||||
|
func goVersionInformation() -> Promise<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
class SettingsTableViewController: UITableViewController {
|
class SettingsTableViewController: UITableViewController {
|
||||||
|
@ -21,14 +27,24 @@ class SettingsTableViewController: UITableViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
versionInfoLabel.text = versionInformation
|
versionInfoLabel.text = versionInformation
|
||||||
goVersionInfoLabel.text = goVersionInformation
|
_ = firstly { () -> Promise<String> in
|
||||||
|
self.goVersionInfoLabel.text = NSLocalizedString("Loading...", comment: "")
|
||||||
|
return goVersionInformation()
|
||||||
|
}.then { (goVersion: String) -> Guarantee<Void> in
|
||||||
|
if let label = self.goVersionInfoLabel {
|
||||||
|
label.text = goVersion
|
||||||
|
}
|
||||||
|
return Guarantee.value(())
|
||||||
|
}.recover({ (_) in
|
||||||
|
self.goVersionInfoLabel.text = NSLocalizedString("Unknown", comment: "")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||||
if let cell = tableView.cellForRow(at: indexPath) {
|
if let cell = tableView.cellForRow(at: indexPath) {
|
||||||
switch cell {
|
switch cell {
|
||||||
case versionInfoCell, goVersionInfoCell:
|
case versionInfoCell, goVersionInfoCell:
|
||||||
UIPasteboard.general.string = ["WireGuard for iOS:", versionInformation, "Go userspace backend:", goVersionInformation].joined(separator: "\n")
|
UIPasteboard.general.string = ["WireGuard for iOS:", versionInformation, "Go userspace backend:", goVersionInfoLabel.text ?? ""].joined(separator: "\n")
|
||||||
showCopyConfirmation()
|
showCopyConfirmation()
|
||||||
case exportCell:
|
case exportCell:
|
||||||
delegate?.exportTunnels(settingsTableViewController: self, sourceView: exportCell)
|
delegate?.exportTunnels(settingsTableViewController: self, sourceView: exportCell)
|
||||||
|
@ -49,8 +65,8 @@ class SettingsTableViewController: UITableViewController {
|
||||||
return versionElements.joined(separator: " ")
|
return versionElements.joined(separator: " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
var goVersionInformation: String {
|
func goVersionInformation() -> Promise<String> {
|
||||||
return wgVersion().flatMap { String(cString: $0) } ?? ""
|
return self.delegate?.goVersionInformation() ?? Promise(error: GoVersionError.noDelegate)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func showCopyConfirmation() {
|
private func showCopyConfirmation() {
|
||||||
|
|
|
@ -110,14 +110,15 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
/// Handle IPC messages from the app.
|
/// Handle IPC messages from the app.
|
||||||
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
|
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
|
||||||
guard let messageString = NSString(data: messageData, encoding: String.Encoding.utf8.rawValue) else {
|
let responseData: Data?
|
||||||
completionHandler?(nil)
|
|
||||||
return
|
switch ExtensionMessage(messageData) {
|
||||||
|
case ExtensionMessage.requestVersion:
|
||||||
|
responseData = (wgVersion().flatMap { String(cString: $0) } ?? "").data(using: .utf8)
|
||||||
|
default:
|
||||||
|
responseData = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
os_log("Got a message from the app: %s", log: Log.general, type: .info, messageString)
|
|
||||||
|
|
||||||
let responseData = "Hello app".data(using: String.Encoding.utf8)
|
|
||||||
completionHandler?(responseData)
|
completionHandler?(responseData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue