summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2023-04-19 15:51:58 +0200
committerAndrej Mihajlov <and@mullvad.net>2023-04-19 15:51:58 +0200
commitcef7a8cb591f7663aee408a28af7fbdc05b6188b (patch)
treef1da71ac1d39af9b5c9c5d34a519a4eb0a707d65
parentd39fb86ce5c619ce62f5d4fb8d0a7d18f9ddd452 (diff)
parent91d2623a7b0f16945d08e741d8eec8287310400b (diff)
downloadmullvadvpn-cef7a8cb591f7663aee408a28af7fbdc05b6188b.tar.xz
mullvadvpn-cef7a8cb591f7663aee408a28af7fbdc05b6188b.zip
Merge branch 'parse-bridges'
-rw-r--r--ios/MullvadREST/ServerRelaysResponse.swift27
-rw-r--r--ios/MullvadVPNTests/RelaySelectorTests.swift3
-rw-r--r--ios/RelaySelector/RelaySelector.swift16
3 files changed, 40 insertions, 6 deletions
diff --git a/ios/MullvadREST/ServerRelaysResponse.swift b/ios/MullvadREST/ServerRelaysResponse.swift
index 1327b596af..d6e8b454a2 100644
--- a/ios/MullvadREST/ServerRelaysResponse.swift
+++ b/ios/MullvadREST/ServerRelaysResponse.swift
@@ -82,16 +82,41 @@ extension REST {
}
}
+ public struct ServerShadowsocks: Codable {
+ public let `protocol`: String
+ public let port: UInt16
+ public let cipher: String
+ public let password: String
+
+ public init(protocol: String, port: UInt16, cipher: String, password: String) {
+ self.protocol = `protocol`
+ self.port = port
+ self.cipher = cipher
+ self.password = password
+ }
+ }
+
+ public struct ServerBridges: Codable {
+ public let shadowsocks: [ServerShadowsocks]
+
+ public init(shadowsocks: [REST.ServerShadowsocks]) {
+ self.shadowsocks = shadowsocks
+ }
+ }
+
public struct ServerRelaysResponse: Codable {
public let locations: [String: ServerLocation]
public let wireguard: ServerWireguardTunnels
+ public let bridge: ServerBridges
public init(
locations: [String: REST.ServerLocation],
- wireguard: REST.ServerWireguardTunnels
+ wireguard: REST.ServerWireguardTunnels,
+ bridge: ServerBridges
) {
self.locations = locations
self.wireguard = wireguard
+ self.bridge = bridge
}
}
}
diff --git a/ios/MullvadVPNTests/RelaySelectorTests.swift b/ios/MullvadVPNTests/RelaySelectorTests.swift
index ff65b64944..4b55c6647f 100644
--- a/ios/MullvadVPNTests/RelaySelectorTests.swift
+++ b/ios/MullvadVPNTests/RelaySelectorTests.swift
@@ -112,5 +112,6 @@ private let sampleRelays = REST.ServerRelaysResponse(
includeInCountry: true
),
]
- )
+ ),
+ bridge: REST.ServerBridges(shadowsocks: [])
)
diff --git a/ios/RelaySelector/RelaySelector.swift b/ios/RelaySelector/RelaySelector.swift
index 2c315f5723..392aee7334 100644
--- a/ios/RelaySelector/RelaySelector.swift
+++ b/ios/RelaySelector/RelaySelector.swift
@@ -11,6 +11,17 @@ import MullvadREST
import MullvadTypes
public enum RelaySelector {
+ /**
+ Returns random shadowsocks TCP bridge, otherwise `nil` if there are no shadowdsocks bridges.
+ */
+ public static func getShadowsocksTCPBridge(relays: REST.ServerRelaysResponse) -> REST.ServerShadowsocks? {
+ return relays.bridge.shadowsocks.filter { $0.protocol == "tcp" }.randomElement()
+ }
+
+ /**
+ Filters relay list using given constraints and selects random relay.
+ Throws an error if there are no relays satisfying the given constraints.
+ */
public static func evaluate(
relays: REST.ServerRelaysResponse,
constraints: RelayConstraints
@@ -137,10 +148,7 @@ public enum RelaySelector {
}
}
- private static func parseRelaysResponse(
- _ response: REST
- .ServerRelaysResponse
- ) -> [RelayWithLocation] {
+ private static func parseRelaysResponse(_ response: REST.ServerRelaysResponse) -> [RelayWithLocation] {
return response.wireguard.relays.compactMap { serverRelay -> RelayWithLocation? in
guard let serverLocation = response.locations[serverRelay.location] else { return nil }