ios: setting to use .onion hosts (#934)

This commit is contained in:
Evgeny Poberezkin
2022-08-15 08:25:41 +01:00
committed by GitHub
parent 954338658f
commit 2e4ffb7fe9
3 changed files with 133 additions and 1 deletions
+35 -1
View File
@@ -517,7 +517,7 @@ public struct ArchiveConfig: Encodable {
public struct NetCfg: Codable, Equatable {
public var socksProxy: String? = nil
public var hostMode: HostMode = .publicHost
public var requiredHostMode = false
public var requiredHostMode = true
public var tcpConnectTimeout: Int // microseconds
public var tcpTimeout: Int // microseconds
public var tcpKeepAlive: KeepAliveOpts?
@@ -548,6 +548,40 @@ public enum HostMode: String, Codable {
case publicHost = "public"
}
public enum OnionHosts: String, Identifiable {
case no
case prefer
case require
public var text: LocalizedStringKey {
switch self {
case .no: return "No"
case .prefer: return "When available"
case .require: return "Requred"
}
}
public var hostMode: (HostMode, Bool) {
switch self {
case .no: return (.publicHost, true)
case .prefer: return (.onionHost, false)
case .require: return (.onionHost, true)
}
}
public init(netCfg: NetCfg) {
switch netCfg.hostMode {
case .onionViaSocks: self = .no
case .onionHost: self = netCfg.requiredHostMode ? .require : .prefer
case .publicHost: self = .no
}
}
public var id: OnionHosts { self }
public static let values: [OnionHosts] = [.no, .prefer, .require]
}
public struct KeepAliveOpts: Codable, Equatable {
public var keepIdle: Int // seconds
public var keepIntvl: Int // seconds
+13
View File
@@ -15,6 +15,7 @@ public let GROUP_DEFAULT_CHAT_LAST_START = "chatLastStart"
let GROUP_DEFAULT_NTF_PREVIEW_MODE = "ntfPreviewMode"
let GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
let GROUP_DEFAULT_NTF_BADGE_COUNT = "ntgBadgeCount"
let GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS = "networkUseOnionHosts"
let GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT = "networkTCPConnectTimeout"
let GROUP_DEFAULT_NETWORK_TCP_TIMEOUT = "networkTCPTimeout"
let GROUP_DEFAULT_NETWORK_SMP_PING_INTERVAL = "networkSMPPingInterval"
@@ -29,6 +30,7 @@ public let groupDefaults = UserDefaults(suiteName: APP_GROUP_NAME)!
public func registerGroupDefaults() {
groupDefaults.register(defaults: [
GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS: OnionHosts.no.rawValue,
GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT: NetCfg.defaults.tcpConnectTimeout,
GROUP_DEFAULT_NETWORK_TCP_TIMEOUT: NetCfg.defaults.tcpTimeout,
GROUP_DEFAULT_NETWORK_SMP_PING_INTERVAL: NetCfg.defaults.smpPingInterval,
@@ -84,6 +86,12 @@ public let privacyAcceptImagesGroupDefault = BoolDefault(defaults: groupDefaults
public let ntfBadgeCountGroupDefault = IntDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_NTF_BADGE_COUNT)
public let networkUseOnionHostsGroupDefault = EnumDefault<OnionHosts>(
defaults: groupDefaults,
forKey: GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS,
withDefault: .no
)
public class DateDefault {
var defaults: UserDefaults
var key: String
@@ -157,6 +165,8 @@ public class Default<T> {
}
public func getNetCfg() -> NetCfg {
let onionHosts = networkUseOnionHostsGroupDefault.get()
let (hostMode, requiredHostMode) = onionHosts.hostMode
let tcpConnectTimeout = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT)
let tcpTimeout = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT)
let smpPingInterval = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_SMP_PING_INTERVAL)
@@ -171,6 +181,8 @@ public func getNetCfg() -> NetCfg {
tcpKeepAlive = nil
}
return NetCfg(
hostMode: hostMode,
requiredHostMode: requiredHostMode,
tcpConnectTimeout: tcpConnectTimeout,
tcpTimeout: tcpTimeout,
tcpKeepAlive: tcpKeepAlive,
@@ -179,6 +191,7 @@ public func getNetCfg() -> NetCfg {
}
public func setNetCfg(_ cfg: NetCfg) {
networkUseOnionHostsGroupDefault.set(OnionHosts(netCfg: cfg))
groupDefaults.set(cfg.tcpConnectTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT)
groupDefaults.set(cfg.tcpTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT)
groupDefaults.set(cfg.smpPingInterval, forKey: GROUP_DEFAULT_NETWORK_SMP_PING_INTERVAL)