lib/radiustar/request.rb in radiustar-0.0.2 vs lib/radiustar/request.rb in radiustar-0.0.3
- old
+ new
@@ -2,14 +2,17 @@
require 'socket'
class Request
- def initialize(server, my_ip, dict_file = nil)
+ def initialize(server, my_ip = nil, dict_file = nil)
@dict = dict_file.nil? ? Dictionary.default : Dictionary.new(dict_file)
- @my_ip = my_ip
+
@host, @port = server.split(":")
+
+ @my_ip = my_ip || get_my_ip(@host)
+
@port = Socket.getservbyname("radius", "udp") unless @port
@port = 1812 unless @port
@port = @port.to_i # just in case
@socket = UDPSocket.open
@socket.connect(@host, @port)
@@ -58,9 +61,21 @@
end
data = @socket.recvfrom(64)
Packet.new(@dict, Process.pid & 0xff, data[0])
end
+ #looks up the source IP address with a route to the specified destination
+ def get_my_ip(dest_address)
+ orig_reverse_lookup_setting = Socket.do_not_reverse_lookup
+ Socket.do_not_reverse_lookup = true
+
+ UDPSocket.open do |sock|
+ sock.connect dest_address, 1
+ sock.addr.last
+ end
+ ensure
+ Socket.do_not_reverse_lookup = orig_reverse_lookup_setting
+ end
end
end
\ No newline at end of file