summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSteffen Ernst <steffen.ernst@mullvad.net>2025-04-15 10:42:48 +0200
committerSteffen Ernst <steffen.ernst@mullvad.net>2025-04-16 13:47:19 +0200
commit860701af97b4a133ba9376b08a2fd52d21ce3e67 (patch)
treecfd8b5ddf976875e2bf730fdc9a4f0f3c82303b4
parent39ba789961173400a53def2d02abdccc2ac91af9 (diff)
downloadmullvadvpn-860701af97b4a133ba9376b08a2fd52d21ce3e67.tar.xz
mullvadvpn-860701af97b4a133ba9376b08a2fd52d21ce3e67.zip
Fix shadowsocks not using ip override
-rw-r--r--ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift11
-rw-r--r--ios/MullvadRESTTests/ServerRelayTests.swift81
-rw-r--r--ios/MullvadVPN.xcodeproj/project.pbxproj4
3 files changed, 95 insertions, 1 deletions
diff --git a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
index 47a157dd8a..047f29ba9b 100644
--- a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
+++ b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
@@ -77,7 +77,16 @@ extension REST {
publicKey: publicKey,
includeInCountry: includeInCountry,
daita: daita,
- shadowsocksExtraAddrIn: shadowsocksExtraAddrIn
+ shadowsocksExtraAddrIn: shadowsocksExtraAddrIn?.filter { address in
+ return switch address {
+ case let ip where IPv4Address(ip) != nil:
+ ipv4AddrIn == nil
+ case let ip where IPv6Address(ip) != nil:
+ ipv6AddrIn == nil
+ default:
+ true
+ }
+ }
)
}
diff --git a/ios/MullvadRESTTests/ServerRelayTests.swift b/ios/MullvadRESTTests/ServerRelayTests.swift
new file mode 100644
index 0000000000..9dea7f62fc
--- /dev/null
+++ b/ios/MullvadRESTTests/ServerRelayTests.swift
@@ -0,0 +1,81 @@
+@testable import MullvadREST
+import Network
+import XCTest
+
+class ServerRelayTests: XCTestCase {
+ func testOverrideIPv4AddrIn() throws {
+ let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
+ ipv4AddrIn: .loopback,
+ ipv6AddrIn: nil
+ )
+
+ XCTAssertEqual(overrideRelay.ipv4AddrIn, .loopback)
+ XCTAssertEqual(overrideRelay.ipv6AddrIn, .any)
+ XCTAssertEqual(overrideRelay.shadowsocksExtraAddrIn, ["\(IPv6Address.any)"])
+ }
+
+ func testOverrideIPv6AddrIn() throws {
+ let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
+ ipv4AddrIn: nil,
+ ipv6AddrIn: .loopback
+ )
+
+ XCTAssertEqual(overrideRelay.ipv4AddrIn, .any)
+ XCTAssertEqual(overrideRelay.ipv6AddrIn, .loopback)
+ XCTAssertEqual(overrideRelay.shadowsocksExtraAddrIn, ["\(IPv4Address.any)"])
+ }
+
+ func testOverrideBoth() throws {
+ let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
+ ipv4AddrIn: .loopback,
+ ipv6AddrIn: .loopback
+ )
+
+ XCTAssertEqual(overrideRelay.ipv4AddrIn, .loopback)
+ XCTAssertEqual(overrideRelay.ipv6AddrIn, .loopback)
+ XCTAssertEqual(overrideRelay.shadowsocksExtraAddrIn, [])
+ }
+
+ func testOverrideNone() throws {
+ let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
+ ipv4AddrIn: nil,
+ ipv6AddrIn: nil
+ )
+
+ XCTAssertEqual(overrideRelay.ipv4AddrIn, .any)
+ XCTAssertEqual(overrideRelay.ipv6AddrIn, .any)
+ XCTAssertEqual(
+ overrideRelay.shadowsocksExtraAddrIn,
+ shadowSocksExtraAddrIn
+ )
+ }
+
+ func testOverrideDaita() throws {
+ let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
+ daita: true
+ )
+
+ XCTAssertEqual(overrideRelay.daita, true)
+ }
+
+ var shadowSocksExtraAddrIn: [String] {
+ ["\(IPv4Address.any)", "\(IPv6Address.any)"]
+ }
+
+ var mockServerRelay: REST.ServerRelay {
+ REST.ServerRelay(
+ hostname: "Host 1",
+ active: true,
+ owned: true,
+ location: "xx-yyy",
+ provider: "",
+ weight: 0,
+ ipv4AddrIn: .any,
+ ipv6AddrIn: .any,
+ publicKey: Data(),
+ includeInCountry: true,
+ daita: false,
+ shadowsocksExtraAddrIn: shadowSocksExtraAddrIn
+ )
+ }
+}
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj
index b937691e46..a67853a642 100644
--- a/ios/MullvadVPN.xcodeproj/project.pbxproj
+++ b/ios/MullvadVPN.xcodeproj/project.pbxproj
@@ -1101,6 +1101,7 @@
F910A4312D4A1B41002FF3BB /* InAppPurchaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F910A4302D4A1B3B002FF3BB /* InAppPurchaseCoordinator.swift */; };
F910A43A2D4A283D002FF3BB /* InAppPurchaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F910A4392D4A2839002FF3BB /* InAppPurchaseViewController.swift */; };
F910A8572D523812002FF3BB /* TunnelSettingsV7.swift in Sources */ = {isa = PBXBuildFile; fileRef = F910A8562D523812002FF3BB /* TunnelSettingsV7.swift */; };
+ F924C65F2DAE4554001F4660 /* ServerRelayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F924C65E2DAE4554001F4660 /* ServerRelayTests.swift */; };
F998EFF82D359C4600D88D01 /* SKProduct+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FD5BEF24238EB300112C88 /* SKProduct+Formatting.swift */; };
F998EFFA2D3656BA00D88D01 /* SKProduct+Sorting.swift in Sources */ = {isa = PBXBuildFile; fileRef = F998EFF92D3656B100D88D01 /* SKProduct+Sorting.swift */; };
/* End PBXBuildFile section */
@@ -2498,6 +2499,7 @@
F910A4302D4A1B3B002FF3BB /* InAppPurchaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPurchaseCoordinator.swift; sourceTree = "<group>"; };
F910A4392D4A2839002FF3BB /* InAppPurchaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPurchaseViewController.swift; sourceTree = "<group>"; };
F910A8562D523812002FF3BB /* TunnelSettingsV7.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelSettingsV7.swift; sourceTree = "<group>"; };
+ F924C65E2DAE4554001F4660 /* ServerRelayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerRelayTests.swift; sourceTree = "<group>"; };
F998EFF92D3656B100D88D01 /* SKProduct+Sorting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SKProduct+Sorting.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -4140,6 +4142,7 @@
58FBFBE7291622580020E046 /* MullvadRESTTests */ = {
isa = PBXGroup;
children = (
+ F924C65E2DAE4554001F4660 /* ServerRelayTests.swift */,
58FBFBE8291622580020E046 /* ExponentialBackoffTests.swift */,
A932D9F22B5EB61100999395 /* HeadRequestTests.swift */,
58BDEB9E2A98F6B400F578F2 /* Mocks */,
@@ -6717,6 +6720,7 @@
A917352129FAAA5200D5DCFD /* TransportStrategyTests.swift in Sources */,
58FBFBE9291622580020E046 /* ExponentialBackoffTests.swift in Sources */,
F0164EC32B4C49D30020268D /* ShadowsocksLoaderStub.swift in Sources */,
+ F924C65F2DAE4554001F4660 /* ServerRelayTests.swift in Sources */,
58BDEB9D2A98F69E00F578F2 /* MemoryCache.swift in Sources */,
58BDEB9B2A98F58600F578F2 /* TimeServerProxy.swift in Sources */,
A932D9F52B5EBB9D00999395 /* RESTTransportStub.swift in Sources */,