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(?