Skip to content

Commit 14333bd

Browse files
committed
Changed NWDNSError into an enum
1 parent 0ae0962 commit 14333bd

File tree

2 files changed

+82
-22
lines changed

2 files changed

+82
-22
lines changed

Sources/AsyncHTTPClient/NIOTransportServices/NWErrorHandler.swift

Lines changed: 80 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,87 @@ import NIO
1919
import NIOHTTP1
2020
import NIOTransportServices
2121

22-
public struct NWDNSError: Error {
23-
24-
/// DNS error type. Error type list is defined in <dns_sd.h>
25-
public let errorType: DNSServiceErrorType
26-
27-
/// actual reason, in human readable form
28-
private let reason: String
29-
30-
/// Initialise a NWDNSError
31-
/// - Parameters:
32-
/// - errorType: DNS error type
33-
/// - reason: String describing reason for error
34-
public init(_ errorType: DNSServiceErrorType, reason: String) {
35-
self.errorType = errorType
36-
self.reason = reason
37-
}
22+
/// Enum containing all the DNS errors
23+
public enum NWDNSError: Error {
24+
case noError
25+
case unknown /* 0xFFFE FFFF */
26+
case noSuchName
27+
case noMemory
28+
case badParam
29+
case badReference
30+
case badState
31+
case badFlags
32+
case unsupported
33+
case notInitialized
34+
case alreadyRegistered
35+
case nameConflict
36+
case invalid
37+
case firewall
38+
case incompatible /* client library incompatible with daemon */
39+
case badInterfaceIndex
40+
case refused
41+
case noSuchRecord
42+
case noAuth
43+
case noSuchKey
44+
case NATTraversal
45+
case doubleNAT
46+
case badTime /* Codes up to here existed in Tiger */
47+
case badSig
48+
case badKey
49+
case transient
50+
case serviceNotRunning /* Background daemon not running */
51+
case NATPortMappingUnsupported /* NAT doesn't support PCP, NAT-PMP or UPnP */
52+
case NATPortMappingDisabled /* NAT supports PCP, NAT-PMP or UPnP, but it's disabled by the administrator */
53+
case noRouter /* No router currently configured (probably no network connectivity) */
54+
case pollingMode
55+
case timeout
56+
case defunctConnection /* Connection to daemon returned a SO_ISDEFUNCT error result */
57+
case other(DNSServiceErrorType)
3858
}
3959

40-
extension NWDNSError: CustomStringConvertible {
41-
public var description: String { return reason }
60+
extension NWDNSError {
61+
/// Initialize NWDNSError from DNSServiceErrorType
62+
/// - Parameter error: error type
63+
public init(from error: DNSServiceErrorType) {
64+
let errorInt = Int(error)
65+
switch (errorInt) {
66+
case kDNSServiceErr_NoError: self = .noError
67+
case kDNSServiceErr_Unknown: self = .unknown
68+
case kDNSServiceErr_NoSuchName: self = .noSuchName
69+
case kDNSServiceErr_NoMemory: self = .noMemory
70+
case kDNSServiceErr_BadParam: self = .badParam
71+
case kDNSServiceErr_BadReference: self = .badReference
72+
case kDNSServiceErr_BadState: self = .badState
73+
case kDNSServiceErr_BadFlags: self = .badFlags
74+
case kDNSServiceErr_Unsupported: self = .unsupported
75+
case kDNSServiceErr_NotInitialized: self = .notInitialized
76+
case kDNSServiceErr_AlreadyRegistered: self = .alreadyRegistered
77+
case kDNSServiceErr_NameConflict: self = .nameConflict
78+
case kDNSServiceErr_Invalid: self = .invalid
79+
case kDNSServiceErr_Firewall: self = .firewall
80+
case kDNSServiceErr_Incompatible: self = .incompatible
81+
case kDNSServiceErr_BadInterfaceIndex: self = .badInterfaceIndex
82+
case kDNSServiceErr_Refused: self = .refused
83+
case kDNSServiceErr_NoSuchRecord: self = .noSuchRecord
84+
case kDNSServiceErr_NoAuth: self = .noAuth
85+
case kDNSServiceErr_NoSuchKey: self = .noSuchKey
86+
case kDNSServiceErr_NATTraversal: self = .NATTraversal
87+
case kDNSServiceErr_DoubleNAT: self = .doubleNAT
88+
case kDNSServiceErr_BadTime: self = .badTime
89+
case kDNSServiceErr_BadSig: self = .badSig
90+
case kDNSServiceErr_BadKey: self = .badKey
91+
case kDNSServiceErr_Transient: self = .transient
92+
case kDNSServiceErr_ServiceNotRunning: self = .serviceNotRunning
93+
case kDNSServiceErr_NATPortMappingUnsupported: self = .NATPortMappingUnsupported
94+
case kDNSServiceErr_NATPortMappingDisabled: self = .NATPortMappingDisabled
95+
case kDNSServiceErr_NoRouter: self = .noRouter
96+
case kDNSServiceErr_PollingMode: self = .pollingMode
97+
case kDNSServiceErr_Timeout: self = .timeout
98+
case kDNSServiceErr_DefunctConnection: self = .defunctConnection
99+
default:
100+
self = .other(error)
101+
}
102+
}
42103
}
43104

44105
public struct NWPOSIXError: Error {
@@ -98,7 +159,7 @@ class NWErrorHandler: ChannelInboundHandler {
98159
if let error = error as? NWError {
99160
switch error {
100161
case .dns(let errorType):
101-
return NWDNSError(errorType, reason: error.localizedDescription)
162+
return NWDNSError(from: errorType)
102163
case .tls(let status):
103164
return NWTLSError(status, reason: error.localizedDescription)
104165
case .posix(let errorCode):

Tests/AsyncHTTPClientTests/HTTPClientNIOTSTests.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,9 @@ class HTTPClientNIOTSTests: XCTestCase {
5757
do {
5858
_ = try httpClient.get(url: "http://dnsfail/").wait()
5959
XCTFail("This should have failed")
60-
} catch let error as NWDNSError {
61-
XCTAssertEqual(error.errorType, DNSServiceErrorType(kDNSServiceErr_NoSuchRecord))
60+
} catch NWDNSError.noSuchRecord {
6261
} catch {
63-
XCTFail("Error should have been NWDSNError not \(type(of:error))")
62+
XCTFail("Error should have been NWDSNError.noSuchRecord not \(error)")
6463
}
6564
}
6665

0 commit comments

Comments
 (0)