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