From 81a4c4b244f2dce272d9c57c30798e17883f201c Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Mon, 4 Jan 2016 21:59:25 +0000 Subject: [PATCH] 10_ZWave.pm: sec patch (Forum #38587) git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@10361 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index cc9662cf1..36fceed12 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -2322,17 +2322,39 @@ sub ZWave_secStart($) { my ($hash) = @_; + #~ Log3 $hash->{NAME}, 5, "$hash->{NAME}: secStart called"; + + my $dt = gettimeofday(); + $hash->{secTime} = $dt; + InternalTimer($dt+7, "ZWave_secUnlock", $hash, 0); + #~ Log3 $hash->{NAME}, 5, "Timer for secUnlock set ($dt+7)"; + return if($hash->{secInProgress}); + #~ Log3 $hash->{NAME}, 5, "$hash->{NAME}: setting secInProgress"; $hash->{secInProgress} = 1; my @empty; $hash->{secStack} = \@empty; } +sub +ZWave_secUnlock($) +{ + my ($hash)= @_; + #~ Log3 $hash->{NAME}, 5, "secUnlock triggert"; + my $dt = gettimeofday(); + if ($dt > ($hash->{secTime} + 6)) { + Log3 $hash->{NAME}, 3, "secUnlock will call Zwave_secEnd"; + ZWave_secEnd($hash); + } +} + sub ZWave_secEnd($) { my ($hash) = @_; + #~ Log3 $hash->{NAME}, 5, "$hash->{NAME}: secEnd called"; return if(!$hash->{secInProgress}); + #~ Log3 $hash->{NAME}, 5, "$hash->{NAME}: secEnd removing secInProgress"; my $secStack = $hash->{secStack}; delete $hash->{secInProgress}; delete $hash->{secStack}; @@ -2756,6 +2778,7 @@ ZWave_secDecrypt($$$) if ($sequenced && $secondFrame){ ZWave_secRetrieveFirstFrame ($hash, $sequenceCounter); } + ZWave_secEnd($hash); } if ($newnonce == 1) { @@ -2976,7 +2999,13 @@ ZWave_processSendStack($) if(index($ss->[0],"sent") == 0) { shift @{$ss}; - RemoveInternalTimer($hash) if(!ZWave_isWakeUp($hash)); + if(!ZWave_isWakeUp($hash)) { + RemoveInternalTimer($hash); + + if($hash->{secInProgress}) { + InternalTimer(gettimeofday()+7, "ZWave_secUnlock", $hash, 0); + } + } } if(@{$ss} == 0) {