2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

93_Log2Syslog: contrib 5.8.0

git-svn-id: https://svn.fhem.de/fhem/trunk@19887 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2019-07-22 21:05:30 +00:00
parent efa4b13287
commit bfdfa65176

View File

@ -439,17 +439,18 @@ return;
sub Log2Syslog_Read($@) {
my ($hash,$reread) = @_;
my $socket = $hash->{SERVERSOCKET};
my ($err,$sev,$data,$ts,$phost,$pl,$ignore,$st,$len,$evt,$pen);
my ($err,$sev,$data,$ts,$phost,$pl,$ignore,$st,$len,$mlen,$evt,$pen);
return if($init_done != 1);
# maximale Länge des Syslog-Frames als Begrenzung falls kein EOF
# vom Sender initiiert wird (Endlosschleife vermeiden)
$len = 16384;
$mlen = 16384;
$len = 8192;
if($hash->{TEMPORARY}) {
# temporäre Instanz angelegt durch TcpServer_Accept
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$reread);
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$mlen,$reread);
}
my $name = $hash->{NAME};
@ -469,7 +470,7 @@ sub Log2Syslog_Read($@) {
}
if($socket) {
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$reread);
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$mlen,$reread);
}
if($data) {
@ -554,11 +555,11 @@ return;
#
###############################################################################
sub Log2Syslog_getifdata($$@) {
my ($hash,$len,$reread) = @_;
my ($hash,$len,$mlen,$reread) = @_;
my $name = $hash->{NAME};
my $socket = $hash->{SERVERSOCKET};
my $protocol = lc(AttrVal($name, "protocol", "udp"));
my $eof = 0;
my ($eof,$buforun) = (0,0);
if($hash->{TEMPORARY}) {
# temporäre Instanz abgelegt durch TcpServer_Accept
@ -568,6 +569,7 @@ sub Log2Syslog_getifdata($$@) {
my $st = ReadingsVal($name,"state","active");
my ($data,$ret);
if(!$reread) {
if($socket && $protocol =~ /udp/) {
# UDP Datagramm empfangen
Log2Syslog_Log3slog ($hash, 4, "Log2Syslog $name - ####################################################### ");
@ -609,14 +611,13 @@ sub Log2Syslog_getifdata($$@) {
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ######### new Syslog TCP Receive ######### ");
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - wait for EOF: $waitEOF, SSL: $tlsv");
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - await EOF: $waitEOF, SSL: $tlsv");
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - childname: $cname");
$st = ReadingsVal($sname,"state","active");
my $c = $hash->{CD};
if($c) {
$shash->{HELPER}{TCPPADDR} = $hash->{PEER};
if(!$reread) {
my $buf;
my $off = 0;
$ret = sysread($c, $buf, $len); # returns undef on error, 0 at end of file and Integer, number of bytes read on success.
@ -656,13 +657,16 @@ sub Log2Syslog_getifdata($$@) {
}
}
if(!$waitEOF || $hash->{SSL}) {
$buforun = (length($hash->{BUF}) >= $mlen)?1:0;
if(!$waitEOF || $hash->{SSL} || $buforun) {
$data = $hash->{BUF};
delete $hash->{BUF};
$hash = $shash;
if($data) {
my $dl = length($data);
chomp $data;
Log2Syslog_Log3slog ($shash, 2, "Log2Syslog $sname - WARNING - Buffer overrun ! Enforce parse data.") if($buforun);
Log2Syslog_Log3slog ($shash, 5, "Log2Syslog $sname - Buffer $dl chars ready to parse:\n$data");
}
return ($st,$data,$hash);
@ -676,13 +680,13 @@ sub Log2Syslog_getifdata($$@) {
}
}
}
}
} else {
$st = "error - no socket opened";
$data = '';
return ($st,$data,$hash);
}
}
return ($st,undef,$hash);
}
@ -754,8 +758,7 @@ sub Log2Syslog_parsePayload($$) {
$hash->{PROFILE} = "Automatic - detected format: $pp";
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Message format \"$pp\" detected. Try Parsing ... ");
} else {
Log2Syslog_Log3slog($name, 2, "Log2Syslog $name - ERROR - no message format detected by automatic mode. Please specify the correct one by attribute \"parseProfile\" !");
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Use raw profile ... ");
Log2Syslog_Log3slog($name, 2, "Log2Syslog $name - WARNING - no message format is detected, \"raw\" is used instead. You can specify the correct profile by attribute \"parseProfile\" !");
}
}
@ -2685,7 +2688,9 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<a name="parseProfile"></a>
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
<br>
Selection of a parse profile. The attribute is only usable for device type "Collector".
Selection of a parse profile. The attribute is only usable for device type "Collector". <br>
In mode "Automatic" the module attempts to recognize, if the received data are from type "BSD" or "IEFT".
If the type is not recognized, the "raw" format is used instead and a warning is generated in the FHEM log.
<br><br>
<ul>
@ -2908,7 +2913,8 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<br>
<b>Note:</b><br>
Please use ist with care! It can cause a loop if the sender don't send an EOF at any time.
If the sender don't use EOF signal, the data parsing is enforced after exceeding a buffer use threshold
and the warning "Buffer overrun" is issued in the FHEM Logfile.
</li>
</ul>
<br>
@ -3423,7 +3429,9 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<a name="parseProfile"></a>
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
<br>
Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar.
Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar. <br>
Im Modus "Automatic" versucht das Modul zu erkennen, ob die empfangenen Daten vom Typ "BSD" oder "IEFT" sind.
Konnte der Typ nicht erkannt werden, wird das "raw" Format genutzt und im Log eine Warnung generiert.
<br><br>
<ul>
@ -3648,7 +3656,8 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<br>
<b>Hinweis:</b><br>
Bitte mit Vorsicht verwenden! Es kann zu einer Schleife führen wenn der Sender kein EOF verwendet.
Wenn der Sender kein EOF verwendet, wird nach Überschreiten eines Puffer-Schwellenwertes das Parsing der Daten erzwungen
und die Warnung "Buffer overrun" im FHEM Log ausgegeben.
</li>
</ul>
<br>