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:
parent
5337400b51
commit
438e83299e
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user