All pastes #59484 Raw Edit

Something

public text v1 · immutable
#59484 ·published 2006-05-29 01:18 UTC
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;