From fbeb17c969af1495782ed335c710e9ed73f252f1 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Sat, 18 Apr 2020 07:04:54 +0000 Subject: [PATCH] 93_Log2Syslog: improve IETF octet count, some code changes for PBP git-svn-id: https://svn.fhem.de/fhem/trunk@21713 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/93_Log2Syslog.pm | 191 ++++++++++++++++++------------------- 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index efd9d2eaf..ca7650980 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - change: 93_Log2Syslog: improve IETF octet count, some code changes for PBP - feature: 66_EseraOneWire: support multi sensor 11133 - change: 59_WUup: switch to packages - feature: 72_FB_CALLMONITOR: new attribute "internal-number-filter" to diff --git a/fhem/FHEM/93_Log2Syslog.pm b/fhem/FHEM/93_Log2Syslog.pm index 672a91f67..5d2ab5713 100644 --- a/fhem/FHEM/93_Log2Syslog.pm +++ b/fhem/FHEM/93_Log2Syslog.pm @@ -51,12 +51,10 @@ BEGIN { GP_Import( qw( attr - AttrVal - readingFnAttributes + AttrVal + currlogfile # String-Variable CommandDelete defs - logInform - readyfnlist deviceEvents devspec2array DoTrigger @@ -65,11 +63,15 @@ BEGIN { init_done InternalTimer IsDisabled + logInform + logopened # String-Variable Log3 modules notifyRegexpChanged OpenLogfile - perlSyntaxCheck + perlSyntaxCheck + readyfnlist + readingFnAttributes RemoveInternalTimer readingsBeginUpdate readingsBulkUpdate @@ -83,7 +85,7 @@ BEGIN { TcpServer_Accept TcpServer_Close TcpServer_SetSSL - TimeNow + TimeNow ) ); @@ -98,12 +100,13 @@ BEGIN { qw( Initialize ) -); - + ); + } # Versions History intern: my %vNotesIntern = ( + "5.12.0" => "16.04.2020 improve IETF octet count again, internal code changes for PBP ", "5.11.0" => "14.04.2020 switch to packages, improve IETF octet count ", "5.10.3" => "11.04.2020 new reading 'Parse_Err_LastData', change octet count read ", "5.10.2" => "08.04.2020 code changes to stabilize send process, minor fixes ", @@ -331,11 +334,6 @@ my %vHintsExt_de = ( "2" => "Die Grundlagen des RFC3164 (BSD) Protokolls", "1" => "Informationen über das RFC5424 (IETF) Syslog Protokoll" ); - -############################################################################### -# Forward declarations -# -# sub Log3slog; ############################################################################### sub Initialize { @@ -416,13 +414,13 @@ sub Define { setidrex($hash,$a[4]) if($a[4]); setidrex($hash,$a[5]) if($a[5]); - eval { "Hallo" =~ m/^$hash->{HELPER}{EVNTLOG}$/ } if($hash->{HELPER}{EVNTLOG}); + eval { "Hallo" =~ m/^$hash->{HELPER}{EVNTLOG}$/x } if($hash->{HELPER}{EVNTLOG}); return "Bad regexp: $@" if($@); - eval { "Hallo" =~ m/^$hash->{HELPER}{FHEMLOG}$/ } if($hash->{HELPER}{FHEMLOG}); + eval { "Hallo" =~ m/^$hash->{HELPER}{FHEMLOG}$/x } if($hash->{HELPER}{FHEMLOG}); return "Bad regexp: $@" if($@); return "Bad regexp: starting with *" - if((defined($hash->{HELPER}{EVNTLOG}) && $hash->{HELPER}{EVNTLOG} =~ m/^\*/) || (defined($hash->{HELPER}{FHEMLOG}) && $hash->{HELPER}{FHEMLOG} =~ m/^\*/)); + if((defined($hash->{HELPER}{EVNTLOG}) && $hash->{HELPER}{EVNTLOG} =~ m/^\*/x) || (defined($hash->{HELPER}{FHEMLOG}) && $hash->{HELPER}{FHEMLOG} =~ m/^\*/x)); # nur Events dieser Devices an NotifyFn weiterleiten, NOTIFYDEV wird gesetzt wenn möglich notifyRegexpChanged($hash, $hash->{HELPER}{EVNTLOG}) if($hash->{HELPER}{EVNTLOG}); @@ -555,8 +553,7 @@ sub Read { $len = $RFC5425len{DL}; } - if($hash->{TEMPORARY}) { - # temporäre Instanz angelegt durch TcpServer_Accept + if($hash->{TEMPORARY}) { # temporäre Instanz angelegt durch TcpServer_Accept ($st,$data,$hash) = getIfData($hash,$len,$mlen,$reread); } @@ -571,8 +568,9 @@ sub Read { if($data) { # parse Payload my (@load,$ocount,$msg,$tail); - if($data =~ /^(?(\d+))\s(?.*)/s) { # Syslog Sätze mit Octet Count -> Transmission of Syslog Messages over TCP https://tools.ietf.org/html/rfc6587 + if($data =~ /^(?(\d+))\s(?.*)/sx) { # Syslog Sätze mit Octet Count -> Transmission of Syslog Messages over TCP https://tools.ietf.org/html/rfc6587 Log3slog ($hash, 4, "Log2Syslog $name - Datagramm with Octet Count detected - prepare message for Parsing ... \n"); + use bytes; my $i = 0; $ocount = $+{ocount}; $tail = $+{tail}; @@ -581,7 +579,7 @@ sub Read { if(length($tail) >= $ocount) { $tail = substr($tail,$ocount); } else { - $tail = ""; + $tail = substr($tail,length($msg)); } Log3slog ($hash, 5, "Log2Syslog $name -> OCTETCOUNT$i: $ocount"); @@ -589,7 +587,7 @@ sub Read { Log3slog ($hash, 5, "Log2Syslog $name -> LENGTH_MSG$i: ".length($msg)); Log3slog ($hash, 5, "Log2Syslog $name -> TAIL$i : $tail"); - while($tail && $tail =~ /^(?(\d+))\s(?.*)/s) { + while($tail && $tail =~ /^(?(\d+))\s(?.*)/sx) { $i++; $ocount = $+{ocount}; $tail = $+{tail}; @@ -599,7 +597,7 @@ sub Read { if(length($tail) >= $ocount) { $tail = substr($tail,$ocount); } else { - $tail = ""; + $tail = substr($tail,length($msg)); } Log3slog ($hash, 5, "Log2Syslog $name -> OCTETCOUNT$i: $ocount"); @@ -611,7 +609,7 @@ sub Read { } else { @load = split("[\r\n]",$data); } - + for my $line (@load) { next if(!$line); ($err,$ignore,$sev,$phost,$ts,$pl) = parsePayload($hash,$line); @@ -624,12 +622,12 @@ sub Read { } elsif ($ignore) { Log3slog ($hash, 5, "Log2Syslog $name -> dataset was ignored by parseFn"); } else { - return if($sevevt && $sevevt !~ m/$sev/); # Message nicht berücksichtigen + return if($sevevt && $sevevt !~ m/$sev/x); # Message nicht berücksichtigen $st = "active"; if($mevt =~ /intern/) { # kein Reading, nur Event $pl = "$phost: $pl"; Trigger($hash,$ts,$pl); - } elsif ($mevt =~ /reading/) { # Reading, Event abhängig von event-on-.* + } elsif ($mevt =~ /reading/x) { # Reading, Event abhängig von event-on-.* readingsSingleUpdate($hash, "MSG_$phost", $pl, 1); } else { # Reading ohne Event readingsSingleUpdate($hash, "MSG_$phost", $pl, 0); @@ -837,17 +835,18 @@ sub parsePayload { my $year = strftime "%Y", localtime; # aktuelles Jahr - if($pp =~ /^Automatic/) { + if($pp =~ /^Automatic/x) { Log3slog($name, 4, "Log2Syslog $name - Analyze message format automatically ..."); - $pp = "raw"; - $data =~ /^<(?\d{1,3})>(?\w{3}).*$/; - $tail = $+{tail}; + $pp = "raw"; + $data =~ /^<(?\d{1,3})>(?\w{3}).*$/x; + $prival = $+{prival}; + $tail = $+{tail}; # Test auf BSD-Format - if($tail && " Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec " =~ /\s$tail\s/) { + if($tail && " Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec " =~ /\s$tail\s/x) { $pp = "BSD"; } else { # Test auf IETF-Format - $data =~ /^((?(\d+))\s)?<(?\d{1,3})>(?\d{0,2})\s?(?\d{4}-\d{2}-\d{2})T(?