rendered paste body#!/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;