From 8296e34faffa2f7959b19c31218da72011fba797 Mon Sep 17 00:00:00 2001 From: Sylvain Brocard Date: Mon, 10 Sep 2018 15:21:04 +0200 Subject: [PATCH 1/2] Add support for RFC 5425 --- .../com/cloudbees/syslog/MessageFormat.java | 6 +++- .../com/cloudbees/syslog/SyslogMessage.java | 36 +++++++++++++++++++ .../cloudbees/syslog/SyslogMessageTest.java | 29 +++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cloudbees/syslog/MessageFormat.java b/src/main/java/com/cloudbees/syslog/MessageFormat.java index 5e03f09..23f336e 100644 --- a/src/main/java/com/cloudbees/syslog/MessageFormat.java +++ b/src/main/java/com/cloudbees/syslog/MessageFormat.java @@ -28,5 +28,9 @@ public enum MessageFormat { /** * RFC 5424 - The Syslog Protocol */ - RFC_5424 + RFC_5424, + /** + * RFC 5425 - Transport Layer Security (TLS) Transport Mapping for Syslog + */ + RFC_5425 } diff --git a/src/main/java/com/cloudbees/syslog/SyslogMessage.java b/src/main/java/com/cloudbees/syslog/SyslogMessage.java index f9a4e6d..8c96083 100755 --- a/src/main/java/com/cloudbees/syslog/SyslogMessage.java +++ b/src/main/java/com/cloudbees/syslog/SyslogMessage.java @@ -17,12 +17,15 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; + +import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.net.InetAddress; import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.HashSet; import java.util.Locale; @@ -249,6 +252,8 @@ public String toSyslogMessage(MessageFormat messageFormat) { return toRfc3164SyslogMessage(); case RFC_5424: return toRfc5424SyslogMessage(); + case RFC_5425: + return toRfc5425SyslogMessage(); default: throw new IllegalStateException("Unsupported message format '" + messageFormat + "'"); } @@ -269,11 +274,42 @@ public void toSyslogMessage(@Nonnull MessageFormat messageFormat, @Nonnull Write case RFC_5424: toRfc5424SyslogMessage(out); break; + case RFC_5425: + toRfc5425SyslogMessage(out); + break; default: throw new IllegalStateException("Unsupported message format '" + messageFormat + "'"); } } + /** + * Generates an RFC-5425 message. + */ + public String toRfc5425SyslogMessage() { + + StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32); + try { + toRfc5425SyslogMessage(sw); + } catch (IOException e) { + throw new IllegalStateException(e); + } + return sw.toString(); + } + + /** + * Generates an RFC-5425 message. + */ + public void toRfc5425SyslogMessage(Writer out) throws IOException { + + StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32); + toRfc5424SyslogMessage(sw); + String rfc5424Message = sw.toString(); + int length = rfc5424Message.getBytes(StandardCharsets.UTF_8).length; + out.write(String.valueOf(length)); + out.write(SP); + out.write(rfc5424Message); + } + /** * Generates an RFC-5424 message. */ diff --git a/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java b/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java index 576ed77..3f615cb 100755 --- a/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java +++ b/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java @@ -28,6 +28,35 @@ */ public class SyslogMessageTest { + @Test + public void testRfc5425Format() throws Exception { + // GIVEN + Calendar cal = Calendar.getInstance(); + cal.setTimeZone(TimeZone.getTimeZone("GMT")); + cal.set(2013, Calendar.DECEMBER, 5, 10, 30, 5); + cal.set(Calendar.MILLISECOND, 0); + + System.out.println(SyslogMessage.rfc3339DateFormat.format(cal.getTime())); + System.out.println(cal.getTimeInMillis()); + + + SyslogMessage message = new SyslogMessage() + .withTimestamp(cal.getTimeInMillis()) + .withAppName("my_app") + .withHostname("myserver.example.com") + .withFacility(Facility.USER) + .withSeverity(Severity.INFORMATIONAL) + .withTimestamp(cal.getTimeInMillis()) + .withMsg("a syslog message"); + + // WHEN + String actual = message.toRfc5425SyslogMessage(); + + // THEN + String expected = "81 <14>1 2013-12-05T10:30:05.000Z myserver.example.com my_app - - - a syslog message"; + assertThat(actual, is(expected)); + } + @Test public void testRfc5424Format() throws Exception { From e92c60c861a4800847ae143c56e4168a8741f4d0 Mon Sep 17 00:00:00 2001 From: Sylvain Brocard Date: Mon, 10 Sep 2018 15:39:29 +0200 Subject: [PATCH 2/2] Add support for RFC 5425 Remove unused import and simplify code --- src/main/java/com/cloudbees/syslog/SyslogMessage.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/cloudbees/syslog/SyslogMessage.java b/src/main/java/com/cloudbees/syslog/SyslogMessage.java index 8c96083..765ccb2 100755 --- a/src/main/java/com/cloudbees/syslog/SyslogMessage.java +++ b/src/main/java/com/cloudbees/syslog/SyslogMessage.java @@ -18,7 +18,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; import java.io.IOException; import java.io.StringWriter; @@ -301,9 +300,7 @@ public String toRfc5425SyslogMessage() { */ public void toRfc5425SyslogMessage(Writer out) throws IOException { - StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32); - toRfc5424SyslogMessage(sw); - String rfc5424Message = sw.toString(); + String rfc5424Message = toRfc5424SyslogMessage(); int length = rfc5424Message.getBytes(StandardCharsets.UTF_8).length; out.write(String.valueOf(length)); out.write(SP);