Module: RubyDNS::Resolver::Request::TCPRequestHandler
- Defined in:
- lib/rubydns/resolver.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.open(host, port, request) ⇒ Object
174 175 176 |
# File 'lib/rubydns/resolver.rb', line 174 def self.open(host, port, request) EventMachine::connect(host, port, TCPRequestHandler, request) end |
Instance Method Details
#initialize(request) ⇒ Object
178 179 180 181 182 |
# File 'lib/rubydns/resolver.rb', line 178 def initialize(request) @request = request @buffer = nil @length = nil end |
#post_init ⇒ Object
184 185 186 187 188 189 |
# File 'lib/rubydns/resolver.rb', line 184 def post_init data = @request.packet send_data([data.bytesize].pack('n')) send_data data end |
#receive_data(data) ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/rubydns/resolver.rb', line 191 def receive_data(data) # We buffer data until we've received the entire packet: @buffer ||= BinaryStringIO.new @buffer.write(data) if @length == nil if @buffer.size > 2 @length = @buffer.string.byteslice(0, 2).unpack('n')[0] end end if @buffer.size == (@length + 2) data = @buffer.string.byteslice(2, @length) = RubyDNS::(data) if .id == @request..id @request.process_response!() else @request.logger.warn "[#{@request..id}] Received response with incorrect message id: #{.id}" if @request.logger end elsif @buffer.size > (@length + 2) @request.try_next_server! end end |