92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/rubydns/handler.rb', line 92
def receive_data(data)
@buffer ||= StringIO.new
@buffer.write(data)
if @length == nil
if (@buffer.size - @processed) < 2
raise LengthError.new("Malformed message smaller than two bytes received")
end
@length = @buffer.string.byteslice(@processed, 2).unpack('n')[0]
@processed += 2
end
if (@buffer.size - @processed) >= @length
data = @buffer.string.byteslice(@processed, @length)
UDPHandler.process(@server, data) do |answer|
data = answer.encode
@server.logger.debug "Writing response to client (#{data.bytesize} bytes) via TCP..."
self.send_data([data.bytesize].pack('n'))
self.send_data(data)
end
@processed += @length
@length = nil
end
end
|