diff --git a/Passepartout-iOS/Global/SwiftGen+Strings.swift b/Passepartout-iOS/Global/SwiftGen+Strings.swift index 5c7de3fa..72f8373b 100644 --- a/Passepartout-iOS/Global/SwiftGen+Strings.swift +++ b/Passepartout-iOS/Global/SwiftGen+Strings.swift @@ -600,6 +600,16 @@ internal enum L10n { /// Default gateway internal static let title = L10n.tr("Core", "network_settings.gateway.title") } + internal enum Mtu { + /// MTU + internal static let title = L10n.tr("Core", "network_settings.mtu.title") + internal enum Cells { + internal enum Bytes { + /// Bytes + internal static let caption = L10n.tr("Core", "network_settings.mtu.cells.bytes.caption") + } + } + } internal enum Proxy { /// Proxy internal static let title = L10n.tr("Core", "network_settings.proxy.title") diff --git a/Passepartout-iOS/Scenes/NetworkSettingsViewController.swift b/Passepartout-iOS/Scenes/NetworkSettingsViewController.swift index efd6c685..f322d16d 100644 --- a/Passepartout-iOS/Scenes/NetworkSettingsViewController.swift +++ b/Passepartout-iOS/Scenes/NetworkSettingsViewController.swift @@ -82,18 +82,23 @@ class NetworkSettingsViewController: UITableViewController { if networkChoices.proxy != .server { sections.append(.manualProxy) } + if networkChoices.mtu != .server { + sections.append(.manualMTU) + } // headers model.setHeader("", forSection: .choices) model.setHeader(L10n.Core.NetworkSettings.Gateway.title, forSection: .manualGateway) model.setHeader(L10n.Core.NetworkSettings.Proxy.title, forSection: .manualProxy) + model.setHeader(L10n.Core.NetworkSettings.Mtu.title, forSection: .manualMTU) // footers // model.setFooter(L10n.Core.Configuration.Sections.Reset.footer, for: .reset) // rows - model.set([.gateway, .dns, .proxy], forSection: .choices) + model.set([.gateway, .dns, .proxy, .mtu], forSection: .choices) model.set([.gatewayIPv4, .gatewayIPv6], forSection: .manualGateway) + model.set([.mtuBytes], forSection: .manualMTU) var dnsServers: [RowType] = Array(repeating: .dnsAddress, count: networkSettings.dnsServers?.count ?? 0) if networkChoices.dns == .manual { @@ -139,6 +144,7 @@ class NetworkSettingsViewController: UITableViewController { updateGateway(networkChoices.gateway) updateDNS(networkChoices.dns) updateProxy(networkChoices.proxy) + updateMTU(networkChoices.mtu) } override func viewWillAppear(_ animated: Bool) { @@ -210,6 +216,24 @@ class NetworkSettingsViewController: UITableViewController { } } + private func updateMTU(_ choice: NetworkChoice) { + networkChoices.mtu = choice + switch networkChoices.mtu { + case .client: + if let settings = clientNetworkSettings { + networkSettings.copyMTU(from: settings) + } + + case .server: + break + + case .manual: + if let settings = profile?.manualNetworkSettings { + networkSettings.copyMTU(from: settings) + } + } + } + private func commitTextField(_ field: UITextField) { // DNS: servers, domains @@ -265,6 +289,9 @@ class NetworkSettingsViewController: UITableViewController { if networkChoices.proxy == .manual { settings.copyProxy(from: networkSettings) } + if networkChoices.mtu == .manual { + settings.copyMTU(from: networkSettings) + } profile?.manualNetworkSettings = settings } } @@ -282,6 +309,8 @@ extension NetworkSettingsViewController { case manualDNSDomains case manualProxy + + case manualMTU } enum RowType: Int { @@ -291,6 +320,8 @@ extension NetworkSettingsViewController { case proxy + case mtu + case gatewayIPv4 case gatewayIPv6 @@ -312,6 +343,8 @@ extension NetworkSettingsViewController { case proxyBypass case proxyAddBypass + + case mtuBytes } override func numberOfSections(in tableView: UITableView) -> Int { @@ -355,6 +388,12 @@ extension NetworkSettingsViewController { cell.leftText = L10n.Core.NetworkSettings.Proxy.title cell.rightText = networkChoices.proxy.description return cell + + case .mtu: + let cell = Cells.setting.dequeue(from: tableView, for: indexPath) + cell.leftText = L10n.Core.NetworkSettings.Mtu.title + cell.rightText = networkChoices.mtu.description + return cell case .gatewayIPv4: let cell = Cells.toggle.dequeue(from: tableView, for: indexPath, tag: row.rawValue, delegate: self) @@ -471,6 +510,12 @@ extension NetworkSettingsViewController { cell.applyAction(.current) cell.leftText = L10n.App.NetworkSettings.Cells.AddProxyBypass.caption return cell + + case .mtuBytes: + let cell = Cells.setting.dequeue(from: tableView, for: indexPath) + cell.leftText = L10n.Core.NetworkSettings.Mtu.Cells.Bytes.caption + cell.rightText = networkSettings.mtuBytes?.description ?? "Default" + return cell } } @@ -520,6 +565,20 @@ extension NetworkSettingsViewController { } navigationController?.pushViewController(vc, animated: true) + case .mtu: + let vc = SingleOptionViewController() + vc.applyTint(.current) + vc.title = (cell as? SettingTableViewCell)?.leftText + vc.options = NetworkChoice.choices(for: profile) + vc.descriptionBlock = { $0.description } + + vc.selectedOption = networkChoices.mtu + vc.selectionBlock = { [weak self] in + self?.updateMTU($0) + self?.navigationController?.popViewController(animated: true) + } + navigationController?.pushViewController(vc, animated: true) + case .dnsAddAddress: tableView.deselectRow(at: indexPath, animated: true) @@ -547,6 +606,23 @@ extension NetworkSettingsViewController { reloadModel() tableView.insertRows(at: [indexPath], with: .automatic) + case .mtuBytes: + guard networkChoices.mtu == .manual else { + break + } + let vc = SingleOptionViewController() + vc.applyTint(.current) + vc.title = (cell as? SettingTableViewCell)?.leftText + vc.options = ProfileNetworkSettings.mtuOptions + vc.descriptionBlock = { $0.description } + + vc.selectedOption = networkSettings.mtuBytes + vc.selectionBlock = { [weak self] in + self?.networkSettings.mtuBytes = $0 + self?.navigationController?.popViewController(animated: true) + } + navigationController?.pushViewController(vc, animated: true) + default: break } diff --git a/Submodules/Core b/Submodules/Core index 9f2c220b..2358fc83 160000 --- a/Submodules/Core +++ b/Submodules/Core @@ -1 +1 @@ -Subproject commit 9f2c220bf566cf1c79115eef6d6708ce9d487f95 +Subproject commit 2358fc8332da87ea3d37f0d78e1727b1b427dd43