From 3fc11e2278a5e88ebc4ec3150fda050959e0c446 Mon Sep 17 00:00:00 2001 From: Grant Limberg <glimberg@gmail.com> Date: Sun, 26 Jun 2016 18:18:59 -0700 Subject: [PATCH] misc bug fixes related to default routes --- ZeroTier One/AppDelegate.swift | 3 ++ ZeroTier One/JoinNetworkViewController.swift | 4 ++ ZeroTier One/JoinNetworkViewController.xib | 2 +- ZeroTier One/Network.swift | 2 +- ZeroTier One/NetworkMonitor.swift | 51 ++++++++++++------- ZeroTier One/ShowNetworksViewController.swift | 28 +++++----- 6 files changed, 57 insertions(+), 33 deletions(-) diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift index e52b7be53..25c112298 100644 --- a/ZeroTier One/AppDelegate.swift +++ b/ZeroTier One/AppDelegate.swift @@ -164,6 +164,9 @@ class AppDelegate: NSObject, NSApplicationDelegate { networkName = "\(id) (\(net.name))" } + if net.allowDefault && net.connected { + networkName += " [default]" + } let item = NSMenuItem(title: networkName, action: #selector(AppDelegate.toggleNetwork(_:)), keyEquivalent: "") if net.connected { diff --git a/ZeroTier One/JoinNetworkViewController.swift b/ZeroTier One/JoinNetworkViewController.swift index cef30d4ee..ecab8f6c6 100644 --- a/ZeroTier One/JoinNetworkViewController.swift +++ b/ZeroTier One/JoinNetworkViewController.swift @@ -45,6 +45,10 @@ class JoinNetworkViewController: NSViewController, NSComboBoxDelegate, NSComboBo override func viewWillAppear() { super.viewWillAppear() + allowManagedCheckBox.state = NSOnState + allowGlobalCheckBox.state = NSOffState + allowDefaultCheckBox.state = NSOffState + let defaults = NSUserDefaults.standardUserDefaults() let vals = defaults.stringArrayForKey(joinedNetworksKey) diff --git a/ZeroTier One/JoinNetworkViewController.xib b/ZeroTier One/JoinNetworkViewController.xib index 187af0088..338d35eea 100644 --- a/ZeroTier One/JoinNetworkViewController.xib +++ b/ZeroTier One/JoinNetworkViewController.xib @@ -62,7 +62,7 @@ </button> <button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rz3-0a-oNA"> <rect key="frame" x="238" y="59" width="141" height="18"/> - <buttonCell key="cell" type="check" title="Allow Default Route" alternateTitle="Allow override of default route ‘full tunnel'" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Lkd-XI-Kcu"> + <buttonCell key="cell" type="check" title="Allow Default Route" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Lkd-XI-Kcu"> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <font key="font" metaFont="system"/> </buttonCell> diff --git a/ZeroTier One/Network.swift b/ZeroTier One/Network.swift index b344b6c21..b5f6b4235 100644 --- a/ZeroTier One/Network.swift +++ b/ZeroTier One/Network.swift @@ -263,7 +263,7 @@ class Network: NSObject, NSCoding { func defaultRouteExists(netList: [Network]) -> Bool { for net in netList { - if net.allowDefault { + if net.allowDefault && net.connected { return true } } diff --git a/ZeroTier One/NetworkMonitor.swift b/ZeroTier One/NetworkMonitor.swift index 124fce265..a653f9807 100644 --- a/ZeroTier One/NetworkMonitor.swift +++ b/ZeroTier One/NetworkMonitor.swift @@ -70,29 +70,33 @@ class NetworkMonitor: NSObject { var networks = self.savedNetworks for nw in receivedNetworks { - let index = findNetworkWithID(nw.nwid) + let index = findSavedNetworkWithID(nw.nwid) if index != NSNotFound { networks[index] = nw } - networks.sortInPlace({ (left, right) -> Bool in - if left.nwid < right.nwid { - return true - } - - return false - }) - - objc_sync_enter(allNetworks) - allNetworks = networks - objc_sync_exit(allNetworks) - - saveNetworks() - - let nc = NSNotificationCenter.defaultCenter() - - nc.postNotificationName(networkUpdateKey, object: nil, userInfo: ["networks": networks]) + else { + networks.append(nw) + } } + + networks.sortInPlace({ (left, right) -> Bool in + if left.nwid < right.nwid { + return true + } + + return false + }) + + objc_sync_enter(allNetworks) + allNetworks = networks + objc_sync_exit(allNetworks) + + saveNetworks() + + let nc = NSNotificationCenter.defaultCenter() + + nc.postNotificationName(networkUpdateKey, object: nil, userInfo: ["networks": networks]) } private func findNetworkWithID(nwid: UInt64) -> Int { @@ -106,6 +110,17 @@ class NetworkMonitor: NSObject { return NSNotFound } + private func findSavedNetworkWithID(nwid: UInt64) -> Int { + for (index, element) in savedNetworks.enumerate() { + + if element.nwid == nwid { + return index + } + } + + return NSNotFound + } + private func saveNetworks() { let file = dataFile() diff --git a/ZeroTier One/ShowNetworksViewController.swift b/ZeroTier One/ShowNetworksViewController.swift index e2bdd105c..0361f6dce 100644 --- a/ZeroTier One/ShowNetworksViewController.swift +++ b/ZeroTier One/ShowNetworksViewController.swift @@ -76,6 +76,21 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable cell.bridgingField.stringValue = network.bridge ? "ENABLED" : "DISABLED" cell.deviceField.stringValue = network.portDeviceName + if network.connected { + cell.connectedCheckbox.state = NSOnState + + cell.allowDefault.enabled = true + cell.allowGlobal.enabled = true + cell.allowManaged.enabled = true + } + else { + cell.connectedCheckbox.state = NSOffState + + cell.allowDefault.enabled = false + cell.allowGlobal.enabled = false + cell.allowManaged.enabled = false + } + if network.allowDefault { cell.allowDefault.state = NSOnState @@ -101,20 +116,7 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable cell.addressesField.stringValue += "\n" } - if network.connected { - cell.connectedCheckbox.state = NSOnState - cell.allowDefault.enabled = true - cell.allowGlobal.enabled = true - cell.allowManaged.enabled = true - } - else { - cell.connectedCheckbox.state = NSOffState - - cell.allowDefault.enabled = false - cell.allowGlobal.enabled = false - cell.allowManaged.enabled = false - } return cell }