Skip to content

Commit

Permalink
Merge branch 'main' into brad/url-request-rewrite
Browse files Browse the repository at this point in the history
  • Loading branch information
SlayterDev committed Dec 13, 2023
2 parents aa689ad + e4f4ae6 commit 481d389
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Sources/NetworkProtection/PacketTunnelProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -989,7 +989,7 @@ open class PacketTunnelProvider: NEPacketTunnelProvider {
}

private func handleGetServerAddress(completionHandler: ((Data?) -> Void)? = nil) {
let response = lastSelectedServerInfo?.endpoint.map { ExtensionMessageString($0.host.description) }
let response = lastSelectedServerInfo?.endpoint.map { ExtensionMessageString($0.host.hostWithoutPort) }
completionHandler?(response?.rawValue)
}

Expand Down
15 changes: 12 additions & 3 deletions Sources/NetworkProtection/WireGuardKit/Endpoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,16 @@ extension Endpoint: Hashable {
extension Endpoint: CustomStringConvertible {

public var description: String {
"\(host):\(port)"
switch host {
case .name(let hostname, _):
return "\(hostname):\(port)"
case .ipv4(let address):
return "\(address):\(port)"
case .ipv6(let address):
return "[\(address)]:\(port)"
@unknown default:
fatalError()
}
}

public init?(from string: String) {
Expand Down Expand Up @@ -80,8 +89,8 @@ extension Endpoint {
}
}

extension NWEndpoint.Host: CustomStringConvertible {
public var description: String {
extension NWEndpoint.Host {
public var hostWithoutPort: String {
switch self {
case .name(let hostname, _):
return hostname
Expand Down
73 changes: 73 additions & 0 deletions Tests/NetworkProtectionTests/EndpointTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
//
// File.swift
// DuckDuckGo
//
// Copyright © 2023 DuckDuckGo. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

import XCTest
import Network
@testable import NetworkProtection

final class EndpointTests: XCTestCase {

func testEndpointWithHostName_ShouldIncludePort() {
let endpoint = self.endpointWithHostName()
XCTAssertEqual(endpoint.description, "https://duckduckgo.com:443")
}

func testEndpointWithIPv4Address_ShouldIncludePort() {
let endpoint = self.endpointWithIPv4()
XCTAssertEqual(endpoint.description, "52.250.42.157:443")
}

func testEndpointWithIPv6Address_ShouldIncludePort() {
let endpoint = self.endpointWithIPv6()
XCTAssertEqual(endpoint.description, "[2001:db8:85a3::8a2e:370:7334]:443")
}

func testParsingEndpointFromIPv4Address() {
let address = "52.250.42.157:443"
let endpoint = Endpoint(from: address)!
XCTAssertEqual(endpoint.description, address)
}

func testParsingEndpointFromIPv6Address() {
let address = "[2001:0db8:85a3:0000:0000:8a2e:0370]:443"
let endpoint = Endpoint(from: address)!
XCTAssertEqual(endpoint.description, "2001:0db8:85a3:0000:0000:8a2e:0370:443")
}

private func endpointWithHostName() -> Endpoint {
let host = NWEndpoint.Host.name("https://duckduckgo.com", nil)
let port = NWEndpoint.Port.https
return Endpoint(host: host, port: port)
}

private func endpointWithIPv4() -> Endpoint {
let address = IPv4Address("52.250.42.157")!
let host = NWEndpoint.Host.ipv4(address)
let port = NWEndpoint.Port.https
return Endpoint(host: host, port: port)
}

private func endpointWithIPv6() -> Endpoint {
let address = IPv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")!
let host = NWEndpoint.Host.ipv6(address)
let port = NWEndpoint.Port.https
return Endpoint(host: host, port: port)
}

}

0 comments on commit 481d389

Please sign in to comment.