
| Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Utility/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Utility/vbox.pm |
package Utility::vbox;
# Vbox-Perl-Funktionen
use strict;
use Date::Format;
sub new {
my $class = shift;
my $self = {};
$self->{'COMHANDLE'} = shift;
$self->{'CALLER'} = shift;
my $o = shift;
$self->{'DIR'} = shift;
bless($self,$class);
$self->{'DIR'} = "";
$self->{'FILENAME'} = $o;
if ($o =~ /^(.*)\/(.*)\.msg$/) {
$self->{'DIR'} = $1;
$o = $2;
$self->{'FILENAME'} = $o . ".msg";
}
elsif ($o =~ /^(.*)\.msg$/) {
$o = $1;
}
$o = [split(/-/,$o)];
$self->{'ID'} = shift(@$o);
$self->{'SECTION'} = shift(@$o);
$self->{'MARK'} = [@$o];
$self->{'MAILTO'} = {};
return($self);
}
#*********************************************************************
# Die Regeln werden in zwei verschiedenen Weisen ausgewertet:
#
# 1. Wenn das aufrufende Skript ausserhalb des standard.tcl-Aufrufes
# aufgeruen wird. Dann werden die rules komplett durchlaufen
# und die einzelnen vboxgetty<nr>-Files geschrieben.
#
# 2. Wenn das aufrufende Skript von standard.tcl aufgerufen wird
# und $self->{'COMHANDLE'} damit einen Wert hat, dann
# werden nur die $self->{'MAILTO'} - Werte belegt.
sub rules {
my $self = shift;
my $text = shift;
my $dir = `pwd`;
$dir =~ s/\n//g;
my $number; my $caller; my $time; my $day; my $ring; my $mark; my $zeile;
my $section; my $o; my $id;
my $numbers = {};
my $rule1 = [];
my $rule2 = [];
foreach $zeile (split(/\n/,$text)) {
$o = "";
if ($zeile =~ /^(.*?)\#/) {
$zeile = $1;
}
if ($zeile =~ /^(.*?)--\> *(.*?) *$/) {
$zeile = $1;
$o = $2;
$o =~ s/ //g;
if ($zeile =~ /^ *(\d+)/) {
$self->{'MAILTO'}->{$1} = $o;
}
}
next if ($self->{'COMHANDLE'});
next if ($zeile !~ /^ *(\S+) +(\S+) +(\S+) +(\S+) +(\S+) *(.*?) *$/);
$number = $1;
$caller = $2;
$time = $3;
$day = $4;
$ring = $5;
$mark = $6;
while ($mark =~ s/ / /g) { 1; }
$mark = [split(/ /,$mark)];
if ($number ne "*") {
$numbers->{$number} = 1;
push(@$rule1,[$number,$caller,$time,$day,$ring,$mark]);
} else {
push(@$rule1,[$caller,$time,$day,$ring,$mark]);
}
}
return(0) if ($self->{'COMHANDLE'});
foreach $zeile (@$rule2) {
foreach $number (keys %$numbers) {
push(@$rule1,$number,@$zeile);
}
}
foreach $number (keys %$numbers) {
$section = {};
$text = "[CALLERIDS]\n";
foreach $zeile (@$rule1) {
($o,$caller,$time,$day,$ring,$mark) = @$zeile;
next if ($o ne $number);
$id = $caller;
$o = $caller;
if ($caller eq "*") { $id = "STANDARD"; $o = "-" }
if (!($section->{$caller})) {
$section->{$caller} = "[".$id."]\n";
$text = $text . $caller . " " . $o . " " .
$number . "-" . $id . "\n";
}
$section->{$caller} = $section->{$caller} .
$time . " " . $day . " " . $dir . "/" .
join("-",$number,$id,$ring,@$mark) .
".msg 90 RINGS=" . $ring . "\n";
}
foreach $caller (keys %$section) {
$text = $text . "\n[RINGS]\n* * 3\n\n" . $section->{$caller};
}
open(FFILE,">_vbox".$number.".conf");
print FFILE $text;
close(FFILE);
system("chmod a+rwx _vbox".$number.".conf");
}
return(1);
}
#*********************************************************************
sub caller { my $self = shift; return($self->{'CALLER'}); }
sub id { my $self = shift; return($self->{'ID'}); }
sub section { my $self = shift; return($self->{'SECTION'}); }
sub filename { my $self = shift; return($self->{'FILENAME'}); }
sub mark { my $self = shift; my $par = shift;
return($self->{'MARK'}->[$par-1]); }
#*********************************************************************
sub routine {
my $self = shift;
my $par = shift;
my $comhandle = $self->{'COMHANDLE'};
system("xcv1 send1_comhandle $comhandle $par");
my $erg = `xcv1 receive0_comhandle $comhandle`;
return($erg);
}
#*********************************************************************
sub stop {
my $self = shift;
my $comhandle = $self->{'COMHANDLE'};
#print STDERR $self->{'HANGUP'} . "---\n";
if ($self->{'ABBRUCH'}) {
#print "hier\n";
open(FFILE,">/tmp/vboxrestart");
print FFILE "CLEAR\n";
close(FFILE);
system("chmod a+rw /tmp/vboxrestart");
}
system("xcv1 send1_comhandle $comhandle ___STOP___");
}
#*********************************************************************
sub wait {
my $self = shift;
my $pars = join(" ",@_);
if ($self->{"HANGUP"}) { return("HANGUP"); }
$self->routine("wait");
my $erg = $self->routine($pars);
if ($erg eq "HANGUP") { $self->{'HANGUP'} = 1; return("HANGUP"); }
return($erg);
}
#*********************************************************************
sub message {
my $self = shift;
my $pars = shift;
$pars = join(" ",$self->{'DIR'}."/".$pars,@_);
if ($self->{"HANGUP"}) { return("HANGUP"); }
delete ($self->{'ABBRUCH'});
$self->routine("message");
my $erg = $self->routine($pars);
if (1 or $erg ne "OK") { $self->{'ABBRUCH'} = 1; }
if ($erg eq "HANGUP") { $self->{'HANGUP'} = 1; return("HANGUP"); }
$erg =~ s/[\*\# ]//g;
return($erg);
}
#*********************************************************************
sub record {
my $self = shift;
my $pars = join(" ",@_);
if ($self->{"HANGUP"}) { return("HANGUP"); }
my $dir = $self->{'DIR'};
$self->routine("record");
my $erg = $self->routine($pars);
print "RECORD: $erg\n";
my $erg2 = $self->{'CALLER'};
if ($erg2 == 0) { $erg2 = "unbekannt"; } else { $erg2 = "0" . $erg2; }
my $erg1 = $dir . "/" . $self->{'FILENAME'};
my $u_fax = "";
if (!($self->{'ZIEL'})) {
$self->{'ZIEL'} = `/etc/syspar UFAX`;
if ($self->{'ZIEL'}) {
$u_fax = $self->{'ZIEL'} . "/";
}
}
my $o;
my $o1 = [stat($erg1)];
$o1 = $o1->[9];
my $o2;
while (0 == 0) {
print "TIME: $o1\n";
$o2 = sprintf("%04u",(localtime($o1))[5]+1900) .
sprintf("%02u",(localtime($o1))[4]+1) .
sprintf("%02u",(localtime($o1))[3]) . "_" .
sprintf("%02u",(localtime($o1))[2]) .
sprintf("%02u",(localtime($o1))[1]) .
sprintf("%02u",(localtime($o1))[0]);
$erg2 = $o2 . ".TEL." . $self->{'ID'} . "." . $erg2;
last if (!(-f $u_fax . $erg2 . ".mp3"));
$o1 = $o1 + 1;
}
my $erg3 = $erg2;
$erg2 = $dir . "/" . $erg2;
if (-f $erg1) {
system("mv $erg1 $erg2.msg");
system("vboxtoau < $erg2.msg > $erg2.au; rm $erg2.msg");
system("sox $erg2.au -r 44100 $erg2.wav; rm $erg2.au");
if ($u_fax) {
$u_fax = "-outdir=" . $self->{'ZIEL'};
}
print("bladeenc -quit -delete $u_fax $erg2.wav > /dev/null\n");
system("bladeenc -quit -delete $u_fax $erg2.wav > /dev/null");
# Verteilung der Aufnahme
$o1 = [];
if ($u_fax) {
$u_fax = $self->{'ZIEL'} . "/";
}
system("chmod 777 " . $u_fax . $erg3 . ".mp3");
foreach $o (split(/,/,$self->{'MAILTO'}->{$self->{'ID'}})) {
print "$o\n";
if ($o =~ /\@/) {
push(@$o1,$o);
}
elsif ($o ne "DEL") {
print("cp " . $u_fax . $erg3 . ".mp3 " . $o . "\n");
system("cp " . $u_fax . $erg3 . ".mp3 " . $o);
}
}
$o = "," . $self->{'MAILTO'}->{$self->{'ID'}} . ",";
if (@$o1) {
$o1 = join(",",@$o1);
system("xcv1 fetchmail -l 1");
$erg1 = "_txt_".$$.".txt";
open(FFILE,">".$u_fax.$erg1);
print FFILE "\n\nReceived from vbox: $erg3.mp3\n\n\n";
close(FFILE);
sleep 1;
print("metasend -o " . $u_fax . "mm" . $erg1 .
" -b -S 40000000 -F info\@ift-informatik.de " .
"-m \"text/plain\" -e quoted-printable " .
"t $o1 -f " . $u_fax.$erg1 . " -s \"$erg3.mp3\" -n " .
"-m \"application/mp3\; name=$erg3.mp3\" -e base64 -f " .
$u_fax . $erg3 . ".mp3\n");
system("metasend -o " . $u_fax . "mm" . $erg1 .
" -b -S 40000000 -F info\@ift-informatik.de " .
"-m \"text/plain\" -e quoted-printable " .
"-t $o1 -f " . $u_fax.$erg1 . " -s \"$erg3.mp3\" -n " .
"-m \"application/mp3\; name=$erg3.mp3\" -e base64 -f " .
$u_fax . $erg3 . ".mp3");
sleep 1;
print("sendmail -finfo\@ift-informatik.de -t < " . $u_fax . "mm" . $erg1 . "\n");
system("sendmail -finfo\@ift-informatik.de -t < " . $u_fax . "mm" . $erg1);
$self->{'ABBRUCH'} = 1;
system("rm " . $u_fax . $erg1);
system("rm " . $u_fax . "mm" . $erg1);
}
if ($o =~ /,DEL,/) {
system("rm " . $u_fax . $erg3 . ".mp3");
}
}
if ($erg eq "HANGUP") { $self->{'HANGUP'} = 1; return("HANGUP"); }
return($erg);
}
#*********************************************************************
sub record1 {
my $self = shift;
my $datnr = shift;
my $pars = join(" ",@_);
if ($self->{"HANGUP"}) { return("HANGUP"); }
my $dir = $self->{'DIR'};
$self->routine("record");
my $erg = $self->routine($pars);
my $erg1 = $dir . "/" . $self->{'ID'} . ".msg";
opendir("DDIR",$dir);
my $entry; my $o = "";
while ($entry = readdir(DDIR)) {
if ($entry =~ /^($datnr)\-(.*)\.msg$/) {
$o = $entry;
}
elsif ($entry =~ /\-($datnr)\.msg$/) {
$o = $entry;
}
last if ($o);
}
if (!$o) {
$o = $datnr . ".msg";
}
$o = $dir . "/" . $o;
system("mv $erg1 $o");
system("chmod a+r $o");
if ($erg eq "HANGUP") { $self->{'HANGUP'} = 1; return("HANGUP"); }
return($erg);
}
#*********************************************************************
sub waitn {
my $self = shift;
my $pars = join(" ",@_);
if ($self->{"HANGUP"}) { return("HANGUP"); }
$self->routine("waitn");
my $erg = $self->routine($pars);
if ($erg =~ /HANGUP/) { $self->{'HANGUP'} = 1; return("HANGUP"); }
$erg =~ s/[\*\# ]//g;
$erg =~ s/TIMEOUT//g;
# print STDERR "$erg\n";
return($erg);
}
#*********************************************************************
sub touchtones {
my $self = shift;
my @pars = @_;
if ($self->{"HANGUP"}) { return("HANGUP"); }
my $text = "";
my $zaehler = 0;
my $o;
while (@pars) {
$zaehler = $zaehler + 1;
$o = shift(@pars);
$text = $text . " *" . $o . "#";
if ($zaehler == 7 or !(@pars)) {
$self->routine("touchtones");
$self->routine($text);
$text = "";
$zaehler = 0;
}
}
}
#*********************************************************************
sub cleartones {
my $self = shift;
$self->routine("cleartones");
}
1;