Repository: camel
Updated Branches:
  refs/heads/master 5db09a809 -> 808b0176e


- Added support for rfc5424 Syslog messages
- Added support for sending and receiving syslog messages using rfc 
5426/rfc6587 (syslog over SSL/TCP)


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/372ab5b5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/372ab5b5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/372ab5b5

Branch: refs/heads/master
Commit: 372ab5b54dc0c0a8c5a9218629dca0a3f5db3017
Parents: 5ab32ac
Author: svenrienstra <sven.riens...@topicus.nl>
Authored: Fri May 30 11:28:19 2014 +0200
Committer: svenrienstra <sven.riens...@topicus.nl>
Committed: Fri May 30 11:28:19 2014 +0200

----------------------------------------------------------------------
 .../syslog/Rfc3164SyslogConverter.java          | 270 --------------
 .../syslog/Rfc3164SyslogDataFormat.java         |  68 ----
 .../component/syslog/Rfc5424SyslogMessage.java  |  76 ++++
 .../camel/component/syslog/SyslogConverter.java | 371 +++++++++++++++++++
 .../component/syslog/SyslogDataFormat.java      |  70 ++++
 .../camel/component/syslog/SyslogMessage.java   |  12 +-
 .../component/syslog/netty/Rfc5426Encoder.java  |  38 ++
 .../syslog/netty/Rfc5426FrameDecoder.java       | 100 +++++
 .../services/org/apache/camel/TypeConverter     |   2 +-
 .../services/org/apache/camel/dataformat/syslog |   2 +-
 .../syslog/AutomatedConversionTest.java         |  30 +-
 .../component/syslog/MinaDataFormatTest.java    |   2 +-
 .../syslog/MinaManyUDPMessagesTest.java         |   2 +-
 .../component/syslog/NettyDataFormatTest.java   |   2 +-
 .../syslog/NettyManyUDPMessagesTest.java        |   2 +-
 .../syslog/NettyRfc5426LongMessageTest.java     |  88 +++++
 .../component/syslog/NettyRfc5426Test.java      |  91 +++++
 .../component/syslog/SyslogSpringMinaTest.java  |   2 +-
 18 files changed, 865 insertions(+), 363 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogConverter.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogConverter.java
deleted file mode 100644
index e65684e..0000000
--- 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogConverter.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.syslog;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.camel.Converter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Converter
-public final class Rfc3164SyslogConverter {
-
-    private static final Logger LOG = 
LoggerFactory.getLogger(Rfc3164SyslogConverter.class);
-
-    private static enum MONTHS {
-        jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
-    }
-
-    private static Map<String, MONTHS> monthValueMap = new HashMap<String, 
MONTHS>() {
-        private static final long serialVersionUID = 1L;
-        {
-            put("jan", MONTHS.jan);
-            put("feb", MONTHS.feb);
-            put("mar", MONTHS.mar);
-            put("apr", MONTHS.apr);
-            put("may", MONTHS.may);
-            put("jun", MONTHS.jun);
-            put("jul", MONTHS.jul);
-            put("aug", MONTHS.aug);
-            put("sep", MONTHS.sep);
-            put("oct", MONTHS.oct);
-            put("nov", MONTHS.nov);
-            put("dec", MONTHS.dec);
-        }
-    };
-
-    private Rfc3164SyslogConverter() {
-        //Utility class
-    }
-
-    @Converter
-    public static String toString(SyslogMessage message) {
-        StringBuilder sbr = new StringBuilder();
-        sbr.append("<");
-        if (message.getFacility() == null) {
-            message.setFacility(SyslogFacility.USER);
-        }
-        if (message.getSeverity() == null) {
-            message.setSeverity(SyslogSeverity.INFO);
-        }
-        if (message.getHostname() == null) {
-            //This is massively ugly..
-            try {
-                message.setHostname(InetAddress.getLocalHost().toString());
-            } catch (UnknownHostException e) {
-                message.setHostname("UNKNOWN_HOST");
-            }
-        }
-        sbr.append(message.getFacility().ordinal() * 8 + 
message.getSeverity().ordinal());
-        sbr.append(">");
-        if (message.getTimestamp() == null) {
-            message.setTimestamp(new Date());
-        }
-
-        //SDF isn't going to help much here.
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(message.getTimestamp());
-
-        String firstLetter = 
MONTHS.values()[cal.get(Calendar.MONTH)].toString().substring(0, 1);  // Get 
first letter
-        String remainder = 
MONTHS.values()[cal.get(Calendar.MONTH)].toString().substring(1);    // Get 
remainder of word.
-        String capitalized = firstLetter.toUpperCase() + 
remainder.toLowerCase();
-
-        sbr.append(capitalized);
-        sbr.append(" ");
-
-        if (cal.get(Calendar.DAY_OF_MONTH) < 10) {
-            sbr.append(" ").append(cal.get(Calendar.DAY_OF_MONTH));
-        } else {
-            sbr.append(cal.get(Calendar.DAY_OF_MONTH));
-        }
-
-        sbr.append(" ");
-
-        if (cal.get(Calendar.HOUR_OF_DAY) < 10) {
-            sbr.append("0").append(cal.get(Calendar.HOUR_OF_DAY));
-        } else {
-            sbr.append(cal.get(Calendar.HOUR_OF_DAY));
-        }
-        sbr.append(":");
-
-        if (cal.get(Calendar.MINUTE) < 10) {
-            sbr.append("0").append(cal.get(Calendar.MINUTE));
-        } else {
-            sbr.append(cal.get(Calendar.MINUTE));
-        }
-        sbr.append(":");
-
-        if (cal.get(Calendar.SECOND) < 10) {
-            sbr.append("0").append(cal.get(Calendar.SECOND));
-        } else {
-            sbr.append(cal.get(Calendar.SECOND));
-        }
-        sbr.append(" ");
-
-        sbr.append(message.getHostname());
-        sbr.append(" ");
-        sbr.append(message.getLogMessage());
-        return sbr.toString();
-    }
-
-    @Converter
-    public static SyslogMessage toSyslogMessage(String body) {
-        return parseMessage(body.getBytes());
-    }
-
-    public static SyslogMessage parseMessage(byte[] bytes) {
-        ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length);
-        byteBuffer.put(bytes);
-        byteBuffer.rewind();
-
-        SyslogMessage syslogMessage = new SyslogMessage();
-        Character charFound = (char) byteBuffer.get();
-
-        while (charFound != '<') {
-            //Ignore noise in beginning of message.
-            charFound = (char) byteBuffer.get();
-        }
-        char priChar = 0;
-        if (charFound == '<') {
-            int facility = 0;
-
-            while (Character.isDigit(priChar = (char) (byteBuffer.get() & 
0xff))) {
-                facility *= 10;
-                facility += Character.digit(priChar, 10);
-            }
-            syslogMessage.setFacility(SyslogFacility.values()[facility >> 3]);
-            syslogMessage.setSeverity(SyslogSeverity.values()[facility & 
0x07]);
-        }
-
-        if (priChar != '>') {
-            //Invalid character - this is not a well defined syslog message.
-            LOG.error("Invalid syslog message, missing a > in the 
Facility/Priority part");
-        }
-
-        //Done parsing severity and facility
-        //<169>Oct 22 10:52:01 TZ-6 scapegoat.dmz.example.org 10.1.2.3 
sched[0]: That's All Folks!
-        //Need to parse the date.
-
-        /**
-         The TIMESTAMP field is the local time and is in the format of "Mmm dd
-         hh:mm:ss" (without the quote marks) where:
-
-         Mmm is the English language abbreviation for the month of the
-         year with the first character in uppercase and the other two
-         characters in lowercase.  The following are the only acceptable
-         values:
-
-         Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
-
-         dd is the day of the month.  If the day of the month is less
-         than 10, then it MUST be represented as a space and then the
-         number.  For example, the 7th day of August would be
-         represented as "Aug  7", with two spaces between the "g" and
-         the "7".
-
-         hh:mm:ss is the local time.  The hour (hh) is represented in a
-         24-hour format.  Valid entries are between 00 and 23,
-         inclusive.  The minute (mm) and second (ss) entries are between
-         00 and 59 inclusive.
-
-
-         */
-
-        char[] month = new char[3];
-        for (int i = 0; i < 3; i++) {
-            month[i] = (char) (byteBuffer.get() & 0xff);
-        }
-        charFound = (char) byteBuffer.get();
-        if (charFound != ' ') {
-            //Invalid Message - missing mandatory space.
-            LOG.error("Invalid syslog message, missing a mandatory space after 
month");
-        }
-        charFound = (char) (byteBuffer.get() & 0xff);
-
-        int day = 0;
-        if (charFound == ' ') {
-            //Extra space for the day - this is okay.
-            //Just ignored per the spec.
-        } else {
-            day *= 10;
-            day += Character.digit(charFound, 10);
-        }
-
-        while (Character.isDigit(charFound = (char) (byteBuffer.get() & 
0xff))) {
-            day *= 10;
-            day += Character.digit(charFound, 10);
-        }
-
-        int hour = 0;
-        while (Character.isDigit(charFound = (char) (byteBuffer.get() & 
0xff))) {
-            hour *= 10;
-            hour += Character.digit(charFound, 10);
-        }
-
-        int minute = 0;
-        while (Character.isDigit(charFound = (char) (byteBuffer.get() & 
0xff))) {
-            minute *= 10;
-            minute += Character.digit(charFound, 10);
-        }
-
-        int second = 0;
-        while (Character.isDigit(charFound = (char) (byteBuffer.get() & 
0xff))) {
-            second *= 10;
-            second += Character.digit(charFound, 10);
-        }
-
-        //The host is the char sequence until the next ' '
-
-        StringBuilder host = new StringBuilder();
-        while ((charFound = (char) (byteBuffer.get() & 0xff)) != ' ') {
-            host.append(charFound);
-        }
-
-        syslogMessage.setHostname(host.toString());
-
-        StringBuilder msg = new StringBuilder();
-        while (byteBuffer.hasRemaining()) {
-            charFound = (char) (byteBuffer.get() & 0xff);
-            msg.append(charFound);
-        }
-
-        Calendar calendar = new GregorianCalendar();
-        calendar.set(Calendar.MONTH, 
monthValueMap.get(String.valueOf(month).toLowerCase()).ordinal());
-        calendar.set(Calendar.DAY_OF_MONTH, day);
-        calendar.set(Calendar.HOUR_OF_DAY, hour);
-        calendar.set(Calendar.MINUTE, minute);
-        calendar.set(Calendar.SECOND, second);
-
-        syslogMessage.setTimestamp(calendar.getTime());
-
-        syslogMessage.setLogMessage(msg.toString());
-        LOG.trace("Syslog message : {}", syslogMessage.toString());
-
-        return syslogMessage;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogDataFormat.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogDataFormat.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogDataFormat.java
deleted file mode 100644
index add81ee..0000000
--- 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc3164SyslogDataFormat.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.syslog;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.util.ExchangeHelper;
-
-public class Rfc3164SyslogDataFormat implements DataFormat {
-    public void marshal(Exchange exchange, Object body, OutputStream stream) 
throws Exception {
-        SyslogMessage message = 
ExchangeHelper.convertToMandatoryType(exchange, SyslogMessage.class, body);
-        stream.write(Rfc3164SyslogConverter.toString(message).getBytes());
-    }
-
-    public Object unmarshal(Exchange exchange, InputStream inputStream) throws 
Exception {
-
-        String body = ExchangeHelper.convertToMandatoryType(exchange, 
String.class, inputStream);
-        SyslogMessage message = 
Rfc3164SyslogConverter.parseMessage(body.getBytes());
-
-        exchange.getOut().setHeader(SyslogConstants.SYSLOG_FACILITY, 
message.getFacility());
-        exchange.getOut().setHeader(SyslogConstants.SYSLOG_SEVERITY, 
message.getSeverity());
-        exchange.getOut().setHeader(SyslogConstants.SYSLOG_HOSTNAME, 
message.getHostname());
-        exchange.getOut().setHeader(SyslogConstants.SYSLOG_TIMESTAMP, 
message.getTimestamp());
-
-        //Since we are behind the fact of being in an Endpoint...
-        //We need to pull in the remote/local via either Mina or Netty.
-
-        if (exchange.getIn().getHeader("CamelMinaLocalAddress") != null) {
-            
message.setLocalAddress(exchange.getIn().getHeader("CamelMinaLocalAddress", 
String.class));
-            exchange.getOut().setHeader(SyslogConstants.SYSLOG_LOCAL_ADDRESS, 
message.getLocalAddress());
-        }
-
-        if (exchange.getIn().getHeader("CamelMinaRemoteAddress") != null) {
-            
message.setRemoteAddress(exchange.getIn().getHeader("CamelMinaRemoteAddress", 
String.class));
-            exchange.getOut().setHeader(SyslogConstants.SYSLOG_REMOTE_ADDRESS, 
message.getRemoteAddress());
-        }
-        
-        if (exchange.getIn().getHeader("CamelNettyLocalAddress") != null) {
-            
message.setLocalAddress(exchange.getIn().getHeader("CamelNettyLocalAddress", 
String.class));
-            exchange.getOut().setHeader(SyslogConstants.SYSLOG_LOCAL_ADDRESS, 
message.getLocalAddress());
-        }
-
-        if (exchange.getIn().getHeader("CamelNettyRemoteAddress") != null) {
-            
message.setRemoteAddress(exchange.getIn().getHeader("CamelNettyRemoteAddress", 
String.class));
-            exchange.getOut().setHeader(SyslogConstants.SYSLOG_REMOTE_ADDRESS, 
message.getRemoteAddress());
-        }
-
-        return message;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc5424SyslogMessage.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc5424SyslogMessage.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc5424SyslogMessage.java
new file mode 100644
index 0000000..c9da66c
--- /dev/null
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/Rfc5424SyslogMessage.java
@@ -0,0 +1,76 @@
+/**
+ * 
+ */
+package org.apache.camel.component.syslog;
+
+/**
+ * @author svenrienstra
+ * 
+ */
+public class Rfc5424SyslogMessage extends SyslogMessage {
+    private String appName = "-";
+    private String procId = "-";
+    private String msgId = "-";
+    private String structuredData = "-";
+
+    /**
+     * @return the appName
+     */
+    public String getAppName() {
+       return appName;
+    }
+
+    /**
+     * @param appName
+     *            the appName to set
+     */
+    public void setAppName(String appName) {
+       this.appName = appName;
+    }
+
+    /**
+     * @return the procId
+     */
+    public String getProcId() {
+       return procId;
+    }
+
+    /**
+     * @param procId
+     *            the procId to set
+     */
+    public void setProcId(String procId) {
+       this.procId = procId;
+    }
+
+    /**
+     * @return the msgId
+     */
+    public String getMsgId() {
+       return msgId;
+    }
+
+    /**
+     * @param msgId
+     *            the msgId to set
+     */
+    public void setMsgId(String msgId) {
+       this.msgId = msgId;
+    }
+
+    /**
+     * @return the structuredData
+     */
+    public String getStructuredData() {
+       return structuredData;
+    }
+
+    /**
+     * @param structuredData
+     *            the structuredData to set
+     */
+    public void setStructuredData(String structuredData) {
+       this.structuredData = structuredData;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
new file mode 100644
index 0000000..b4e86f7
--- /dev/null
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
@@ -0,0 +1,371 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.syslog;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.DatatypeConverter;
+
+import org.apache.camel.Converter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Converter
+public final class SyslogConverter {
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(SyslogConverter.class);
+
+    private static enum MONTHS {
+        jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
+    }
+
+    private static Map<String, MONTHS> monthValueMap = new HashMap<String, 
MONTHS>() {
+        private static final long serialVersionUID = 1L;
+        {
+            put("jan", MONTHS.jan);
+            put("feb", MONTHS.feb);
+            put("mar", MONTHS.mar);
+            put("apr", MONTHS.apr);
+            put("may", MONTHS.may);
+            put("jun", MONTHS.jun);
+            put("jul", MONTHS.jul);
+            put("aug", MONTHS.aug);
+            put("sep", MONTHS.sep);
+            put("oct", MONTHS.oct);
+            put("nov", MONTHS.nov);
+            put("dec", MONTHS.dec);
+        }
+    };
+
+    private SyslogConverter() {
+        // Utility class
+    }
+
+    @Converter
+    public static String toString(SyslogMessage message) {
+
+        boolean isRfc5424 = message instanceof Rfc5424SyslogMessage;
+
+        StringBuilder sbr = new StringBuilder();
+        sbr.append("<");
+        if (message.getFacility() == null) {
+            message.setFacility(SyslogFacility.USER);
+        }
+        if (message.getSeverity() == null) {
+            message.setSeverity(SyslogSeverity.INFO);
+        }
+        if (message.getHostname() == null) {
+            // This is massively ugly..
+            try {
+                message.setHostname(InetAddress.getLocalHost().toString());
+            } catch (UnknownHostException e) {
+                message.setHostname("UNKNOWN_HOST");
+            }
+        }
+        sbr.append(message.getFacility().ordinal() * 8 + 
message.getSeverity().ordinal());
+        sbr.append(">");
+
+        // version number
+        if (isRfc5424) {
+            sbr.append("1");
+            sbr.append(" ");
+        }
+
+        if (message.getTimestamp() == null) {
+            message.setTimestamp(Calendar.getInstance());
+        }
+
+        if (isRfc5424) {
+            
sbr.append(DatatypeConverter.printDateTime(message.getTimestamp()));
+        } else {
+            addRfc3164TimeStamp(sbr, message);
+        }
+        sbr.append(" ");
+
+        sbr.append(message.getHostname());
+        sbr.append(" ");
+
+        if (isRfc5424) {
+            Rfc5424SyslogMessage rfc5424SyslogMessage = 
(Rfc5424SyslogMessage)message;
+
+            sbr.append(rfc5424SyslogMessage.getAppName());
+            sbr.append(" ");
+
+            sbr.append(rfc5424SyslogMessage.getProcId());
+            sbr.append(" ");
+
+            sbr.append(rfc5424SyslogMessage.getMsgId());
+            sbr.append(" ");
+
+            sbr.append(rfc5424SyslogMessage.getStructuredData());
+            sbr.append(" ");
+        }
+
+        sbr.append(message.getLogMessage());
+
+        return sbr.toString();
+    }
+
+    @Converter
+    public static SyslogMessage toSyslogMessage(String body) {
+        return parseMessage(body.getBytes());
+    }
+
+    public static SyslogMessage parseMessage(byte[] bytes) {
+        ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length);
+        byteBuffer.put(bytes);
+        byteBuffer.rewind();
+
+        Character charFound = (char)byteBuffer.get();
+
+        SyslogFacility foundFacility = null;
+        SyslogSeverity foundSeverity = null;
+
+        while (charFound != '<') {
+            // Ignore noise in beginning of message.
+            charFound = (char)byteBuffer.get();
+        }
+        char priChar = 0;
+        if (charFound == '<') {
+            int facility = 0;
+
+            while (Character.isDigit(priChar = (char)(byteBuffer.get() & 
0xff))) {
+                facility *= 10;
+                facility += Character.digit(priChar, 10);
+            }
+            foundFacility = SyslogFacility.values()[facility >> 3];
+            foundSeverity = SyslogSeverity.values()[facility & 0x07];
+        }
+
+        if (priChar != '>') {
+            // Invalid character - this is not a well defined syslog message.
+            LOG.error("Invalid syslog message, missing a > in the 
Facility/Priority part");
+        }
+
+        SyslogMessage syslogMessage = new SyslogMessage();
+        boolean isRfc5424 = false;
+        // Read next character
+        charFound = (char)byteBuffer.get();
+        // If next character is a 1, we have probably found an rfc 5424 message
+        // message
+        if (charFound == '1') {
+            syslogMessage = new Rfc5424SyslogMessage();
+            isRfc5424 = true;
+        } else {
+            // go back one to parse the rfc3164 date
+            byteBuffer.position(byteBuffer.position() - 1);
+        }
+
+        syslogMessage.setFacility(foundFacility);
+        syslogMessage.setSeverity(foundSeverity);
+
+        if (!isRfc5424) {
+            // Parse rfc 3164 date
+            syslogMessage.setTimestamp(parseRfc3164Date(byteBuffer));
+        } else {
+
+            charFound = (char)byteBuffer.get();
+            if (charFound != ' ') {
+                LOG.error("Invalid syslog message, missing a mandatory space 
after version");
+            }
+
+            // This should be the timestamp
+            StringBuilder date = new StringBuilder();
+            while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+                date.append(charFound);
+            }
+
+            
syslogMessage.setTimestamp(DatatypeConverter.parseDateTime(date.toString()));
+        }
+
+        // The host is the char sequence until the next ' '
+
+        StringBuilder host = new StringBuilder();
+        while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+            host.append(charFound);
+        }
+
+        syslogMessage.setHostname(host.toString());
+
+        if (isRfc5424) {
+            Rfc5424SyslogMessage rfc5424SyslogMessage = 
(Rfc5424SyslogMessage)syslogMessage;
+            StringBuilder appName = new StringBuilder();
+            while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+                appName.append(charFound);
+            }
+            rfc5424SyslogMessage.setAppName(appName.toString());
+
+            StringBuilder procId = new StringBuilder();
+            while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+                procId.append(charFound);
+            }
+            rfc5424SyslogMessage.setProcId(procId.toString());
+
+            StringBuilder msgId = new StringBuilder();
+            while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+                msgId.append(charFound);
+            }
+            rfc5424SyslogMessage.setMsgId(msgId.toString());
+
+            StringBuilder structuredData = new StringBuilder();
+            while ((charFound = (char)(byteBuffer.get() & 0xff)) != ' ') {
+                structuredData.append(charFound);
+            }
+            rfc5424SyslogMessage.setStructuredData(structuredData.toString());
+        }
+
+        StringBuilder msg = new StringBuilder();
+        while (byteBuffer.hasRemaining()) {
+            charFound = (char)(byteBuffer.get() & 0xff);
+            msg.append(charFound);
+        }
+
+        syslogMessage.setLogMessage(msg.toString());
+        LOG.trace("Syslog message : {}", syslogMessage.toString());
+
+        return syslogMessage;
+    }
+
+    private static void addRfc3164TimeStamp(StringBuilder sbr, SyslogMessage 
message) {
+        // SDF isn't going to help much here.
+
+        Calendar cal = message.getTimestamp();
+
+        String firstLetter = 
MONTHS.values()[cal.get(Calendar.MONTH)].toString().substring(0, 1); // Get
+                                                                               
                   // first
+                                                                               
                   // letter
+        String remainder = 
MONTHS.values()[cal.get(Calendar.MONTH)].toString().substring(1); // Get
+                                                                               
              // remainder
+                                                                               
              // of
+                                                                               
              // word.
+        String capitalized = firstLetter.toUpperCase() + 
remainder.toLowerCase();
+
+        sbr.append(capitalized);
+        sbr.append(" ");
+
+        if (cal.get(Calendar.DAY_OF_MONTH) < 10) {
+            sbr.append(" ").append(cal.get(Calendar.DAY_OF_MONTH));
+        } else {
+            sbr.append(cal.get(Calendar.DAY_OF_MONTH));
+        }
+
+        sbr.append(" ");
+
+        if (cal.get(Calendar.HOUR_OF_DAY) < 10) {
+            sbr.append("0").append(cal.get(Calendar.HOUR_OF_DAY));
+        } else {
+            sbr.append(cal.get(Calendar.HOUR_OF_DAY));
+        }
+        sbr.append(":");
+
+        if (cal.get(Calendar.MINUTE) < 10) {
+            sbr.append("0").append(cal.get(Calendar.MINUTE));
+        } else {
+            sbr.append(cal.get(Calendar.MINUTE));
+        }
+        sbr.append(":");
+
+        if (cal.get(Calendar.SECOND) < 10) {
+            sbr.append("0").append(cal.get(Calendar.SECOND));
+        } else {
+            sbr.append(cal.get(Calendar.SECOND));
+        }
+    }
+
+    private static Calendar parseRfc3164Date(ByteBuffer byteBuffer) {
+        char charFound;
+
+        // Done parsing severity and facility
+        // <169>Oct 22 10:52:01 TZ-6 scapegoat.dmz.example.org 10.1.2.3
+        // sched[0]: That's All Folks!
+        // Need to parse the date.
+
+        /**
+         * The TIMESTAMP field is the local time and is in the format of
+         * "Mmm dd hh:mm:ss" (without the quote marks) where: Mmm is the 
English
+         * language abbreviation for the month of the year with the first
+         * character in uppercase and the other two characters in lowercase. 
The
+         * following are the only acceptable values: Jan, Feb, Mar, Apr, May,
+         * Jun, Jul, Aug, Sep, Oct, Nov, Dec dd is the day of the month. If the
+         * day of the month is less than 10, then it MUST be represented as a
+         * space and then the number. For example, the 7th day of August would
+         * be represented as "Aug  7", with two spaces between the "g" and the
+         * "7". hh:mm:ss is the local time. The hour (hh) is represented in a
+         * 24-hour format. Valid entries are between 00 and 23, inclusive. The
+         * minute (mm) and second (ss) entries are between 00 and 59 inclusive.
+         */
+
+        char[] month = new char[3];
+        for (int i = 0; i < 3; i++) {
+            month[i] = (char)(byteBuffer.get() & 0xff);
+        }
+        charFound = (char)byteBuffer.get();
+        if (charFound != ' ') {
+            // Invalid Message - missing mandatory space.
+            LOG.error("Invalid syslog message, missing a mandatory space after 
month");
+        }
+        charFound = (char)(byteBuffer.get() & 0xff);
+
+        int day = 0;
+        if (charFound == ' ') {
+            // Extra space for the day - this is okay.
+            // Just ignored per the spec.
+        } else {
+            day *= 10;
+            day += Character.digit(charFound, 10);
+        }
+
+        while (Character.isDigit(charFound = (char)(byteBuffer.get() & 0xff))) 
{
+            day *= 10;
+            day += Character.digit(charFound, 10);
+        }
+
+        int hour = 0;
+        while (Character.isDigit(charFound = (char)(byteBuffer.get() & 0xff))) 
{
+            hour *= 10;
+            hour += Character.digit(charFound, 10);
+        }
+
+        int minute = 0;
+        while (Character.isDigit(charFound = (char)(byteBuffer.get() & 0xff))) 
{
+            minute *= 10;
+            minute += Character.digit(charFound, 10);
+        }
+
+        int second = 0;
+        while (Character.isDigit(charFound = (char)(byteBuffer.get() & 0xff))) 
{
+            second *= 10;
+            second += Character.digit(charFound, 10);
+        }
+
+        Calendar calendar = new GregorianCalendar();
+        calendar.set(Calendar.MONTH, 
monthValueMap.get(String.valueOf(month).toLowerCase()).ordinal());
+        calendar.set(Calendar.DAY_OF_MONTH, day);
+        calendar.set(Calendar.HOUR_OF_DAY, hour);
+        calendar.set(Calendar.MINUTE, minute);
+        calendar.set(Calendar.SECOND, second);
+
+        return calendar;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
new file mode 100644
index 0000000..3fd0192
--- /dev/null
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.syslog;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.util.ExchangeHelper;
+
+public class SyslogDataFormat implements DataFormat {
+    @Override
+    public void marshal(Exchange exchange, Object body, OutputStream stream) 
throws Exception {
+        SyslogMessage message = 
ExchangeHelper.convertToMandatoryType(exchange, SyslogMessage.class, body);
+        stream.write(SyslogConverter.toString(message).getBytes());
+    }
+
+    @Override
+    public Object unmarshal(Exchange exchange, InputStream inputStream) throws 
Exception {
+
+        String body = ExchangeHelper.convertToMandatoryType(exchange, 
String.class, inputStream);
+        SyslogMessage message = SyslogConverter.parseMessage(body.getBytes());
+
+        exchange.getOut().setHeader(SyslogConstants.SYSLOG_FACILITY, 
message.getFacility());
+        exchange.getOut().setHeader(SyslogConstants.SYSLOG_SEVERITY, 
message.getSeverity());
+        exchange.getOut().setHeader(SyslogConstants.SYSLOG_HOSTNAME, 
message.getHostname());
+        exchange.getOut().setHeader(SyslogConstants.SYSLOG_TIMESTAMP, 
message.getTimestamp());
+
+        // Since we are behind the fact of being in an Endpoint...
+        // We need to pull in the remote/local via either Mina or Netty.
+
+        if (exchange.getIn().getHeader("CamelMinaLocalAddress") != null) {
+            
message.setLocalAddress(exchange.getIn().getHeader("CamelMinaLocalAddress", 
String.class));
+            exchange.getOut().setHeader(SyslogConstants.SYSLOG_LOCAL_ADDRESS, 
message.getLocalAddress());
+        }
+
+        if (exchange.getIn().getHeader("CamelMinaRemoteAddress") != null) {
+            
message.setRemoteAddress(exchange.getIn().getHeader("CamelMinaRemoteAddress", 
String.class));
+            exchange.getOut().setHeader(SyslogConstants.SYSLOG_REMOTE_ADDRESS, 
message.getRemoteAddress());
+        }
+
+        if (exchange.getIn().getHeader("CamelNettyLocalAddress") != null) {
+            
message.setLocalAddress(exchange.getIn().getHeader("CamelNettyLocalAddress", 
String.class));
+            exchange.getOut().setHeader(SyslogConstants.SYSLOG_LOCAL_ADDRESS, 
message.getLocalAddress());
+        }
+
+        if (exchange.getIn().getHeader("CamelNettyRemoteAddress") != null) {
+            
message.setRemoteAddress(exchange.getIn().getHeader("CamelNettyRemoteAddress", 
String.class));
+            exchange.getOut().setHeader(SyslogConstants.SYSLOG_REMOTE_ADDRESS, 
message.getRemoteAddress());
+        }
+
+        return message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogMessage.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogMessage.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogMessage.java
index 6eba3be..f156bdb 100644
--- 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogMessage.java
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogMessage.java
@@ -17,7 +17,7 @@
 
 package org.apache.camel.component.syslog;
 
-import java.util.Date;
+import java.util.Calendar;
 
 public class SyslogMessage {
 
@@ -28,7 +28,7 @@ public class SyslogMessage {
     private String hostname;
     private String logMessage;
 
-    private Date timestamp;
+    private Calendar timestamp;
 
     public String getLogMessage() {
         return logMessage;
@@ -54,11 +54,11 @@ public class SyslogMessage {
         this.facility = facility;
     }
 
-    public Date getTimestamp() {
+    public Calendar getTimestamp() {
         return timestamp;
     }
 
-    public void setTimestamp(Date timestamp) {
+    public void setTimestamp(Calendar timestamp) {
         this.timestamp = timestamp;
     }
 
@@ -88,7 +88,7 @@ public class SyslogMessage {
 
     @Override
     public String toString() {
-        return "SyslogMessage{" + "content='" + logMessage + '\'' + ", 
facility=" + facility + ", severity=" + severity + ", remoteAddress='"
-               + remoteAddress + '\'' + ", localAddress='" + localAddress + 
'\'' + ", hostname='" + hostname + '\'' + ", messageTime=" + timestamp + '}';
+        return "SyslogMessage{" + "content='" + logMessage + '\'' + ", 
facility=" + facility + ", severity=" + severity + ", remoteAddress='" + 
remoteAddress + '\''
+               + ", localAddress='" + localAddress + '\'' + ", hostname='" + 
hostname + '\'' + ", messageTime=" + timestamp + '}';
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426Encoder.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426Encoder.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426Encoder.java
new file mode 100644
index 0000000..7dce437
--- /dev/null
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426Encoder.java
@@ -0,0 +1,38 @@
+/**
+ * 
+ */
+package org.apache.camel.component.syslog.netty;
+
+import static org.jboss.netty.buffer.ChannelBuffers.wrappedBuffer;
+
+import java.nio.charset.Charset;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelHandler.Sharable;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
+
+/**
+ * @author svenrienstra
+ */
+@Sharable
+public class Rfc5426Encoder extends OneToOneEncoder {
+
+    @Override
+    protected Object encode(ChannelHandlerContext ctx, Channel channel, Object 
msg) throws Exception {
+        if (!(msg instanceof ChannelBuffer)) {
+            return msg;
+        }
+
+        ChannelBuffer src = (ChannelBuffer)msg;
+        int length = src.readableBytes();
+
+        String headerString = length + " ";
+
+        ChannelBuffer header = 
channel.getConfig().getBufferFactory().getBuffer(src.order(), 
headerString.getBytes(Charset.forName("UTF8")).length);
+        header.writeBytes(headerString.getBytes(Charset.forName("UTF8")));
+
+        return wrappedBuffer(header, src);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426FrameDecoder.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426FrameDecoder.java
 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426FrameDecoder.java
new file mode 100644
index 0000000..e3bbf10
--- /dev/null
+++ 
b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5426FrameDecoder.java
@@ -0,0 +1,100 @@
+/**
+ * 
+ */
+package org.apache.camel.component.syslog.netty;
+
+import org.apache.camel.component.netty.ChannelHandlerFactory;
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelHandler;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.handler.codec.frame.FrameDecoder;
+
+/**
+ * @author svenrienstra
+ */
+public class Rfc5426FrameDecoder extends FrameDecoder implements 
ChannelHandlerFactory {
+
+    private Integer currentFramelength;
+
+    /**
+     * @see 
org.jboss.netty.handler.codec.frame.FrameDecoder#decode(org.jboss.netty.channel.ChannelHandlerContext,
+     *      org.jboss.netty.channel.Channel,
+     *      org.jboss.netty.buffer.ChannelBuffer)
+     */
+    @Override
+    protected Object decode(ChannelHandlerContext ctx, Channel channel, 
ChannelBuffer buffer) throws Exception {
+        if (currentFramelength == null) {
+            // find index of the first space, it should be after the length
+            // field
+            int index = indexOf(buffer, ChannelBuffers.wrappedBuffer(new 
byte[] {' '}));
+
+            // Read part until the first space, if we have found one
+            StringBuffer lengthbuffer = new StringBuffer();
+            if (index > -1) {
+                lengthbuffer.append(new 
String(buffer.readBytes(index).array()));
+            }
+
+            int length;
+            try {
+                // add one because we have to take in account the space after
+                // the length field
+                length = Integer.parseInt(lengthbuffer.toString()) + 1;
+            } catch (NumberFormatException e) {
+                length = -1;
+            }
+
+            // We have not found the length field, reset the buffer so we can
+            // retry next time
+            if (length < 0) {
+                buffer.resetReaderIndex();
+                return null;
+            }
+            currentFramelength = length;
+        }
+
+        // Buffer does not contain enough data yet, wait until it does
+        if (buffer.readableBytes() < currentFramelength) {
+            return null;
+        }
+
+        // read the message
+        int lengthToRead = currentFramelength;
+        currentFramelength = null;
+        return buffer.readBytes(lengthToRead);
+    }
+
+    /**
+     * Borrowed from the DelimiterBasedFrameDecoder Returns the number of bytes
+     * between the readerIndex of the haystack and the first needle found in 
the
+     * haystack. -1 is returned if no needle is found in the haystack.
+     */
+    private static int indexOf(ChannelBuffer haystack, ChannelBuffer needle) {
+        for (int i = haystack.readerIndex(); i < haystack.writerIndex(); i++) {
+            int haystackIndex = i;
+            int needleIndex;
+            for (needleIndex = 0; needleIndex < needle.capacity(); 
needleIndex++) {
+                if (haystack.getByte(haystackIndex) != 
needle.getByte(needleIndex)) {
+                    break;
+                } else {
+                    haystackIndex++;
+                    if (haystackIndex == haystack.writerIndex() && needleIndex 
!= needle.capacity() - 1) {
+                        return -1;
+                    }
+                }
+            }
+
+            if (needleIndex == needle.capacity()) {
+                // Found the needle from the haystack!
+                return i - haystack.readerIndex();
+            }
+        }
+        return -1;
+    }
+
+    @Override
+    public ChannelHandler newChannelHandler() {
+        return new Rfc5426FrameDecoder();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
 
b/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
index 2ce7fd2..6b23066 100644
--- 
a/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
+++ 
b/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.camel.component.syslog.Rfc3164SyslogConverter
\ No newline at end of file
+org.apache.camel.component.syslog.SyslogConverter
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/dataformat/syslog
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/dataformat/syslog
 
b/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/dataformat/syslog
index 213aa5d..808fa12 100644
--- 
a/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/dataformat/syslog
+++ 
b/components/camel-syslog/src/main/resources/META-INF/services/org/apache/camel/dataformat/syslog
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-class=org.apache.camel.component.syslog.Rfc3164SyslogDataFormat
\ No newline at end of file
+class=org.apache.camel.component.syslog.SyslogDataFormat
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
index fb32e55..6a1f897 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
@@ -35,30 +35,35 @@ public class AutomatedConversionTest extends 
CamelTestSupport {
 
     private static int serverPort;
     private final int messageCount = 1;
-    private final String message =
-        "<165>Aug  4 05:34:00 mymachine myproc[10]: %% It's\n         time to 
make the do-nuts.  %%  Ingredients: Mix=OK, Jelly=OK #\n"
-            + "         Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # 
Transport:\n" + "         Conveyer1=OK, Conveyer2=OK # %%";
+    private final String rfc3164Message = "<165>Aug  4 05:34:00 mymachine 
myproc[10]: %% It's\n         time to make the do-nuts.  %%  Ingredients: 
Mix=OK, Jelly=OK #\n"
+                                          + "         Devices: Mixer=OK, 
Jelly_Injector=OK, Frier=OK # Transport:\n" + "         Conveyer1=OK, 
Conveyer2=OK # %%";
+    private final String rfc5424Message = "<34>1 2003-10-11T22:14:15.003Z 
mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on 
/dev/pts/8";
 
     @BeforeClass
     public static void initPort() {
         serverPort = AvailablePortFinder.getNextAvailable();
     }
-    
+
     @Test
     public void testSendingRawUDP() throws IOException, InterruptedException {
 
         MockEndpoint mock = getMockEndpoint("mock:syslogReceiver");
         MockEndpoint mock2 = getMockEndpoint("mock:syslogReceiver2");
-        mock.expectedMessageCount(1);
-        mock2.expectedMessageCount(1);
-        mock2.expectedBodiesReceived(message);
-        
+        mock.expectedMessageCount(2);
+        mock2.expectedMessageCount(2);
+        mock2.expectedBodiesReceived(rfc3164Message, rfc5424Message);
 
         DatagramSocket socket = new DatagramSocket();
         try {
             InetAddress address = InetAddress.getByName("127.0.0.1");
             for (int i = 0; i < messageCount; i++) {
-                byte[] data = message.getBytes();
+                byte[] data = rfc3164Message.getBytes();
+                DatagramPacket packet = new DatagramPacket(data, data.length, 
address, serverPort);
+                socket.send(packet);
+                Thread.sleep(100);
+            }
+            for (int i = 0; i < messageCount; i++) {
+                byte[] data = rfc5424Message.getBytes();
                 DatagramPacket packet = new DatagramPacket(data, data.length, 
address, serverPort);
                 socket.send(packet);
                 Thread.sleep(100);
@@ -73,14 +78,15 @@ public class AutomatedConversionTest extends 
CamelTestSupport {
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
+            @Override
             public void configure() throws Exception {
-                // we setup a Syslog  listener on a random port.
+                // we setup a Syslog listener on a random port.
                 from("mina:udp://127.0.0.1:" + 
serverPort).unmarshal().syslog().process(new Processor() {
+                    @Override
                     public void process(Exchange ex) {
                         assertTrue(ex.getIn().getBody() instanceof 
SyslogMessage);
                     }
-                }).to("mock:syslogReceiver").
-                    marshal().syslog().to("mock:syslogReceiver2");
+                
}).to("mock:syslogReceiver").marshal().syslog().to("mock:syslogReceiver2");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
index 1dcdded..dc79f22 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
@@ -77,7 +77,7 @@ public class MinaDataFormatTest extends CamelTestSupport {
             public void configure() throws Exception {
 
                 //context.setTracing(true);
-                DataFormat syslogDataFormat = new Rfc3164SyslogDataFormat();
+                DataFormat syslogDataFormat = new SyslogDataFormat();
 
                 // we setup a Syslog  listener on a random port.
                 from("mina:udp://127.0.0.1:" + 
serverPort).unmarshal(syslogDataFormat).process(new Processor() {

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
index 45c8ebb..90e7b69 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
@@ -74,7 +74,7 @@ public class MinaManyUDPMessagesTest extends CamelTestSupport 
{
             public void configure() throws Exception {
 
                 //context.setTracing(true);
-                DataFormat syslogDataFormat = new Rfc3164SyslogDataFormat();
+                DataFormat syslogDataFormat = new SyslogDataFormat();
 
                 // we setup a Syslog  listener on a random port.
                 from("mina:udp://127.0.0.1:" + 
serverPort).unmarshal(syslogDataFormat).process(new Processor() {

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
index 7488898..398efc5 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
@@ -77,7 +77,7 @@ public class NettyDataFormatTest extends CamelTestSupport {
             public void configure() throws Exception {
 
                 context.setTracing(true);
-                DataFormat syslogDataFormat = new Rfc3164SyslogDataFormat();
+                DataFormat syslogDataFormat = new SyslogDataFormat();
 
                 // we setup a Syslog  listener on a random port.
                 from("netty:udp://127.0.0.1:" + serverPort + 
"?sync=false&allowDefaultCodec=false").unmarshal(syslogDataFormat)

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
index fbbbcf8..5fcb8cf 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
@@ -74,7 +74,7 @@ public class NettyManyUDPMessagesTest extends 
CamelTestSupport {
             public void configure() throws Exception {
 
                 //context.setTracing(true);
-                DataFormat syslogDataFormat = new Rfc3164SyslogDataFormat();
+                DataFormat syslogDataFormat = new SyslogDataFormat();
 
                 // we setup a Syslog  listener on a random port.
                 from("netty:udp://127.0.0.1:" + serverPort + 
"?sync=false&allowDefaultCodec=false").unmarshal(syslogDataFormat)

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426LongMessageTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426LongMessageTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426LongMessageTest.java
new file mode 100644
index 0000000..5f029a3
--- /dev/null
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426LongMessageTest.java
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.syslog;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.syslog.netty.Rfc5426Encoder;
+import org.apache.camel.component.syslog.netty.Rfc5426FrameDecoder;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.jboss.netty.buffer.BigEndianHeapChannelBuffer;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class NettyRfc5426LongMessageTest extends CamelTestSupport {
+
+    private static String uri;
+    private static int serverPort;
+    private final String message = "<34>1 2003-10-11T22:14:15.003Z 
mymachine.example.com su - ID47 - Lorem ipsum dolor sit amet, tempor democritum 
vix ad, est partiendo laboramus ei. Munere laudem commune vis ad, et qui altera 
singulis. Ut assum deleniti sit, vix constituto assueverit appellantur at, et 
meis voluptua usu. Quem imperdiet in ius, mei ex dictas mandamus, ut pri tation 
appetere oportere. Et est harum dictas. \n Omnis quaestio mel te, ex duo autem 
molestie. Ei sed dico minim, nominavi facilisis evertitur quo an, te adipiscing 
contentiones his. Cum partem deseruisse at, ne iuvaret mediocritatem pro. Ex 
prima utinam convenire usu, volumus legendos nec et, natum putant quo ne. 
Invidunt necessitatibus at ius, ne eum wisi dicat mediocrem. \n Cu usu odio 
labores sententiae. Ex eos duis singulis necessitatibus, dico omittam vix at. 
Sit iudico option detracto an, sit no modus exerci oportere. Vix dicta munere 
at, no vis feugiat omnesque convenire. Duo at quod illum dolor, nec am
 et tantas iisque no, mei quod graece volutpat ea.\n Ornatus legendos 
theophrastus id mei. Cum alia assum abhorreant et, nam indoctum intellegebat 
ei. Unum constituto quo cu. Vero tritani sit ei, ea commodo menandri usu, 
ponderum hendrerit voluptatibus sed te. \n Semper aliquid fabulas ei mel. Vix 
ei nullam malorum bonorum, movet nemore scaevola cu vel. Quo ut esse dictas 
incorrupte, ex denique splendide nec, mei dicit doming omnium no. Nulla putent 
nec id, vis vide ignota eligendi in.";
+
+    @BeforeClass
+    public static void initPort() {
+        serverPort = AvailablePortFinder.getNextAvailable();
+        uri = "netty:tcp://localhost:" + serverPort + 
"?sync=false&allowDefaultCodec=false&decoders=#decoder&encoder=#encoder";
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("decoder", new Rfc5426FrameDecoder());
+        jndi.bind("encoder", new Rfc5426Encoder());
+        return jndi;
+    }
+
+    @Test
+    public void testSendingCamel() throws Exception {
+
+        MockEndpoint mock = getMockEndpoint("mock:syslogReceiver");
+        MockEndpoint mock2 = getMockEndpoint("mock:syslogReceiver2");
+        mock.expectedMessageCount(1);
+        mock2.expectedMessageCount(1);
+        mock2.expectedBodiesReceived(message);
+
+        template.sendBody(uri, new 
BigEndianHeapChannelBuffer(message.getBytes("UTF8")));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        context().getRegistry(JndiRegistry.class).bind("rfc5426FrameDecoder", 
new Rfc5426FrameDecoder());
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                context.setTracing(true);
+                DataFormat syslogDataFormat = new SyslogDataFormat();
+
+                // we setup a Syslog listener on a random port.
+                from(uri).unmarshal(syslogDataFormat).process(new Processor() {
+                    @Override
+                    public void process(Exchange ex) {
+                        assertTrue(ex.getIn().getBody() instanceof 
SyslogMessage);
+                    }
+                
}).to("mock:syslogReceiver").marshal(syslogDataFormat).to("mock:syslogReceiver2");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426Test.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426Test.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426Test.java
new file mode 100644
index 0000000..179988c
--- /dev/null
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5426Test.java
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.syslog;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.syslog.netty.Rfc5426Encoder;
+import org.apache.camel.component.syslog.netty.Rfc5426FrameDecoder;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.jboss.netty.buffer.BigEndianHeapChannelBuffer;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class NettyRfc5426Test extends CamelTestSupport {
+
+    private static String uri;
+    private static int serverPort;
+    private final String rfc3164Message = "<165>Aug  4 05:34:00 mymachine 
myproc[10]: %% It's\n         time to make the do-nuts.  %%  Ingredients: 
Mix=OK, Jelly=OK #\n"
+                                          + "         Devices: Mixer=OK, 
Jelly_Injector=OK, Frier=OK # Transport:\n" + "         Conveyer1=OK, 
Conveyer2=OK # %%";
+    private final String rfc5424Message = "<34>1 2003-10-11T22:14:15.003Z 
mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on 
/dev/pts/8";
+
+    @BeforeClass
+    public static void initPort() {
+        serverPort = AvailablePortFinder.getNextAvailable();
+        uri = "netty:tcp://localhost:" + serverPort + 
"?sync=false&allowDefaultCodec=false&decoders=#decoder&encoder=#encoder";
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("decoder", new Rfc5426FrameDecoder());
+        jndi.bind("encoder", new Rfc5426Encoder());
+        return jndi;
+    }
+
+    @Test
+    public void testSendingCamel() throws Exception {
+
+        MockEndpoint mock = getMockEndpoint("mock:syslogReceiver");
+        MockEndpoint mock2 = getMockEndpoint("mock:syslogReceiver2");
+        mock.expectedMessageCount(2);
+        mock2.expectedMessageCount(2);
+        mock2.expectedBodiesReceived(rfc3164Message, rfc5424Message);
+
+        template.sendBody(uri, new 
BigEndianHeapChannelBuffer(rfc3164Message.getBytes("UTF8")));
+        template.sendBody(uri, new 
BigEndianHeapChannelBuffer(rfc5424Message.getBytes("UTF8")));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        context().getRegistry(JndiRegistry.class).bind("rfc5426FrameDecoder", 
new Rfc5426FrameDecoder());
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                context.setTracing(true);
+                DataFormat syslogDataFormat = new SyslogDataFormat();
+
+                // we setup a Syslog listener on a random port.
+                from(uri).unmarshal(syslogDataFormat).process(new Processor() {
+                    @Override
+                    public void process(Exchange ex) {
+                        assertTrue(ex.getIn().getBody() instanceof 
SyslogMessage);
+                    }
+                
}).to("mock:syslogReceiver").marshal(syslogDataFormat).to("mock:syslogReceiver2");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/372ab5b5/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
index 3dff15f..0c612e6 100644
--- 
a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
+++ 
b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
@@ -42,7 +42,7 @@ public class SyslogSpringMinaTest extends 
CamelSpringTestSupport {
         serverPort = AvailablePortFinder.getNextAvailable(3000);
         System.setProperty("server-port", new Integer(serverPort).toString());
     }
-    
+
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {
         return new 
ClassPathXmlApplicationContext("org/apache/camel/component/syslog/applicationContext-Mina.xml");

Reply via email to