#! /usr/local/bin/srinterpreter

probe = Scriptroute::Udp.new(12) 

probe.ip_dst = ARGV[0]

unreach = false

puts "Traceroute to #{ARGV[0]} (#{probe.ip_dst})"

catch(:unreachable) do 
  ( 1..64 ).each { |ttl|
    ( 1..3 ).each { |rep|
      probe.ip_ttl = ttl
      packets = Scriptroute::send_train([ Struct::DelayedPacket.new(0,probe) ])
      response = (packets[0].response) ?  packets[0].response.packet : nil
      if(response) then
        puts '%d %s %5.3f ms' % [ ttl, response.ip_src, packets[0].rtt * 1000.0 ]
        if(response.is_a?(Scriptroute::Icmp)) then
          unreach = true if(response.icmp_type == Scriptroute::Icmp::ICMP_UNREACH)
        end
      else
        puts ttl.to_s + ' *' 
      end
      $stdout.flush
    }
    throw :unreachable if(unreach)
  }
end
