@@ -19,26 +19,87 @@ import NIO
1919import NIOHTTP1
2020import 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
44105public 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) :
0 commit comments