2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

HttpUtils: code for checking HTML content before the connection is closed.

Needed for FHEMWEB when noShutdown is set.


git-svn-id: https://svn.fhem.de/fhem/trunk@4817 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2014-02-06 09:07:25 +00:00
parent 357d78d795
commit e3830fc30f

View File

@ -192,7 +192,8 @@ HttpUtils_Connect2($)
$hash->{directReadFn} = sub() { $hash->{directReadFn} = sub() {
my $buf; my $buf;
my $len = sysread($hash->{conn},$buf,65536); my $len = sysread($hash->{conn},$buf,65536);
if(!defined($len) || $len <= 0) { # EOF $hash->{buf} .= $buf if(defined($len) && $len > 0);
if(!defined($len) || $len <= 0 || HttpUtils_DataComplete($hash->{buf})) {
delete($hash->{FD}); delete($hash->{FD});
delete($hash->{directReadFn}); delete($hash->{directReadFn});
delete($selectlist{$hash}); delete($selectlist{$hash});
@ -200,7 +201,6 @@ HttpUtils_Connect2($)
$hash->{callback}($hash, $err, $ret) if(!$redirect); $hash->{callback}($hash, $err, $ret) if(!$redirect);
return; return;
} }
$hash->{buf} .= $buf;
}; };
$selectlist{$hash} = $hash; $selectlist{$hash} = $hash;
InternalTimer(gettimeofday()+$hash->{timeout}, InternalTimer(gettimeofday()+$hash->{timeout},
@ -211,6 +211,18 @@ HttpUtils_Connect2($)
return undef; return undef;
} }
sub
HttpUtils_DataComplete($)
{
my ($ret) = @_;
return 0 if($ret !~ m/^(.*?)\r\n\r\n(.*)$/s);
my $hdr = $1;
my $data = $2;
return 0 if($hdr !~ m/Content-Length:\s*(\d+)/s);
return 0 if(length($data) < $1);
return 1;
}
sub sub
HttpUtils_ParseAnswer($$) HttpUtils_ParseAnswer($$)
{ {
@ -310,6 +322,7 @@ HttpUtils_BlockingGet($)
my $len = sysread($hash->{conn},$buf,65536); my $len = sysread($hash->{conn},$buf,65536);
last if(!defined($len) || $len <= 0); last if(!defined($len) || $len <= 0);
$ret .= $buf; $ret .= $buf;
last if(HttpUtils_DataComplete($ret));
} }
return HttpUtils_ParseAnswer($hash, $ret); return HttpUtils_ParseAnswer($hash, $ret);
} }