mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 04:36:36 +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:
parent
5337400b51
commit
438e83299e
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user