Routing script tutorial:route order Tutorial

From TBwiki
Revision as of 10:36, 20 May 2009 by 10.0.0.157 (Talk)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

route_order tutorial

'route_order' is a method implemented in the base_routing and is use to order routes. This tutorial will explain how to use the parameter for the 'route_order' method.

route_order examples


Things to know about these examples:

  • The :show_route_order method print in the output window the order of the naps.
  • A new field called 'priority' needs to be add to the routes.
  • This script will not find any route match, therefore dropping the call.

route_order setup

Routes to order:

 Calling      Called      NAP      Remapped NAP       Priority  
 5550000     2220000     sip_p1     isdn          4     
 5550000     1110000     sip_p3     sip          3     
 5550000     3330000     sip_p2     isdn_1          2     


Nap list:

 Name     
 sip_p1     
 sip_p3     
 sip_p2


The call and naps input in the test script window:

 @call_params = {:calling => '5550000', :called => '5550002', :nap => 'sip_p3'}
 @nap_list = [
   {:name => 'sip_p3'},
   {:name => 'sip_p2'},
   {:name => 'sip_p1'}
 ]


 :route_field_name parameter


 :route_field_name script example

Here how it can be order using the ':route_field_name' argument. The example script will order the routes by priority.

 require 'base_routing'
 
 class SimpleOrdering < BaseRouting
   route_order :route_field_name => :priority
   route_match :method => :show_route_order
 
   def show_route_order( route, call, nap_list )
     @local_name = "N/A"
     @local_priority =  "N/A"
     route.each do |key, value|
       case key.to_s
       when "nap"
         @local_name = value
       when "priority" 
         @local_priority = value
       else
         #puts "key = #{key}, value = #{value}"
       end
       
     end
     puts "Nap name:#{@local_name}, priority:#{@local_priority}"
     
     return false
   end
 
 end
 
 @@routing = SimpleOrdering.new
 
 
 def init_routes( routes )
   @@routing.init routes
 end
 
 def route( call, nap_list )
   puts "This script should put all the route priority order starting with the lowest."
   @@routing.route call, nap_list
 end


 :route_field_name script output

This script will not find any route match, therefore dropping the call, but it will print in the output the route ordered according to their priority. The output should look like this (if tried in the test script window).

 OUT: This script should put all the route priority order starting with the lowest.
 OUT:
 OUT: Nap name:sip_p2, priority:2
 OUT:
 OUT: Nap name:sip_p3, priority:3
 OUT:
 OUT: Nap name:sip_p1, priority:4
 OUT:


 :method parameter


 :method script example

Here how it can be order using the ':method' argument. The example script will order the routes alphabetically by nap. The example script will order the routes alphabetically by nap just like the 'proc' example.

 require 'base_routing'
 
 class SimpleMethodOrdering < BaseRouting
   route_order :method => :nap_alphabetical_order
   route_match :method => :show_route_order
 
   def nap_alphabetical_order( routes, nap_list )
       @tmp_routes = routes.sort {|x,y| x[:nap] <=> y[:nap] }
   end
 
   def show_route_order( route, call, nap_list )
     @local_name = "N/A"
     @local_priority =  "N/A"
     route.each do |key, value|
       case key.to_s
       when "nap"
         @local_name = value
       when "priority" 
         @local_priority = value
       else
         #puts "key = #{key}, value = #{value}"
       end
       
     end
     puts "Nap name:#{@local_name}, priority:#{@local_priority}"
     
     return false
   end
 
 end
 
 @@routing = SimpleMethodOrdering .new
 
 
 def init_routes( routes )
   @@routing.init routes
 end
 
 def route( call, nap_list )
   puts "This script should put all the route priority order starting with the lowest."
   @@routing.route call, nap_list
 end


 :method script output

This script will not find any route match, therefore dropping the call, but it will print in the output the route ordered alphabetically by nap. The output should look like this (if tried in the test script window).

 OUT: This script should put all the route priority order starting with the lowest.
 OUT:
 OUT: Nap name:sip_p1, priority:4
 OUT:
 OUT: Nap name:sip_p2, priority:2
 OUT:
 OUT: Nap name:sip_p3, priority:3
 OUT:


 :proc parameter


 :proc script example

Here how it can be order using the ':proc' argument. The example script will order the routes alphabetically by nap just like the 'method' example

 require 'base_routing'
 
 class SimpleProcOrdering < BaseRouting
   route_order :proc => Proc.new { |routes, nap_list|
       @tmp_routes = routes.sort {|x,y| x[:nap] <=> y[:nap] }
   }
   route_match :method => :show_route_order
 
 
   def show_route_order( route, call, nap_list )
     @local_name = "N/A"
     @local_priority =  "N/A"
     route.each do |key, value|
       case key.to_s
       when "nap"
         @local_name = value
       when "priority" 
         @local_priority = value
       else
         #puts "key = #{key}, value = #{value}"
       end
       
     end
     puts "Nap name:#{@local_name}, priority:#{@local_priority}"
     
     return false
   end
 
 end
 
 @@routing = SimpleProcOrdering .new
 
 
 def init_routes( routes )
   @@routing.init routes
 end
 
 def route( call, nap_list )
   puts "This script should put all the route priority order starting with the lowest."
   @@routing.route call, nap_list
 end


 :proc script output

This script will not find any route match, therefore dropping the call, but it will print in the output the route ordered alphabetically by nap. The output should look like this (if tried in the test script window).

 OUT: This script should put all the route priority order starting with the lowest.
 OUT:
 OUT: Nap name:sip_p1, priority:4
 OUT:
 OUT: Nap name:sip_p2, priority:2
 OUT:
 OUT: Nap name:sip_p3, priority:3
 OUT:
Personal tools