From b5e0ec9c2415538c894159bba6f739c9804af6f5 Mon Sep 17 00:00:00 2001 From: Wzut Date: Sun, 19 Mar 2017 18:28:40 +0000 Subject: [PATCH] 96_SIP: add FIFO for set call (Forum #608089) git-svn-id: https://svn.fhem.de/fhem/trunk@13738 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/96_SIP.pm | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/fhem/FHEM/96_SIP.pm b/fhem/FHEM/96_SIP.pm index 0ac126657..db782f4ef 100644 --- a/fhem/FHEM/96_SIP.pm +++ b/fhem/FHEM/96_SIP.pm @@ -53,8 +53,9 @@ use Net::Domain qw( hostfqdn ); use Blocking; # http://www.fhemwiki.de/wiki/Blocking_Call #use Data::Dumper; -my $sip_version ="V1.44 / 18.03.17"; +my $sip_version ="V1.45 / 19.03.17"; my $ua; # SIP user agent +my @fifo; my %sets = ( "call" => "", @@ -492,6 +493,13 @@ sub SIP_CALLDone($) readingsEndUpdate($hash, 1); } + my $call = shift @fifo; + if ($call) + { + my @a = split(" ",$call); + SIP_Set($hash,@a); + } + return undef; } @@ -503,7 +511,7 @@ sub SIP_Set($@) { my ($hash, @a) = @_; my $name = $hash->{NAME}; - my $cmd = $a[1]; + my $cmd = (defined($a[1])) ? $a[1] : "??"; my $subcmd; return join(" ", sort keys %sets) if ($cmd eq "?"); @@ -524,10 +532,18 @@ sub SIP_Set($@) my $nr = (defined($a[2])) ? $a[2] : ""; my $ringtime = (defined($a[3])) ? $a[3] : 30; my $msg = (defined($a[4])) ? $a[4] : AttrVal($name, "sip_audiofile_call", ""); - return "there is already a call activ with pid ".$hash->{CPID} if exists($hash->{CPID}); return "missing call number" if (!$nr); return "invalid max time : $ringtime" unless $ringtime =~ m/^\d+$/; + if (exists($hash->{CPID})) + { + my $call = join(" ",@a); + push (@fifo,$call); + Log3 $name ,4,"$name, add $call to fifo"; + return undef; + #return "there is already a call activ with pid ".$hash->{CPID}; + } + if ($msg) { #Log3 $name, 4, $name.", sending $msg to $nr, ringtime: $ringtime"; @@ -696,6 +712,8 @@ sub SIP_ListenStart($) return unless(defined($name)); my $logname = $name."[".$$."]"; my $hash = $defs{$name}; # $hash / $name gueltig in diesem Block + my $parent = getppid(); + Log3 $name,3,"$logname, my parent is $parent"; $hash->{telnetPort} = undef; my $dtmfloop; # Ende-Flag für die DTMF-Schleife @@ -851,7 +869,6 @@ sub SIP_ListenStart($) { my ($event) = @_; Log3 $name, 5, "$logname, SIP_bye : $event"; - #print Dumper($event); SIP_telnet($hash, "set $name caller none\nset $name caller_state hangup\nexit\n") ; $byebye = 1; return 1;