]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Model: Add activationType to tunnel configuration
authorRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 13:38:21 +0000 (19:08 +0530)
committerRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 19:47:36 +0000 (01:17 +0530)
We make sure existing tunnel serializations can be deserialized correctly.

We also bump up the tunnelConfigurationVersion, because the tunnel
configuration contents have changed.

Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/Shared/Model/ActivationType.swift
WireGuard/Shared/Model/Configuration.swift
WireGuard/Shared/NETunnelProviderProtocol+Extension.swift

index 56b0e6c38f963c60aab4543319b525a93c577373..ea5927d6f08a5aae654743854b96974ade42a571 100644 (file)
@@ -3,18 +3,18 @@
 
 enum ActivationType {
     case activateManually
-    case useOnDemandForAnyInternetActivity
-    case useOnDemandOnlyOverWifi
-    case useOnDemandOnlyOverCellular
+    case useOnDemandOverWifiAndCellular
+    case useOnDemandOverWifiOnly
+    case useOnDemandOverCellularOnly
 }
 
 extension ActivationType: Codable {
     // We use separate coding keys in case we might have a enum with associated values in the future
     enum CodingKeys: CodingKey {
         case activateManually
-        case useOnDemandForAnyInternetActivity
-        case useOnDemandOnlyOverWifi
-        case useOnDemandOnlyOverCellular
+        case useOnDemandOverWifiAndCellular
+        case useOnDemandOverWifiOnly
+        case useOnDemandOverCellularOnly
     }
 
     // Decoding error
@@ -28,12 +28,12 @@ extension ActivationType: Codable {
         switch self {
         case .activateManually:
             try container.encode(true, forKey: CodingKeys.activateManually)
-        case .useOnDemandForAnyInternetActivity:
-            try container.encode(true, forKey: CodingKeys.useOnDemandForAnyInternetActivity)
-        case .useOnDemandOnlyOverWifi:
-            try container.encode(true, forKey: CodingKeys.useOnDemandOnlyOverWifi)
-        case .useOnDemandOnlyOverCellular:
-            try container.encode(true, forKey: CodingKeys.useOnDemandOnlyOverCellular)
+        case .useOnDemandOverWifiAndCellular:
+            try container.encode(true, forKey: CodingKeys.useOnDemandOverWifiAndCellular)
+        case .useOnDemandOverWifiOnly:
+            try container.encode(true, forKey: CodingKeys.useOnDemandOverWifiOnly)
+        case .useOnDemandOverCellularOnly:
+            try container.encode(true, forKey: CodingKeys.useOnDemandOverCellularOnly)
         }
     }
 
@@ -46,18 +46,18 @@ extension ActivationType: Codable {
             return
         }
 
-        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandForAnyInternetActivity), isValid {
-            self = .useOnDemandForAnyInternetActivity
+        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandOverWifiAndCellular), isValid {
+            self = .useOnDemandOverWifiAndCellular
             return
         }
 
-        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandOnlyOverWifi), isValid {
-            self = .useOnDemandOnlyOverWifi
+        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandOverWifiOnly), isValid {
+            self = .useOnDemandOverWifiOnly
             return
         }
 
-        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandOnlyOverCellular), isValid {
-            self = .useOnDemandOnlyOverCellular
+        if let isValid = try? container.decode(Bool.self, forKey: CodingKeys.useOnDemandOverCellularOnly), isValid {
+            self = .useOnDemandOverCellularOnly
             return
         }
 
index 45c29c118fa6440d418a1bb774fed8b26d7e70dd..f6598bba980122c1516ac2c846e3d8c767c81d0a 100644 (file)
@@ -7,9 +7,11 @@ import Foundation
 final class TunnelConfiguration {
     var interface: InterfaceConfiguration
     let peers: [PeerConfiguration]
+    var activationType: ActivationType
     init(interface: InterfaceConfiguration, peers: [PeerConfiguration]) {
         self.interface = interface
         self.peers = peers
+        self.activationType = .activateManually
 
         let peerPublicKeysArray = peers.map { $0.publicKey }
         let peerPublicKeysSet = Set<Data>(peerPublicKeysArray)
@@ -61,11 +63,15 @@ extension TunnelConfiguration: Decodable {
     enum CodingKeys: CodingKey {
         case interface
         case peers
+        case activationType
     }
     convenience init(from decoder: Decoder) throws {
         let values = try decoder.container(keyedBy: CodingKeys.self)
         let interface = try values.decode(InterfaceConfiguration.self, forKey: .interface)
         let peers = try values.decode([PeerConfiguration].self, forKey: .peers)
+        let activationType = (try? values.decode(ActivationType.self, forKey: .activationType)) ?? .activateManually
+
         self.init(interface: interface, peers: peers)
+        self.activationType = activationType
     }
 }
index ec8b294a588485738b69e265cea5c490796a6cfa..591b0eb3c672b82567cb78d398f55cda4759227b 100644 (file)
@@ -14,7 +14,7 @@ extension NETunnelProviderProtocol {
         providerBundleIdentifier = "\(appId).network-extension"
         providerConfiguration = [
             "tunnelConfiguration": serializedTunnelConfiguration,
-            "tunnelConfigurationVersion": 1
+            "tunnelConfigurationVersion": 2
         ]
 
         let endpoints = tunnelConfiguration.peers.compactMap({$0.endpoint})