From aab4d8368c2d4b69afdc6eb4910084b4d3b77fee Mon Sep 17 00:00:00 2001 From: CoolTux Date: Fri, 17 Nov 2023 20:26:24 +0000 Subject: [PATCH] 82_LGTV_WebOS: fix connection problem / add SSL Support git-svn-id: https://svn.fhem.de/fhem/trunk@28182 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/82_LGTV_WebOS.pm | 1 + fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/82_LGTV_WebOS.pm b/fhem/FHEM/82_LGTV_WebOS.pm index f1aa219c8..1967a60d4 100644 --- a/fhem/FHEM/82_LGTV_WebOS.pm +++ b/fhem/FHEM/82_LGTV_WebOS.pm @@ -7,6 +7,7 @@ # # Special thanks goes to comitters: # - Vitolinker / Commandref +# - ska- / SSL_startHandshake - SSL Port 3001 Support # # # This script is free software; you can redistribute it and/or modify diff --git a/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm b/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm index e8cd3c29e..11bac57dd 100644 --- a/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm +++ b/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm @@ -61,6 +61,7 @@ my $missingModul = ""; eval { require MIME::Base64; 1 } or $missingModul .= 'MIME::Base64 '; eval { require IO::Socket::INET; 1 } or $missingModul .= 'IO::Socket::INET '; +eval { use IO::Socket::SSL; 1 } or $missingModul .= 'IO::Socket::SSL '; ## no critic (Conditional "use" statement. Use "require" to conditionally include a module (Modules::ProhibitConditionalUseStatements)) eval { use Digest::SHA qw /sha1_hex/; 1 } or $missingModul .= 'Digest::SHA '; @@ -648,7 +649,21 @@ sub Open { ::Log3( $name, 4, "LGTV_WebOS ($name) - Baue Socket Verbindung auf" ); - my $socket = IO::Socket::INET->new( + # create a connecting socket + # SSL_startHandshake is dependent on the protocol: this lets us use one socket + # to work with either SSL or non-SSL sockets. + my $socket = IO::Socket::SSL->new( + PeerHost => $host, + PeerPort => 3001, + Proto => 'tcp', + SSL_startHandshake => 1, #( $proto eq 'wss' ? 1 : 0 ), + SSL_verify_mode => SSL_VERIFY_NONE, + + # Blocking => 1 + KeepAlive => 1, + Timeout => $timeout + ) + || IO::Socket::INET->new( PeerHost => $host, PeerPort => $port, Proto => 'tcp', @@ -656,7 +671,8 @@ sub Open { Timeout => $timeout ) or return ::Log3( $name, 4, - "LGTV_WebOS ($name) Couldn't connect to $host:$port" ); # open Socket + "LGTV_WebOS ($name) Couldn't connect to $host:$port/3001" ) + ; # open Socket $hash->{FD} = $socket->fileno(); $hash->{CD} = $socket; # sysread / close won't work on fileno