Nuke the old/busted scripts - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 8b9384948db26895e2737f227c906c39d285edc9
 (DIR) parent 8d14632cd039331d86cc8de8edddd180a20b5435
 (HTM) Author: HD Moore <hd_moore@rapid7.com>
       Date:   Sat,  6 Aug 2011 04:06:26 +0000
       
       Nuke the old/busted scripts
       
       
       Diffstat:
         D bin/automatch.rb                    |      93 -------------------------------
         D bin/create_flow.rb                  |      24 ------------------------
         D bin/create_flowdb.rb                |      40 -------------------------------
         D bin/create_matches.rb               |      82 -------------------------------
         D bin/create_media.rb                 |      86 ------------------------------
         D bin/create_media_groups.rb          |      47 -------------------------------
         D bin/create_samples.rb               |      28 ----------------------------
         D bin/create_sig.rb                   |      38 -------------------------------
         D bin/create_ui.rb                    |     176 -------------------------------
         D bin/link_maltego.rb                 |     159 -------------------------------
         D bin/search_carriers.rb              |      29 -----------------------------
         D bin/search_sig.rb                   |      80 -------------------------------
         D bin/search_tones.rb                 |      52 -------------------------------
         D bin/warvox.agi                      |      25 -------------------------
         M lib/warvox.rb                       |       1 -
       
       15 files changed, 0 insertions(+), 960 deletions(-)
       ---
 (DIR) diff --git a/bin/automatch.rb b/bin/automatch.rb
       @@ -1,93 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -# 
       -
       -def usage
       -        $stderr.puts "#{$0} [warvox.db] <db-threshold> <fuzz>"
       -        exit
       -end
       -
       -threads = 2 
       -inp     = ARGV.shift || usage
       -thresh  = (ARGV.shift() || 800).to_i
       -fuzz    = (ARGV.shift() || 100).to_i
       -wdb     = WarVOX::DB.new(inp, thresh)
       -
       -# Scrub the carriers out of the pool first
       -car = wdb.find_carriers
       -car.keys.each do |k|
       -        wdb.delete(k)
       -end
       -
       -groups = 
       -{
       -        "carriers" => car.keys,
       -        "unique"   => []
       -}
       -
       -oset = wdb.keys.sort
       -iset = oset.dup
       -
       -
       -$stdout.puts car.keys.map{|x| "#{x}-100" }.join(" ") 
       -$stdout.flush
       -        
       -while(not oset.empty?)
       -
       -        s = Time.now
       -        k = oset.shift
       -        
       -        found = {}
       -        next if not iset.include?(k)
       -        
       -        iset.each do |n|
       -                next if k == n
       -                
       -                begin
       -                        res = wdb.find_sig(k,n,{ :fuzz => fuzz })
       -                rescue ::WarVOX::DB::Error
       -                end
       -                
       -                next if not res
       -                next if res[:len] < 5
       -                if(not found[n] or found[n][:len] < res[:len])
       -                        found[n] = res
       -                end
       -        end
       -
       -        if(found.empty?)
       -                next
       -        end
       -        
       -        groups[k] = [ [k, 0] ]
       -        found.keys.sort.each do |n|
       -                groups[k] <<  [n, found[n][:len]]
       -        end
       -
       -        $stdout.puts groups[k].map{|x| "#{x[0]}-#{x[1]}" }.join(" ") 
       -        $stdout.flush
       -        
       -        groups[k].unshift(k)
       -
       -        # Remove matches from the search listing
       -        iset.delete(k)
       -        found.keys.each do |k|
       -                iset.delete(k)
       -        end
       -end
       -iset.each do |k|
       -        puts "#{k}-0"
       -end
 (DIR) diff --git a/bin/create_flow.rb b/bin/create_flow.rb
       @@ -1,24 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [audio.raw]"
       -        exit
       -end
       -
       -raw = WarVOX::Audio::Raw.from_file(ARGV.shift || usage)
       -puts raw.to_flow
 (DIR) diff --git a/bin/create_flowdb.rb b/bin/create_flowdb.rb
       @@ -1,40 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [/path/to/audio/] [output.db]"
       -        exit
       -end
       -
       -src = ARGV.shift || usage
       -dst = ARGV.shift || usage
       -db  = File.new(dst, "w")
       -dir = Dir.new(src)
       -cnt = 0
       -
       -set = dir.entries.sort.grep(/\.raw/)
       -set.each do |ent|
       -        next if not ent =~ /\.raw/
       -        puts "[*] [#{sprintf("%.5d/%.5d", cnt+1, set.length)}] Processing #{ent}..."
       -        raw = WarVOX::Audio::Raw.from_file( File.join(src, ent) )
       -        db.write( ent.gsub(/\.raw|\.gz/, '') + " " + raw.to_flow + "\n" )
       -        cnt += 1
       -end
       -
       -db.close
       -
       -puts "[*] Wrote #{cnt} database entries into #{dst}"
 (DIR) diff --git a/bin/create_matches.rb b/bin/create_matches.rb
       @@ -1,82 +0,0 @@
       -#!/usr/bin/env ruby
       -
       -#
       -# Given the path to a signature file, determine the closests matching signatures
       -# within the same directory, creating a .match file.
       -#
       -
       -
       -def is_bad_sig?(sig)
       -        return true if sig == 0
       -        false
       -end
       -
       -def load_signature(data)
       -        data.split("\n").map { |line|
       -                line.strip.to_i
       -        }.reject {|sig| is_bad_sig?(sig) }
       -end
       -
       -inp = ARGV.shift || exit(1)
       -ind = ARGV.shift
       -dir = File.expand_path(inp) + "/"
       -set = {}
       -
       -d = Dir.new(dir)
       -d.entries.each do |ent|
       -        next if ent !~ /\.sigs$/
       -        name,trash = ent.split('.', 2)
       -        data       = File.read(File.join(dir, ent))
       -        set[name]  = load_signature(data)
       -        
       -        if set.keys.length % 500 == 0
       -                puts "[*] Loaded #{set.keys.length} signatures..."                
       -        end
       -end
       -d.close
       -
       -puts "[*] Finished loading #{set.keys.length} signatures..."
       -
       -max   = 10
       -cnt   = 0
       -stime = Time.now.to_f
       -
       -targs = ind ? [ind] : set.keys.sort
       -
       -while targs.length > 0
       -        jobs = []
       -
       -        while jobs.length < max
       -                targ = targs.shift
       -                break if not targ
       -                pid = fork
       -                
       -                if pid
       -                        jobs << pid
       -                        next
       -                end
       -        
       -                mine = targ
       -                msig = set[targ]
       -        
       -                exit(0) if msig.length == 0
       -                
       -                res  = []
       -                set.each_pair do |n,sig|
       -                        next if n == mine
       -                        hits = (msig & sig).length
       -                        res << [ ( hits / msig.length.to_f ) * 100.0, hits, n ]
       -                end
       -
       -                File.open(File.join(dir, mine + ".matches"), "w") do |fd|
       -                        res.sort{|a,b| b[0] <=> a[0] }.each do |r|
       -                                fd.puts "#{"%.2f" % r[0]}\t#{r[2]}"
       -                        end
       -                end
       -        
       -                exit(0)
       -        end
       -        jobs.each {|j| Process.waitpid(j) }
       -        cnt += jobs.length
       -        puts "[*] Processed #{cnt}/#{set.keys.length} in #{Time.now.to_f - stime} seconds"        
       -end
 (DIR) diff --git a/bin/create_media.rb b/bin/create_media.rb
       @@ -1,86 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [/path/to/raw/data/] <destination dir> "
       -        exit
       -end
       -
       -require "fileutils"
       -require "tempfile"
       -
       -src = ARGV.shift || usage
       -dst = ARGV.shift || File.join(File.dirname(base), '..', 'data', 'media')
       -
       -FileUtils.mkdir_p(dst)
       -
       -calls = []
       -dir = Dir.new(src)
       -dir.entries.sort.each do |ent|
       -
       -        path = File.join(src, ent)
       -        next if ent !~ /(.*)\.raw\.gz$/m
       -        num = $1
       -
       -        next if File.exist?(File.join(dst, num + ".mp3"))
       -
       -        puts "Processing #{num}..."
       -
       -        # Decompress the audio file
       -        rawfile = Tempfile.new("rawfile")
       -        datfile = Tempfile.new("datfile")
       -
       -        cnt = 0
       -        raw = WarVOX::Audio::Raw.from_file(path)
       -        rawfile.write(raw.samples.pack('v*'))
       -        datfile.write(raw.samples.map{|val| cnt +=1; "#{cnt} #{val}"}.join("\n"))
       -        rawfile.flush
       -        datfile.flush
       -
       -        # Plot samples to a graph
       -        plotter = Tempfile.new("gnuplot")
       -        
       -        plotter.puts("set ylabel \"Signal\"")
       -        plotter.puts("set xlabel \"Time\"")
       -        
       -        plotter.puts("set terminal png medium size 640,480 transparent")
       -        plotter.puts("set output \"#{dst}/#{num}_big.png\"")
       -        plotter.puts("plot \"#{datfile.path}\" using 1:2 title \"#{num}\" with lines")
       -
       -        plotter.puts("set output \"#{dst}/#{num}_big_dots.png\"")
       -        plotter.puts("plot \"#{datfile.path}\" using 1:2 title \"#{num}\" with dots")
       -                        
       -        plotter.puts("set terminal png small size 160,120 transparent")
       -        plotter.puts("set format x ''")
       -        plotter.puts("set format y ''")        
       -        plotter.puts("set output \"#{dst}/#{num}.png\"")
       -        plotter.puts("plot \"#{datfile.path}\" using 1:2 title \"#{num}\" with lines")
       -        plotter.flush
       -        
       -        system("gnuplot #{plotter.path}")
       -        File.unlink(plotter.path)
       -        File.unlink(datfile.path)
       -        plotter.close
       -        datfile.close
       -                
       -        # Generate a MP3 audio file
       -        system("sox -s -2 -r 8000 -t raw -c 1 #{rawfile.path} #{dst}/#{num}.wav")
       -        system("lame #{dst}/#{num}.wav #{dst}/#{num}.mp3 >/dev/null 2>&1")
       -        File.unlink("#{dst}/#{num}.wav")
       -        File.unlink(rawfile.path)
       -        rawfile.close
       -end
 (DIR) diff --git a/bin/create_media_groups.rb b/bin/create_media_groups.rb
       @@ -1,47 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -require 'fileutils'
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [groups_file] [media_source] [destination]"
       -        exit
       -end
       -
       -
       -group = ARGV.shift || usage()
       -src   = ARGV.shift || usage()
       -dst   = ARGV.shift || usage()
       -
       -
       -File.readlines(group).each do |line|
       -        line.strip!
       -        line.gsub!(/\-\d+/, '')
       -        bits = line.split(/\s+/)
       -
       -        
       -        gdir = File.join(dst, bits[0])
       -        FileUtils.mkdir_p(gdir)
       -        puts "Processing #{bits[0]}..."
       -        bits.each do |num|
       -                system("cp #{src}/#{num}.* #{gdir}")
       -        end
       -        
       -end
       -
       -
       -
       -FileUtils.mkdir_p(dst)
 (DIR) diff --git a/bin/create_samples.rb b/bin/create_samples.rb
       @@ -1,28 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -# 
       -
       -def usage
       -        $stderr.puts "#{$0} [audio.raw]"
       -        exit
       -end
       -
       -cnt = 0
       -raw = WarVOX::Audio::Raw.from_file(ARGV.shift || usage)
       -raw.samples.each do |val|
       -        puts "#{cnt} #{val}"
       -        cnt += 1
       -end
 (DIR) diff --git a/bin/create_sig.rb b/bin/create_sig.rb
       @@ -1,38 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -require 'yaml'
       -
       -#
       -# Script
       -# 
       -
       -def usage
       -        $stderr.puts "#{$0} [raw-file] <skip-count> <length-count>"
       -        exit(1)
       -end
       -
       -inp = ARGV.shift() || usage()
       -skp = (ARGV.shift() || 0).to_i
       -len = (ARGV.shift() || 0).to_i
       -
       -raw = WarVOX::Audio::Raw.from_file(File.expand_path(inp))
       -raw.samples = (raw.samples[skp, raw.samples.length]||[]) if skp > 0
       -raw.samples = (raw.samples[0, len]||[]) if len > 0
       -
       -if(raw.samples.length == 0)
       -        $stderr.puts "Error: the sample length is too short to create a signature"
       -        exit(1)
       -end
       -
       -
       -$stdout.puts raw.to_freq_sig_txt
 (DIR) diff --git a/bin/create_ui.rb b/bin/create_ui.rb
       @@ -1,176 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -#
       -require "fileutils"
       -require "tempfile"
       -
       -def usage
       -        "#{$0} src/ dst/"
       -        exit(0)
       -end
       -
       -src = ARGV.shift || usage
       -dst = ARGV.shift || usage
       -
       -
       -FileUtils.mkdir_p(dst)
       -FileUtils.copy(File.join(base, "ui", "player.swf"), File.join(dst, "player.swf"))
       -FileUtils.copy(File.join(base, "ui", "styles.css"), File.join(dst, "styles.css"))
       -
       -calls = []
       -dir = Dir.new(src)
       -dir.entries.sort.each do |ent|
       -
       -        path = File.join(src, ent)
       -        next if ent !~ /(.*)\.raw.gz$/m
       -        num = $1
       -
       -        calls << num
       -        if(File.exists?(File.join(dst, "#{num}.html")))
       -                puts "Skipping #{num}..."
       -                next
       -        end
       -
       -        puts "Processing #{num}..."
       -        
       -        # Decompress the audio file
       -        rawfile = Tempfile.new("rawfile")
       -        system("zcat #{path} > #{rawfile.path}")
       -
       -        # Generate data samples
       -        system("ruby #{base}/bin/sampler.rb #{rawfile.path} > #{dst}/#{num}.dat")
       -        
       -        # Plot samples to a graph
       -        plotter = Tempfile.new("gnuplot")
       -        
       -        
       -        plotter.puts("set ylabel \"Frequency\"")
       -        plotter.puts("set xlabel \"Time\"")
       -        
       -        plotter.puts("set terminal png medium size 640,480 transparent")
       -        plotter.puts("set output \"#{dst}/#{num}_big.png\"")
       -        plotter.puts("plot \"#{dst}/#{num}.dat\" using 1:2 title \"#{num}\" with lines")
       -                
       -        plotter.puts("set terminal png small size 160,120 transparent")
       -        plotter.puts("set format x ''")
       -        plotter.puts("set format y ''")        
       -        plotter.puts("set output \"#{dst}/#{num}.png\"")
       -        plotter.puts("plot \"#{dst}/#{num}.dat\" using 1:2 title \"#{num}\" with lines")
       -
       -        plotter.flush
       -        system("gnuplot #{plotter.path}")
       -        File.unlink(plotter.path)
       -        File.unlink("#{dst}/#{num}.dat")
       -        plotter.close
       -        
       -        # Detect the carrier
       -        carrier = `ruby #{base}/bin/detect_carrier.rb #{rawfile.path}`
       -        eout = File.new(File.join(dst, "#{num}.info"), "w")
       -        eout.write("#{num} #{carrier}")
       -        eout.close
       -        
       -
       -        # Generate a MP3 audio file
       -        system("sox -s -2 -r 8000 -t raw -c 1 #{rawfile.path} #{dst}/#{num}.wav")
       -        system("lame #{dst}/#{num}.wav #{dst}/#{num}.mp3 >/dev/null 2>&1")
       -        File.unlink("#{dst}/#{num}.wav")
       -        File.unlink(rawfile.path)
       -        rawfile.close
       -        
       -        # Generate the HTML
       -        html = %Q{
       -<html>
       -        <head>
       -                <title>Analysis of #{num}</title>
       -                <link rel="stylesheet" href="styles.css" type="text/css" />
       -        </head>
       -<body>
       -
       -<center>
       -
       -<h1>#{num}</h1>
       -<img src="#{num}_big.png"><br/><br/>
       -<object class="playerpreview" type="application/x-shockwave-flash" data="player.swf" width="200" height="20">
       -    <param name="movie" value="player.swf" />
       -    <param name="FlashVars" value="mp3=#{num}.mp3&amp;showstop=1&amp;showvolume=1&amp;bgcolor1=189ca8&amp;bgcolor2=085c68" />
       -</object>
       -
       -<p>#{num} - #{carrier}</p>
       -<p><a href="index.html">&lt;&lt;&lt; Back</a></p>
       -        
       -</center>
       -</body>
       -</html>        
       -        }
       -        
       -        eout = File.new(File.join(dst, "#{num}.html"), "w")
       -        eout.write(html)
       -        eout.close
       -        
       -#        break if calls.length > 10
       -end
       -
       -# Create the final output web page
       -eout = File.new(File.join(dst, "index.html"), "w")
       -
       -html = %Q{
       -<html>
       -        <head>
       -                <title>Call Analysis</title>
       -                <link rel="stylesheet" href="styles.css" type="text/css" />
       -        </head>
       -<body>
       -<center>
       -
       -<h1>Results for #{calls.length} Calls</h1>
       -<table align="center" border=0 cellspacing=0 cellpadding=6>
       -}
       -
       -max = 6
       -cnt = 0
       -calls.sort.each do |num|
       -        if(cnt == max)
       -                html << %Q{</tr>\n}
       -                cnt = 0
       -        end
       -        
       -        if(cnt == 0)
       -                html << %Q{<tr>}
       -        end
       -                
       -        live = ( File.read(File.join(dst, "#{num}.info")) =~ /CARRIER/ ) ? "carrier" : "voice"
       -        html << %Q{<td class="#{live}"><a href="#{num}.html"><img src="#{num}.png" border=0></a></td>}
       -        cnt += 1
       -end
       -
       -while(cnt < max)
       -        html << "<td>&nbsp;</td>"
       -        cnt += 1
       -end
       -html << "</tr>\n"
       -
       -html << %Q{
       -</table>
       -</center>
       -</body>
       -</html>        
       -}
       -
       -
       -eout.write(html)
       -eout.close
       -
       -puts "Completed"
 (DIR) diff --git a/bin/link_maltego.rb b/bin/link_maltego.rb
       @@ -1,159 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -require 'rexml/document'
       -
       -#
       -# Script
       -#
       -
       -#
       -# http://ctas.paterva.com/view/Specification
       -#
       -
       -def xml_results_empty
       -        root = REXML::Element.new('MaltegoMessage')
       -        xml2 = root.add_element('MaltegoTransformResponseMessage')
       -        xml2.add_element('Entities')
       -        root
       -end
       -
       -def xml_results_matches(res)
       -        root = REXML::Element.new('MaltegoMessage')
       -        xml2 = root.add_element('MaltegoTransformResponseMessage')
       -        xml3 = xml2.add_element('Entities')
       -        
       -        res.each_key do |k|
       -                num_area = k[0,3]
       -                num_city = k[3,3]
       -                num_last = k[6,4]
       -        
       -                num = num_area + " " + num_city + " " + num_last
       -                
       -                val = REXML::Element.new('Value')
       -                val.add_text(num)
       -
       -                adf = REXML::Element.new('AdditionalFields')
       -                
       -                        adf_area = REXML::Element.new('Field')
       -                        adf_area.add_attribute('Name', 'areacode')
       -                        adf_area.add_text( REXML::Text.new( num_area.to_s ) )
       -                        adf << adf_area
       -
       -                        adf_city = REXML::Element.new('Field')
       -                        adf_city.add_attribute('Name', 'citycode')
       -                        adf_city.add_text( REXML::Text.new( num_city.to_s ) )
       -                        adf << adf_city
       -
       -                        adf_last = REXML::Element.new('Field')
       -                        adf_last.add_attribute('Name', 'lastnumbers')
       -                        adf_last.add_text( REXML::Text.new( num_last.to_s ) )
       -                        adf << adf_last
       -
       -                        adf_info = REXML::Element.new('Field')
       -                        adf_info.add_attribute('Name', 'additional')
       -                        adf_info.add_text( REXML::Text.new( "Sig: " + res[k][:sig].map{|x| "#{x[0]},#{x[1]},#{x[2]}"}.join(" ") ) )
       -                        adf << adf_info
       -                                                                        
       -
       -                wgt = REXML::Element.new('Weight')
       -                wgt.add_text(  REXML::Text.new( [res[k][:len] * 10, 100].min.to_s  ) )
       -                
       -                ent = REXML::Element.new('Entity')
       -                ent.add_attribute('Type', 'PhoneNumber')
       -
       -                ent << val
       -                ent << wgt
       -                ent << adf
       -                
       -                xml3 << ent
       -        end
       -        root
       -end
       -
       -
       -# Only report each percentage once
       -@progress_done = {}
       -
       -def report_progress(pct)
       -        return if @progress_done[pct]
       -        $stderr.puts "%#{pct}"
       -        $stderr.flush
       -        @progress_done[pct] = true
       -end
       -
       -def usage
       -        $stderr.puts "#{$0} [target] [params]"
       -        exit
       -end
       -
       -#
       -# Parse input
       -#
       -
       -params = {}
       -target = ARGV.shift || usage()
       -(ARGV.shift || usage()).split('#').each do |param|
       -        k,v = param.split('=', 2)
       -        params[k] = v
       -end
       -
       -# XXX: Problematic right now
       -# target_number = params['areacode'] + params['citycode'] + params['lastnumbers']
       -
       -target_number = target.scan(/\d+/).join
       -if(target_number.length != 10)
       -        $stderr.puts "D: Only 10 digit US numbers are currently supported"
       -        $stdout.puts xml_results_empty().to_s
       -        exit        
       -end
       -
       -
       -#
       -# Search database
       -#
       -
       -carriers = {}
       -
       -data_root = File.join(File.dirname(base), '..', 'data')
       -wdb       = WarVOX::DB.new(nil)
       -
       -Dir.new(data_root).entries.grep(/\.db$/).each do |db|
       -        $stderr.puts "D: Loading #{db}..."
       -        wdb.import(File.join(data_root, db))
       -end
       -
       -# No matching number
       -if(not wdb[target_number])
       -        $stderr.puts "D: Target #{target_number} (#{target}) is not in the WarVOX database"
       -        $stdout.puts xml_results_empty().to_s
       -        exit
       -end
       -
       -found = {}
       -cnt = 0
       -wdb.each_key do |n|
       -        cnt += 1
       -        
       -        report_progress(((cnt / wdb.keys.length.to_f) * 100).to_i.to_s)
       -
       -        next if target_number == n
       -        begin
       -                res = wdb.find_sig(target_number, n, { :fuzz => 100 })
       -        rescue ::WarVOX::DB::Error
       -        end
       -        next if not res
       -        next if res[:len] < 5
       -        found[n] = res
       -end
       -
       -$stdout.puts xml_results_matches(found).to_s
 (DIR) diff --git a/bin/search_carriers.rb b/bin/search_carriers.rb
       @@ -1,29 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [warvox.db] <db-threshold>"
       -        exit
       -end
       -
       -inp     = ARGV.shift || usage
       -thresh  = (ARGV.shift() || 800).to_i
       -wdb     = WarVOX::DB.new(inp, thresh)
       -res     = wdb.find_carriers
       -res.keys.sort.each do |k|
       -        puts "#{k}\t" + res[k].map{|x| sprintf("%d@%d",x[1],x[2]) }.join(", ")
       -end
 (DIR) diff --git a/bin/search_sig.rb b/bin/search_sig.rb
       @@ -1,80 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -
       -#
       -# Script
       -# 
       -
       -inp = ARGV.shift()
       -sig = ARGV.join(' ')
       -
       -min_len = 800
       -
       -# Load the signature from the command line
       -
       -info1 = []
       -bits = sig.split(/\s+/)
       -head = bits.shift
       -bits.each do |s|
       -        inf = s.split(",")
       -        info1 << [inf[0], inf[1].to_i, inf[2].to_i]
       -end
       -
       -# Search for matching numbers
       -
       -fd = File.open(inp, "r")
       -fd.each_line do |line|
       -        data = line.strip.split(/\s+/)
       -        name = data.shift
       -
       -        # Bump the leading silence off
       -        data.shift if data[0] =~ /^L/
       -        
       -        fnd   = nil
       -        info2 = []
       -        data.each do |d|
       -                s,l,a = d.split(",")
       -                next if l.to_i < min_len
       -                info2 << [s, l.to_i, a.to_i]
       -        end
       -
       -        fuzz    = 100 #XXX read from sig
       -        idx2 = 0
       -        fnd  = nil
       -        r    = 0
       -
       -        sig = info1
       -        
       -        while (idx2 < info2.length)
       -                c = 0 
       -                0.upto(sig.length-1) do |si|
       -                        break if not info2[idx2+si]
       -                        break if not ( 
       -                                sig[si][0] == info2[idx2+si][0] and
       -                                info2[idx2 + si][1] > sig[si][1]-fuzz and
       -                                info2[idx2 + si][1] < sig[si][1]+fuzz
       -                        )
       -                        c += 1
       -                end
       -
       -                if (c > r)
       -                        r = c
       -                        fnd = sig[0, r]
       -                end        
       -                idx2 += 1
       -        end
       -
       -        if(fnd and r == sig.length)
       -                puts "MATCHED: #{name} #{r}"
       -        end
       -end
 (DIR) diff --git a/bin/search_tones.rb b/bin/search_tones.rb
       @@ -1,52 +0,0 @@
       -#!/usr/bin/env ruby
       -###################
       -
       -#
       -# Load the library path
       -# 
       -base = __FILE__
       -while File.symlink?(base)
       -        base = File.expand_path(File.readlink(base), File.dirname(base))
       -end
       -$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
       -require 'warvox'
       -require "kissfft"
       -
       -#
       -# Script
       -#
       -
       -def usage
       -        $stderr.puts "#{$0} [audio.raw] <min-power>"
       -        exit
       -end
       -
       -raw = WarVOX::Audio::Raw.from_file(ARGV.shift || usage)
       -min = (ARGV.shift || 1).to_f
       -res = KissFFT.fftr(8192, 8000, 1, raw.samples)
       -
       -tones = {}
       -res.each do |x|
       -        rank = x.sort{|a,b| a[1].to_i <=> b[1].to_i }.reverse
       -        rank[0..10].each do |t|
       -                f = t[0].round
       -                p = t[1].round
       -                next if f == 0
       -                next if p < min
       -                tones[ f ] ||= []
       -                tones[ f ] << t
       -        end
       -end
       -
       -
       -tones.keys.sort.each do |t|
       -        next if tones[t].length < 2
       -        puts "#{t}hz"
       -        tones[t].each do |x|
       -                puts "\t#{x[0]}hz @ #{x[1]}"
       -        end
       -end
       -
       -
       -
       -
 (DIR) diff --git a/bin/warvox.agi b/bin/warvox.agi
       @@ -1,25 +0,0 @@
       -#!/usr/bin/env ruby
       -
       -#
       -# This script can be used to redial an existing job through Asterix.
       -# To use this script, add an entry to extensions.conf:
       -#
       -# exten => _777.,1,Answer()
       -# exten => _777.,2,agi,warvox.agi|/warvox/data/20
       -#
       -
       -base = ARGV.shift
       -conf = {}
       -while(line = $stdin.gets)
       -        line = line.strip
       -        break if line == ""
       -        if(line =~ /^agi_([^:]+):\s(.*)/)
       -                conf[$1] = $2
       -        end
       -end
       -
       -targ = conf['extension'].sub(/^777/, '')
       -
       -$stdout.puts "EXEC MP3Player #{File.join(base,"#{targ}.mp3")}"
       -$stdout.flush
       -$stdin.gets
 (DIR) diff --git a/lib/warvox.rb b/lib/warvox.rb
       @@ -7,7 +7,6 @@ require 'warvox/config'
        require 'warvox/jobs'
        require 'warvox/phone'
        require 'warvox/audio'
       -require 'warvox/db'
        
        # Global configuration
        module WarVOX