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