@@ -111,12 +111,22 @@ def run!
111
111
end
112
112
113
113
def process_response! ( response )
114
- if response . tc != 0
114
+ if Exception === response
115
+ @logger . warn "[#{ @message . id } ] Failure while processing response #{ exception } !" if @logger
116
+ RubyDNS . log_exception ( @logger , response ) if @logger
117
+
118
+ try_next_server!
119
+ elsif response . tc != 0
115
120
@logger . warn "[#{ @message . id } ] Received truncated response!" if @logger
116
- # We hardcode this behaviour for now.
121
+
122
+ try_next_server!
123
+ elsif response . id != @message . id
124
+ @logger . warn "[#{ @message . id } ] Received response with incorrect message id: #{ response . id } " if @request . logger
125
+
117
126
try_next_server!
118
127
else
119
128
@logger . warn "[#{ @message . id } ] Received valid response #{ response . inspect } " if @logger
129
+
120
130
succeed response
121
131
end
122
132
end
@@ -175,13 +185,11 @@ def post_init
175
185
def receive_data ( data )
176
186
# Receiving response from remote DNS server...
177
187
message = RubyDNS ::decode_message ( data )
178
-
188
+
179
189
# The message id must match, and it can't be truncated:
180
- if message . id == @request . message . id
181
- @request . process_response! ( message )
182
- else
183
- @request . logger . warn "[#{ @request . message . id } ] Received response with incorrect message id: #{ message . id } " if @request . logger
184
- end
190
+ @request . process_response! ( message )
191
+ rescue Resolv ::DNS ::DecodeError => error
192
+ @request . process_response! ( error )
185
193
end
186
194
end
187
195
@@ -220,12 +228,10 @@ def receive_data(data)
220
228
221
229
message = RubyDNS ::decode_message ( data )
222
230
223
- if message . id == @request . message . id
224
- @request . process_response! ( message )
225
- else
226
- @request . logger . warn "[#{ @request . message . id } ] Received response with incorrect message id: #{ message . id } " if @request . logger
227
- end
231
+ @request . process_response! ( message )
228
232
end
233
+ rescue Resolv ::DNS ::DecodeError => error
234
+ @request . process_response! ( error )
229
235
end
230
236
end
231
237
end
0 commit comments