class DCase::Server
Attributes
crypto[RW]
Public Class Methods
new(host, crypto, config)
click to toggle source
# File lib/dcase/server.rb, line 8 def initialize(host, crypto, config) @config = config @server = UDPSocket.new @server.to_io.setsockopt(:SOCKET, :REUSEADDR, 1) @server.bind(host, @config.port) @crypto = crypto async.run end
Public Instance Methods
finalize()
click to toggle source
# File lib/dcase/server.rb, line 20 def finalize @server.close unless @server.closed? end
handle_data(data, port, addr)
click to toggle source
# File lib/dcase/server.rb, line 31 def handle_data(data, port, addr) request = UDPSocket.new request.send crypto.decrypt(data), 0, @config.dns_list.sample, 53 async.start_connect(request, port, addr) end
run()
click to toggle source
# File lib/dcase/server.rb, line 24 def run loop do data, (_, port, addr) = @server.recvfrom(16384) handle_data(data, port, addr) end end
start_connect(request, port, addr)
click to toggle source
# File lib/dcase/server.rb, line 38 def start_connect(request, port, addr) data, (_, _port, _addr) = request.recvfrom(16384) @server.send crypto.encrypt(data), 0, addr, port request.close unless request.closed? end