#!/usr/bin/perl use lib qw (/opt/synapse); use warnings; use strict; use Asterisk::AGI; use Synapse::Gateway::SIP::Reunion_Outremer_Telecom; use Synapse::Gateway::SIP::Reunion_Orange_Zinzin; use Synapse::Gateway::SIP::Reunion_SRR_Evidence; use Synapse::LCR; use Synapse::CDR_Logfile; my $agi = Asterisk::AGI->new(); $agi->ReadParse(); $agi->set_variable (DEBUG => "foo"); my $customer = $agi->get_variable ('SYNAPSE_CUSTOMER') || 'anonymous'; my $caller = $agi->get_variable ('CALLERID') || '0'; my $callee = $agi->get_variable ('SYNAPSE_CALLEE') || '0262001001'; my $mediant_ykoz_net = Synapse::Gateway::SIP::Reunion_Outremer_Telecom->new ( host => 'mediant.ykoz.net' ); my $reu1_ykoz_net = Synapse::Gateway::SIP::Reunion_Orange_Zinzin->new ( host => 'reu1.ykoz.net' ); my $reu2_ykoz_net = Synapse::Gateway::SIP::Reunion_SRR_Evidence->new ( host => 'reu2.ykoz.net' ); my $reu3_ykoz_net = Synapse::Gateway::SIP::Reunion_SRR_Evidence->new ( host => 'reu3.ykoz.net' ); my $reu4_ykoz_net = Synapse::Gateway::SIP::Reunion_SRR_Evidence->new ( host => 'reu4.ykoz.net' ); my $reu5_ykoz_net = Synapse::Gateway::SIP::Reunion_Orange_Zinzin->new ( host => 'reu5.ykoz.net' ); my $reu6_ykoz_net = Synapse::Gateway::SIP::Reunion_SRR_Evidence->new ( host => 'reu6.ykoz.net' ); my $lcr = Synapse::LCR->new ( "agi" => $agi, "customer" => $customer, "caller" => $caller, "callee" => $callee, cdr_manager => Synapse::CDR_Logfile->new() ); if ($lcr->is_reunion_fix()) { if ($lcr->is_zinzin()) { $lcr->dial ($reu1_ykoz_net, $reu5_ykoz_net, $mediant_ykoz_net); } else { $lcr->dial ($mediant_ykoz_net); } } if ($lcr->is_orange_reunion()) { if ($lcr->is_zinzin()) { $lcr->dial ($reu1_ykoz_net, $reu5_ykoz_net); } else { ; } } if ($lcr->is_sfr_reunion()) { $lcr->dial ( rearrange ($reu2_ykoz_net => 1, $reu3_ykoz_net => 1, $reu4_ykoz_net => 1, $reu6_ykoz_net => 1) ); } # fisher_yates_shuffle( \@array ) : generate a random permutation # of @array in place sub fisher_yates_shuffle { my $array = shift; my $i; for ($i = @$array; --$i; ) { my $j = int rand ($i+1); next if $i == $j; @$array[$i,$j] = @$array[$j,$i]; } } # returns a "weighted randomized" sort order depending on number of available channels # this is to be able to cope with multiple gateways of equal cost sub rearrange { my @tmp = (); while (@_) { my $obj = shift; my $times = shift; while ($times > 0) { push @tmp, $obj; $times--; } } fisher_yates_shuffle (\@tmp); my @res = (); my %seen = (); for (@tmp) { push @res, $_ unless ( $seen{$_} ); $seen{$_} = 1; } return @res; } 1;