diff options
| author | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-04-15 10:42:48 +0200 |
|---|---|---|
| committer | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-04-16 13:47:19 +0200 |
| commit | 860701af97b4a133ba9376b08a2fd52d21ce3e67 (patch) | |
| tree | cfd8b5ddf976875e2bf730fdc9a4f0f3c82303b4 | |
| parent | 39ba789961173400a53def2d02abdccc2ac91af9 (diff) | |
| download | mullvadvpn-860701af97b4a133ba9376b08a2fd52d21ce3e67.tar.xz mullvadvpn-860701af97b4a133ba9376b08a2fd52d21ce3e67.zip | |
Fix shadowsocks not using ip override
| -rw-r--r-- | ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift | 11 | ||||
| -rw-r--r-- | ios/MullvadRESTTests/ServerRelayTests.swift | 81 | ||||
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 4 |
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 */, |
