Changeset 5816

Show
Ignore:
Timestamp:
06/18/08 21:11:00 (2 months ago)
Author:
p_lindheimer
Message:

Merged revisions 5779 via svnmerge from
http://svn.freepbx.org/freepbx/trunk

........

r5779 | asternic | 2008-06-17 13:18:37 -0700 (Tue, 17 Jun 2008) | 1 line


#2782: FOP update to make flash player 9.0.124.0 and newer happy

........

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • freepbx/branches/2.4

    • Property svnmerge-integrated changed from /freepbx/branches/2.3:1-4129,4131,4133-4134,4136-4995,5088,5135,5140,5194 /freepbx/trunk:1-5453,5736,5739,5748,5750,5758,5760,5765,5771,5773,5782 to /freepbx/branches/2.3:1-4129,4131,4133-4134,4136-4995,5088,5135,5140,5194 /freepbx/trunk:1-5453,5736,5739,5748,5750,5758,5760,5765,5771,5773,5779,5782
  • freepbx/branches/2.4/amp_conf/htdocs_panel/op_server.cfg

    r2505 r5816  
    88 
    99[general] 
     10use_amportal_conf=1 
    1011; host or ip address of asterisk 
    1112manager_host=127.0.0.1       
  • freepbx/branches/2.4/amp_conf/htdocs_panel/op_server.pl

    r4993 r5816  
    1 #!/usr/bin/perl -w 
     1#!/usr/bin/perl 
    22 
    33#  Flash Operator Panel.    http://www.asternic.org 
     
    2222 
    2323use strict; 
     24use warnings; 
    2425use integer; 
    2526 
    26 use constant DEBUG         => 1
     27use constant DEBUG         => 0
    2728use constant BYTES_TO_READ => 256; 
    2829 
     
    3435use POSIX qw(setsid EWOULDBLOCK); 
    3536 
    36 my $FOP_VERSION    = "0.27"; 
     37my $FOP_VERSION    = "SVNVERSION"; 
    3738my %datos          = (); 
     39my %chanvar        = (); 
     40my %monitoring     = (); 
     41my %passvar        = (); 
    3842my %sesbot         = (); 
    3943my %linkbot        = (); 
     
    143147my %mailbox; 
    144148my %tovoicemail; 
     149my %tospy; 
    145150my %instancias; 
    146151my %agent_to_channel; 
     
    167172my $web_hostname; 
    168173my $listen_port; 
     174my $park_exten; 
     175my $parktimeout; 
    169176my $listen_addr; 
    170177my $security_code; 
     
    188195my $queue_hide; 
    189196my $enable_restart; 
     197my $passvars = ""; 
    190198my $change_led; 
    191199my $cdial_nosecure; 
     
    213221my %total_legends; 
    214222my %total_images; 
    215 my @btninclude   = (); 
    216 my @styleinclude = (); 
    217 my $command      = ""; 
    218 my $daemonized   = 0; 
    219 my $pidfile      = "/var/run/op_panel.pid"; 
    220 my $logdir       = ""; 
    221 my $confdir      = ""; 
    222 my $tab          = ""; 
     223my @serverinclude = (); 
     224my @btninclude    = (); 
     225my @styleinclude  = (); 
     226my $command       = ""; 
     227my $daemonized    = 0; 
     228my $pidfile       = "/var/run/op_panel.pid"; 
     229my $logdir        = ""; 
     230my $confdir       = ""; 
     231my $tab           = ""; 
    223232 
    224233my $PADDING = join( 
     
    393402} 
    394403 
    395 sub parse_amportal_config($)
    396     my $filename = $_[0]
     404sub parse_amportal_config
     405    my $filename = shift
    397406    my %ampconf; 
    398407 
    399     open(AMPCONF, $filename) || die "Cannot open $filename"; 
    400  
    401     while (<AMPCONF>) 
    402       { 
    403         if ($_ =~ /^\s*([a-zA-Z0-9]+)\s*=\s*(.*)\s*([;#].*)?/) { 
    404              $ampconf{$1} = $2; 
    405            } 
    406       } 
     408    open( AMPCONF, $filename ) || die "Cannot open $filename"; 
     409 
     410    while (<AMPCONF>) { 
     411        if ( $_ =~ /^\s*([a-zA-Z0-9]+)\s*=\s*(.*)\s*([;#].*)?/ ) { 
     412            $ampconf{$1} = $2; 
     413        } 
     414    } 
    407415 
    408416    close(AMPCONF); 
     
    412420sub read_server_config() { 
    413421    my $context = ""; 
     422    my @distinct_files; 
    414423    $counter_servers = -1; 
    415424 
    416425    $/ = "\n"; 
    417426 
    418     # get some variables from the amportal config 
    419     my %ampconf; 
    420     %ampconf = parse_amportal_config("/etc/amportal.conf"); 
    421  
    422     open( CONFIG, "<$directorio/op_server.cfg" ) 
    423       or die("Could not open op_server.cfg. Aborting..."); 
    424  
    425     while (<CONFIG>) { 
    426         chomp; 
    427         $_ =~ s/^\s+//g; 
    428         $_ =~ s/([^;]*)[;](.*)/$1/g; 
    429         $_ =~ s/\s+$//g; 
    430  
    431         if ( /^#/ || /^;/ || /^$/ ) { 
    432             next; 
    433         }    # Ignores comments and empty lines 
    434  
    435         if (/^\Q[\E/) { 
    436             s/\[(.*)\]/$1/g; 
    437             tr/a-z/A-Z/; 
    438             $context = $_; 
    439         } 
    440         else { 
    441             if ( $context ne "" ) { 
    442                 my ( $variable_name, $value ) = split( /=/, $_ ); 
    443                 $variable_name =~ tr/A-Z/a-z/; 
    444                 $variable_name =~ s/\s+//g; 
    445                 $value         =~ s/^\s+//g; 
    446                 $value         =~ s/\s+$//g; 
    447                 $value         =~ s/\"//g; 
    448                 $config->{$context}{$variable_name} = $value; 
    449  
    450                 if ( $variable_name eq "manager_host" ) { 
    451                     $counter_servers++; 
    452                     $manager_host[$counter_servers] = $value; 
    453                 } 
    454  
    455                 if ( $variable_name eq "manager_user" ) { 
    456                     $manager_user[$counter_servers] = $ampconf{"AMPMGRUSER"}; 
    457                 } 
    458  
    459                 if ( $variable_name eq "manager_secret" ) { 
    460                     $manager_secret[$counter_servers] = $ampconf{"AMPMGRPASS"}; 
    461                 } 
    462  
    463                 if ( $variable_name eq "manager_port" ) { 
    464                     $manager_port[$counter_servers] = $value; 
    465                 } 
    466  
    467                 if ( $variable_name eq "event_mask" ) { 
    468                     $event_mask[$counter_servers] = $value; 
    469                 } 
    470  
    471                 if ( $variable_name eq "astmanproxy_server" ) { 
    472                     push @astmanproxy_servers, $value; 
    473                 } 
    474  
    475             } 
    476         } 
    477     } 
    478     close(CONFIG); 
    479  
    480     # replace some config values by the corresponding ones from amportal 
    481                 if ( exists $ampconf{"FOPWEBADDRESS"} ) { 
    482                         $config->{"GENERAL"}{"web_hostname"} = $ampconf{"FOPWEBADDRESS"}; 
    483                 } else { 
    484                         $config->{"GENERAL"}{"web_hostname"} = $ampconf{"AMPWEBADDRESS"}; 
    485                 } 
    486     $config->{"GENERAL"}{"security_code"} = $ampconf{"FOPPASSWORD"}; 
    487     $config->{"GENERAL"}{"flash_dir"} = $ampconf{"FOPWEBROOT"}; 
     427    @distinct_files = unique(@serverinclude); 
     428 
     429    foreach my $archivo (@distinct_files) { 
     430 
     431        open( CONFIG, "<$directorio/$archivo" ) 
     432          or die("Could not open op_server.cfg. Aborting..."); 
     433 
     434        while (<CONFIG>) { 
     435            chomp; 
     436            $_ =~ s/^\s+//g; 
     437            $_ =~ s/([^;]*)[;](.*)/$1/g; 
     438            $_ =~ s/\s+$//g; 
     439 
     440            if ( /^#/ || /^;/ || /^$/ ) { 
     441                next; 
     442            }    # Ignores comments and empty lines 
     443 
     444            if (/^\Q[\E/) { 
     445                s/\[(.*)\]/$1/g; 
     446                tr/a-z/A-Z/; 
     447                $context = $_; 
     448            } 
     449            else { 
     450                if ( $context ne "" ) { 
     451                    my ( $variable_name, $value ) = split( /=/, $_ ); 
     452                    $variable_name =~ tr/A-Z/a-z/; 
     453                    $variable_name =~ s/\s+//g; 
     454                    $value         =~ s/^\s+//g; 
     455                    $value         =~ s/\s+$//g; 
     456                    $value         =~ s/\"//g; 
     457                    $config->{$context}{$variable_name} = $value; 
     458 
     459                    if ( $variable_name eq "manager_host" ) { 
     460                        $counter_servers++; 
     461                        $manager_host[$counter_servers] = $value; 
     462                    } 
     463 
     464                    if ( $variable_name eq "manager_user" ) { 
     465                        $manager_user[$counter_servers] = $value; 
     466                    } 
     467 
     468                    if ( $variable_name eq "manager_secret" ) { 
     469                        $manager_secret[$counter_servers] = $value; 
     470                    } 
     471 
     472                    if ( $variable_name eq "manager_port" ) { 
     473                        $manager_port[$counter_servers] = $value; 
     474                    } 
     475 
     476                    if ( $variable_name eq "event_mask" ) { 
     477                        $event_mask[$counter_servers] = $value; 
     478                    } 
     479 
     480                    if ( $variable_name eq "astmanproxy_server" ) { 
     481                        push @astmanproxy_servers, $value; 
     482                    } 
     483 
     484                } 
     485            } 
     486        } 
     487        close(CONFIG); 
     488    } 
     489 
     490    if ( defined( $config->{GENERAL}{use_amportal_conf} ) ) { 
     491        if ( $config->{GENERAL}{use_amportal_conf} == 1 ) { 
     492            my $freepbx_config = "/etc/amportal.conf"; 
     493            my %ampconf; 
     494 
     495            if ( -e $freepbx_config ) { 
     496                %ampconf                              = parse_amportal_config($freepbx_config); 
     497                $config->{"GENERAL"}{"web_hostname"}  = $ampconf{"AMPWEBADDRESS"}; 
     498                $config->{"GENERAL"}{"security_code"} = $ampconf{"FOPPASSWORD"}; 
     499                $config->{"GENERAL"}{"flash_dir"}     = $ampconf{"FOPWEBROOT"}; 
     500                $manager_user[0]                      = $ampconf{"AMPMGRUSER"}; 
     501                $manager_secret[0]                    = $ampconf{"AMPMGRPASS"}; 
     502            } 
     503        } 
     504    } 
    488505 
    489506    $web_hostname     = $config->{GENERAL}{web_hostname}; 
     
    513530    $enable_restart   = $config->{GENERAL}{enable_restart}; 
    514531    $defaultlanguage  = $config->{GENERAL}{language}; 
     532    $passvars         = $config->{GENERAL}{passvars}; 
     533    $park_exten       = $config->{GENERAL}{parkexten}; 
     534    $parktimeout      = $config->{GENERAL}{parktimeout}; 
    515535 
    516536    if ( $debuglevel == -1 ) { 
     
    539559 
    540560    $clid_format = $config->{GENERAL}{clid_format}; 
    541  
     561    if ( !defined($flash_dir) ) { $flash_dir = '/var/www/html' } 
    542562    $flash_file = $flash_dir . "/variables.txt"; 
    543563    push @all_flash_files, $flash_file; 
     
    588608    } 
    589609 
     610    if ( !defined $config->{GENERAL}{monitor_filename} ) { 
     611        $config->{GENERAL}{monitor_filename} = "\${UNIQUEID}"; 
     612    } 
     613 
     614    if ( !defined $config->{GENERAL}{monitor_format} ) { 
     615        $config->{GENERAL}{monitor_format} = "wav"; 
     616    } 
     617 
    590618    if ( !defined $clid_privacy ) { 
    591619        $clid_privacy = 0; 
     
    650678    if ( !defined $clid_format ) { 
    651679        $clid_format = "(xxx) xxx-xxxx"; 
     680    } 
     681 
     682    if ( !defined $passvars ) { 
     683        $passvars = ""; 
     684    } 
     685 
     686    if ( !defined $park_exten ) { 
     687        $park_exten = "700"; 
     688    } 
     689 
     690    if ( !defined $parktimeout ) { 
     691        $parktimeout = 45000; 
     692    } 
     693    else { 
     694        $parktimeout = $parktimeout * 1000; 
    652695    } 
    653696 
     
    674717 
    675718    if ( $tipo eq "buttons" ) { 
    676         if ( !inArray( $filename, @btninclude ) ) { 
     719        if ( !grep { $filename eq $_ } @btninclude ) { 
    677720            push( @btninclude, $filename ); 
    678721        } 
     
    683726    } 
    684727    if ( $tipo eq "style" ) { 
    685         if ( !inArray( $filename, @styleinclude ) ) { 
     728        if ( !grep { $filename eq $_ } @styleinclude ) { 
    686729            push( @styleinclude, $filename ); 
     730        } 
     731        else { 
     732            log_debug( "** $filename already included", 16 ) if DEBUG; 
     733            return; 
     734        } 
     735    } 
     736    if ( $tipo eq "server" ) { 
     737        if ( !grep { $filename eq $_ } @serverinclude ) { 
     738            push( @serverinclude, $filename ); 
    687739        } 
    688740        else { 
     
    11531205            my $pos = $tmphash{position}; 
    11541206            $pos =~ s/(\d+),(\d+)/$1/g; 
    1155             $tmphash{position} = "$pos,$pos"; 
     1207            my $countpos = 2; 
     1208            $tmphash{position} = ""; 
     1209            if ( defined( $tmphash{count} ) ) { 
     1210                $countpos = $tmphash{count}; 
     1211            } 
     1212            my $a = 0; 
     1213            for ( $a = 0 ; $a < $countpos ; $a++ ) { 
     1214                $tmphash{position} .= "$pos,"; 
     1215            } 
     1216            $tmphash{position} = substr( $tmphash{position}, 0, -1 ); 
    11561217            $no_counter = 1; 
    11571218        } 
     
    12181279                $buttons{ uc("$tmphash{server}^$chan_trunk") } = $pos; 
    12191280                $textos{$indice_contexto} = $tmphash{label}; 
    1220                 if ( $no_counter == 0 ) { 
     1281                if ( !defined( $tmphash{no_label_counter} ) ) { $tmphash{no_label_counter} = 0; } 
     1282                if ( $no_counter == 0 && $tmphash{no_label_counter} == 0 ) { 
    12211283                    $textos{$indice_contexto} .= " " . $count; 
    12221284                } 
     
    13761438            $tovoicemail{$indicevm} = $tmphash{voicemailext}; 
    13771439        } 
     1440        if ( defined( $tmphash{spyext} ) ) { 
     1441            my $indicespy = $lastposition{ $tmphash{panel_context} }; 
     1442            if ( $tmphash{panel_context} ne "" ) { 
     1443                $indicespy .= "\@$tmphash{panel_context}"; 
     1444            } 
     1445            $tospy{$indicespy} = $tmphash{spyext}; 
     1446        } 
     1447 
    13781448        $/ = "\0"; 
    13791449    } 
     
    15361606            my $contextoboton = $key; 
    15371607            if ( $contextoboton =~ m/\@/ ) { 
    1538                 my @parte = split( /\@/, $contextoboton, 2 ); 
    1539                 $contextoboton = $parte[1]; 
     1608                ( undef, $contextoboton ) = split( /\@/, $contextoboton, 2 ); 
    15401609                $contextoboton =~ tr/a-z/A-Z/; 
    15411610            } 
     
    15551624            my $contextoboton = $key; 
    15561625            if ( $contextoboton =~ m/\@/ ) { 
    1557                 my @parte = split( /\@/, $contextoboton, 2 ); 
    1558                 $contextoboton = $parte[1]; 
     1626                ( undef, $contextoboton ) = split( /\@/, $contextoboton, 2 ); 
    15591627                $contextoboton =~ tr/a-z/A-Z/; 
    15601628            } 
     
    15741642                my $contextoboton = $key; 
    15751643                if ( $contextoboton =~ m/\@/ ) { 
    1576                     my @parte = split( /\@/, $contextoboton, 2 ); 
    1577                     $contextoboton = $parte[1]; 
     1644                    ($contextoboton) = split( /\@/, $contextoboton, 2 ); 
    15781645                    $contextoboton =~ tr/a-z/A-Z/; 
    15791646                } 
     
    15941661                my $contextoboton = $key; 
    15951662                if ( $contextoboton =~ m/\@/ ) { 
    1596                     my @parte = split( /\@/, $contextoboton, 2 ); 
    1597                     $contextoboton = $parte[1]; 
     1663                    ( undef, $contextoboton ) = split( /\@/, $contextoboton, 2 ); 
    15981664                    $contextoboton =~ tr/a-z/A-Z/; 
    15991665                } 
     
    16141680                my $contextoboton = $key; 
    16151681                if ( $contextoboton =~ m/\@/ ) { 
    1616                     my @parte = split( /\@/, $contextoboton, 2 ); 
    1617                     $contextoboton = $parte[1]; 
     1682                    ( undef, $contextoboton ) = split( /\@/, $contextoboton, 2 ); 
    16181683                    $contextoboton =~ tr/a-z/A-Z/; 
    16191684                } 
     
    17821847    # a trunk button. 
    17831848 
    1784     log_debug( "$heading START SUB canalid $canalid contexto $contexto server $server canalsesion $canalsesion", 16 ) if DEBUG; 
     1849    log_debug( "$heading START SUB canalid $canalid contexto $contexto server $server canalsesion $canalsesion", 16 ) 
     1850      if DEBUG; 
    17851851 
    17861852    if ( $canalid eq "" ) { 
     
    18311897        } 
    18321898        log_debug( "$heading contexto $contexto", 32 ) if DEBUG; 
    1833         my ( $nada, $ses ) = separate_session_from_channel($canalsesion); 
     1899        my ( undef, $ses ) = separate_session_from_channel($canalsesion); 
    18341900        $sesion = $ses; 
    18351901    } 
     
    18531919    } 
    18541920 
    1855     my $canalconcontextosinserver = $canalconcontexto; 
    1856     $canalconcontextosinserver =~ s/(\d+)\^(.*)/$2/g; 
    18571921    if ( $canalconcontexto !~ /\^/ ) { 
    18581922        $canalconcontexto = $server . "^" . $canalconcontexto; 
     
    19041968        } 
    19051969    } 
    1906     if ( $elemento =~ /^mISDN/i ) { 
    1907         if ( $elemento !~ /XXXY/ ) { 
    1908             $elemento .= "-XXXY"; 
    1909         } 
    1910  
    1911         #    $elemento =~ s/(.*)\/(.*)/\U$1\E\/${2}-${2}/g; 
     1970    if ( $elemento =~ /^(?i:mISDN)(?!.*XXXY)/ ) { 
     1971        $elemento .= "-XXXY"; 
    19121972    } 
    19131973    elsif ( $elemento =~ /^SRX/i ) { 
     
    19151975    } 
    19161976    elsif ( $elemento =~ /^CAPI\//i ) { 
    1917         $elemento =~ s/(CAPI\/)(.*)\/(.*)-(.*)/$1$2-$4/g; 
    1918     } 
    1919  
     1977        $elemento =~ s/(CAPI\/)(.*)\/.*-(.*)/$1$2-$3/g; 
     1978    } 
     1979 
     1980    $elemento =~ s/^asyncgoto\///gi; 
    19201981    $elemento =~ s/(.*)[-\/](.*)/$1\t$2/g; 
    19211982    log_debug( "$heading elemento2 $elemento", 32 ) if DEBUG; 
    19221983    my $canal  = $1; 
    19231984    my $sesion = $2; 
    1924     log_debug( "$heading canal $canal sesion $sesion", 32 ) if DEBUG; 
    19251985 
    19261986    if ( defined($canal) && defined($sesion) ) { 
    19271987        $canal =~ tr/a-z/A-Z/; 
    19281988        $elemento = $canal . "\t" . $sesion; 
     1989        log_debug( "$heading canal $canal sesion $sesion", 32 ) if DEBUG; 
    19291990    } 
    19301991    $elemento =~ s/IAX2\[(.*)@(.*)\]\t(.*)/IAX2\[$1\]\t$3/; 
    19311992    $elemento =~ s/IAX2\/(.*)@(.*)\t(.*)/IAX2\/$1\t$3/; 
    19321993 
    1933     my @partes = split( /\t/, $elemento ); 
    1934     return @partes; 
     1994    return split( /\t/, $elemento ); 
    19351995} 
    19361996 
     
    19572017sub erase_instances_for_trunk_buttons { 
    19582018 
    1959     my $canalid          = shift; 
    1960     my $canal            = shift; 
    1961     my $server           = shift; 
    1962     my $canalidsinserver = ""; 
     2019    my $canalid = shift; 
     2020    my $canal   = shift; 
     2021    my $server  = shift; 
    19632022    my $canalglobal; 
    1964     my $valor; 
    1965     my @new     = (); 
    19662023    my $heading = "** ERASE_INSTANCE_TRUNK"; 
    19672024 
    1968     $canalidsinserver = $canalid; 
    1969     $canalid          = "$server^$canalid"; 
     2025    my $solocanal = $canalid; 
     2026    $solocanal =~ s/[^\w]//g; 
     2027 
     2028    $canalid = "$server^$canalid"; 
    19702029    $canalid =~ s/(.*)<(.*)>/$1/g;    #discards ZOMBIE or MASQ 
    19712030 
     
    19772036    $canalglobal =~ s/IAX2\[(.*)@(.*)\]/IAX2\[$1\]/g; 
    19782037 
    1979     my ( $nada, $contexto ) = split( /\&/, $canal ); 
    1980     if ( !defined($contexto) ) { $contexto = ""; } 
    1981  
    1982     my $canalconcontexto = ""; 
    1983     if ( $contexto ne "" ) { 
    1984         $canalconcontexto = "$canalglobal&$contexto"; 
    1985         $contexto         = "&$contexto"; 
    1986     } 
    1987     else { 
    1988         $canalconcontexto = $canalglobal; 
    1989         $contexto         = ""; 
    1990     } 
     2038    my ( undef, $contexto ) = split( /\&/, $canal ); 
     2039    $contexto = $contexto ? "&$contexto" : ""; 
    19912040 
    19922041    my $sesiontemp = $canalid; 
     
    19942043    log_debug( "$heading looking for $canalid on instancias to erase it", 128 ) if DEBUG; 
    19952044 
    1996     foreach my $key1 ( sort ( keys(%instancias) ) ) { 
    1997         foreach my $key2 ( sort ( keys( %{ $instancias{$key1} } ) ) ) { 
    1998             if ( $key2 eq $canalid ) { 
    1999                 delete $instancias{$key1}{$key2}; 
    2000                 log_debug( "$heading Erasing $canalid from instanacias!", 128 ) if DEBUG; 
    2001             } 
    2002         } 
     2045    if ( $canal =~ m/^DID|^CLID/ ) { 
     2046        $canal =~ s/(.*)=.*/$1/g; 
     2047        $canalid = $server . "^" . $canal . "-" . $solocanal; 
     2048    } 
     2049    foreach my $key1 ( keys(%instancias) ) { 
     2050        delete $instancias{$key1}{$canalid}; 
     2051        log_debug( "$heading Erasing $canalid from instanacias!", 128 ) if DEBUG; 
    20032052    } 
    20042053} 
     
    20172066    } 
    20182067 
    2019     my ( $nada1, $contexto1 ) = split( /\&/, $nroboton ); 
     2068    my ( undef, $contexto1 ) = split( /\&/, $nroboton ); 
    20202069    if ( !defined($contexto1) ) { $contexto1 = ""; } 
    20212070 
     
    20332082            my @linkbotones = find_panel_buttons( $canal1, $canalsesion, $server ); 
    20342083            foreach my $cual (@linkbotones) { 
    2035                 my ( $nada2, $contexto2 ) = split( /\&/, $cual ); 
     2084                my ( undef, $contexto2 ) = split( /\&/, $cual ); 
    20362085                if ( !defined($contexto2) ) { $contexto2 = ""; } 
    20372086                if ( $contexto1 eq $contexto2 ) { 
     
    21012150    log_debug( "$heading borro cache_hit($indice_cache)", 128 ) if DEBUG; 
    21022151    delete $cache_hit{$indice_cache}; 
     2152    delete $monitoring{$canalsesion}; 
    21032153    if ( keys(%cache_hit) ) { 
    21042154        for ( keys %cache_hit ) { 
     
    21762226                        log_debug( "** Found a match $canalid=$val ($quehay) - Cleared!", 16 ) if DEBUG; 
    21772227                        delete $datos{$quehay}; 
     2228                        delete $chanvar{$quehay}; 
     2229                        delete $passvar{$quehay}; 
    21782230                    } 
    21792231                } 
     
    22012253    # Removes the context if its set 
    22022254 
    2203     my @pedazos = split( /&/, $canal ); 
    2204     $canal = $pedazos[0]; 
     2255    ($canal) = split( /&/, $canal ); 
    22052256 
    22062257    # Checks if the channel name has an equal sign 
     
    22532304    my $server  = ""; 
    22542305 
    2255     my @pedazos = split( /&/, $canal ); 
    2256     $canal = $pedazos[0]; 
     2306    ($canal) = split( /&/, $canal ); 
    22572307 
    22582308    if ( $canal =~ /\^/ ) { 
    2259         @pedazos = split( /\^/, $canal ); 
    2260         $server  = $pedazos[0]; 
    2261         $canal   = $pedazos[1]; 
     2309        ( $server, $canal ) = split( /\^/, $canal ); 
    22622310    } 
    22632311 
     
    22962344    print_datos(1); 
    22972345 
    2298     my @pedazos = split( /&/, $canal ); 
    2299     $canal = $pedazos[0]; 
     2346    ($canal) = split( /&/, $canal ); 
    23002347 
    23012348    if ( $canal =~ /\^/ ) { 
    2302         @pedazos = split( /\^/, $canal ); 
    2303         $server  = $pedazos[0]; 
    2304         $canal   = $pedazos[1]; 
     2349        ( $server, $canal ) = split( /\^/, $canal ); 
    23052350    } 
    23062351 
     
    23232368                $canalaqui = 1; 
    23242369            } 
    2325             if ( $key =~ /^Server/i && $val eq $server ) { 
     2370            if ( $key =~ /^Server/i && ( $val eq $server || $server eq "-1" ) ) { 
    23262371                $serveraqui = 1; 
    23272372                log_debug( "$heading server coincide $server = $val\n", 16 ) if DEBUG; 
     
    23642409    my $heading       = "** FIND_PANEL_BUT"; 
    23652410    my $calleridnum   = "noexiste"; 
     2411    my $didnum        = "noexiste"; 
    23662412    my %trunk_matched = (); 
    23672413 
     
    23752421 
    23762422    my $uniqueid = find_uniqueid( $canalsesion, $server ); 
    2377     if ( $uniqueid ne "" ) { 
    2378         if ( defined( $datos{$uniqueid}{"CallerID"} ) ) { 
    2379             $calleridnum = $datos{$uniqueid}{"CallerID"}; 
     2423    if ($uniqueid) { 
     2424        if ( defined( $datos{$uniqueid}{CallerID} ) ) { 
     2425            $calleridnum = $datos{$uniqueid}{CallerID}; 
     2426        } 
     2427        if (   defined( $datos{$uniqueid}{Extension} ) 
     2428            && defined( $datos{$uniqueid}{AppData} ) 
     2429            && $datos{$uniqueid}{AppData} =~ m/^FROM_DID/ ) 
     2430        { 
     2431            $didnum = $datos{$uniqueid}{"Extension"}; 
    23802432        } 
    23812433    } 
     
    24952547        # Attemp to match a button from cache 
    24962548        $indice_cache = $canalsesion . "-" . $canal . "-" . $server; 
    2497         if ( !defined( $cache_hit{$indice_cache} ) ) { 
     2549        if ( !defined( $cache_hit{$indice_cache} ) || $didnum ne "noexiste" ) { 
    24982550            log_debug( "$heading CACHE MISS $indice_cache", 32 ) if DEBUG; 
    24992551            for ( keys %buttons ) { 
    25002552                $server     = $server_original; 
    25012553                $canalfinal = ""; 
    2502                 my ( $nada, $contexto ) = split( "\&", $_ ); 
     2554                my ( undef, $contexto ) = split( "\&", $_ ); 
    25032555                if ( !defined($contexto) ) { $contexto = ""; } 
    25042556                if ( $contexto ne "" ) { $contexto = "&" . $contexto; } 
     
    25282580                    } 
    25292581                } 
     2582                elsif ( $_ =~ /^$server\^CLID\/\Q$calleridnum\E=/ ) { 
     2583                    my $solocanal = $canalsesion; 
     2584                    $solocanal =~ s/[^\w]//g; 
     2585                    my $tcanal = "CLID/" . $calleridnum . "-" . $solocanal; 
     2586                    if ( !exists( $trunk_matched{"$server^CLID/$calleridnum"} ) ) { 
     2587                        $canalfinal = get_next_trunk_button( $tcanal, $contexto, $server, $tcanal ); 
     2588                        if ( $canalfinal ne "" ) { 
     2589                            log_debug( "$heading clid match trunk ( $_ )  $canal $contexto", 32 ) if DEBUG; 
     2590                            $trunk_matched{"$server^CLID/$calleridnum"} = 1; 
     2591                            $canalfinal =~ s/(.*)\^(.*)/$2/g; 
     2592                        } 
     2593                    } 
     2594                } 
    25302595                elsif ( $_ =~ /^$server\^CLID\/\Q$calleridnum\E\&?/ ) { 
    2531  
    25322596                    log_debug( "$heading clid match ( $_ )  $canal $contexto", 32 ) if DEBUG; 
    25332597                    $canalfinal = "CLID/$calleridnum"; 
     2598                } 
     2599                elsif ( $_ =~ /^$server\^DID\/\Q$didnum\E=/ ) { 
     2600                    my $solocanal = $canalsesion; 
     2601                    $solocanal =~ s/[^\w]//g; 
     2602                    my $tcanal = "DID/" . $didnum . "-" . $solocanal; 
     2603                    if ( !exists( $trunk_matched{"$server^DID/$didnum"} ) ) { 
     2604                        $canalfinal = get_next_trunk_button( $tcanal, $contexto, $server, $tcanal ); 
     2605                        if ( $canalfinal ne "" ) { 
     2606                            log_debug( "$heading did match trunk ( $_ )  $canal $contexto", 32 ) if DEBUG; 
     2607                            $trunk_matched{"$server^DID/$didnum"} = 1; 
     2608                            $canalfinal =~ s/(.*)\^(.*)/$2/g; 
     2609                        } 
     2610                    } 
     2611                } 
     2612                elsif ( $_ =~ /^$server\^DID\/\Q$didnum\E\&?/ ) { 
     2613                    log_debug( "$heading did match ( $_ )  $canal $contexto", 32 ) if DEBUG; 
     2614                    $canalfinal = "DID/$didnum"; 
    25342615                } 
    25352616 
     
    25592640            $canalfinal = ""; 
    25602641 
    2561             my $nada1      = ""; 
    25622642            my $contextemp = ""; 
    25632643            my %contextosencontrados; 
    25642644            for my $val (@canales) { 
    2565                 ( $nada1, $contextemp ) = split( "&", $val ); 
     2645                ( undef, $contextemp ) = split( "&", $val ); 
    25662646                if ( !defined($contextemp) ) { $contextemp = ""; } 
    25672647                $contextosencontrados{"&$contextemp"} = 1; 
     
    26772757    while ( my ( $key, $val ) = each(%bloque) ) { 
    26782758        if ( defined($val) ) { 
    2679             $val =~ s/(.*)\s+$/$1/g
     2759            $val =~ s/\s+$//
    26802760        } 
    26812761        else { 
     
    26852765    } 
    26862766 
     2767    if ( defined( $hash_temporal{Application} ) ) { 
     2768 
     2769        # Chanvar hash stores the complete list of channel variables 
     2770        # that are "SET" in the dialplan for a given Uniqueid 
     2771        if ( $hash_temporal{Application} eq "Set" ) { 
     2772            my @vardata = split( /\|/, $hash_temporal{AppData} ); 
     2773            foreach my $vara (@vardata) { 
     2774                my ( $vari, $valu ) = split( /=/, $vara ); 
     2775                $vari =~ s/^_.?//g; 
     2776                $chanvar{ $hash_temporal{Uniqueid} }{$vari} = $valu; 
     2777            } 
     2778        } 
     2779    } 
    26872780    if ( defined( $hash_temporal{Channel} ) ) { 
    26882781        if ( $hash_temporal{Channel} =~ /^Agent/ ) { 
     
    27242817        while ( my ( $key, $val ) = each(%hash_temporal) ) { 
    27252818            if ( defined($val) && $val =~ /\^/ ) { 
    2726                 my @partes = split( /\^/, $val, 2 ); 
    2727                 $hash_temporal{$key} = $partes[0]; 
    2728                 my $resto_de_parametros = $partes[1]; 
    2729                 @partes = split( /\^/, $resto_de_parametros ); 
     2819 
     2820                #my @partes = split( /\^/, $val, 2 ); 
     2821                #$hash_temporal{$key} = $partes[0]; 
     2822                #my $resto_de_parametros = $partes[1]; 
     2823                ( $hash_temporal{$key}, my $resto ) = split( /\^/, $val, 2 ); 
     2824                my @partes = split( /\^/, $resto ); 
    27302825                foreach my $value (@partes) { 
    27312826                    my @partes2 = split( /: /, $value ); 
     
    27872882    if ( defined( $hash_temporal{"ActionID"} ) ) { 
    27882883        if ( $hash_temporal{"ActionID"} =~ /^timeout/i ) { 
    2789             my @partes = split( /\|/, $hash_temporal{"ActionID"} ); 
    2790             $canalid  = $partes[1]; 
    2791             $timeout  = $partes[2]; 
     2884            ( $canalid, $timeout ) = split( /\|/, $hash_temporal{"ActionID"} ); 
    27922885            $evento   = "Timeout"; 
    27932886            $unico_id = "YYYY-$server"; 
     
    28252918    } 
    28262919 
     2920    # Convert Asterisk 1.4 Originate responses to 1.2 format so attendant transfers work 
     2921    if ( $evento eq "OriginateResponse" ) { 
     2922        if ( $hash_temporal{Response} eq "Success" ) { 
     2923            $evento = "OriginateSuccess"; 
     2924        } 
     2925        else { 
     2926            $evento = "OriginateFailure"; 
     2927        } 
     2928    } 
     2929 
     2930    # Convert Asterisk 1.4 ParkedCalltimeout to UnParkedCall 
     2931    if ( $evento eq "ParkedCallTimeOut" ) { 
     2932        $evento = "UnParkedCall"; 
     2933    } 
     2934 
    28272935    $evento =~ s/UserEvent//g; 
    2828     if    ( $evento =~ /Newchannel/ )           { $evento = "newchannel"; } 
    2829     elsif ( $evento =~ /Newcallerid/ )          { $evento = "newcallerid"; } 
    2830     elsif ( $evento =~ /^Status$/ )             { $evento = "status"; } 
    2831     elsif ( $evento =~ /^StatusComplete/ )      { $evento = "statuscomplete"; } 
    2832     elsif ( $evento =~ /Newexten/ )             { $evento = "newexten"; } 
    2833     elsif ( $evento =~ /^ParkedCall$/ )         { $evento = "parkedcall"; } 
    2834     elsif ( $evento =~ /^UnParkedCall$/ )       { $evento = "unparkedcall"; } 
    2835     elsif ( $evento =~ /Newstate/ )             { $evento = "newstate"; } 
    2836     elsif ( $evento =~ /Hangup/ )               { $evento = "hangup"; } 
    2837     elsif ( $evento =~ /Rename/ )               { $evento = "rename"; } 
    2838     elsif ( $evento =~ /MessageWaiting/ )       { $evento = "voicemail"; } 
    2839     elsif ( $evento =~ /Regstatus/ )            { $evento = "regstatus"; } 
    2840     elsif ( $evento =~ /^Unlink/ )              { $evento = "unlink"; } 
    2841     elsif ( $evento =~ /QueueParams/ )          { $evento = "queueparams"; } 
    2842     elsif ( $evento =~ /PeerEntry/ )            { $evento = "peerentry"; } 
    2843     elsif ( $evento =~ /QueueEntry/ )           { $evento = "queueentry"; } 
    2844     elsif ( $evento =~ /^QueueMember$/ )        { $evento = "queuemember"; } 
    2845     elsif ( $evento =~ /^QueueMemberStatus$/ )  { $evento = "queuememberstatus"; } 
    2846     elsif ( $evento =~ /QueueMemberAdded/ )     { $evento = "queuememberadded"; } 
    2847     elsif ( $evento =~ /QueueMemberRemoved/ )   { $evento = "queuememberremoved"; } 
    2848     elsif ( $evento =~ /QueueMemberPaused/ )    { $evento = "queuememberpaused"; } 
    2849     elsif ( $evento =~ /QueueStatus$/ )         { $evento = "queuestatus"; } 
    2850     elsif ( $evento =~ /QueueStatusComplete/ )  { $evento = "queuestatuscomplete"; } 
    2851     elsif ( $evento =~ /^Link/ )                { $evento = "link"; } 
    2852     elsif ( $evento =~ /^Join/ )                { $evento = "join"; } 
    2853     elsif ( $evento =~ /^MeetmeJoin/ )          { $evento = "meetmejoin"; } 
    2854     elsif ( $evento =~ /^MeetmeLeave/ )         { $evento = "meetmeleave"; } 
    2855     elsif ( $evento =~ /^meetmemute/ )          { $evento = "meetmemute"; } 
    2856     elsif ( $evento =~ /^meetmeunmute/ )        { $evento = "meetmeunmute"; } 
    2857     elsif ( $evento =~ /^Agentlogin/ )          { $evento = "agentlogin"; } 
    2858     elsif ( $evento =~ /^RefreshQueue/ )        { $evento = "refreshqueue"; } 
    2859     elsif ( $evento =~ /^Timeout/ )             { $evento = "timeout"; } 
    2860     elsif ( $evento =~ /^AgentCalled/ )         { $evento = "agentcalled"; } 
    2861     elsif ( $evento =~ /^AgentConnect/ )        { $evento = "agentconnect"; } 
    2862     elsif ( $evento =~ /^AgentComplete/ )       { $evento = "agentcomplete"; } 
    2863     elsif ( $evento =~ /^Agentcallbacklogin/ )  { $evento = "agentcblogin"; } 
    2864     elsif ( $evento =~ /^Agentcallbacklogoff/ ) { $evento = "agentlogoff"; } 
    2865     elsif ( $evento =~ /^Agentlogoff/ )         { $evento = "agentlogoff"; } 
    2866     elsif ( $evento =~ /^IsMeetmeMember/ )      { $evento = "fakeismeetmemember"; } 
    2867     elsif ( $evento =~ /^PeerStatus/ )          { $evento = "peerstatus"; } 
    2868     elsif ( $evento =~ /^Leave/ )               { $evento = "leave"; } 
    2869     elsif ( $evento =~ /^FOP_Popup/i )          { $evento = "foppopup"; } 
    2870     elsif ( $evento =~ /^FOP_LedColor/i )       { $evento = "fopledcolor"; } 
    2871     elsif ( $evento =~ /^Dial/ )                { $evento = "dial"; } 
    2872     elsif ( $evento =~ /^ASTDB/ )               { $evento = "astdb"; } 
    2873     elsif ( $evento =~ /^DNDState/ )            { $evento = "zapdndstate"; } 
    2874     elsif ( $evento =~ /^ZapShowChannels$/ )    { $evento = "zapdndstate"; } 
    2875     elsif ( $evento =~ /^ExtensionStatus$/ )    { $evento = "extensionstatus"; } 
    2876     elsif ( $evento =~ /^OriginateSuccess$/ )   { $evento = "originatesuccess"; } 
    2877     elsif ( $evento =~ /^OriginateFailure$/ )   { $evento = "originatefailure"; } 
    2878     elsif ( $evento =~ /^ChannelReload$/ )      { $evento = "channelreload"; } 
     2936    if    ( $evento =~ /Newchannel/ )                  { $evento = "newchannel"; } 
     2937    elsif ( $evento =~ /Newcallerid/ )                 { $evento = "newcallerid"; } 
     2938    elsif ( $evento =~ /^Status$/ )                    { $evento = "status"; } 
     2939    elsif ( $evento =~ /^StatusComplete/ )             { $evento = "statuscomplete"; } 
     2940    elsif ( $evento =~ /Newexten/ )                    { $evento = "newexten"; } 
     2941    elsif ( $evento =~ /^ParkedCall$/ )                { $evento = "parkedcall"; } 
     2942    elsif ( $evento =~ /^UnParkedCall$/ )              { $evento = "unparkedcall"; } 
     2943    elsif ( $evento =~ /^virtualvaletparkedcall/i )    { $evento = "parkedcall"; } 
     2944    elsif ( $evento =~ /^virtualvaletunparkedcall$/i ) { $evento = "unparkedcall"; } 
     2945    elsif ( $evento =~ /Newstate/ )                    { $evento = "newstate"; } 
     2946    elsif ( $evento =~ /Hangup/ )                      { $evento = "hangup"; } 
     2947    elsif ( $evento =~ /Rename/ )                      { $evento = "rename"; } 
     2948    elsif ( $evento =~ /MessageWaiting/ )              { $evento = "voicemail"; } 
     2949    elsif ( $evento =~ /Regstatus/ )                   { $evento = "regstatus"; } 
     2950    elsif ( $evento =~ /^Unlink/ )                     { $evento = "unlink"; } 
     2951    elsif ( $evento =~ /QueueParams/ )                 { $evento = "queueparams"; } 
     2952    elsif ( $evento =~ /PeerEntry/ )                   { $evento = "peerentry"; } 
     2953    elsif ( $evento =~ /QueueEntry/ )                  { $evento = "queueentry"; } 
     2954    elsif ( $evento =~ /^QueueMember$/ )               { $evento = "queuemember"; } 
     2955    elsif ( $evento =~ /^QueueMemberStatus$/ )         { $evento = "queuememberstatus"; } 
     2956    elsif ( $evento =~ /QueueMemberAdded/ )            { $evento = "queuememberadded"; } 
     2957    elsif ( $evento =~ /QueueMemberRemoved/ )          { $evento = "queuememberremoved"; } 
     2958    elsif ( $evento =~ /QueueMemberPaused/ )           { $evento = "queuememberpaused"; } 
     2959    elsif ( $evento =~ /QueueStatus$/ )                { $evento = "queuestatus"; } 
     2960    elsif ( $evento =~ /QueueStatusComplete/ )         { $evento = "queuestatuscomplete"; } 
     2961    elsif ( $evento =~ /^Link/ )                       { $evento = "link"; } 
     2962    elsif ( $evento =~ /^Join/ )                       { $evento = "join"; } 
     2963    elsif ( $evento =~ /^MeetmeJoin/ )                 { $evento = "meetmejoin"; } 
     2964    elsif ( $evento =~ /^MeetmeLeave/ )                { $evento = "meetmeleave"; } 
     2965    elsif ( $evento =~ /^meetmemute/ )                 { $evento = "meetmemute"; } 
     2966    elsif ( $evento =~ /^meetmeunmute/ )               { $evento = "meetmeunmute"; } 
     2967    elsif ( $evento =~ /^Agentlogin/ )                 { $evento = "agentlogin"; } 
     2968    elsif ( $evento =~ /^Agents$/ )                    { $evento = "agents"; } 
     2969    elsif ( $evento =~ /^RefreshQueue/ )               { $evento = "refreshqueue"; } 
     2970    elsif ( $evento =~ /^Timeout/ )                    { $evento = "timeout"; } 
     2971    elsif ( $evento =~ /^AgentCalled/ )                { $evento = "agentcalled"; } 
     2972    elsif ( $evento =~ /^AgentConnect/ )               { $evento = "agentconnect"; } 
     2973    elsif ( $evento =~ /^AgentComplete/ )              { $evento = "agentcomplete"; } 
     2974    elsif ( $evento =~ /^Agentcallbacklogin/ )         { $evento = "agentcblogin"; } 
     2975    elsif ( $evento =~ /^Agentcallbacklogoff/ )        { $evento = "agentlogoff"; } 
     2976    elsif ( $evento =~ /^Agentlogoff/ )                { $evento = "agentlogoff"; } 
     2977    elsif ( $evento =~ /^IsMeetmeMember/ )             { $evento = "fakeismeetmemember"; } 
     2978    elsif ( $evento =~ /^PeerStatus/ )                 { $evento = "peerstatus"; } 
     2979    elsif ( $evento =~ /^Leave/ )                      { $evento = "leave"; } 
     2980    elsif ( $evento =~ /^FOP_Popup/i )                 { $evento = "foppopup"; } 
     2981    elsif ( $evento =~ /^FOP_LedColor/i )              { $evento = "fopledcolor"; } 
     2982    elsif ( $evento =~ /^Dial/ )                       { $evento = "dial"; } 
     2983    elsif ( $evento =~ /^ASTDB/ )                      { $evento = "astdb"; } 
     2984    elsif ( $evento =~ /^DNDState/ )                   { $evento = "zapdndstate"; } 
     2985    elsif ( $evento =~ /^ZapShowChannels$/ )           { $evento = "zapdndstate"; } 
     2986    elsif ( $evento =~ /^ExtensionStatus$/ )           { $evento = "extensionstatus"; } 
     2987    elsif ( $evento =~ /^OriginateSuccess$/ )          { $evento = "originatesuccess"; } 
     2988    elsif ( $evento =~ /^OriginateFailure$/ )          { $evento = "originatefailure"; } 
     2989    elsif ( $evento =~ /^ChannelReload$/ )             { $evento = "channelreload"; } 
     2990    elsif ( $evento =~ /^response-/ )                  { $evento = "monitor"; } 
    28792991    else { log_debug( "$heading No event match ($evento)", 32 ); } 
    28802992 
     
    28953007    } 
    28963008 
    2897     if ( $evento eq "channelreload" ) { 
     3009    if ( $evento eq "monitor" ) { 
     3010        my $botinro = ""; 
     3011        ( undef, $estado_final, undef ) = split( /-/, $hash_temporal{ActionID}, 3 ); 
     3012        ( $canal, undef ) = separate_session_from_channel( $hash_temporal{Channel} ); 
     3013        $canalid = $hash_temporal{Channel}; 
     3014        $estado_final =~ tr/A-Z/a-z/; 
     3015    } 
     3016    elsif ( $evento eq "channelreload" ) { 
    28983017 
    28993018        # Event: ChannelReload 
     
    29173036                my $indice = $hash_temporal{Uniqueid} . "-" . $hash_temporal{Server}; 
    29183037                if ( exists( $datos{"$indice"} ) ) { 
    2919                     log_debug( "** ATTENDANT we had that uniqueid before, extract the channel from there", 16 ) if DEBUG; 
     3038