@@ -19,26 +19,87 @@ import NIO
19
19
import NIOHTTP1
20
20
import NIOTransportServices
21
21
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 )
38
58
}
39
59
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
+ }
42
103
}
43
104
44
105
public struct NWPOSIXError : Error {
@@ -98,7 +159,7 @@ class NWErrorHandler: ChannelInboundHandler {
98
159
if let error = error as? NWError {
99
160
switch error {
100
161
case . dns( let errorType) :
101
- return NWDNSError ( errorType , reason : error . localizedDescription )
162
+ return NWDNSError ( from : errorType )
102
163
case . tls( let status) :
103
164
return NWTLSError ( status, reason: error. localizedDescription)
104
165
case . posix( let errorCode) :
0 commit comments