2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

01_FHEMWEB.pm: Execute data recvd via websocket as FHEM command (Forum #102291)

git-svn-id: https://svn.fhem.de/fhem/trunk@19877 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2019-07-21 10:18:14 +00:00
parent 5337400b51
commit 438e83299e

View File

@ -370,15 +370,21 @@ FW_Read($$)
}
if($hash->{websocket}) { # 59713
# https://tools.ietf.org/html/rfc6455
my $fin = (ord(substr($hash->{BUF},0,1)) & 0x80)?1:0;
my $op = (ord(substr($hash->{BUF},0,1)) & 0x0F);
my $mask = (ord(substr($hash->{BUF},1,1)) & 0x80)?1:0;
my $len = (ord(substr($hash->{BUF},1,1)) & 0x7F);
my $i = 2;
# $op: 0=>Continuation, 1=>Text, 2=>Binary, 8=>Close, 9=>Ping, 10=>Pong
if($op == 8) {
TcpServer_Close($hash, 1);
return;
} elsif($op == 9) {
return addToWritebuffer($hash, chr(0x8A).chr(0)); # Pong
}
if( $len == 126 ) {
@ -389,17 +395,21 @@ FW_Read($$)
$i += 8;
}
if( $mask ) {
$mask = substr($hash->{BUF},$i,4);
my @m;
if($mask) {
@m = unpack("C*", substr($hash->{BUF},$i,4));
$i += 4;
}
return if(length($hash->{BUF}) < $i+$len);
#my $data = substr($hash->{BUF}, $i, $len);
#for( my $i = 0; $i < $len; $i++ ) {
# substr( $data, $i, 1, substr( $data, $i, 1, ) ^ substr($mask, $i% , 1) );
#}
#Log 1, "Received via websocket: ".unpack("H*",$data);
my $data = substr($hash->{BUF}, $i, $len);
if($mask) {
my $idx = 0;
$data = pack("C*", map { $_ ^ $m[$idx++ % 4] } unpack("C*", $data));
}
$hash->{BUF} = "";
my $ret = FW_fC($data);
FW_addToWritebuffer($hash, FW_longpollInfo("JSON", $ret)."\n") if($ret);
return;
}