mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
96_SIP.pm : fix wrong expire age
git-svn-id: https://svn.fhem.de/fhem/trunk@15354 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
2bc8bc7cfd
commit
33848b7b77
@ -54,7 +54,7 @@ use Net::Domain qw(hostname hostfqdn);
|
||||
use Blocking; # http://www.fhemwiki.de/wiki/Blocking_Call
|
||||
#use Data::Dumper;
|
||||
|
||||
my $sip_version ="V1.6 / 22.10.17";
|
||||
my $sip_version ="V1.61 / 30.10.17";
|
||||
my $ua; # SIP user agent
|
||||
my @fifo;
|
||||
|
||||
@ -251,6 +251,7 @@ sub SIP_updateConfig($)
|
||||
BlockingKill($hash->{helper}{LISTEN_PID});
|
||||
delete $hash->{helper}{LISTEN_PID};
|
||||
delete $hash->{LPID};
|
||||
readingsSingleUpdate($hash,"listen_alive","no",1);
|
||||
Log3 $name,4,"$name, Reset Listen done";
|
||||
}
|
||||
if(defined($hash->{CPID}))
|
||||
@ -280,23 +281,28 @@ sub SIP_updateConfig($)
|
||||
$hash->{AC} = ($res) ? $res : undef;
|
||||
}
|
||||
|
||||
|
||||
if (AttrVal($name,"sip_listen", "none") ne "none")
|
||||
{
|
||||
|
||||
$error = SIP_try_listen($hash);
|
||||
if ($error)
|
||||
{
|
||||
Log3 $name, 1, $name.", listen -> $error";
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash,"state","error");
|
||||
readingsBulkUpdate($hash,"last_error",$error);
|
||||
readingsEndUpdate($hash, 1 );
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
else { readingsSingleUpdate($hash, "state","initialized",1);}
|
||||
return undef;
|
||||
if (AttrVal($name,"sip_listen", "none") ne "none")
|
||||
{
|
||||
$error = SIP_try_listen($hash);
|
||||
if ($error)
|
||||
{
|
||||
Log3 $name, 1, $name.", listen -> $error";
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash,"state","error");
|
||||
readingsBulkUpdate($hash,"last_error",$error);
|
||||
readingsBulkUpdate($hash,"listen_alive","no");
|
||||
readingsEndUpdate($hash, 1 );
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash,"state","initialized");
|
||||
readingsBulkUpdate($hash,"listen_alive","no");
|
||||
readingsEndUpdate($hash, 1 );
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
@ -304,7 +310,8 @@ sub SIP_Register($$$)
|
||||
{
|
||||
my ($hash,$port,$type) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $logname = $name."[".$$."]";
|
||||
$hash->{LPID} = $$;
|
||||
my $logname = $name."[".$hash->{LPID}."]";
|
||||
my $ip = AttrVal($name,"sip_ip","");
|
||||
return "missing attribute sip_ip" if (!$ip);
|
||||
return "this is the IP address of your registrar , not your FHEM !" if ($ip eq AttrVal($name,"sip_registrar",""));
|
||||
@ -352,9 +359,13 @@ sub SIP_Register($$$)
|
||||
Log3 $name,1,"$logname, can´t find my parent ".$hash->{parent}." in process list !";
|
||||
die;
|
||||
}
|
||||
my $reg_time = FmtDateTime(time()+$expire);
|
||||
Log3 $name,4,"$logname, register new expire : $reg_time";
|
||||
SIP_telnet($hash,"set $name state $type\nset $name listen_alive yes\nset $name expire $reg_time\nexit\n");
|
||||
|
||||
Log3 $name,4,"$logname, register new expire : ".FmtDateTime(time()+$expire);
|
||||
|
||||
if (AttrVal($name,"sip_listen","none") ne "none")
|
||||
{ SIP_telnet($hash,"set $name state $type\nset $name listen_alive PID_".$hash->{LPID}."\nset $name expire $expire\nexit\n"); }
|
||||
else
|
||||
{ SIP_telnet($hash,"set $name state $type\nexit\n"); }
|
||||
# need to refresh registration periodically
|
||||
$ua->add_timer( $expire/2, $sub_register );
|
||||
};
|
||||
@ -834,6 +845,7 @@ sub SIP_Set($@)
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash,"state","error");
|
||||
readingsBulkUpdate($hash,"last_error",$ret);
|
||||
readingsBulkUpdate($hash,"listen_alive","no");
|
||||
readingsEndUpdate($hash, 1 );
|
||||
return $ret;
|
||||
}
|
||||
@ -1414,10 +1426,13 @@ sub SIP_watch_listen($)
|
||||
|
||||
my $cmd = "ps -e | grep '".$hash->{LPID}." '";
|
||||
my $result = qx($cmd);
|
||||
my $age = int(ReadingsAge($name, "expire", 0));
|
||||
my $alive = ReadingsVal($name,"listen_alive","no");
|
||||
|
||||
if (($age >180) && ($alive eq "yes")) # nach max 150 Sekunden sollte sich der listen Prozess erneut melden
|
||||
my $age = int(ReadingsAge($name, "expire", 0));
|
||||
my $maxage = int(ReadingsNum($name,"expire",300)*0.7);
|
||||
my $alive = ReadingsVal($name,"listen_alive","no");
|
||||
my $waits = AttrVal($name, "sip_watch_listen", 60);
|
||||
|
||||
if (($age > $maxage) && ($alive ne "no")) # nach expire/2 Sekunden sollte sich der listen Prozess erneut melden
|
||||
{
|
||||
Log3 $name, 2 , "$name, expire timestamp is $age seconds old, restarting listen process";
|
||||
readingsSingleUpdate($hash,"listen_alive","no",1);
|
||||
@ -1438,7 +1453,7 @@ sub SIP_watch_listen($)
|
||||
InternalTimer(gettimeofday()+2, "SIP_try_listen", $hash, 0);
|
||||
}
|
||||
|
||||
InternalTimer(gettimeofday()+60, "SIP_watch_listen", $name, 0);
|
||||
InternalTimer(gettimeofday()+$waits, "SIP_watch_listen", $name, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user