From ba05c50c7fe29c955dfbd88d84b8879719a939dd Mon Sep 17 00:00:00 2001
From: Bernd Ahlers Usage examples: Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
* of the LGPL license is available in the META-INF folder in all
* distributions of Syslog4j and in the base directory of the "doc" ZIP. First, create an implementation of SyslogConfigIF, such as UdpNetSyslogConfig. Second, configure that configuration instance. Third, call createInstance(protocol,config) using a short & simple
- * String for the protocol argument. Fourth, either use the returned instance of SyslogIF, or in later code
- * call getInstance(protocol) with the protocol chosen in the previous step. First, create an implementation of SyslogConfigIF, such as UdpNetSyslogConfig. Second, configure that configuration instance. Third, call createInstance(protocol,config) using a short & simple
+ * String for the protocol argument. Fourth, either use the returned instance of SyslogIF, or in later code
+ * call getInstance(protocol) with the protocol chosen in the previous step. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Implementing the down(SyslogIF) method is an excellent way to add some sort of notification to
-* your application when a Syslog service is unavailable. Implementing the up(SyslogIF) method can be used to notify your application when a Syslog
-* service has returned. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Implementing the down(SyslogIF) method is an excellent way to add some sort of notification to
+ * your application when a Syslog service is unavailable. Implementing the up(SyslogIF) method can be used to notify your application when a Syslog
+ * service has returned. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
* of the LGPL license is available in the META-INF folder in all
* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. When used in "threaded" mode (see TCPNetSyslogConfig for the option),
-* a queuing mechanism is used (via LinkedList). Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. When used in "threaded" mode (see TCPNetSyslogConfig for the option),
+ * a queuing mechanism is used (via LinkedList). Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Note: Syslog4jAppender does NOT extend Log4j's SyslogAppender. Example log4j.xml configuration: All available parameters are: Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
* of the LGPL license is available in the META-INF folder in all
* distributions of Syslog4j and in the base directory of the "doc" ZIP. Classes which inherit Syslog4jAppenderSkeleton must implement the "initialize()" method,
* which sets up Syslog4j for use by the Log4j Appender. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
* of the LGPL license is available in the META-INF folder in all
* distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. This modifier is useful for applications that display log content in browsers without
-* properly escaping HTML characters. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. This modifier is useful for applications that display log content in browsers without
+ * properly escaping HTML characters. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml The PCI DSS specification is Copyright 2008 PCI Security Standards
-* Council LLC. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml The PCI DSS specification is Copyright 2008 PCI Security Standards
+ * Council LLC. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml The PCI DSS specification is Copyright 2008 PCI Security Standards
-* Council LLC. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. More information on the PCI DSS specification is available here: https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml The PCI DSS specification is Copyright 2008 PCI Security Standards
+ * Council LLC. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Those wishing to replace (or improve upon) this implementation
-* can write a custom SyslogMessageProcessorIF and set it per
-* instance via the SyslogIF.setMessageProcessor(..) method or set it globally
-* via the SyslogMessageProcessor.setDefault(..) method. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Those wishing to replace (or improve upon) this implementation
+ * can write a custom SyslogMessageProcessorIF and set it per
+ * instance via the SyslogIF.setMessageProcessor(..) method or set it globally
+ * via the SyslogMessageProcessor.setDefault(..) method. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. http://tools.ietf.org/html/draft-ietf-syslog-protocol-23 Those wishing to replace (or improve upon) this implementation
* can write a custom SyslogMessageProcessorIF and set it per
* instance via the SyslogIF.setStructuredMessageProcessor(..) method or set it globally
* via the StructuredSyslogMessageProcessor.setDefault(..) method.
* Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy of the
* LGPL license is available in the META-INF folder in all distributions of
* Syslog4j and in the base directory of the "doc" ZIP.
*
* http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
*
* Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy of the
* LGPL license is available in the META-INF folder in all distributions of
* Syslog4j and in the base directory of the "doc" ZIP.
*
- * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
- *
+ * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
+ *
- * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
- *
- * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
- *
- * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
- *
+ * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
+ *
+ * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
+ *
+ * http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6
+ * Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
-* of the LGPL license is available in the META-INF folder in all
-* distributions of Syslog4j and in the base directory of the "doc" ZIP. Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy
+ * of the LGPL license is available in the META-INF folder in all
+ * distributions of Syslog4j and in the base directory of the "doc" ZIP.
* Syslog.getInstance("udp").info("log message");
*
- *
+ *
* Via Instance
*
* SyslogIF syslog = Syslog.getInstance("udp");
* syslog.info();
*
- *
+ *
*
*
- *
+ *
*
- <appender name="Syslog4j" class="org.graylog2.syslog4j.impl.log4j.Syslog4jAppender">
- <param name="Facility" value="user"/>
- <param name="Protocol" value="tcp"/>
- <param name="Host" value="192.168.0.1"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m"/>
- </layout>
- </appender>
+ * <appender name="Syslog4j" class="org.graylog2.syslog4j.impl.log4j.Syslog4jAppender">
+ * <param name="Facility" value="user"/>
+ * <param name="Protocol" value="tcp"/>
+ * <param name="Host" value="192.168.0.1"/>
+ * <layout class="org.apache.log4j.PatternLayout">
+ * <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m"/>
+ * </layout>
+ * </appender>
*
*
- *
- *
+ *
*
Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: MultipleSyslogConfig.java,v 1.8 2010/11/28 04:15:18 cvs Exp $ + */ public class MultipleSyslogConfig implements SyslogConfigIF { - private static final long serialVersionUID = 753704522364959612L; - - protected List syslogProtocols = null; - - public MultipleSyslogConfig() { - this.syslogProtocols = new ArrayList(); - } + private static final long serialVersionUID = 753704522364959612L; - public MultipleSyslogConfig(List protocols) { - if (protocols != null) { - this.syslogProtocols = protocols; - - } else { - this.syslogProtocols = new ArrayList(); - } - } + protected List syslogProtocols = null; - public MultipleSyslogConfig(String[] protocols) { - if (protocols != null) { - this.syslogProtocols = new ArrayList(protocols.length); - - for(int i=0; iSyslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractNetSyslog.java,v 1.7 2009/01/24 22:00:18 cvs Exp $ + */ public abstract class AbstractNetSyslog extends AbstractSyslog { - private static final long serialVersionUID = -3250858945515853967L; - - protected static final Object cachedHostAddressSyncObject = new Object(); - - protected InetAddress cachedHostAddress = null; - - protected AbstractNetSyslogConfigIF netSyslogConfig = null; - - protected void initialize() throws SyslogRuntimeException { - try { - this.netSyslogConfig = (AbstractNetSyslogConfigIF) this.syslogConfig; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must implement interface AbstractNetSyslogConfigIF"); - } - } - - /** - * @return Returns an object of InetAddress of the local host, using caching if so directed. - */ - public InetAddress getHostAddress() { - InetAddress hostAddress = null; - - if (this.netSyslogConfig.isCacheHostAddress()) { - if (this.cachedHostAddress == null) { - synchronized(cachedHostAddressSyncObject) { - if (this.cachedHostAddress == null) { - this.cachedHostAddress = SyslogUtility.getInetAddress(this.syslogConfig.getHost()); - } - } - } - - hostAddress = this.cachedHostAddress; - - } else { - hostAddress = SyslogUtility.getInetAddress(this.syslogConfig.getHost()); - } - - return hostAddress; - } + private static final long serialVersionUID = -3250858945515853967L; + + protected static final Object cachedHostAddressSyncObject = new Object(); + + protected InetAddress cachedHostAddress = null; + + protected AbstractNetSyslogConfigIF netSyslogConfig = null; + + protected void initialize() throws SyslogRuntimeException { + try { + this.netSyslogConfig = (AbstractNetSyslogConfigIF) this.syslogConfig; + + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must implement interface AbstractNetSyslogConfigIF"); + } + } + + /** + * @return Returns an object of InetAddress of the local host, using caching if so directed. + */ + public InetAddress getHostAddress() { + InetAddress hostAddress = null; + + if (this.netSyslogConfig.isCacheHostAddress()) { + if (this.cachedHostAddress == null) { + synchronized (cachedHostAddressSyncObject) { + if (this.cachedHostAddress == null) { + this.cachedHostAddress = SyslogUtility.getInetAddress(this.syslogConfig.getHost()); + } + } + } + + hostAddress = this.cachedHostAddress; + + } else { + hostAddress = SyslogUtility.getInetAddress(this.syslogConfig.getHost()); + } + + return hostAddress; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfig.java index ec9935e..c1a04c0 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfig.java @@ -3,83 +3,83 @@ package org.graylog2.syslog4j.impl.net; import org.graylog2.syslog4j.impl.AbstractSyslogConfig; /** -* AbstractNetSyslogConfig is an abstract extension of AbstractSyslogConfig -* that provides configuration support for network-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractNetSyslogConfig.java,v 1.12 2010/10/25 03:50:25 cvs Exp $ -*/ + * AbstractNetSyslogConfig is an abstract extension of AbstractSyslogConfig + * that provides configuration support for network-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractNetSyslogConfig.java,v 1.12 2010/10/25 03:50:25 cvs Exp $ + */ public abstract class AbstractNetSyslogConfig extends AbstractSyslogConfig implements AbstractNetSyslogConfigIF { - private static final long serialVersionUID = 7240133962159244924L; + private static final long serialVersionUID = 7240133962159244924L; - protected String host = SYSLOG_HOST_DEFAULT; - protected int port = SYSLOG_PORT_DEFAULT; - - protected boolean cacheHostAddress = CACHE_HOST_ADDRESS_DEFAULT; - - protected int maxQueueSize = MAX_QUEUE_SIZE_DEFAULT; - - public AbstractNetSyslogConfig() { - // - } - - public AbstractNetSyslogConfig(int facility) { - this.facility = facility; - } + protected String host = SYSLOG_HOST_DEFAULT; + protected int port = SYSLOG_PORT_DEFAULT; - public AbstractNetSyslogConfig(int facility, String host) { - this.facility = facility; - this.host = host; - } + protected boolean cacheHostAddress = CACHE_HOST_ADDRESS_DEFAULT; - public AbstractNetSyslogConfig(String host) { - this.host = host; - } + protected int maxQueueSize = MAX_QUEUE_SIZE_DEFAULT; - public AbstractNetSyslogConfig(int facility, String host, int port) { - this.facility = facility; - this.host = host; - this.port = port; - } + public AbstractNetSyslogConfig() { + // + } - public AbstractNetSyslogConfig(String host, int port) { - this.host = host; - this.port = port; - } + public AbstractNetSyslogConfig(int facility) { + this.facility = facility; + } - public boolean isCacheHostAddress() { - return this.cacheHostAddress; - } - - public void setCacheHostAddress(boolean cacheHostAddress) { - this.cacheHostAddress = cacheHostAddress; - } - - public String getHost() { - return this.host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return this.port; - } - - public void setPort(int port) { - this.port = port; - } + public AbstractNetSyslogConfig(int facility, String host) { + this.facility = facility; + this.host = host; + } - public int getMaxQueueSize() { - return maxQueueSize; - } + public AbstractNetSyslogConfig(String host) { + this.host = host; + } - public void setMaxQueueSize(int maxQueueSize) { - this.maxQueueSize = maxQueueSize; - } + public AbstractNetSyslogConfig(int facility, String host, int port) { + this.facility = facility; + this.host = host; + this.port = port; + } + + public AbstractNetSyslogConfig(String host, int port) { + this.host = host; + this.port = port; + } + + public boolean isCacheHostAddress() { + return this.cacheHostAddress; + } + + public void setCacheHostAddress(boolean cacheHostAddress) { + this.cacheHostAddress = cacheHostAddress; + } + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return this.port; + } + + public void setPort(int port) { + this.port = port; + } + + public int getMaxQueueSize() { + return maxQueueSize; + } + + public void setMaxQueueSize(int maxQueueSize) { + this.maxQueueSize = maxQueueSize; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfigIF.java b/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfigIF.java index 53a522e..e84247c 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/AbstractNetSyslogConfigIF.java @@ -3,17 +3,18 @@ package org.graylog2.syslog4j.impl.net; import org.graylog2.syslog4j.impl.AbstractSyslogConfigIF; /** -* AbstractNetSyslogConfigIF is a configuration interface supporting network-based -* Syslog implementations. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractNetSyslogConfigIF.java,v 1.4 2009/06/06 19:11:02 cvs Exp $ -*/ + * AbstractNetSyslogConfigIF is a configuration interface supporting network-based + * Syslog implementations. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractNetSyslogConfigIF.java,v 1.4 2009/06/06 19:11:02 cvs Exp $ + */ public interface AbstractNetSyslogConfigIF extends AbstractSyslogConfigIF { - public boolean isCacheHostAddress(); - public void setCacheHostAddress(boolean cacheHostAddress); + public boolean isCacheHostAddress(); + + public void setCacheHostAddress(boolean cacheHostAddress); } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslog.java index 2e3da7c..dd4ffdf 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslog.java @@ -5,87 +5,87 @@ import org.graylog2.syslog4j.impl.AbstractSyslogWriter; import org.graylog2.syslog4j.impl.net.AbstractNetSyslog; /** -* TCPNetSyslog is an extension of AbstractSyslog that provides support for -* TCP/IP-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslog.java,v 1.21 2010/11/28 04:43:31 cvs Exp $ -*/ + * TCPNetSyslog is an extension of AbstractSyslog that provides support for + * TCP/IP-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslog.java,v 1.21 2010/11/28 04:43:31 cvs Exp $ + */ public class TCPNetSyslog extends AbstractNetSyslog { - private static final long serialVersionUID = -2157528355215068721L; + private static final long serialVersionUID = -2157528355215068721L; - protected TCPNetSyslogWriter writer = null; - - protected TCPNetSyslogConfigIF tcpNetSyslogConfig = null; - - public void initialize() throws SyslogRuntimeException { - super.initialize(); - - try { - this.tcpNetSyslogConfig = (TCPNetSyslogConfigIF) this.syslogConfig; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must implement interface TCPNetSyslogConfigIF"); - } - } + protected TCPNetSyslogWriter writer = null; - public AbstractSyslogWriter getWriter() { - return getWriter(true); - } + protected TCPNetSyslogConfigIF tcpNetSyslogConfig = null; - public synchronized AbstractSyslogWriter getWriter(boolean create) { - if (this.writer != null || !create) { - return this.writer; - } - - this.writer = (TCPNetSyslogWriter) createWriter(); + public void initialize() throws SyslogRuntimeException { + super.initialize(); - if (this.tcpNetSyslogConfig.isThreaded()) { - createWriterThread(this.writer); - } + try { + this.tcpNetSyslogConfig = (TCPNetSyslogConfigIF) this.syslogConfig; - return this.writer; - } - - protected void write(int level, byte[] message) throws SyslogRuntimeException { - AbstractSyslogWriter syslogWriter = getWriter(); - - try { - if (syslogWriter.hasThread()) { - syslogWriter.queue(level,message); - - } else { - synchronized(syslogWriter) { - syslogWriter.write(message); - } - } - - } finally { - returnWriter(syslogWriter); - } - } + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must implement interface TCPNetSyslogConfigIF"); + } + } - public void flush() throws SyslogRuntimeException { - AbstractSyslogWriter syslogWriter = getWriter(false); - - if (syslogWriter != null) { - syslogWriter.flush(); - } - } + public AbstractSyslogWriter getWriter() { + return getWriter(true); + } - public void shutdown() throws SyslogRuntimeException { - AbstractSyslogWriter syslogWriter = getWriter(false); - - if (syslogWriter != null) { - syslogWriter.shutdown(); - } - } + public synchronized AbstractSyslogWriter getWriter(boolean create) { + if (this.writer != null || !create) { + return this.writer; + } - public void returnWriter(AbstractSyslogWriter syslogWriter) { - // - } + this.writer = (TCPNetSyslogWriter) createWriter(); + + if (this.tcpNetSyslogConfig.isThreaded()) { + createWriterThread(this.writer); + } + + return this.writer; + } + + protected void write(int level, byte[] message) throws SyslogRuntimeException { + AbstractSyslogWriter syslogWriter = getWriter(); + + try { + if (syslogWriter.hasThread()) { + syslogWriter.queue(level, message); + + } else { + synchronized (syslogWriter) { + syslogWriter.write(message); + } + } + + } finally { + returnWriter(syslogWriter); + } + } + + public void flush() throws SyslogRuntimeException { + AbstractSyslogWriter syslogWriter = getWriter(false); + + if (syslogWriter != null) { + syslogWriter.flush(); + } + } + + public void shutdown() throws SyslogRuntimeException { + AbstractSyslogWriter syslogWriter = getWriter(false); + + if (syslogWriter != null) { + syslogWriter.shutdown(); + } + } + + public void returnWriter(AbstractSyslogWriter syslogWriter) { + // + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java index b4fda09..f80dee9 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java @@ -5,152 +5,152 @@ import org.graylog2.syslog4j.impl.net.AbstractNetSyslogConfig; import org.graylog2.syslog4j.util.SyslogUtility; /** -* TCPNetSyslogConfig is an extension of AbstractNetSyslogConfig that provides -* configuration support for TCP/IP-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogConfig.java,v 1.18 2010/10/29 03:14:12 cvs Exp $ -*/ + * TCPNetSyslogConfig is an extension of AbstractNetSyslogConfig that provides + * configuration support for TCP/IP-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogConfig.java,v 1.18 2010/10/29 03:14:12 cvs Exp $ + */ public class TCPNetSyslogConfig extends AbstractNetSyslogConfig implements TCPNetSyslogConfigIF { - private static final long serialVersionUID = 9023152050686365460L; - - public static byte[] SYSTEM_DELIMITER_SEQUENCE = null; - - static { - String delimiterSequence = System.getProperty("line.separator"); - - SYSTEM_DELIMITER_SEQUENCE = delimiterSequence.getBytes(); - - if (SYSTEM_DELIMITER_SEQUENCE == null || SYSTEM_DELIMITER_SEQUENCE.length < 1) { - SYSTEM_DELIMITER_SEQUENCE = SyslogConstants.TCP_DELIMITER_SEQUENCE_DEFAULT; - } - } - - protected byte[] delimiterSequence = SYSTEM_DELIMITER_SEQUENCE; - - protected boolean persistentConnection = TCP_PERSISTENT_CONNECTION_DEFAULT; - - protected boolean soLinger = TCP_SO_LINGER_DEFAULT; - protected int soLingerSeconds = TCP_SO_LINGER_SECONDS_DEFAULT; - - protected boolean keepAlive = TCP_KEEP_ALIVE_DEFAULT; - - protected boolean reuseAddress = TCP_REUSE_ADDRESS_DEFAULT; - - protected boolean setBufferSize = TCP_SET_BUFFER_SIZE_DEFAULT; - - protected int freshConnectionInterval = TCP_FRESH_CONNECTION_INTERVAL_DEFAULT; - - public TCPNetSyslogConfig() { - initialize(); - } - - protected void initialize() { - // - } + private static final long serialVersionUID = 9023152050686365460L; - public TCPNetSyslogConfig(int facility, String host, int port) { - super(facility, host, port); - initialize(); - } + public static byte[] SYSTEM_DELIMITER_SEQUENCE = null; - public TCPNetSyslogConfig(int facility, String host) { - super(facility, host); - initialize(); - } + static { + String delimiterSequence = System.getProperty("line.separator"); - public TCPNetSyslogConfig(int facility) { - super(facility); - initialize(); - } + SYSTEM_DELIMITER_SEQUENCE = delimiterSequence.getBytes(); - public TCPNetSyslogConfig(String host, int port) { - super(host, port); - initialize(); - } + if (SYSTEM_DELIMITER_SEQUENCE == null || SYSTEM_DELIMITER_SEQUENCE.length < 1) { + SYSTEM_DELIMITER_SEQUENCE = SyslogConstants.TCP_DELIMITER_SEQUENCE_DEFAULT; + } + } - public TCPNetSyslogConfig(String host) { - super(host); - initialize(); - } + protected byte[] delimiterSequence = SYSTEM_DELIMITER_SEQUENCE; - public Class getSyslogClass() { - return TCPNetSyslog.class; - } - - public byte[] getDelimiterSequence() { - return this.delimiterSequence; - } + protected boolean persistentConnection = TCP_PERSISTENT_CONNECTION_DEFAULT; - public void setDelimiterSequence(byte[] delimiterSequence) { - this.delimiterSequence = delimiterSequence; - } + protected boolean soLinger = TCP_SO_LINGER_DEFAULT; + protected int soLingerSeconds = TCP_SO_LINGER_SECONDS_DEFAULT; - public void setDelimiterSequence(String delimiterSequence) { - this.delimiterSequence = SyslogUtility.getBytes(this,delimiterSequence); - } + protected boolean keepAlive = TCP_KEEP_ALIVE_DEFAULT; - public boolean isPersistentConnection() { - return this.persistentConnection; - } + protected boolean reuseAddress = TCP_REUSE_ADDRESS_DEFAULT; - public void setPersistentConnection(boolean persistentConnection) { - this.persistentConnection = persistentConnection; - } + protected boolean setBufferSize = TCP_SET_BUFFER_SIZE_DEFAULT; - public boolean isSoLinger() { - return this.soLinger; - } + protected int freshConnectionInterval = TCP_FRESH_CONNECTION_INTERVAL_DEFAULT; - public void setSoLinger(boolean soLinger) { - this.soLinger = soLinger; - } + public TCPNetSyslogConfig() { + initialize(); + } - public int getSoLingerSeconds() { - return this.soLingerSeconds; - } + protected void initialize() { + // + } - public void setSoLingerSeconds(int soLingerSeconds) { - this.soLingerSeconds = soLingerSeconds; - } + public TCPNetSyslogConfig(int facility, String host, int port) { + super(facility, host, port); + initialize(); + } - public boolean isKeepAlive() { - return this.keepAlive; - } + public TCPNetSyslogConfig(int facility, String host) { + super(facility, host); + initialize(); + } - public void setKeepAlive(boolean keepAlive) { - this.keepAlive = keepAlive; - } + public TCPNetSyslogConfig(int facility) { + super(facility); + initialize(); + } - public boolean isReuseAddress() { - return this.reuseAddress; - } + public TCPNetSyslogConfig(String host, int port) { + super(host, port); + initialize(); + } - public void setReuseAddress(boolean reuseAddress) { - this.reuseAddress = reuseAddress; - } + public TCPNetSyslogConfig(String host) { + super(host); + initialize(); + } - public boolean isSetBufferSize() { - return this.setBufferSize; - } + public Class getSyslogClass() { + return TCPNetSyslog.class; + } - public void setSetBufferSize(boolean setBufferSize) { - this.setBufferSize = setBufferSize; - } + public byte[] getDelimiterSequence() { + return this.delimiterSequence; + } - public int getFreshConnectionInterval() { - return freshConnectionInterval; - } + public void setDelimiterSequence(byte[] delimiterSequence) { + this.delimiterSequence = delimiterSequence; + } - public void setFreshConnectionInterval(int freshConnectionInterval) { - this.freshConnectionInterval = freshConnectionInterval; - } + public void setDelimiterSequence(String delimiterSequence) { + this.delimiterSequence = SyslogUtility.getBytes(this, delimiterSequence); + } - public Class getSyslogWriterClass() { - return TCPNetSyslogWriter.class; - } + public boolean isPersistentConnection() { + return this.persistentConnection; + } + + public void setPersistentConnection(boolean persistentConnection) { + this.persistentConnection = persistentConnection; + } + + public boolean isSoLinger() { + return this.soLinger; + } + + public void setSoLinger(boolean soLinger) { + this.soLinger = soLinger; + } + + public int getSoLingerSeconds() { + return this.soLingerSeconds; + } + + public void setSoLingerSeconds(int soLingerSeconds) { + this.soLingerSeconds = soLingerSeconds; + } + + public boolean isKeepAlive() { + return this.keepAlive; + } + + public void setKeepAlive(boolean keepAlive) { + this.keepAlive = keepAlive; + } + + public boolean isReuseAddress() { + return this.reuseAddress; + } + + public void setReuseAddress(boolean reuseAddress) { + this.reuseAddress = reuseAddress; + } + + public boolean isSetBufferSize() { + return this.setBufferSize; + } + + public void setSetBufferSize(boolean setBufferSize) { + this.setBufferSize = setBufferSize; + } + + public int getFreshConnectionInterval() { + return freshConnectionInterval; + } + + public void setFreshConnectionInterval(int freshConnectionInterval) { + this.freshConnectionInterval = freshConnectionInterval; + } + + public Class getSyslogWriterClass() { + return TCPNetSyslogWriter.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java index 6c03af2..66b00c9 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java @@ -3,38 +3,46 @@ package org.graylog2.syslog4j.impl.net.tcp; import org.graylog2.syslog4j.impl.net.AbstractNetSyslogConfigIF; /** -* TCPNetSyslogConfigIF is a configuration interface supporting TCP/IP-based -* Syslog implementations. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogConfigIF.java,v 1.6 2010/10/29 03:14:12 cvs Exp $ -*/ + * TCPNetSyslogConfigIF is a configuration interface supporting TCP/IP-based + * Syslog implementations. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogConfigIF.java,v 1.6 2010/10/29 03:14:12 cvs Exp $ + */ public interface TCPNetSyslogConfigIF extends AbstractNetSyslogConfigIF { - public byte[] getDelimiterSequence(); - public void setDelimiterSequence(byte[] delimiterSequence); + public byte[] getDelimiterSequence(); - public boolean isPersistentConnection(); - public void setPersistentConnection(boolean persistentConnection); - - public boolean isSoLinger(); - public void setSoLinger(boolean soLinger); - - public int getSoLingerSeconds(); - public void setSoLingerSeconds(int soLingerSeconds); - - public boolean isKeepAlive(); - public void setKeepAlive(boolean keepAlive); - - public boolean isReuseAddress(); - public void setReuseAddress(boolean reuseAddress); - - public boolean isSetBufferSize(); - public void setSetBufferSize(boolean setBufferSize); + public void setDelimiterSequence(byte[] delimiterSequence); - public int getFreshConnectionInterval(); - public void setFreshConnectionInterval(int interval); + public boolean isPersistentConnection(); + + public void setPersistentConnection(boolean persistentConnection); + + public boolean isSoLinger(); + + public void setSoLinger(boolean soLinger); + + public int getSoLingerSeconds(); + + public void setSoLingerSeconds(int soLingerSeconds); + + public boolean isKeepAlive(); + + public void setKeepAlive(boolean keepAlive); + + public boolean isReuseAddress(); + + public void setReuseAddress(boolean reuseAddress); + + public boolean isSetBufferSize(); + + public void setSetBufferSize(boolean setBufferSize); + + public int getFreshConnectionInterval(); + + public void setFreshConnectionInterval(int interval); } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java index 68ab39a..aa7e84a 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java @@ -14,213 +14,213 @@ import org.graylog2.syslog4j.impl.AbstractSyslogWriter; import org.graylog2.syslog4j.util.SyslogUtility; /** -* TCPNetSyslogWriter is an implementation of Runnable that supports sending -* TCP-based messages within a separate Thread. -* -*When used in "threaded" mode (see TCPNetSyslogConfig for the option), -* a queuing mechanism is used (via LinkedList).
-* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogWriter.java,v 1.20 2010/11/28 01:38:08 cvs Exp $ -*/ + * TCPNetSyslogWriter is an implementation of Runnable that supports sending + * TCP-based messages within a separate Thread. + * + *When used in "threaded" mode (see TCPNetSyslogConfig for the option), + * a queuing mechanism is used (via LinkedList).
+ * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogWriter.java,v 1.20 2010/11/28 01:38:08 cvs Exp $ + */ public class TCPNetSyslogWriter extends AbstractSyslogWriter { - private static final long serialVersionUID = -6388813866108482855L; + private static final long serialVersionUID = -6388813866108482855L; - protected TCPNetSyslog tcpNetSyslog = null; - - protected Socket socket = null; - - protected TCPNetSyslogConfigIF tcpNetSyslogConfig = null; - - protected long lastSocketCreationTimeMs = 0; - - public TCPNetSyslogWriter() { - // - } - - public void initialize(AbstractSyslog abstractSyslog) { - super.initialize(abstractSyslog); - - this.tcpNetSyslog = (TCPNetSyslog) abstractSyslog; - - this.tcpNetSyslogConfig = (TCPNetSyslogConfigIF) this.tcpNetSyslog.getConfig(); - } - - protected SocketFactory obtainSocketFactory() { - return SocketFactory.getDefault(); - } - - protected Socket createSocket(InetAddress hostAddress, int port, boolean keepalive) throws IOException { - SocketFactory socketFactory = obtainSocketFactory(); - - Socket newSocket = socketFactory.createSocket(hostAddress,port); + protected TCPNetSyslog tcpNetSyslog = null; - if (this.tcpNetSyslogConfig.isSoLinger()) { - newSocket.setSoLinger(true,this.tcpNetSyslogConfig.getSoLingerSeconds()); - } - - if (this.tcpNetSyslogConfig.isKeepAlive()) { - newSocket.setKeepAlive(keepalive); - } - - if (this.tcpNetSyslogConfig.isReuseAddress()) { - newSocket.setReuseAddress(true); - } - - return newSocket; - } - - protected Socket getSocket() throws SyslogRuntimeException { - if (this.socket != null && this.socket.isConnected()) { - int freshConnectionInterval = this.tcpNetSyslogConfig.getFreshConnectionInterval(); - - if (freshConnectionInterval > 0) { - long currentTimeMs = System.currentTimeMillis(); - - if ((currentTimeMs - lastSocketCreationTimeMs) >= freshConnectionInterval) { - closeSocket(this.socket); - } - - } else { - return this.socket; - } - } - - if (this.socket == null) { - lastSocketCreationTimeMs = 0; - - try { - InetAddress hostAddress = this.tcpNetSyslog.getHostAddress(); - - this.socket = createSocket(hostAddress,this.syslog.getConfig().getPort(),this.tcpNetSyslogConfig.isPersistentConnection()); - lastSocketCreationTimeMs = System.currentTimeMillis(); - - } catch (IOException ioe) { - throw new SyslogRuntimeException(ioe); - } - } - - return this.socket; - } - - protected void closeSocket(Socket socketToClose) { - if (socketToClose == null) { - return; - } - - try { - socketToClose.close(); - - } catch (IOException ioe) { - if (!"Socket is closed".equalsIgnoreCase(ioe.getMessage())) { - throw new SyslogRuntimeException(ioe); - } - - } finally { - if (socketToClose == this.socket) { - this.socket = null; - } - } - } - - public void write(byte[] message) throws SyslogRuntimeException { - Socket currentSocket = null; - - int attempts = 0; - while(attempts != -1 && attempts < (this.tcpNetSyslogConfig.getWriteRetries() + 1)) { - try { - currentSocket = getSocket(); - - if (currentSocket == null) { - throw new SyslogRuntimeException("No socket available"); - } - - OutputStream os = currentSocket.getOutputStream(); - - if (this.tcpNetSyslogConfig.isSetBufferSize()) { - currentSocket.setSendBufferSize(message.length); - } - - os.write(message); - - byte[] delimiterSequence = this.tcpNetSyslogConfig.getDelimiterSequence(); - if (delimiterSequence != null && delimiterSequence.length > 0) { - os.write(delimiterSequence); - } - - this.syslog.setBackLogStatus(false); + protected Socket socket = null; - attempts = -1; - - if (!this.tcpNetSyslogConfig.isPersistentConnection()) { - closeSocket(currentSocket); - } - - } catch (IOException ioe) { - attempts++; - closeSocket(currentSocket); - - if (attempts >= (this.tcpNetSyslogConfig.getWriteRetries() + 1)) { - throw new SyslogRuntimeException(ioe); - } - } - } - } + protected TCPNetSyslogConfigIF tcpNetSyslogConfig = null; - public synchronized void flush() throws SyslogRuntimeException { - if (this.socket == null) { - return; - } - - if (this.syslogConfig.isThreaded()) { - this.shutdown(); - this.syslog.createWriterThread(this); - - } else { - closeSocket(this.socket); - } - } - - public synchronized void shutdown() throws SyslogRuntimeException { - this.shutdown = true; - - if (this.syslogConfig.isThreaded()) { - long timeStart = System.currentTimeMillis(); - boolean done = false; - - while(!done) { - if (this.socket == null || this.socket.isClosed()) { - done = true; - - } else { - long now = System.currentTimeMillis(); - - if (now > (timeStart + this.tcpNetSyslogConfig.getMaxShutdownWait())) { - closeSocket(this.socket); - this.thread.interrupt(); - done = true; - } - - if (!done) { - SyslogUtility.sleep(SyslogConstants.SHUTDOWN_INTERVAL); - } - } - } - - } else { - if (this.socket == null || this.socket.isClosed()) { - return; - } - - closeSocket(this.socket); - } - } - - protected void runCompleted() { - closeSocket(this.socket); - } + protected long lastSocketCreationTimeMs = 0; + + public TCPNetSyslogWriter() { + // + } + + public void initialize(AbstractSyslog abstractSyslog) { + super.initialize(abstractSyslog); + + this.tcpNetSyslog = (TCPNetSyslog) abstractSyslog; + + this.tcpNetSyslogConfig = (TCPNetSyslogConfigIF) this.tcpNetSyslog.getConfig(); + } + + protected SocketFactory obtainSocketFactory() { + return SocketFactory.getDefault(); + } + + protected Socket createSocket(InetAddress hostAddress, int port, boolean keepalive) throws IOException { + SocketFactory socketFactory = obtainSocketFactory(); + + Socket newSocket = socketFactory.createSocket(hostAddress, port); + + if (this.tcpNetSyslogConfig.isSoLinger()) { + newSocket.setSoLinger(true, this.tcpNetSyslogConfig.getSoLingerSeconds()); + } + + if (this.tcpNetSyslogConfig.isKeepAlive()) { + newSocket.setKeepAlive(keepalive); + } + + if (this.tcpNetSyslogConfig.isReuseAddress()) { + newSocket.setReuseAddress(true); + } + + return newSocket; + } + + protected Socket getSocket() throws SyslogRuntimeException { + if (this.socket != null && this.socket.isConnected()) { + int freshConnectionInterval = this.tcpNetSyslogConfig.getFreshConnectionInterval(); + + if (freshConnectionInterval > 0) { + long currentTimeMs = System.currentTimeMillis(); + + if ((currentTimeMs - lastSocketCreationTimeMs) >= freshConnectionInterval) { + closeSocket(this.socket); + } + + } else { + return this.socket; + } + } + + if (this.socket == null) { + lastSocketCreationTimeMs = 0; + + try { + InetAddress hostAddress = this.tcpNetSyslog.getHostAddress(); + + this.socket = createSocket(hostAddress, this.syslog.getConfig().getPort(), this.tcpNetSyslogConfig.isPersistentConnection()); + lastSocketCreationTimeMs = System.currentTimeMillis(); + + } catch (IOException ioe) { + throw new SyslogRuntimeException(ioe); + } + } + + return this.socket; + } + + protected void closeSocket(Socket socketToClose) { + if (socketToClose == null) { + return; + } + + try { + socketToClose.close(); + + } catch (IOException ioe) { + if (!"Socket is closed".equalsIgnoreCase(ioe.getMessage())) { + throw new SyslogRuntimeException(ioe); + } + + } finally { + if (socketToClose == this.socket) { + this.socket = null; + } + } + } + + public void write(byte[] message) throws SyslogRuntimeException { + Socket currentSocket = null; + + int attempts = 0; + while (attempts != -1 && attempts < (this.tcpNetSyslogConfig.getWriteRetries() + 1)) { + try { + currentSocket = getSocket(); + + if (currentSocket == null) { + throw new SyslogRuntimeException("No socket available"); + } + + OutputStream os = currentSocket.getOutputStream(); + + if (this.tcpNetSyslogConfig.isSetBufferSize()) { + currentSocket.setSendBufferSize(message.length); + } + + os.write(message); + + byte[] delimiterSequence = this.tcpNetSyslogConfig.getDelimiterSequence(); + if (delimiterSequence != null && delimiterSequence.length > 0) { + os.write(delimiterSequence); + } + + this.syslog.setBackLogStatus(false); + + attempts = -1; + + if (!this.tcpNetSyslogConfig.isPersistentConnection()) { + closeSocket(currentSocket); + } + + } catch (IOException ioe) { + attempts++; + closeSocket(currentSocket); + + if (attempts >= (this.tcpNetSyslogConfig.getWriteRetries() + 1)) { + throw new SyslogRuntimeException(ioe); + } + } + } + } + + public synchronized void flush() throws SyslogRuntimeException { + if (this.socket == null) { + return; + } + + if (this.syslogConfig.isThreaded()) { + this.shutdown(); + this.syslog.createWriterThread(this); + + } else { + closeSocket(this.socket); + } + } + + public synchronized void shutdown() throws SyslogRuntimeException { + this.shutdown = true; + + if (this.syslogConfig.isThreaded()) { + long timeStart = System.currentTimeMillis(); + boolean done = false; + + while (!done) { + if (this.socket == null || this.socket.isClosed()) { + done = true; + + } else { + long now = System.currentTimeMillis(); + + if (now > (timeStart + this.tcpNetSyslogConfig.getMaxShutdownWait())) { + closeSocket(this.socket); + this.thread.interrupt(); + done = true; + } + + if (!done) { + SyslogUtility.sleep(SyslogConstants.SHUTDOWN_INTERVAL); + } + } + } + + } else { + if (this.socket == null || this.socket.isClosed()) { + return; + } + + closeSocket(this.socket); + } + } + + protected void runCompleted() { + closeSocket(this.socket); + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslog.java index ee4a475..e306600 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslog.java @@ -7,70 +7,70 @@ import org.graylog2.syslog4j.impl.pool.AbstractSyslogPoolFactory; import org.graylog2.syslog4j.impl.pool.generic.GenericSyslogPoolFactory; /** -* PooledTCPNetSyslog is an extension of TCPNetSyslog which provides support -* for Apache Commons Pool. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: PooledTCPNetSyslog.java,v 1.5 2008/12/10 04:30:15 cvs Exp $ -*/ + * PooledTCPNetSyslog is an extension of TCPNetSyslog which provides support + * for Apache Commons Pool. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: PooledTCPNetSyslog.java,v 1.5 2008/12/10 04:30:15 cvs Exp $ + */ public class PooledTCPNetSyslog extends TCPNetSyslog { - private static final long serialVersionUID = 4279960451141784200L; - - protected AbstractSyslogPoolFactory poolFactory = null; + private static final long serialVersionUID = 4279960451141784200L; - public void initialize() throws SyslogRuntimeException { - super.initialize(); - - this.poolFactory = createSyslogPoolFactory(); - - this.poolFactory.initialize(this); - } - - protected AbstractSyslogPoolFactory createSyslogPoolFactory() { - AbstractSyslogPoolFactory syslogPoolFactory = new GenericSyslogPoolFactory(); - - return syslogPoolFactory; - } + protected AbstractSyslogPoolFactory poolFactory = null; - public AbstractSyslogWriter getWriter() { - try { - AbstractSyslogWriter syslogWriter = this.poolFactory.borrowSyslogWriter(); - - return syslogWriter; - - } catch (Exception e) { - throw new SyslogRuntimeException(e); - } - } + public void initialize() throws SyslogRuntimeException { + super.initialize(); - public void returnWriter(AbstractSyslogWriter syslogWriter) { - try { - this.poolFactory.returnSyslogWriter(syslogWriter); - - } catch (Exception e) { - throw new SyslogRuntimeException(e); - } - } + this.poolFactory = createSyslogPoolFactory(); - public void flush() throws SyslogRuntimeException { - try { - this.poolFactory.clear(); - - } catch (Exception e) { - // - } - } + this.poolFactory.initialize(this); + } - public void shutdown() throws SyslogRuntimeException { - try { - this.poolFactory.close(); - - } catch (Exception e) { - // - } - } + protected AbstractSyslogPoolFactory createSyslogPoolFactory() { + AbstractSyslogPoolFactory syslogPoolFactory = new GenericSyslogPoolFactory(); + + return syslogPoolFactory; + } + + public AbstractSyslogWriter getWriter() { + try { + AbstractSyslogWriter syslogWriter = this.poolFactory.borrowSyslogWriter(); + + return syslogWriter; + + } catch (Exception e) { + throw new SyslogRuntimeException(e); + } + } + + public void returnWriter(AbstractSyslogWriter syslogWriter) { + try { + this.poolFactory.returnSyslogWriter(syslogWriter); + + } catch (Exception e) { + throw new SyslogRuntimeException(e); + } + } + + public void flush() throws SyslogRuntimeException { + try { + this.poolFactory.clear(); + + } catch (Exception e) { + // + } + } + + public void shutdown() throws SyslogRuntimeException { + try { + this.poolFactory.close(); + + } catch (Exception e) { + // + } + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslogConfig.java index f4ea8e1..1af4172 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/pool/PooledTCPNetSyslogConfig.java @@ -5,168 +5,168 @@ import org.graylog2.syslog4j.SyslogPoolConfigIF; import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslogConfig; /** -* NetSyslogPoolFactory is an implementation of SyslogPoolConfigIF -* which provides configuration support for the Apache Commons Pool. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: PooledTCPNetSyslogConfig.java,v 1.3 2008/11/26 15:01:47 cvs Exp $ -*/ + * NetSyslogPoolFactory is an implementation of SyslogPoolConfigIF + * which provides configuration support for the Apache Commons Pool. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: PooledTCPNetSyslogConfig.java,v 1.3 2008/11/26 15:01:47 cvs Exp $ + */ public class PooledTCPNetSyslogConfig extends TCPNetSyslogConfig implements SyslogPoolConfigIF { - private static final long serialVersionUID = 2283355983363422888L; - - protected int maxActive = SYSLOG_POOL_CONFIG_MAX_ACTIVE_DEFAULT; - protected int maxIdle = SYSLOG_POOL_CONFIG_MAX_IDLE_DEFAULT; - protected long maxWait = SYSLOG_POOL_CONFIG_MAX_WAIT_DEFAULT; - protected long minEvictableIdleTimeMillis = SYSLOG_POOL_CONFIG_MIN_EVICTABLE_IDLE_TIME_MILLIS_DEFAULT; - protected int minIdle = SYSLOG_POOL_CONFIG_MIN_IDLE_DEFAULT; - protected int numTestsPerEvictionRun = SYSLOG_POOL_CONFIG_NUM_TESTS_PER_EVICTION_RUN_DEFAULT; - protected long softMinEvictableIdleTimeMillis = SYSLOG_POOL_CONFIG_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS_DEFAULT; - protected long timeBetweenEvictionRunsMillis = SYSLOG_POOL_CONFIG_TIME_BETWEEN_EVICTION_RUNS_MILLIS_DEFAULT; - protected byte whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_BLOCK; - protected boolean testOnBorrow = SYSLOG_POOL_CONFIG_TEST_ON_BORROW_DEFAULT; - protected boolean testOnReturn = SYSLOG_POOL_CONFIG_TEST_ON_RETURN_DEFAULT; - protected boolean testWhileIdle = SYSLOG_POOL_CONFIG_TEST_WHILE_IDLE_DEFAULT; - - public PooledTCPNetSyslogConfig() { - // - } + private static final long serialVersionUID = 2283355983363422888L; - public PooledTCPNetSyslogConfig(int facility, String host, int port) { - super(facility, host, port); - } + protected int maxActive = SYSLOG_POOL_CONFIG_MAX_ACTIVE_DEFAULT; + protected int maxIdle = SYSLOG_POOL_CONFIG_MAX_IDLE_DEFAULT; + protected long maxWait = SYSLOG_POOL_CONFIG_MAX_WAIT_DEFAULT; + protected long minEvictableIdleTimeMillis = SYSLOG_POOL_CONFIG_MIN_EVICTABLE_IDLE_TIME_MILLIS_DEFAULT; + protected int minIdle = SYSLOG_POOL_CONFIG_MIN_IDLE_DEFAULT; + protected int numTestsPerEvictionRun = SYSLOG_POOL_CONFIG_NUM_TESTS_PER_EVICTION_RUN_DEFAULT; + protected long softMinEvictableIdleTimeMillis = SYSLOG_POOL_CONFIG_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS_DEFAULT; + protected long timeBetweenEvictionRunsMillis = SYSLOG_POOL_CONFIG_TIME_BETWEEN_EVICTION_RUNS_MILLIS_DEFAULT; + protected byte whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_BLOCK; + protected boolean testOnBorrow = SYSLOG_POOL_CONFIG_TEST_ON_BORROW_DEFAULT; + protected boolean testOnReturn = SYSLOG_POOL_CONFIG_TEST_ON_RETURN_DEFAULT; + protected boolean testWhileIdle = SYSLOG_POOL_CONFIG_TEST_WHILE_IDLE_DEFAULT; - public PooledTCPNetSyslogConfig(int facility, String host) { - super(facility, host); - } + public PooledTCPNetSyslogConfig() { + // + } - public PooledTCPNetSyslogConfig(int facility) { - super(facility); - } + public PooledTCPNetSyslogConfig(int facility, String host, int port) { + super(facility, host, port); + } - public PooledTCPNetSyslogConfig(String host, int port) { - super(host, port); - } + public PooledTCPNetSyslogConfig(int facility, String host) { + super(facility, host); + } - public PooledTCPNetSyslogConfig(String host) { - super(host); - } - - protected void configureThreadedValues(int value) { - if (isThreaded()) { - this.minIdle = value; - this.maxIdle = value; - this.maxActive = value; - } - } - - public int getMaxActive() { - return this.maxActive; - } + public PooledTCPNetSyslogConfig(int facility) { + super(facility); + } - public void setMaxActive(int maxActive) { - configureThreadedValues(maxActive); - - this.maxActive = maxActive; - } + public PooledTCPNetSyslogConfig(String host, int port) { + super(host, port); + } - public int getMaxIdle() { - return this.maxIdle; - } + public PooledTCPNetSyslogConfig(String host) { + super(host); + } - public void setMaxIdle(int maxIdle) { - configureThreadedValues(maxIdle); - - this.maxIdle = maxIdle; - } + protected void configureThreadedValues(int value) { + if (isThreaded()) { + this.minIdle = value; + this.maxIdle = value; + this.maxActive = value; + } + } - public long getMaxWait() { - return this.maxWait; - } + public int getMaxActive() { + return this.maxActive; + } - public void setMaxWait(long maxWait) { - this.maxWait = maxWait; - } + public void setMaxActive(int maxActive) { + configureThreadedValues(maxActive); - public long getMinEvictableIdleTimeMillis() { - return this.minEvictableIdleTimeMillis; - } + this.maxActive = maxActive; + } - public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { - this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; - } + public int getMaxIdle() { + return this.maxIdle; + } - public int getMinIdle() { - return this.minIdle; - } + public void setMaxIdle(int maxIdle) { + configureThreadedValues(maxIdle); - public void setMinIdle(int minIdle) { - configureThreadedValues(minIdle); - - this.minIdle = minIdle; - } + this.maxIdle = maxIdle; + } - public int getNumTestsPerEvictionRun() { - return this.numTestsPerEvictionRun; - } + public long getMaxWait() { + return this.maxWait; + } - public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) { - this.numTestsPerEvictionRun = numTestsPerEvictionRun; - } + public void setMaxWait(long maxWait) { + this.maxWait = maxWait; + } - public long getSoftMinEvictableIdleTimeMillis() { - return this.softMinEvictableIdleTimeMillis; - } + public long getMinEvictableIdleTimeMillis() { + return this.minEvictableIdleTimeMillis; + } - public void setSoftMinEvictableIdleTimeMillis( - long softMinEvictableIdleTimeMillis) { - this.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis; - } + public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { + this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; + } - public long getTimeBetweenEvictionRunsMillis() { - return this.timeBetweenEvictionRunsMillis; - } + public int getMinIdle() { + return this.minIdle; + } - public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) { - this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; - } + public void setMinIdle(int minIdle) { + configureThreadedValues(minIdle); - public byte getWhenExhaustedAction() { - return this.whenExhaustedAction; - } + this.minIdle = minIdle; + } - public void setWhenExhaustedAction(byte whenExhaustedAction) { - this.whenExhaustedAction = whenExhaustedAction; - } + public int getNumTestsPerEvictionRun() { + return this.numTestsPerEvictionRun; + } - public boolean isTestOnBorrow() { - return this.testOnBorrow; - } + public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) { + this.numTestsPerEvictionRun = numTestsPerEvictionRun; + } - public void setTestOnBorrow(boolean testOnBorrow) { - this.testOnBorrow = testOnBorrow; - } + public long getSoftMinEvictableIdleTimeMillis() { + return this.softMinEvictableIdleTimeMillis; + } - public boolean isTestOnReturn() { - return this.testOnReturn; - } + public void setSoftMinEvictableIdleTimeMillis( + long softMinEvictableIdleTimeMillis) { + this.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis; + } - public void setTestOnReturn(boolean testOnReturn) { - this.testOnReturn = testOnReturn; - } + public long getTimeBetweenEvictionRunsMillis() { + return this.timeBetweenEvictionRunsMillis; + } - public boolean isTestWhileIdle() { - return this.testWhileIdle; - } + public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) { + this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; + } - public void setTestWhileIdle(boolean testWhileIdle) { - this.testWhileIdle = testWhileIdle; - } + public byte getWhenExhaustedAction() { + return this.whenExhaustedAction; + } - public Class getSyslogClass() { - return PooledTCPNetSyslog.class; - } + public void setWhenExhaustedAction(byte whenExhaustedAction) { + this.whenExhaustedAction = whenExhaustedAction; + } + + public boolean isTestOnBorrow() { + return this.testOnBorrow; + } + + public void setTestOnBorrow(boolean testOnBorrow) { + this.testOnBorrow = testOnBorrow; + } + + public boolean isTestOnReturn() { + return this.testOnReturn; + } + + public void setTestOnReturn(boolean testOnReturn) { + this.testOnReturn = testOnReturn; + } + + public boolean isTestWhileIdle() { + return this.testWhileIdle; + } + + public void setTestWhileIdle(boolean testWhileIdle) { + this.testWhileIdle = testWhileIdle; + } + + public Class getSyslogClass() { + return PooledTCPNetSyslog.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslog.java index 0cf6867..71de576 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslog.java @@ -4,46 +4,46 @@ import org.graylog2.syslog4j.SyslogRuntimeException; import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslog; /** -* SSLTCPNetSyslog is an extension of AbstractSyslog that provides support for -* TCP/IP-based (over SSL/TLS) syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslog.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslog is an extension of AbstractSyslog that provides support for + * TCP/IP-based (over SSL/TLS) syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslog.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ + */ public class SSLTCPNetSyslog extends TCPNetSyslog { - private static final long serialVersionUID = 2766654802524487317L; + private static final long serialVersionUID = 2766654802524487317L; - public void initialize() throws SyslogRuntimeException { - super.initialize(); - - SSLTCPNetSyslogConfigIF sslTcpNetSyslogConfig = (SSLTCPNetSyslogConfigIF) this.tcpNetSyslogConfig; - - String keyStore = sslTcpNetSyslogConfig.getKeyStore(); - - if (keyStore != null && !"".equals(keyStore.trim())) { - System.setProperty("javax.net.ssl.keyStore",keyStore); - } + public void initialize() throws SyslogRuntimeException { + super.initialize(); - String keyStorePassword = sslTcpNetSyslogConfig.getKeyStorePassword(); - - if (keyStorePassword != null && !"".equals(keyStorePassword.trim())) { - System.setProperty("javax.net.ssl.keyStorePassword",keyStorePassword); - } + SSLTCPNetSyslogConfigIF sslTcpNetSyslogConfig = (SSLTCPNetSyslogConfigIF) this.tcpNetSyslogConfig; - String trustStore = sslTcpNetSyslogConfig.getTrustStore(); - - if (trustStore != null && !"".equals(trustStore.trim())) { - System.setProperty("javax.net.ssl.trustStore",trustStore); - } + String keyStore = sslTcpNetSyslogConfig.getKeyStore(); - String trustStorePassword = sslTcpNetSyslogConfig.getTrustStorePassword(); - - if (trustStorePassword != null && !"".equals(trustStorePassword.trim())) { - System.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword); - } - } + if (keyStore != null && !"".equals(keyStore.trim())) { + System.setProperty("javax.net.ssl.keyStore", keyStore); + } + + String keyStorePassword = sslTcpNetSyslogConfig.getKeyStorePassword(); + + if (keyStorePassword != null && !"".equals(keyStorePassword.trim())) { + System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); + } + + String trustStore = sslTcpNetSyslogConfig.getTrustStore(); + + if (trustStore != null && !"".equals(trustStore.trim())) { + System.setProperty("javax.net.ssl.trustStore", trustStore); + } + + String trustStorePassword = sslTcpNetSyslogConfig.getTrustStorePassword(); + + if (trustStorePassword != null && !"".equals(trustStorePassword.trim())) { + System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword); + } + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfig.java index a88a1bd..34f4094 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfig.java @@ -3,86 +3,86 @@ package org.graylog2.syslog4j.impl.net.tcp.ssl; import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslogConfig; /** -* SSLTCPNetSyslogConfig is an extension of TCPNetSyslogConfig that provides -* configuration support for TCP/IP-based (over SSL/TLS) syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogConfig.java,v 1.2 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogConfig is an extension of TCPNetSyslogConfig that provides + * configuration support for TCP/IP-based (over SSL/TLS) syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogConfig.java,v 1.2 2009/03/29 17:38:58 cvs Exp $ + */ public class SSLTCPNetSyslogConfig extends TCPNetSyslogConfig implements SSLTCPNetSyslogConfigIF { - private static final long serialVersionUID = 5569086213824510834L; + private static final long serialVersionUID = 5569086213824510834L; - protected String keyStore = null; - protected String keyStorePassword = null; + protected String keyStore = null; + protected String keyStorePassword = null; - protected String trustStore = null; - protected String trustStorePassword = null; + protected String trustStore = null; + protected String trustStorePassword = null; - public SSLTCPNetSyslogConfig() { - // - } + public SSLTCPNetSyslogConfig() { + // + } - public SSLTCPNetSyslogConfig(int facility, String host, int port) { - super(facility, host, port); - } + public SSLTCPNetSyslogConfig(int facility, String host, int port) { + super(facility, host, port); + } - public SSLTCPNetSyslogConfig(int facility, String host) { - super(facility, host); - } + public SSLTCPNetSyslogConfig(int facility, String host) { + super(facility, host); + } - public SSLTCPNetSyslogConfig(int facility) { - super(facility); - } + public SSLTCPNetSyslogConfig(int facility) { + super(facility); + } - public SSLTCPNetSyslogConfig(String host, int port) { - super(host, port); - } + public SSLTCPNetSyslogConfig(String host, int port) { + super(host, port); + } - public SSLTCPNetSyslogConfig(String host) { - super(host); - } - - public String getKeyStore() { - return this.keyStore; - } - - public void setKeyStore(String keyStore) { - this.keyStore = keyStore; - } - - public String getKeyStorePassword() { - return this.keyStorePassword; - } - - public void setKeyStorePassword(String keyStorePassword) { - this.keyStorePassword = keyStorePassword; - } + public SSLTCPNetSyslogConfig(String host) { + super(host); + } - public String getTrustStore() { - return this.trustStore; - } + public String getKeyStore() { + return this.keyStore; + } - public void setTrustStore(String trustStore) { - this.trustStore = trustStore; - } + public void setKeyStore(String keyStore) { + this.keyStore = keyStore; + } - public String getTrustStorePassword() { - return this.trustStorePassword; - } + public String getKeyStorePassword() { + return this.keyStorePassword; + } - public void setTrustStorePassword(String trustStorePassword) { - this.trustStorePassword = trustStorePassword; - } + public void setKeyStorePassword(String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } - public Class getSyslogClass() { - return SSLTCPNetSyslog.class; - } + public String getTrustStore() { + return this.trustStore; + } - public Class getSyslogWriterClass() { - return SSLTCPNetSyslogWriter.class; - } + public void setTrustStore(String trustStore) { + this.trustStore = trustStore; + } + + public String getTrustStorePassword() { + return this.trustStorePassword; + } + + public void setTrustStorePassword(String trustStorePassword) { + this.trustStorePassword = trustStorePassword; + } + + public Class getSyslogClass() { + return SSLTCPNetSyslog.class; + } + + public Class getSyslogWriterClass() { + return SSLTCPNetSyslogWriter.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfigIF.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfigIF.java index 6065354..fd311f5 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogConfigIF.java @@ -3,26 +3,30 @@ package org.graylog2.syslog4j.impl.net.tcp.ssl; import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslogConfigIF; /** -* SSLTCPNetSyslogConfigIF is a configuration interface supporting TCP/IP-based -* (over SSL/TLS) Syslog implementations. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogConfigIF.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogConfigIF is a configuration interface supporting TCP/IP-based + * (over SSL/TLS) Syslog implementations. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogConfigIF.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ + */ public interface SSLTCPNetSyslogConfigIF extends TCPNetSyslogConfigIF { - public String getKeyStore(); - public void setKeyStore(String keyStore); - - public String getKeyStorePassword(); - public void setKeyStorePassword(String keyStorePassword); + public String getKeyStore(); - public String getTrustStore(); - public void setTrustStore(String trustStore); - - public String getTrustStorePassword(); - public void setTrustStorePassword(String trustStorePassword); + public void setKeyStore(String keyStore); + + public String getKeyStorePassword(); + + public void setKeyStorePassword(String keyStorePassword); + + public String getTrustStore(); + + public void setTrustStore(String trustStore); + + public String getTrustStorePassword(); + + public void setTrustStorePassword(String trustStorePassword); } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogWriter.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogWriter.java index c60832f..24af464 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogWriter.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/SSLTCPNetSyslogWriter.java @@ -6,23 +6,23 @@ import javax.net.ssl.SSLSocketFactory; import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslogWriter; /** -* SSLTCPNetSyslogWriter is an implementation of Runnable that supports sending -* TCP/IP-based (over SSL/TLS) messages within a separate Thread. -* -*When used in "threaded" mode (see TCPNetSyslogConfig for the option), -* a queuing mechanism is used (via LinkedList).
-* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogWriter.java,v 1.4 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogWriter is an implementation of Runnable that supports sending + * TCP/IP-based (over SSL/TLS) messages within a separate Thread. + * + *When used in "threaded" mode (see TCPNetSyslogConfig for the option), + * a queuing mechanism is used (via LinkedList).
+ * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogWriter.java,v 1.4 2009/03/29 17:38:58 cvs Exp $ + */ public class SSLTCPNetSyslogWriter extends TCPNetSyslogWriter { - private static final long serialVersionUID = 8944446235285662244L; + private static final long serialVersionUID = 8944446235285662244L; - protected SocketFactory obtainSocketFactory() { - return SSLSocketFactory.getDefault(); - } + protected SocketFactory obtainSocketFactory() { + return SSLSocketFactory.getDefault(); + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/pool/PooledSSLTCPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/pool/PooledSSLTCPNetSyslogConfig.java index 4591070..6e96ba7 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/pool/PooledSSLTCPNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/ssl/pool/PooledSSLTCPNetSyslogConfig.java @@ -6,86 +6,86 @@ import org.graylog2.syslog4j.impl.net.tcp.ssl.SSLTCPNetSyslogConfigIF; import org.graylog2.syslog4j.impl.net.tcp.ssl.SSLTCPNetSyslogWriter; /** -* PooledSSLTCPNetSyslogConfig is an extension of PooledTCPNetSyslogConfig -* which provides configuration support for the Apache Commons Pool. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: PooledSSLTCPNetSyslogConfig.java,v 1.2 2009/03/29 17:38:58 cvs Exp $ -*/ + * PooledSSLTCPNetSyslogConfig is an extension of PooledTCPNetSyslogConfig + * which provides configuration support for the Apache Commons Pool. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: PooledSSLTCPNetSyslogConfig.java,v 1.2 2009/03/29 17:38:58 cvs Exp $ + */ public class PooledSSLTCPNetSyslogConfig extends PooledTCPNetSyslogConfig implements SSLTCPNetSyslogConfigIF { - private static final long serialVersionUID = 2092268298395023976L; + private static final long serialVersionUID = 2092268298395023976L; - protected String keyStore = null; - protected String keyStorePassword = null; + protected String keyStore = null; + protected String keyStorePassword = null; - protected String trustStore = null; - protected String trustStorePassword = null; + protected String trustStore = null; + protected String trustStorePassword = null; - public PooledSSLTCPNetSyslogConfig() { - super(); - } + public PooledSSLTCPNetSyslogConfig() { + super(); + } - public PooledSSLTCPNetSyslogConfig(int facility, String host, int port) { - super(facility, host, port); - } + public PooledSSLTCPNetSyslogConfig(int facility, String host, int port) { + super(facility, host, port); + } - public PooledSSLTCPNetSyslogConfig(int facility, String host) { - super(facility, host); - } + public PooledSSLTCPNetSyslogConfig(int facility, String host) { + super(facility, host); + } - public PooledSSLTCPNetSyslogConfig(int facility) { - super(facility); - } + public PooledSSLTCPNetSyslogConfig(int facility) { + super(facility); + } - public PooledSSLTCPNetSyslogConfig(String host, int port) { - super(host, port); - } + public PooledSSLTCPNetSyslogConfig(String host, int port) { + super(host, port); + } - public PooledSSLTCPNetSyslogConfig(String host) { - super(host); - } - - public String getKeyStore() { - return this.keyStore; - } - - public void setKeyStore(String keyStore) { - this.keyStore = keyStore; - } - - public String getKeyStorePassword() { - return this.keyStorePassword; - } - - public void setKeyStorePassword(String keyStorePassword) { - this.keyStorePassword = keyStorePassword; - } + public PooledSSLTCPNetSyslogConfig(String host) { + super(host); + } - public String getTrustStore() { - return this.trustStore; - } + public String getKeyStore() { + return this.keyStore; + } - public void setTrustStore(String trustStore) { - this.trustStore = trustStore; - } + public void setKeyStore(String keyStore) { + this.keyStore = keyStore; + } - public String getTrustStorePassword() { - return this.trustStorePassword; - } + public String getKeyStorePassword() { + return this.keyStorePassword; + } - public void setTrustStorePassword(String trustStorePassword) { - this.trustStorePassword = trustStorePassword; - } + public void setKeyStorePassword(String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } - public Class getSyslogClass() { - return SSLTCPNetSyslog.class; - } + public String getTrustStore() { + return this.trustStore; + } - public Class getSyslogWriterClass() { - return SSLTCPNetSyslogWriter.class; - } + public void setTrustStore(String trustStore) { + this.trustStore = trustStore; + } + + public String getTrustStorePassword() { + return this.trustStorePassword; + } + + public void setTrustStorePassword(String trustStorePassword) { + this.trustStorePassword = trustStorePassword; + } + + public Class getSyslogClass() { + return SSLTCPNetSyslog.class; + } + + public Class getSyslogWriterClass() { + return SSLTCPNetSyslogWriter.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslog.java index aea7a44..c18be95 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslog.java @@ -11,94 +11,94 @@ import org.graylog2.syslog4j.impl.AbstractSyslogWriter; import org.graylog2.syslog4j.impl.net.AbstractNetSyslog; /** -* UDPNetSyslog is an extension of AbstractSyslog that provides support for -* UDP/IP-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UDPNetSyslog.java,v 1.18 2010/10/27 06:18:10 cvs Exp $ -*/ + * UDPNetSyslog is an extension of AbstractSyslog that provides support for + * UDP/IP-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UDPNetSyslog.java,v 1.18 2010/10/27 06:18:10 cvs Exp $ + */ public class UDPNetSyslog extends AbstractNetSyslog { - private static final long serialVersionUID = 5259485504549037999L; - - protected DatagramSocket socket = null; - - public void initialize() throws SyslogRuntimeException { - super.initialize(); - - createDatagramSocket(true); - } - - protected synchronized void createDatagramSocket(boolean initialize) { - try { - this.socket = new DatagramSocket(); - - } catch (SocketException se) { - if (initialize) { - if (this.syslogConfig.isThrowExceptionOnInitialize()) { - throw new SyslogRuntimeException(se); - } - - } else { - throw new SyslogRuntimeException(se); - } - } - - if (this.socket == null) { - throw new SyslogRuntimeException("Cannot seem to get a Datagram socket"); - } - } + private static final long serialVersionUID = 5259485504549037999L; + + protected DatagramSocket socket = null; + + public void initialize() throws SyslogRuntimeException { + super.initialize(); + + createDatagramSocket(true); + } + + protected synchronized void createDatagramSocket(boolean initialize) { + try { + this.socket = new DatagramSocket(); + + } catch (SocketException se) { + if (initialize) { + if (this.syslogConfig.isThrowExceptionOnInitialize()) { + throw new SyslogRuntimeException(se); + } + + } else { + throw new SyslogRuntimeException(se); + } + } + + if (this.socket == null) { + throw new SyslogRuntimeException("Cannot seem to get a Datagram socket"); + } + } + + protected void write(int level, byte[] message) throws SyslogRuntimeException { + if (this.socket == null) { + createDatagramSocket(false); + } + + InetAddress hostAddress = getHostAddress(); - protected void write(int level, byte[] message) throws SyslogRuntimeException { - if (this.socket == null) { - createDatagramSocket(false); - } - - InetAddress hostAddress = getHostAddress(); - DatagramPacket packet = new DatagramPacket( - message, - message.length, - hostAddress, - this.syslogConfig.getPort() + message, + message.length, + hostAddress, + this.syslogConfig.getPort() ); int attempts = 0; - - while(attempts != -1 && attempts < (this.netSyslogConfig.getWriteRetries() + 1)) { - try { - this.socket.send(packet); - attempts = -1; - - } catch (IOException ioe) { - if (attempts == (this.netSyslogConfig.getWriteRetries() + 1)) { - throw new SyslogRuntimeException(ioe); - } - } + + while (attempts != -1 && attempts < (this.netSyslogConfig.getWriteRetries() + 1)) { + try { + this.socket.send(packet); + attempts = -1; + + } catch (IOException ioe) { + if (attempts == (this.netSyslogConfig.getWriteRetries() + 1)) { + throw new SyslogRuntimeException(ioe); + } + } } - } + } - public void flush() throws SyslogRuntimeException { - shutdown(); - - createDatagramSocket(true); - } - - public void shutdown() throws SyslogRuntimeException { - if (this.socket != null) { - this.socket.close(); - this.socket = null; - } - } + public void flush() throws SyslogRuntimeException { + shutdown(); - public AbstractSyslogWriter getWriter() { - return null; - } + createDatagramSocket(true); + } - public void returnWriter(AbstractSyslogWriter syslogWriter) { - // - } + public void shutdown() throws SyslogRuntimeException { + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + } + + public AbstractSyslogWriter getWriter() { + return null; + } + + public void returnWriter(AbstractSyslogWriter syslogWriter) { + // + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslogConfig.java index 4310a45..3146d0d 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/net/udp/UDPNetSyslogConfig.java @@ -3,44 +3,44 @@ package org.graylog2.syslog4j.impl.net.udp; import org.graylog2.syslog4j.impl.net.AbstractNetSyslogConfig; /** -* UDPNetSyslogConfig is an extension of AbstractNetSyslogConfig that provides -* configuration support for UDP/IP-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UDPNetSyslogConfig.java,v 1.6 2008/11/14 04:32:00 cvs Exp $ -*/ + * UDPNetSyslogConfig is an extension of AbstractNetSyslogConfig that provides + * configuration support for UDP/IP-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UDPNetSyslogConfig.java,v 1.6 2008/11/14 04:32:00 cvs Exp $ + */ public class UDPNetSyslogConfig extends AbstractNetSyslogConfig { - private static final long serialVersionUID = 4465067182562754345L; - - public UDPNetSyslogConfig() { - super(); - } + private static final long serialVersionUID = 4465067182562754345L; - public UDPNetSyslogConfig(int facility, String host, int port) { - super(facility,host,port); - } + public UDPNetSyslogConfig() { + super(); + } - public UDPNetSyslogConfig(int facility, String host) { - super(facility,host); - } + public UDPNetSyslogConfig(int facility, String host, int port) { + super(facility, host, port); + } - public UDPNetSyslogConfig(int facility) { - super(facility); - } + public UDPNetSyslogConfig(int facility, String host) { + super(facility, host); + } - public UDPNetSyslogConfig(String host, int port) { - super(host,port); - } + public UDPNetSyslogConfig(int facility) { + super(facility); + } - public UDPNetSyslogConfig(String host) { - super(host); - } + public UDPNetSyslogConfig(String host, int port) { + super(host, port); + } - public Class getSyslogClass() { - return UDPNetSyslog.class; - } + public UDPNetSyslogConfig(String host) { + super(host); + } + + public Class getSyslogClass() { + return UDPNetSyslog.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/pool/AbstractSyslogPoolFactory.java b/src/main/java/org/graylog2/syslog4j/impl/pool/AbstractSyslogPoolFactory.java index cb1a0c5..ef2a48f 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/pool/AbstractSyslogPoolFactory.java +++ b/src/main/java/org/graylog2/syslog4j/impl/pool/AbstractSyslogPoolFactory.java @@ -8,77 +8,77 @@ import org.graylog2.syslog4j.impl.AbstractSyslogConfigIF; import org.graylog2.syslog4j.impl.AbstractSyslogWriter; /** -* AbstractSyslogPoolFactory is an abstract implementation of the Apache Commons Pool -* BasePoolableObjectFactory. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractSyslogPoolFactory.java,v 1.5 2008/12/10 04:15:11 cvs Exp $ -* @see org.graylog2.syslog4j.impl.pool.generic.GenericSyslogPoolFactory -*/ + * AbstractSyslogPoolFactory is an abstract implementation of the Apache Commons Pool + * BasePoolableObjectFactory. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractSyslogPoolFactory.java,v 1.5 2008/12/10 04:15:11 cvs Exp $ + * @see org.graylog2.syslog4j.impl.pool.generic.GenericSyslogPoolFactory + */ public abstract class AbstractSyslogPoolFactory extends BasePoolableObjectFactory { - private static final long serialVersionUID = -7441569603980981508L; - - protected AbstractSyslog syslog = null; - protected AbstractSyslogConfigIF syslogConfig = null; - - protected ObjectPool pool = null; - - public AbstractSyslogPoolFactory() { - // - } + private static final long serialVersionUID = -7441569603980981508L; - public void initialize(AbstractSyslog abstractSyslog) throws SyslogRuntimeException { - this.syslog = abstractSyslog; - - try { - this.syslogConfig = (AbstractSyslogConfigIF) this.syslog.getConfig(); + protected AbstractSyslog syslog = null; + protected AbstractSyslogConfigIF syslogConfig = null; - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must implement AbstractSyslogConfigIF"); - } - - this.pool = createPool(); - } + protected ObjectPool pool = null; - public Object makeObject() throws Exception { - AbstractSyslogWriter syslogWriter = this.syslog.createWriter(); - - if (this.syslogConfig.isThreaded()) { - this.syslog.createWriterThread(syslogWriter); - } - - return syslogWriter; - } + public AbstractSyslogPoolFactory() { + // + } - public void destroyObject(Object obj) throws Exception { - AbstractSyslogWriter writer = (AbstractSyslogWriter) obj; + public void initialize(AbstractSyslog abstractSyslog) throws SyslogRuntimeException { + this.syslog = abstractSyslog; - writer.shutdown(); - - super.destroyObject(writer); - } - - public abstract ObjectPool createPool() throws SyslogRuntimeException; - - public AbstractSyslogWriter borrowSyslogWriter() throws Exception { - AbstractSyslogWriter syslogWriter = (AbstractSyslogWriter) this.pool.borrowObject(); - - return syslogWriter; - } + try { + this.syslogConfig = (AbstractSyslogConfigIF) this.syslog.getConfig(); - public void returnSyslogWriter(AbstractSyslogWriter syslogWriter) throws Exception { - this.pool.returnObject(syslogWriter); - } + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must implement AbstractSyslogConfigIF"); + } - public void clear() throws Exception { - this.pool.clear(); - } - - public void close() throws Exception { - this.pool.close(); - } + this.pool = createPool(); + } + + public Object makeObject() throws Exception { + AbstractSyslogWriter syslogWriter = this.syslog.createWriter(); + + if (this.syslogConfig.isThreaded()) { + this.syslog.createWriterThread(syslogWriter); + } + + return syslogWriter; + } + + public void destroyObject(Object obj) throws Exception { + AbstractSyslogWriter writer = (AbstractSyslogWriter) obj; + + writer.shutdown(); + + super.destroyObject(writer); + } + + public abstract ObjectPool createPool() throws SyslogRuntimeException; + + public AbstractSyslogWriter borrowSyslogWriter() throws Exception { + AbstractSyslogWriter syslogWriter = (AbstractSyslogWriter) this.pool.borrowObject(); + + return syslogWriter; + } + + public void returnSyslogWriter(AbstractSyslogWriter syslogWriter) throws Exception { + this.pool.returnObject(syslogWriter); + } + + public void clear() throws Exception { + this.pool.clear(); + } + + public void close() throws Exception { + this.pool.close(); + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/pool/generic/GenericSyslogPoolFactory.java b/src/main/java/org/graylog2/syslog4j/impl/pool/generic/GenericSyslogPoolFactory.java index f291114..0fba0ad 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/pool/generic/GenericSyslogPoolFactory.java +++ b/src/main/java/org/graylog2/syslog4j/impl/pool/generic/GenericSyslogPoolFactory.java @@ -7,46 +7,46 @@ import org.graylog2.syslog4j.SyslogRuntimeException; import org.graylog2.syslog4j.impl.pool.AbstractSyslogPoolFactory; /** -* GenericSyslogPoolFactory is an implementation of the Apache Commons Pool -* BasePoolableObjectFactory using a GenericObjectPool. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: GenericSyslogPoolFactory.java,v 1.5 2008/12/10 04:15:10 cvs Exp $ -*/ + * GenericSyslogPoolFactory is an implementation of the Apache Commons Pool + * BasePoolableObjectFactory using a GenericObjectPool. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: GenericSyslogPoolFactory.java,v 1.5 2008/12/10 04:15:10 cvs Exp $ + */ public class GenericSyslogPoolFactory extends AbstractSyslogPoolFactory { - protected void configureGenericObjectPool(GenericObjectPool genericObjectPool) throws SyslogRuntimeException { - SyslogPoolConfigIF poolConfig = null; - - try { - poolConfig = (SyslogPoolConfigIF) this.syslog.getConfig(); - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must implement interface SyslogPoolConfigIF"); - } - - genericObjectPool.setMaxActive(poolConfig.getMaxActive()); - genericObjectPool.setMaxIdle(poolConfig.getMaxIdle()); - genericObjectPool.setMaxWait(poolConfig.getMaxWait()); - genericObjectPool.setMinEvictableIdleTimeMillis(poolConfig.getMinEvictableIdleTimeMillis()); - genericObjectPool.setMinIdle(poolConfig.getMinIdle()); - genericObjectPool.setNumTestsPerEvictionRun(poolConfig.getNumTestsPerEvictionRun()); - genericObjectPool.setSoftMinEvictableIdleTimeMillis(poolConfig.getSoftMinEvictableIdleTimeMillis()); - genericObjectPool.setTestOnBorrow(poolConfig.isTestOnBorrow()); - genericObjectPool.setTestOnReturn(poolConfig.isTestOnReturn()); - genericObjectPool.setTestWhileIdle(poolConfig.isTestWhileIdle()); - genericObjectPool.setTimeBetweenEvictionRunsMillis(poolConfig.getTimeBetweenEvictionRunsMillis()); - genericObjectPool.setWhenExhaustedAction(poolConfig.getWhenExhaustedAction()); - } - - public ObjectPool createPool() throws SyslogRuntimeException { - GenericObjectPool genericPool = new GenericObjectPool(this); - - configureGenericObjectPool(genericPool); - - return genericPool; - } + protected void configureGenericObjectPool(GenericObjectPool genericObjectPool) throws SyslogRuntimeException { + SyslogPoolConfigIF poolConfig = null; + + try { + poolConfig = (SyslogPoolConfigIF) this.syslog.getConfig(); + + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must implement interface SyslogPoolConfigIF"); + } + + genericObjectPool.setMaxActive(poolConfig.getMaxActive()); + genericObjectPool.setMaxIdle(poolConfig.getMaxIdle()); + genericObjectPool.setMaxWait(poolConfig.getMaxWait()); + genericObjectPool.setMinEvictableIdleTimeMillis(poolConfig.getMinEvictableIdleTimeMillis()); + genericObjectPool.setMinIdle(poolConfig.getMinIdle()); + genericObjectPool.setNumTestsPerEvictionRun(poolConfig.getNumTestsPerEvictionRun()); + genericObjectPool.setSoftMinEvictableIdleTimeMillis(poolConfig.getSoftMinEvictableIdleTimeMillis()); + genericObjectPool.setTestOnBorrow(poolConfig.isTestOnBorrow()); + genericObjectPool.setTestOnReturn(poolConfig.isTestOnReturn()); + genericObjectPool.setTestWhileIdle(poolConfig.isTestWhileIdle()); + genericObjectPool.setTimeBetweenEvictionRunsMillis(poolConfig.getTimeBetweenEvictionRunsMillis()); + genericObjectPool.setWhenExhaustedAction(poolConfig.getWhenExhaustedAction()); + } + + public ObjectPool createPool() throws SyslogRuntimeException { + GenericObjectPool genericPool = new GenericObjectPool(this); + + configureGenericObjectPool(genericPool); + + return genericPool; + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslog.java index e3e31ae..1bc66a1 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslog.java @@ -11,115 +11,117 @@ import com.sun.jna.Memory; import com.sun.jna.Native; /** -* UnixSyslog is an extension of AbstractSyslog that provides support for -* Unix-based syslog clients. -* -*This class requires the JNA (Java Native Access) library to directly -* access the native C libraries utilized on Unix platforms.
-* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UnixSyslog.java,v 1.27 2010/10/25 04:21:19 cvs Exp $ -*/ + * UnixSyslog is an extension of AbstractSyslog that provides support for + * Unix-based syslog clients. + * + *This class requires the JNA (Java Native Access) library to directly + * access the native C libraries utilized on Unix platforms.
+ * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UnixSyslog.java,v 1.27 2010/10/25 04:21:19 cvs Exp $ + */ public class UnixSyslog extends AbstractSyslog { - private static final long serialVersionUID = 4973353204252276740L; - - protected UnixSyslogConfig unixSyslogConfig = null; - + private static final long serialVersionUID = 4973353204252276740L; + + protected UnixSyslogConfig unixSyslogConfig = null; + protected interface CLibrary extends Library { public void openlog(final Memory ident, int option, int facility); + public void syslog(int priority, final String format, final String message); + public void closelog(); } - - protected static int currentFacility = -1; + + protected static int currentFacility = -1; protected static boolean openlogCalled = false; - + protected static CLibrary libraryInstance = null; - protected static synchronized void loadLibrary(UnixSyslogConfig config) throws SyslogRuntimeException { - if (!OSDetectUtility.isUnix()) { - throw new SyslogRuntimeException("UnixSyslog not supported on non-Unix platforms"); - } - - if (libraryInstance == null) { - libraryInstance = (CLibrary) Native.loadLibrary(config.getLibrary(),CLibrary.class); - } - } + protected static synchronized void loadLibrary(UnixSyslogConfig config) throws SyslogRuntimeException { + if (!OSDetectUtility.isUnix()) { + throw new SyslogRuntimeException("UnixSyslog not supported on non-Unix platforms"); + } - public void initialize() throws SyslogRuntimeException { - try { - this.unixSyslogConfig = (UnixSyslogConfig) this.syslogConfig; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must be of type UnixSyslogConfig"); - } - - loadLibrary(this.unixSyslogConfig); - } - - protected static void write(int level, String message, UnixSyslogConfig config) throws SyslogRuntimeException { - synchronized(libraryInstance) { - if (currentFacility != config.getFacility()) { - if (openlogCalled) { - libraryInstance.closelog(); - openlogCalled = false; - } - - currentFacility = config.getFacility(); - } - - if (!openlogCalled) { - String ident = config.getIdent(); - - if (ident != null && "".equals(ident.trim())) { - ident = null; - } - - Memory identBuffer = null; - - if (ident != null) { - identBuffer = new Memory(128); - identBuffer.setString(0, ident, false); - } - - libraryInstance.openlog(identBuffer,config.getOption(),currentFacility); - openlogCalled = true; - } + if (libraryInstance == null) { + libraryInstance = (CLibrary) Native.loadLibrary(config.getLibrary(), CLibrary.class); + } + } - int priority = currentFacility | level; - - libraryInstance.syslog(priority,"%s",message); - } - } + public void initialize() throws SyslogRuntimeException { + try { + this.unixSyslogConfig = (UnixSyslogConfig) this.syslogConfig; - protected void write(int level, byte[] message) throws SyslogRuntimeException { - // NO-OP - } + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must be of type UnixSyslogConfig"); + } - public void log(SyslogMessageProcessorIF messageProcessor, int level, String message) { - write(level,message,this.unixSyslogConfig); - } - - public void flush() throws SyslogRuntimeException { - synchronized(libraryInstance) { - libraryInstance.closelog(); - openlogCalled = false; - } - } + loadLibrary(this.unixSyslogConfig); + } - public void shutdown() throws SyslogRuntimeException { - flush(); - } + protected static void write(int level, String message, UnixSyslogConfig config) throws SyslogRuntimeException { + synchronized (libraryInstance) { + if (currentFacility != config.getFacility()) { + if (openlogCalled) { + libraryInstance.closelog(); + openlogCalled = false; + } - public AbstractSyslogWriter getWriter() { - return null; - } + currentFacility = config.getFacility(); + } - public void returnWriter(AbstractSyslogWriter syslogWriter) { - // - } + if (!openlogCalled) { + String ident = config.getIdent(); + + if (ident != null && "".equals(ident.trim())) { + ident = null; + } + + Memory identBuffer = null; + + if (ident != null) { + identBuffer = new Memory(128); + identBuffer.setString(0, ident, false); + } + + libraryInstance.openlog(identBuffer, config.getOption(), currentFacility); + openlogCalled = true; + } + + int priority = currentFacility | level; + + libraryInstance.syslog(priority, "%s", message); + } + } + + protected void write(int level, byte[] message) throws SyslogRuntimeException { + // NO-OP + } + + public void log(SyslogMessageProcessorIF messageProcessor, int level, String message) { + write(level, message, this.unixSyslogConfig); + } + + public void flush() throws SyslogRuntimeException { + synchronized (libraryInstance) { + libraryInstance.closelog(); + openlogCalled = false; + } + } + + public void shutdown() throws SyslogRuntimeException { + flush(); + } + + public AbstractSyslogWriter getWriter() { + return null; + } + + public void returnWriter(AbstractSyslogWriter syslogWriter) { + // + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslogConfig.java index fc080b4..699da88 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/unix/UnixSyslogConfig.java @@ -4,68 +4,68 @@ import org.graylog2.syslog4j.SyslogRuntimeException; import org.graylog2.syslog4j.impl.AbstractSyslogConfig; /** -* UnixSyslogConfig is an extension of AbstractNetSyslogConfig that provides -* configuration support for Unix-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UnixSyslogConfig.java,v 1.13 2010/10/25 03:50:25 cvs Exp $ -*/ + * UnixSyslogConfig is an extension of AbstractNetSyslogConfig that provides + * configuration support for Unix-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UnixSyslogConfig.java,v 1.13 2010/10/25 03:50:25 cvs Exp $ + */ public class UnixSyslogConfig extends AbstractSyslogConfig { - private static final long serialVersionUID = -4805767812011660656L; + private static final long serialVersionUID = -4805767812011660656L; - protected String library = SYSLOG_LIBRARY_DEFAULT; - protected int option = OPTION_NONE; - - public UnixSyslogConfig() { - // Unix-based syslog does not need localName sent - this.setSendLocalName(false); - } + protected String library = SYSLOG_LIBRARY_DEFAULT; + protected int option = OPTION_NONE; - public Class getSyslogClass() { - return UnixSyslog.class; - } + public UnixSyslogConfig() { + // Unix-based syslog does not need localName sent + this.setSendLocalName(false); + } - public String getHost() { - return null; - } + public Class getSyslogClass() { + return UnixSyslog.class; + } - public int getPort() { - return 0; - } + public String getHost() { + return null; + } - public void setHost(String host) throws SyslogRuntimeException { - throw new SyslogRuntimeException("Host not appropriate for class \"" + this.getClass().getName() + "\""); - } + public int getPort() { + return 0; + } - public void setPort(int port) throws SyslogRuntimeException { - throw new SyslogRuntimeException("Port not appropriate for class \"" + this.getClass().getName() + "\""); - } + public void setHost(String host) throws SyslogRuntimeException { + throw new SyslogRuntimeException("Host not appropriate for class \"" + this.getClass().getName() + "\""); + } - public String getLibrary() { - return this.library; - } + public void setPort(int port) throws SyslogRuntimeException { + throw new SyslogRuntimeException("Port not appropriate for class \"" + this.getClass().getName() + "\""); + } - public void setLibrary(String library) { - this.library = library; - } + public String getLibrary() { + return this.library; + } - public int getOption() { - return this.option; - } + public void setLibrary(String library) { + this.library = library; + } - public void setOption(int option) { - this.option = option; - } + public int getOption() { + return this.option; + } - public int getMaxQueueSize() { - throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); - } + public void setOption(int option) { + this.option = option; + } - public void setMaxQueueSize(int maxQueueSize) { - throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); - } + public int getMaxQueueSize() { + throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); + } + + public void setMaxQueueSize(int maxQueueSize) { + throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslog.java b/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslog.java index 0435f0d..c8f43b0 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslog.java +++ b/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslog.java @@ -12,132 +12,136 @@ import com.sun.jna.Native; import com.sun.jna.Structure; /** -* UnixSocketSyslog is an extension of AbstractSyslog that provides support for -* Unix socket-based syslog clients. -* -*This class requires the JNA (Java Native Access) library to directly -* access the native C libraries utilized on Unix platforms.
-* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UnixSocketSyslog.java,v 1.13 2010/11/16 00:52:01 cvs Exp $ -*/ + * UnixSocketSyslog is an extension of AbstractSyslog that provides support for + * Unix socket-based syslog clients. + * + *This class requires the JNA (Java Native Access) library to directly + * access the native C libraries utilized on Unix platforms.
+ * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UnixSocketSyslog.java,v 1.13 2010/11/16 00:52:01 cvs Exp $ + */ public class UnixSocketSyslog extends AbstractSyslog { - private static final long serialVersionUID = 39878807911936785L; - - protected static class SockAddr extends Structure { - public final static int SUN_PATH_SIZE = 108; - public final static byte[] ZERO_BYTE = new byte[] { 0 }; - - public short sun_family = 1; - public byte[] sun_path = new byte[SUN_PATH_SIZE]; - - public void setSunPath(String sunPath) { - System.arraycopy(sunPath.getBytes(), 0,this.sun_path, 0, sunPath.length()); - System.arraycopy(ZERO_BYTE,0,this.sun_path,sunPath.length(),1); - } - } - + private static final long serialVersionUID = 39878807911936785L; + + protected static class SockAddr extends Structure { + public final static int SUN_PATH_SIZE = 108; + public final static byte[] ZERO_BYTE = new byte[]{0}; + + public short sun_family = 1; + public byte[] sun_path = new byte[SUN_PATH_SIZE]; + + public void setSunPath(String sunPath) { + System.arraycopy(sunPath.getBytes(), 0, this.sun_path, 0, sunPath.length()); + System.arraycopy(ZERO_BYTE, 0, this.sun_path, sunPath.length(), 1); + } + } + protected interface CLibrary extends Library { public int socket(int domain, int type, int protocol); + public int connect(int sockfd, SockAddr sockaddr, int addrlen); + public int write(int fd, ByteBuffer buffer, int count); + public int close(int fd); + public String strerror(int errno); } - - protected boolean libraryLoaded = false; + + protected boolean libraryLoaded = false; protected CLibrary libraryInstance = null; - - protected UnixSocketSyslogConfig unixSocketSyslogConfig = null; - protected int fd = -1; - - protected synchronized void loadLibrary() { - if (!OSDetectUtility.isUnix()) { - throw new SyslogRuntimeException("UnixSyslog not supported on non-Unix platforms"); - } - - if (!this.libraryLoaded) { - this.libraryInstance = (CLibrary) Native.loadLibrary(this.unixSocketSyslogConfig.getLibrary(),CLibrary.class); - this.libraryLoaded = true; - } - } - public void initialize() throws SyslogRuntimeException { - try { - this.unixSocketSyslogConfig = (UnixSocketSyslogConfig) this.syslogConfig; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must be of type UnixSocketSyslogConfig"); - } - - loadLibrary(); - - } - - protected synchronized void connect() { - if (this.fd != -1) { - return; - } - - this.fd = this.libraryInstance.socket(this.unixSocketSyslogConfig.getFamily(),this.unixSocketSyslogConfig.getType(),this.unixSocketSyslogConfig.getProtocol()); - - if (this.fd == -1) { - this.fd = -1; - return; - } - - SockAddr sockAddr = new SockAddr(); - - sockAddr.sun_family = this.unixSocketSyslogConfig.getFamily(); - sockAddr.setSunPath(this.unixSocketSyslogConfig.getPath()); - - int c = this.libraryInstance.connect(this.fd, sockAddr, sockAddr.size()); + protected UnixSocketSyslogConfig unixSocketSyslogConfig = null; + protected int fd = -1; - if (c == -1) { - this.fd = -1; - return; - } - } + protected synchronized void loadLibrary() { + if (!OSDetectUtility.isUnix()) { + throw new SyslogRuntimeException("UnixSyslog not supported on non-Unix platforms"); + } - protected void write(int level, byte[] message) throws SyslogRuntimeException { - if (this.fd == -1) { - connect(); - } - - if (this.fd == -1) { - return; - } - - ByteBuffer byteBuffer = ByteBuffer.wrap(message); - - this.libraryInstance.write(this.fd,byteBuffer,message.length); - } + if (!this.libraryLoaded) { + this.libraryInstance = (CLibrary) Native.loadLibrary(this.unixSocketSyslogConfig.getLibrary(), CLibrary.class); + this.libraryLoaded = true; + } + } - public void flush() throws SyslogRuntimeException { - shutdown(); - - this.fd = this.libraryInstance.socket(this.unixSocketSyslogConfig.getFamily(),this.unixSocketSyslogConfig.getType(),this.unixSocketSyslogConfig.getProtocol()); - } - - public void shutdown() throws SyslogRuntimeException { - if (this.fd == -1) { - return; - } - - this.libraryInstance.close(this.fd); - - this.fd = -1; - } - - public AbstractSyslogWriter getWriter() { - return null; - } + public void initialize() throws SyslogRuntimeException { + try { + this.unixSocketSyslogConfig = (UnixSocketSyslogConfig) this.syslogConfig; - public void returnWriter(AbstractSyslogWriter syslogWriter) { - // - } + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must be of type UnixSocketSyslogConfig"); + } + + loadLibrary(); + + } + + protected synchronized void connect() { + if (this.fd != -1) { + return; + } + + this.fd = this.libraryInstance.socket(this.unixSocketSyslogConfig.getFamily(), this.unixSocketSyslogConfig.getType(), this.unixSocketSyslogConfig.getProtocol()); + + if (this.fd == -1) { + this.fd = -1; + return; + } + + SockAddr sockAddr = new SockAddr(); + + sockAddr.sun_family = this.unixSocketSyslogConfig.getFamily(); + sockAddr.setSunPath(this.unixSocketSyslogConfig.getPath()); + + int c = this.libraryInstance.connect(this.fd, sockAddr, sockAddr.size()); + + if (c == -1) { + this.fd = -1; + return; + } + } + + protected void write(int level, byte[] message) throws SyslogRuntimeException { + if (this.fd == -1) { + connect(); + } + + if (this.fd == -1) { + return; + } + + ByteBuffer byteBuffer = ByteBuffer.wrap(message); + + this.libraryInstance.write(this.fd, byteBuffer, message.length); + } + + public void flush() throws SyslogRuntimeException { + shutdown(); + + this.fd = this.libraryInstance.socket(this.unixSocketSyslogConfig.getFamily(), this.unixSocketSyslogConfig.getType(), this.unixSocketSyslogConfig.getProtocol()); + } + + public void shutdown() throws SyslogRuntimeException { + if (this.fd == -1) { + return; + } + + this.libraryInstance.close(this.fd); + + this.fd = -1; + } + + public AbstractSyslogWriter getWriter() { + return null; + } + + public void returnWriter(AbstractSyslogWriter syslogWriter) { + // + } } diff --git a/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslogConfig.java index 0381567..6b926a6 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslogConfig.java +++ b/src/main/java/org/graylog2/syslog4j/impl/unix/socket/UnixSocketSyslogConfig.java @@ -4,138 +4,138 @@ import org.graylog2.syslog4j.SyslogRuntimeException; import org.graylog2.syslog4j.impl.AbstractSyslogConfig; /** -* UnixSocketSyslogConfig is an extension of AbstractNetSyslogConfig that provides -* configuration support for Unix socket-based syslog clients. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UnixSocketSyslogConfig.java,v 1.8 2010/11/12 03:43:12 cvs Exp $ -*/ + * UnixSocketSyslogConfig is an extension of AbstractNetSyslogConfig that provides + * configuration support for Unix socket-based syslog clients. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UnixSocketSyslogConfig.java,v 1.8 2010/11/12 03:43:12 cvs Exp $ + */ public class UnixSocketSyslogConfig extends AbstractSyslogConfig { - private static final long serialVersionUID = -3145794243736015707L; + private static final long serialVersionUID = -3145794243736015707L; - protected int type = SYSLOG_SOCKET_TYPE_DEFAULT; - protected short family = SYSLOG_SOCKET_FAMILY_DEFAULT; - protected int protocol = SYSLOG_SOCKET_PROTOCOL_DEFAULT; - protected String library = SYSLOG_SOCKET_LIBRARY_DEFAULT; - protected String path = SYSLOG_SOCKET_PATH_DEFAULT; - - public UnixSocketSyslogConfig() { - // Unix-based socket does not need localName sent - this.setSendLocalName(false); - this.setIdent("java"); - } - - public Class getSyslogClass() { - return UnixSocketSyslog.class; - } + protected int type = SYSLOG_SOCKET_TYPE_DEFAULT; + protected short family = SYSLOG_SOCKET_FAMILY_DEFAULT; + protected int protocol = SYSLOG_SOCKET_PROTOCOL_DEFAULT; + protected String library = SYSLOG_SOCKET_LIBRARY_DEFAULT; + protected String path = SYSLOG_SOCKET_PATH_DEFAULT; - public UnixSocketSyslogConfig(int facility) { - this.facility = facility; - } + public UnixSocketSyslogConfig() { + // Unix-based socket does not need localName sent + this.setSendLocalName(false); + this.setIdent("java"); + } - public UnixSocketSyslogConfig(int facility, String path) { - this.facility = facility; - this.path = path; - } + public Class getSyslogClass() { + return UnixSocketSyslog.class; + } - public UnixSocketSyslogConfig(String path) { - this.path = path; - } + public UnixSocketSyslogConfig(int facility) { + this.facility = facility; + } - public String getHost() { - return null; - } + public UnixSocketSyslogConfig(int facility, String path) { + this.facility = facility; + this.path = path; + } - public int getPort() { - return -1; - } + public UnixSocketSyslogConfig(String path) { + this.path = path; + } - public void setHost(String host) throws SyslogRuntimeException { - throw new SyslogRuntimeException("Host not appropriate for class \"" + this.getClass().getName() + "\""); - } + public String getHost() { + return null; + } - public void setPort(int port) throws SyslogRuntimeException { - throw new SyslogRuntimeException("Port not appropriate for class \"" + this.getClass().getName() + "\""); - } + public int getPort() { + return -1; + } - public String getLibrary() { - return this.library; - } + public void setHost(String host) throws SyslogRuntimeException { + throw new SyslogRuntimeException("Host not appropriate for class \"" + this.getClass().getName() + "\""); + } - public void setLibrary(String library) { - this.library = library; - } + public void setPort(int port) throws SyslogRuntimeException { + throw new SyslogRuntimeException("Port not appropriate for class \"" + this.getClass().getName() + "\""); + } - public String getPath() { - return this.path; - } + public String getLibrary() { + return this.library; + } - public void setPath(String path) { - this.path = path; - } - - public int getType() { - return this.type; - } - - public void setType(int type) { - this.type = type; - } - - public void setType(String type) { - if (type == null) { - throw new SyslogRuntimeException("Type cannot be null for class \"" + this.getClass().getName() + "\""); - } - - if ("SOCK_STREAM".equalsIgnoreCase(type.trim())) { - this.type = SOCK_STREAM; - - } else if ("SOCK_DGRAM".equalsIgnoreCase(type.trim())) { - this.type = SOCK_DGRAM; - - } else { - throw new SyslogRuntimeException("Type must be \"SOCK_STREAM\" or \"SOCK_DGRAM\" for class \"" + this.getClass().getName() + "\""); - } - } + public void setLibrary(String library) { + this.library = library; + } - public short getFamily() { - return this.family; - } + public String getPath() { + return this.path; + } - public void setFamily(short family) { - this.family = family; - } + public void setPath(String path) { + this.path = path; + } - public void setFamily(String family) { - if (family == null) { - throw new SyslogRuntimeException("Family cannot be null for class \"" + this.getClass().getName() + "\""); - } - - if ("AF_UNIX".equalsIgnoreCase(family.trim())) { - this.family = AF_UNIX; - - } else { - throw new SyslogRuntimeException("Family must be \"AF_UNIX\" for class \"" + this.getClass().getName() + "\""); - } - } + public int getType() { + return this.type; + } - public int getProtocol() { - return this.protocol; - } + public void setType(int type) { + this.type = type; + } - public void setProtocol(int protocol) { - this.protocol = protocol; - } + public void setType(String type) { + if (type == null) { + throw new SyslogRuntimeException("Type cannot be null for class \"" + this.getClass().getName() + "\""); + } - public int getMaxQueueSize() { - return -1; - } + if ("SOCK_STREAM".equalsIgnoreCase(type.trim())) { + this.type = SOCK_STREAM; - public void setMaxQueueSize(int maxQueueSize) { - throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); - } + } else if ("SOCK_DGRAM".equalsIgnoreCase(type.trim())) { + this.type = SOCK_DGRAM; + + } else { + throw new SyslogRuntimeException("Type must be \"SOCK_STREAM\" or \"SOCK_DGRAM\" for class \"" + this.getClass().getName() + "\""); + } + } + + public short getFamily() { + return this.family; + } + + public void setFamily(short family) { + this.family = family; + } + + public void setFamily(String family) { + if (family == null) { + throw new SyslogRuntimeException("Family cannot be null for class \"" + this.getClass().getName() + "\""); + } + + if ("AF_UNIX".equalsIgnoreCase(family.trim())) { + this.family = AF_UNIX; + + } else { + throw new SyslogRuntimeException("Family must be \"AF_UNIX\" for class \"" + this.getClass().getName() + "\""); + } + } + + public int getProtocol() { + return this.protocol; + } + + public void setProtocol(int protocol) { + this.protocol = protocol; + } + + public int getMaxQueueSize() { + return -1; + } + + public void setMaxQueueSize(int maxQueueSize) { + throw new SyslogRuntimeException("UnixSyslog protocol does not uses a queueing mechanism"); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServer.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServer.java index 4e05fb9..445af65 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServer.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServer.java @@ -15,225 +15,225 @@ import org.graylog2.syslog4j.util.SyslogUtility; /** * This class provides a Singleton-based interface for Syslog4j * server implementations. - * + * *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy * of the LGPL license is available in the META-INF folder in all * distributions of Syslog4j and in the base directory of the "doc" ZIP.
- * + * * @author <syslog4j@productivity.org> * @version $Id: SyslogServer.java,v 1.14 2011/01/23 20:49:12 cvs Exp $ */ public class SyslogServer implements SyslogConstants { - private static final long serialVersionUID = -2260889360828258602L; + private static final long serialVersionUID = -2260889360828258602L; - private static boolean SUPPRESS_RUNTIME_EXCEPTIONS = false; + private static boolean SUPPRESS_RUNTIME_EXCEPTIONS = false; - protected static final Map instances = new Hashtable(); - - static { - initialize(); - } - - private SyslogServer() { - // - } + protected static final Map instances = new Hashtable(); - /** - * @return Returns the current version identifier for Syslog4j. - */ - public static final String getVersion() { - return Syslog4jVersion.VERSION; - } + static { + initialize(); + } - - /** - * @param suppress - true to suppress throwing SyslogRuntimeException in many methods of this class, false to throw exceptions (default) - */ - public static void setSuppressRuntimeExceptions(boolean suppress) { - SUPPRESS_RUNTIME_EXCEPTIONS = suppress; - } - - /** - * @return Returns whether or not to suppress throwing SyslogRuntimeException in many methods of this class - */ - public static boolean getSuppressRuntimeExceptions() { - return SUPPRESS_RUNTIME_EXCEPTIONS; - } - - /** - * Throws SyslogRuntimeException unless it has been suppressed via setSuppressRuntimeException(boolean). - * - * @param message - * @throws SyslogRuntimeException - */ - private static void throwRuntimeException(String message) throws SyslogRuntimeException { - if (SUPPRESS_RUNTIME_EXCEPTIONS) { - return; - - } else { - throw new SyslogRuntimeException(message.toString()); - } - } + private SyslogServer() { + // + } - public static final SyslogServerIF getInstance(String protocol) throws SyslogRuntimeException { - String syslogProtocol = protocol.toLowerCase(); - - if (instances.containsKey(syslogProtocol)) { - return (SyslogServerIF) instances.get(syslogProtocol); - - } else { - throwRuntimeException("SyslogServer instance \"" + syslogProtocol + "\" not defined; use \"tcp\" or \"udp\" or call SyslogServer.createInstance(protocol,config) first"); - return null; - } - } - - public static final SyslogServerIF getThreadedInstance(String protocol) throws SyslogRuntimeException { - SyslogServerIF server = getInstance(protocol); + /** + * @return Returns the current version identifier for Syslog4j. + */ + public static final String getVersion() { + return Syslog4jVersion.VERSION; + } - if (server.getThread() == null) { - Thread thread = new Thread(server); - thread.setName("SyslogServer: " + protocol); - thread.setDaemon(server.getConfig().isUseDaemonThread()); - if (server.getConfig().getThreadPriority() > -1) { - thread.setPriority(server.getConfig().getThreadPriority()); - } - - server.setThread(thread); - thread.start(); - } - - return server; - } - - public static final boolean exists(String protocol) { - if (protocol == null || "".equals(protocol.trim())) { - return false; - } - - return instances.containsKey(protocol.toLowerCase()); - } - - public static final SyslogServerIF createInstance(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException { - if (protocol == null || "".equals(protocol.trim())) { - throwRuntimeException("Instance protocol cannot be null or empty"); - return null; - } - - if (config == null) { - throwRuntimeException("SyslogServerConfig cannot be null"); - return null; - } - - String syslogProtocol = protocol.toLowerCase(); - - SyslogServerIF syslogServer = null; - - synchronized(instances) { - if (instances.containsKey(syslogProtocol)) { - throwRuntimeException("SyslogServer instance \"" + syslogProtocol + "\" already defined."); - return null; - } - - try { - Class syslogClass = config.getSyslogServerClass(); - - syslogServer = (SyslogServerIF) syslogClass.newInstance(); - - } catch (ClassCastException cse) { - throw new SyslogRuntimeException(cse); - - } catch (IllegalAccessException iae) { - throw new SyslogRuntimeException(iae); - - } catch (InstantiationException ie) { - throw new SyslogRuntimeException(ie); - } - - syslogServer.initialize(syslogProtocol,config); - - instances.put(syslogProtocol,syslogServer); - } - return syslogServer; - } + /** + * @param suppress - true to suppress throwing SyslogRuntimeException in many methods of this class, false to throw exceptions (default) + */ + public static void setSuppressRuntimeExceptions(boolean suppress) { + SUPPRESS_RUNTIME_EXCEPTIONS = suppress; + } - public static final SyslogServerIF createThreadedInstance(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException { - createInstance(protocol,config); - - SyslogServerIF server = getThreadedInstance(protocol); - - return server; - } + /** + * @return Returns whether or not to suppress throwing SyslogRuntimeException in many methods of this class + */ + public static boolean getSuppressRuntimeExceptions() { + return SUPPRESS_RUNTIME_EXCEPTIONS; + } - public synchronized static final void destroyInstance(String protocol) { - if (protocol == null || "".equals(protocol.trim())) { - return; - } + /** + * Throws SyslogRuntimeException unless it has been suppressed via setSuppressRuntimeException(boolean). + * + * @param message + * @throws SyslogRuntimeException + */ + private static void throwRuntimeException(String message) throws SyslogRuntimeException { + if (SUPPRESS_RUNTIME_EXCEPTIONS) { + return; - String _protocol = protocol.toLowerCase(); - - if (instances.containsKey(_protocol)) { - SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); - - SyslogServerIF syslogServer = (SyslogServerIF) instances.get(_protocol); + } else { + throw new SyslogRuntimeException(message.toString()); + } + } - try { - syslogServer.shutdown(); - - } finally { - instances.remove(_protocol); - } - - } else { - throwRuntimeException("Cannot destroy server protocol \"" + protocol + "\" instance; call shutdown instead"); - return; - } - } - - public synchronized static final void destroyInstance(SyslogServerIF syslogServer) { - if (syslogServer == null) { - return; - } - - String protocol = syslogServer.getProtocol().toLowerCase(); - - if (instances.containsKey(protocol)) { - SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); - - try { - syslogServer.shutdown(); - - } finally { - instances.remove(protocol); - } - - } else { - throwRuntimeException("Cannot destroy server protocol \"" + protocol + "\" instance; call shutdown instead"); - } - } - - public synchronized static void initialize() { - createInstance(UDP,new UDPNetSyslogServerConfig()); - createInstance(TCP,new TCPNetSyslogServerConfig()); - } - - public synchronized static final void shutdown() throws SyslogRuntimeException { - Set protocols = instances.keySet(); - - Iterator i = protocols.iterator(); - - while(i.hasNext()) { - String protocol = (String) i.next(); - - SyslogServerIF syslogServer = (SyslogServerIF) instances.get(protocol); + public static final SyslogServerIF getInstance(String protocol) throws SyslogRuntimeException { + String syslogProtocol = protocol.toLowerCase(); - syslogServer.shutdown(); - } + if (instances.containsKey(syslogProtocol)) { + return (SyslogServerIF) instances.get(syslogProtocol); - instances.clear(); - } - - public static void main(String[] args) throws Exception { - SyslogServerMain.main(args); - } + } else { + throwRuntimeException("SyslogServer instance \"" + syslogProtocol + "\" not defined; use \"tcp\" or \"udp\" or call SyslogServer.createInstance(protocol,config) first"); + return null; + } + } + + public static final SyslogServerIF getThreadedInstance(String protocol) throws SyslogRuntimeException { + SyslogServerIF server = getInstance(protocol); + + if (server.getThread() == null) { + Thread thread = new Thread(server); + thread.setName("SyslogServer: " + protocol); + thread.setDaemon(server.getConfig().isUseDaemonThread()); + if (server.getConfig().getThreadPriority() > -1) { + thread.setPriority(server.getConfig().getThreadPriority()); + } + + server.setThread(thread); + thread.start(); + } + + return server; + } + + public static final boolean exists(String protocol) { + if (protocol == null || "".equals(protocol.trim())) { + return false; + } + + return instances.containsKey(protocol.toLowerCase()); + } + + public static final SyslogServerIF createInstance(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException { + if (protocol == null || "".equals(protocol.trim())) { + throwRuntimeException("Instance protocol cannot be null or empty"); + return null; + } + + if (config == null) { + throwRuntimeException("SyslogServerConfig cannot be null"); + return null; + } + + String syslogProtocol = protocol.toLowerCase(); + + SyslogServerIF syslogServer = null; + + synchronized (instances) { + if (instances.containsKey(syslogProtocol)) { + throwRuntimeException("SyslogServer instance \"" + syslogProtocol + "\" already defined."); + return null; + } + + try { + Class syslogClass = config.getSyslogServerClass(); + + syslogServer = (SyslogServerIF) syslogClass.newInstance(); + + } catch (ClassCastException cse) { + throw new SyslogRuntimeException(cse); + + } catch (IllegalAccessException iae) { + throw new SyslogRuntimeException(iae); + + } catch (InstantiationException ie) { + throw new SyslogRuntimeException(ie); + } + + syslogServer.initialize(syslogProtocol, config); + + instances.put(syslogProtocol, syslogServer); + } + + return syslogServer; + } + + public static final SyslogServerIF createThreadedInstance(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException { + createInstance(protocol, config); + + SyslogServerIF server = getThreadedInstance(protocol); + + return server; + } + + public synchronized static final void destroyInstance(String protocol) { + if (protocol == null || "".equals(protocol.trim())) { + return; + } + + String _protocol = protocol.toLowerCase(); + + if (instances.containsKey(_protocol)) { + SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); + + SyslogServerIF syslogServer = (SyslogServerIF) instances.get(_protocol); + + try { + syslogServer.shutdown(); + + } finally { + instances.remove(_protocol); + } + + } else { + throwRuntimeException("Cannot destroy server protocol \"" + protocol + "\" instance; call shutdown instead"); + return; + } + } + + public synchronized static final void destroyInstance(SyslogServerIF syslogServer) { + if (syslogServer == null) { + return; + } + + String protocol = syslogServer.getProtocol().toLowerCase(); + + if (instances.containsKey(protocol)) { + SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); + + try { + syslogServer.shutdown(); + + } finally { + instances.remove(protocol); + } + + } else { + throwRuntimeException("Cannot destroy server protocol \"" + protocol + "\" instance; call shutdown instead"); + } + } + + public synchronized static void initialize() { + createInstance(UDP, new UDPNetSyslogServerConfig()); + createInstance(TCP, new TCPNetSyslogServerConfig()); + } + + public synchronized static final void shutdown() throws SyslogRuntimeException { + Set protocols = instances.keySet(); + + Iterator i = protocols.iterator(); + + while (i.hasNext()) { + String protocol = (String) i.next(); + + SyslogServerIF syslogServer = (SyslogServerIF) instances.get(protocol); + + syslogServer.shutdown(); + } + + instances.clear(); + } + + public static void main(String[] args) throws Exception { + SyslogServerMain.main(args); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServerConfigIF.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServerConfigIF.java index 28e201c..22e2dc3 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServerConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServerConfigIF.java @@ -7,44 +7,54 @@ import org.graylog2.syslog4j.SyslogConstants; import org.graylog2.syslog4j.SyslogRuntimeException; /** -* SyslogServerConfigIF provides a common, extensible configuration interface for all -* implementations of SyslogServerIF. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogServerConfigIF.java,v 1.12 2011/01/11 05:11:13 cvs Exp $ -*/ + * SyslogServerConfigIF provides a common, extensible configuration interface for all + * implementations of SyslogServerIF. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogServerConfigIF.java,v 1.12 2011/01/11 05:11:13 cvs Exp $ + */ public interface SyslogServerConfigIF extends SyslogConstants, SyslogCharSetIF { - public Class getSyslogServerClass(); + public Class getSyslogServerClass(); - public String getHost(); - public void setHost(String host) throws SyslogRuntimeException; + public String getHost(); - public int getPort(); - public void setPort(int port) throws SyslogRuntimeException; - - public boolean isUseDaemonThread(); - public void setUseDaemonThread(boolean useDaemonThread); - - public int getThreadPriority(); - public void setThreadPriority(int threadPriority); - - public List getEventHandlers(); - - public long getShutdownWait(); - public void setShutdownWait(long shutdownWait); - - public void addEventHandler(SyslogServerEventHandlerIF eventHandler); - public void insertEventHandler(int pos, SyslogServerEventHandlerIF eventHandler); - public void removeEventHandler(SyslogServerEventHandlerIF eventHandler); - public void removeAllEventHandlers(); - - public boolean isUseStructuredData(); - public void setUseStructuredData(boolean useStructuredData); - - public Object getDateTimeFormatter(); - public void setDateTimeFormatter(Object dateTimeFormatter); + public void setHost(String host) throws SyslogRuntimeException; + + public int getPort(); + + public void setPort(int port) throws SyslogRuntimeException; + + public boolean isUseDaemonThread(); + + public void setUseDaemonThread(boolean useDaemonThread); + + public int getThreadPriority(); + + public void setThreadPriority(int threadPriority); + + public List getEventHandlers(); + + public long getShutdownWait(); + + public void setShutdownWait(long shutdownWait); + + public void addEventHandler(SyslogServerEventHandlerIF eventHandler); + + public void insertEventHandler(int pos, SyslogServerEventHandlerIF eventHandler); + + public void removeEventHandler(SyslogServerEventHandlerIF eventHandler); + + public void removeAllEventHandlers(); + + public boolean isUseStructuredData(); + + public void setUseStructuredData(boolean useStructuredData); + + public Object getDateTimeFormatter(); + + public void setDateTimeFormatter(Object dateTimeFormatter); } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventHandlerIF.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventHandlerIF.java index 8624789..9cb796c 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventHandlerIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventHandlerIF.java @@ -3,6 +3,7 @@ package org.graylog2.syslog4j.server; import java.io.Serializable; public abstract interface SyslogServerEventHandlerIF extends Serializable { - public void initialize(SyslogServerIF syslogServer); - public void destroy(SyslogServerIF syslogServer); + public void initialize(SyslogServerIF syslogServer); + + public void destroy(SyslogServerIF syslogServer); } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventIF.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventIF.java index c64a833..efa90d8 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServerEventIF.java @@ -5,37 +5,43 @@ import java.util.Date; import org.graylog2.syslog4j.SyslogCharSetIF; /** -* SyslogServerEventIF provides an extensible interface for Syslog4j -* server events. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogServerEventIF.java,v 1.4 2010/11/28 01:38:08 cvs Exp $ -*/ + * SyslogServerEventIF provides an extensible interface for Syslog4j + * server events. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogServerEventIF.java,v 1.4 2010/11/28 01:38:08 cvs Exp $ + */ public interface SyslogServerEventIF extends SyslogCharSetIF { - /** - * Note: getRaw() may use System.arraycopy(..) each time it is called; best to call it once and store the result. - * - * @return Returns the raw data received from the client. - */ - public byte[] getRaw(); - - public int getFacility(); - public void setFacility(int facility); + /** + * Note: getRaw() may use System.arraycopy(..) each time it is called; best to call it once and store the result. + * + * @return Returns the raw data received from the client. + */ + public byte[] getRaw(); - public Date getDate(); - public void setDate(Date date); - - public int getLevel(); - public void setLevel(int level); - - public String getHost(); - public void setHost(String host); - public boolean isHostStrippedFromMessage(); - - public String getMessage(); - public void setMessage(String message); + public int getFacility(); + + public void setFacility(int facility); + + public Date getDate(); + + public void setDate(Date date); + + public int getLevel(); + + public void setLevel(int level); + + public String getHost(); + + public void setHost(String host); + + public boolean isHostStrippedFromMessage(); + + public String getMessage(); + + public void setMessage(String message); } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServerIF.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServerIF.java index 2b1e7a3..e25a50c 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServerIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServerIF.java @@ -3,25 +3,27 @@ package org.graylog2.syslog4j.server; import org.graylog2.syslog4j.SyslogRuntimeException; /** -* SyslogServerIF provides a common interface for all Syslog4j server implementations. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogServerIF.java,v 1.5 2008/11/07 15:15:41 cvs Exp $ -*/ + * SyslogServerIF provides a common interface for all Syslog4j server implementations. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogServerIF.java,v 1.5 2008/11/07 15:15:41 cvs Exp $ + */ public interface SyslogServerIF extends Runnable { - public void initialize(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException; - - public String getProtocol(); - public SyslogServerConfigIF getConfig(); + public void initialize(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException; - public void run(); - - public Thread getThread(); - public void setThread(Thread thread); + public String getProtocol(); - public void shutdown(); + public SyslogServerConfigIF getConfig(); + + public void run(); + + public Thread getThread(); + + public void setThread(Thread thread); + + public void shutdown(); } diff --git a/src/main/java/org/graylog2/syslog4j/server/SyslogServerMain.java b/src/main/java/org/graylog2/syslog4j/server/SyslogServerMain.java index 3c396de..bf3aa8e 100644 --- a/src/main/java/org/graylog2/syslog4j/server/SyslogServerMain.java +++ b/src/main/java/org/graylog2/syslog4j/server/SyslogServerMain.java @@ -8,158 +8,200 @@ import org.graylog2.syslog4j.util.SyslogUtility; /** * This class provides a command-line interface for Syslog4j * server implementations. - * + * *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy * of the LGPL license is available in the META-INF folder in all * distributions of Syslog4j and in the base directory of the "doc" ZIP.
- * + * * @author <syslog4j@productivity.org> * @version $Id: SyslogServerMain.java,v 1.3 2010/11/28 01:38:08 cvs Exp $ */ public class SyslogServerMain { - public static boolean CALL_SYSTEM_EXIT_ON_FAILURE = true; - - public static class Options { - public String protocol = null; - public String fileName = null; - public boolean append = false; - public boolean quiet = false; - - public String host = null; - public String port = null; - public String timeout = null; - - public String usage = null; - } - - public static void usage(String problem) { - if (problem != null) { - System.out.println("Error: " + problem); - System.out.println(); - } - - System.out.println("Usage:"); - System.out.println(); - System.out.println("SyslogServer [-hSyslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogServerSessionlessEventHandlerIF.java,v 1.1 2010/11/12 02:56:44 cvs Exp $ -*/ + * SyslogServerEventHandlerIF provides an extensible interface for Syslog4j + * server event handlers. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogServerSessionlessEventHandlerIF.java,v 1.1 2010/11/12 02:56:44 cvs Exp $ + */ public interface SyslogServerSessionlessEventHandlerIF extends SyslogServerEventHandlerIF { - public void event(SyslogServerIF syslogServer, SocketAddress socketAddress, SyslogServerEventIF event); - public void exception(SyslogServerIF syslogServer, SocketAddress socketAddress, Exception exception); + public void event(SyslogServerIF syslogServer, SocketAddress socketAddress, SyslogServerEventIF event); + + public void exception(SyslogServerIF syslogServer, SocketAddress socketAddress, Exception exception); } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/AbstractSyslogServer.java b/src/main/java/org/graylog2/syslog4j/server/impl/AbstractSyslogServer.java index 2b6f648..f988fa3 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/AbstractSyslogServer.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/AbstractSyslogServer.java @@ -22,318 +22,318 @@ import org.graylog2.syslog4j.server.impl.event.structured.StructuredSyslogServer import org.graylog2.syslog4j.util.SyslogUtility; /** -* AbstractSyslogServer provides a base abstract implementation of the SyslogServerIF. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractSyslogServer.java,v 1.12 2011/01/11 05:11:13 cvs Exp $ -*/ + * AbstractSyslogServer provides a base abstract implementation of the SyslogServerIF. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractSyslogServer.java,v 1.12 2011/01/11 05:11:13 cvs Exp $ + */ public abstract class AbstractSyslogServer implements SyslogServerIF { - public static class Sessions extends HashMap { - private static final long serialVersionUID = -4438949276263772580L; - - public static final Object syncObject = new Object(); + public static class Sessions extends HashMap { + private static final long serialVersionUID = -4438949276263772580L; - public void addSocket(Socket socket) { - synchronized(syncObject) { - put(socket,new HashMap()); - } - } - - public Iterator getSockets() { - if (size() > 0) { - return keySet().iterator(); - - } else { - return null; - } - } + public static final Object syncObject = new Object(); - public void addSession(Socket socket, SyslogServerEventHandlerIF eventHandler, Object session) { - synchronized(syncObject) { - Map handlerMap = getHandlerMap(socket); - - if (handlerMap == null) { - handlerMap = new HashMap(); - } - - handlerMap.put(eventHandler,session); - } - } + public void addSocket(Socket socket) { + synchronized (syncObject) { + put(socket, new HashMap()); + } + } - public void removeSocket(Socket socket) { - synchronized(syncObject) { - Map handlerMap = getHandlerMap(socket); - - if (handlerMap != null) { - handlerMap.clear(); - } - } - } + public Iterator getSockets() { + if (size() > 0) { + return keySet().iterator(); - protected Map getHandlerMap(Socket socket) { - Map handlerMap = null; - - if (containsKey(socket)) { - handlerMap = (Map) get(socket); - } - - return handlerMap; - } + } else { + return null; + } + } - public Object getSession(Socket socket, SyslogServerEventHandlerIF eventHandler) { - synchronized(syncObject) { - Map handlerMap = getHandlerMap(socket); - - Object session = handlerMap.get(eventHandler); - - return session; - } - } - } - - protected String syslogProtocol = null; - protected AbstractSyslogServerConfig syslogServerConfig = null; - protected Thread thread = null; - - protected boolean shutdown = false; - - public void initialize(String protocol, SyslogServerConfigIF config) throws SyslogRuntimeException { - this.syslogProtocol = protocol; - - try { - this.syslogServerConfig = (AbstractSyslogServerConfig) config; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException(cce); - } - - initialize(); - } - - public String getProtocol() { - return this.syslogProtocol; - } + public void addSession(Socket socket, SyslogServerEventHandlerIF eventHandler, Object session) { + synchronized (syncObject) { + Map handlerMap = getHandlerMap(socket); - public SyslogServerConfigIF getConfig() { - return this.syslogServerConfig; - } - - protected abstract void initialize() throws SyslogRuntimeException; - - public void shutdown() throws SyslogRuntimeException { - this.shutdown = true; - } + if (handlerMap == null) { + handlerMap = new HashMap(); + } - public Thread getThread() { - return this.thread; - } + handlerMap.put(eventHandler, session); + } + } - public void setThread(Thread thread) { - this.thread = thread; - } - - protected static boolean isStructuredMessage(SyslogCharSetIF syslogCharSet, byte[] receiveData) { - String receiveDataString = SyslogUtility.newString(syslogCharSet, receiveData); + public void removeSocket(Socket socket) { + synchronized (syncObject) { + Map handlerMap = getHandlerMap(socket); - boolean isStructuredMessage = isStructuredMessage(syslogCharSet,receiveDataString); - - return isStructuredMessage; - } + if (handlerMap != null) { + handlerMap.clear(); + } + } + } - protected static boolean isStructuredMessage(SyslogCharSetIF syslogCharSet, String receiveData) { - int idx = receiveData.indexOf('>'); + protected Map getHandlerMap(Socket socket) { + Map handlerMap = null; - if (idx != -1) { - // If there's a numerical VERSION field after theSyslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractSyslogServerConfig.java,v 1.9 2011/01/11 05:11:13 cvs Exp $ -*/ + * AbstractSyslogServerConfig provides a base abstract implementation of the SyslogServerConfigIF + * configuration interface. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractSyslogServerConfig.java,v 1.9 2011/01/11 05:11:13 cvs Exp $ + */ public abstract class AbstractSyslogServerConfig implements SyslogServerConfigIF { - private static final long serialVersionUID = 870248648801259856L; - - public abstract Class getSyslogServerClass(); - - protected String charSet = CHAR_SET_DEFAULT; - - protected long shutdownWait = SyslogConstants.SERVER_SHUTDOWN_WAIT_DEFAULT; + private static final long serialVersionUID = 870248648801259856L; - protected List eventHandlers = new ArrayList(); + public abstract Class getSyslogServerClass(); - protected boolean useStructuredData = USE_STRUCTURED_DATA_DEFAULT; - - protected Object dateTimeFormatter = null; - - protected boolean useDaemonThread = USE_DAEMON_THREAD_DEFAULT; - protected int threadPriority = THREAD_PRIORITY_DEFAULT; + protected String charSet = CHAR_SET_DEFAULT; - public String getCharSet() { - return this.charSet; - } + protected long shutdownWait = SyslogConstants.SERVER_SHUTDOWN_WAIT_DEFAULT; - public void setCharSet(String charSet) { - this.charSet = charSet; - } + protected List eventHandlers = new ArrayList(); - public long getShutdownWait() { - return this.shutdownWait; - } + protected boolean useStructuredData = USE_STRUCTURED_DATA_DEFAULT; - public void setShutdownWait(long shutdownWait) { - this.shutdownWait = shutdownWait; - } + protected Object dateTimeFormatter = null; - public List getEventHandlers() { - return this.eventHandlers; - } - - public void addEventHandler(SyslogServerEventHandlerIF eventHandler) { - this.eventHandlers.add(eventHandler); - } + protected boolean useDaemonThread = USE_DAEMON_THREAD_DEFAULT; + protected int threadPriority = THREAD_PRIORITY_DEFAULT; - public void insertEventHandler(int pos, SyslogServerEventHandlerIF eventHandler) { - this.eventHandlers.add(pos, eventHandler); - } + public String getCharSet() { + return this.charSet; + } - public void removeEventHandler(SyslogServerEventHandlerIF eventHandler) { - this.eventHandlers.remove(eventHandler); - } + public void setCharSet(String charSet) { + this.charSet = charSet; + } - public void removeAllEventHandlers() { - this.eventHandlers.clear(); - } - - public boolean isUseStructuredData() { - return useStructuredData; - } + public long getShutdownWait() { + return this.shutdownWait; + } - public void setUseStructuredData(boolean useStructuredData) { - this.useStructuredData = useStructuredData; - } + public void setShutdownWait(long shutdownWait) { + this.shutdownWait = shutdownWait; + } - public boolean isUseDaemonThread() { - return useDaemonThread; - } + public List getEventHandlers() { + return this.eventHandlers; + } - public Object getDateTimeFormatter() { - return dateTimeFormatter; - } + public void addEventHandler(SyslogServerEventHandlerIF eventHandler) { + this.eventHandlers.add(eventHandler); + } - public void setDateTimeFormatter(Object dateTimeFormatter) { - this.dateTimeFormatter = dateTimeFormatter; - } + public void insertEventHandler(int pos, SyslogServerEventHandlerIF eventHandler) { + this.eventHandlers.add(pos, eventHandler); + } - public void setUseDaemonThread(boolean useDaemonThread) { - this.useDaemonThread = useDaemonThread; - } + public void removeEventHandler(SyslogServerEventHandlerIF eventHandler) { + this.eventHandlers.remove(eventHandler); + } - public int getThreadPriority() { - return threadPriority; - } + public void removeAllEventHandlers() { + this.eventHandlers.clear(); + } - public void setThreadPriority(int threadPriority) { - this.threadPriority = threadPriority; - } + public boolean isUseStructuredData() { + return useStructuredData; + } + + public void setUseStructuredData(boolean useStructuredData) { + this.useStructuredData = useStructuredData; + } + + public boolean isUseDaemonThread() { + return useDaemonThread; + } + + public Object getDateTimeFormatter() { + return dateTimeFormatter; + } + + public void setDateTimeFormatter(Object dateTimeFormatter) { + this.dateTimeFormatter = dateTimeFormatter; + } + + public void setUseDaemonThread(boolean useDaemonThread) { + this.useDaemonThread = useDaemonThread; + } + + public int getThreadPriority() { + return threadPriority; + } + + public void setThreadPriority(int threadPriority) { + this.threadPriority = threadPriority; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEvent.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEvent.java index 8bee401..908554d 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEvent.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEvent.java @@ -12,202 +12,203 @@ import org.graylog2.syslog4j.server.SyslogServerEventIF; import org.graylog2.syslog4j.util.SyslogUtility; /** -* SyslogServerEvent provides an implementation of the SyslogServerEventIF interface. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogServerEvent.java,v 1.9 2011/01/11 06:21:15 cvs Exp $ -*/ + * SyslogServerEvent provides an implementation of the SyslogServerEventIF interface. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogServerEvent.java,v 1.9 2011/01/11 06:21:15 cvs Exp $ + */ public class SyslogServerEvent implements SyslogServerEventIF { - private static final long serialVersionUID = 6136043067089899962L; - - public static final String DATE_FORMAT = "MMM dd HH:mm:ss yyyy"; - public static final String DATE_FORMAT_S = "MMM d HH:mm:ss yyyy"; - - protected String charSet = SyslogConstants.CHAR_SET_DEFAULT; - protected String rawString = null; - protected byte[] rawBytes = null; - protected int rawLength = -1; - protected Date date = null; - protected int level = -1; - protected int facility = -1; - protected String host = null; - protected boolean isHostStrippedFromMessage = false; - protected String message = null; - protected InetAddress inetAddress = null; - - protected SyslogServerEvent() { } - - public SyslogServerEvent(final String message, InetAddress inetAddress) { - initialize(message,inetAddress); - - parse(); - } - - public SyslogServerEvent(final byte[] message, int length, InetAddress inetAddress) { - initialize(message,length,inetAddress); - - parse(); - } - - protected void initialize(final String message, InetAddress inetAddress) { - this.rawString = message; - this.rawLength = message.length(); - this.inetAddress = inetAddress; - - this.message = message; - } + private static final long serialVersionUID = 6136043067089899962L; - protected void initialize(final byte[] message, int length, InetAddress inetAddress) { - this.rawBytes = message; - this.rawLength = length; - this.inetAddress = inetAddress; - } + public static final String DATE_FORMAT = "MMM dd HH:mm:ss yyyy"; + public static final String DATE_FORMAT_S = "MMM d HH:mm:ss yyyy"; - protected void parseHost() { - int i = this.message.indexOf(' '); - - if (i > -1) { - this.host = this.message.substring(0,i).trim(); - } - } + protected String charSet = SyslogConstants.CHAR_SET_DEFAULT; + protected String rawString = null; + protected byte[] rawBytes = null; + protected int rawLength = -1; + protected Date date = null; + protected int level = -1; + protected int facility = -1; + protected String host = null; + protected boolean isHostStrippedFromMessage = false; + protected String message = null; + protected InetAddress inetAddress = null; - protected void parseDate() { - int datelength = 16; - String dateFormatS = DATE_FORMAT; - - if (this.message.length() > datelength) { - - // http://jira.graylog2.org/browse/SERVER-287 - if (this.message.charAt(5) == ' ') { - datelength = 15; - dateFormatS = DATE_FORMAT_S; - } + protected SyslogServerEvent() { + } - String year = Integer.toString(Calendar.getInstance().get(Calendar.YEAR)); + public SyslogServerEvent(final String message, InetAddress inetAddress) { + initialize(message, inetAddress); - String originalDate = this.message.substring(0,datelength-1) + " " + year; - DateFormat dateFormat = new SimpleDateFormat(dateFormatS); - try { - this.date = dateFormat.parse(originalDate); + parse(); + } - this.message = this.message.substring(datelength); + public SyslogServerEvent(final byte[] message, int length, InetAddress inetAddress) { + initialize(message, length, inetAddress); - } catch (ParseException pe) { - this.date = new Date(); - } + parse(); + } + + protected void initialize(final String message, InetAddress inetAddress) { + this.rawString = message; + this.rawLength = message.length(); + this.inetAddress = inetAddress; + + this.message = message; + } + + protected void initialize(final byte[] message, int length, InetAddress inetAddress) { + this.rawBytes = message; + this.rawLength = length; + this.inetAddress = inetAddress; + } + + protected void parseHost() { + int i = this.message.indexOf(' '); + + if (i > -1) { + this.host = this.message.substring(0, i).trim(); + } + } + + protected void parseDate() { + int datelength = 16; + String dateFormatS = DATE_FORMAT; + + if (this.message.length() > datelength) { + + // http://jira.graylog2.org/browse/SERVER-287 + if (this.message.charAt(5) == ' ') { + datelength = 15; + dateFormatS = DATE_FORMAT_S; + } + + String year = Integer.toString(Calendar.getInstance().get(Calendar.YEAR)); + + String originalDate = this.message.substring(0, datelength - 1) + " " + year; + DateFormat dateFormat = new SimpleDateFormat(dateFormatS); + try { + this.date = dateFormat.parse(originalDate); + + this.message = this.message.substring(datelength); + + } catch (ParseException pe) { + this.date = new Date(); + } + } + + parseHost(); + } + + protected void parsePriority() { + if (this.message.charAt(0) == '<') { + int i = this.message.indexOf(">"); + + if (i <= 4 && i > -1) { + String priorityStr = this.message.substring(1, i); + + int priority = 0; + try { + priority = Integer.parseInt(priorityStr); + this.facility = priority >> 3; + this.level = priority - (this.facility << 3); + + this.message = this.message.substring(i + 1); + + parseDate(); + + } catch (NumberFormatException nfe) { + // } - - parseHost(); - } - - protected void parsePriority() { - if (this.message.charAt(0) == '<') { - int i = this.message.indexOf(">"); - - if (i <= 4 && i > -1) { - String priorityStr = this.message.substring(1,i); - - int priority = 0; - try { - priority = Integer.parseInt(priorityStr); - this.facility = priority >> 3; - this.level = priority - (this.facility << 3); - - this.message = this.message.substring(i+1); - - parseDate(); - - } catch (NumberFormatException nfe) { - // - } - - parseHost(); - } - } - } - - protected void parse() { - if (this.message == null) { - this.message = SyslogUtility.newString(this,this.rawBytes,this.rawLength); - } - - parsePriority(); - } - - public int getFacility() { - return this.facility; - } - public void setFacility(int facility) { - this.facility = facility; - } + parseHost(); + } + } + } - public byte[] getRaw() { - if (this.rawString != null) { - byte[] rawStringBytes = SyslogUtility.getBytes(this,this.rawString); - - return rawStringBytes; - - } else if (this.rawBytes.length == this.rawLength) { - return this.rawBytes; - - } else { - byte[] newRawBytes = new byte[this.rawLength]; - System.arraycopy(this.rawBytes,0,newRawBytes,0,this.rawLength); - - return newRawBytes; - } - } - - public int getRawLength() { - return this.rawLength; - } - - public Date getDate() { - return this.date; - } + protected void parse() { + if (this.message == null) { + this.message = SyslogUtility.newString(this, this.rawBytes, this.rawLength); + } - public void setDate(Date date) { - this.date = date; - } - - public int getLevel() { - return this.level; - } - - public void setLevel(int level) { - this.level = level; - } - - public String getHost() { - return this.host; - } - - public void setHost(String host) { - this.host = host; - } - - public boolean isHostStrippedFromMessage() { - return isHostStrippedFromMessage; - } + parsePriority(); + } - public String getMessage() { - return this.message; - } - - public void setMessage(String message) { - this.message = message; - } + public int getFacility() { + return this.facility; + } - public String getCharSet() { - return this.charSet; - } + public void setFacility(int facility) { + this.facility = facility; + } - public void setCharSet(String charSet) { - this.charSet = charSet; - } + public byte[] getRaw() { + if (this.rawString != null) { + byte[] rawStringBytes = SyslogUtility.getBytes(this, this.rawString); + + return rawStringBytes; + + } else if (this.rawBytes.length == this.rawLength) { + return this.rawBytes; + + } else { + byte[] newRawBytes = new byte[this.rawLength]; + System.arraycopy(this.rawBytes, 0, newRawBytes, 0, this.rawLength); + + return newRawBytes; + } + } + + public int getRawLength() { + return this.rawLength; + } + + public Date getDate() { + return this.date; + } + + public void setDate(Date date) { + this.date = date; + } + + public int getLevel() { + return this.level; + } + + public void setLevel(int level) { + this.level = level; + } + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public boolean isHostStrippedFromMessage() { + return isHostStrippedFromMessage; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getCharSet() { + return this.charSet; + } + + public void setCharSet(String charSet) { + this.charSet = charSet; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/FileSyslogServerEventHandler.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/FileSyslogServerEventHandler.java index 4747a8a..79491f6 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/FileSyslogServerEventHandler.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/FileSyslogServerEventHandler.java @@ -7,23 +7,23 @@ import java.io.OutputStream; import java.io.PrintStream; public class FileSyslogServerEventHandler extends PrintStreamSyslogServerEventHandler { - private static final long serialVersionUID = -755824686809731430L; + private static final long serialVersionUID = -755824686809731430L; - protected static PrintStream createPrintStream(String fileName, boolean append) throws IOException { - File file = new File(fileName); - - OutputStream os = new FileOutputStream(file,append); - - PrintStream printStream = new PrintStream(os); - - return printStream; - } - - public FileSyslogServerEventHandler(String fileName) throws IOException { - super(createPrintStream(fileName,true)); - } - - public FileSyslogServerEventHandler(String fileName, boolean append) throws IOException { - super(createPrintStream(fileName,append)); - } + protected static PrintStream createPrintStream(String fileName, boolean append) throws IOException { + File file = new File(fileName); + + OutputStream os = new FileOutputStream(file, append); + + PrintStream printStream = new PrintStream(os); + + return printStream; + } + + public FileSyslogServerEventHandler(String fileName) throws IOException { + super(createPrintStream(fileName, true)); + } + + public FileSyslogServerEventHandler(String fileName, boolean append) throws IOException { + super(createPrintStream(fileName, append)); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/PrintStreamSyslogServerEventHandler.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/PrintStreamSyslogServerEventHandler.java index e11336d..e499fde 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/PrintStreamSyslogServerEventHandler.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/PrintStreamSyslogServerEventHandler.java @@ -10,50 +10,50 @@ import org.graylog2.syslog4j.server.SyslogServerSessionEventHandlerIF; import org.graylog2.syslog4j.util.SyslogUtility; /** -* SystemOutSyslogServerEventHandler provides a simple example implementation -* of the SyslogServerEventHandlerIF which writes the events to System.out. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: PrintStreamSyslogServerEventHandler.java,v 1.7 2010/11/28 22:07:57 cvs Exp $ -*/ + * SystemOutSyslogServerEventHandler provides a simple example implementation + * of the SyslogServerEventHandlerIF which writes the events to System.out. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: PrintStreamSyslogServerEventHandler.java,v 1.7 2010/11/28 22:07:57 cvs Exp $ + */ public class PrintStreamSyslogServerEventHandler implements SyslogServerSessionEventHandlerIF { - private static final long serialVersionUID = 6036415838696050746L; - - protected PrintStream stream = null; - - public PrintStreamSyslogServerEventHandler(PrintStream stream) { - this.stream = stream; - } + private static final long serialVersionUID = 6036415838696050746L; - public void initialize(SyslogServerIF syslogServer) { - return; - } + protected PrintStream stream = null; - public Object sessionOpened(SyslogServerIF syslogServer, SocketAddress socketAddress) { - return null; - } + public PrintStreamSyslogServerEventHandler(PrintStream stream) { + this.stream = stream; + } - public void event(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, SyslogServerEventIF event) { - String date = (event.getDate() == null ? new Date() : event.getDate()).toString(); - String facility = SyslogUtility.getFacilityString(event.getFacility()); - String level = SyslogUtility.getLevelString(event.getLevel()); - - this.stream.println("{" + facility + "} " + date + " " + level + " " + event.getMessage()); - } + public void initialize(SyslogServerIF syslogServer) { + return; + } - public void exception(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, Exception exception) { - // - } + public Object sessionOpened(SyslogServerIF syslogServer, SocketAddress socketAddress) { + return null; + } - public void sessionClosed(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, boolean timeout) { - // - } + public void event(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, SyslogServerEventIF event) { + String date = (event.getDate() == null ? new Date() : event.getDate()).toString(); + String facility = SyslogUtility.getFacilityString(event.getFacility()); + String level = SyslogUtility.getLevelString(event.getLevel()); - public void destroy(SyslogServerIF syslogServer) { - return; - } + this.stream.println("{" + facility + "} " + date + " " + level + " " + event.getMessage()); + } + + public void exception(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, Exception exception) { + // + } + + public void sessionClosed(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, boolean timeout) { + // + } + + public void destroy(SyslogServerIF syslogServer) { + return; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemErrSyslogServerEventHandler.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemErrSyslogServerEventHandler.java index 744cce6..8926c2d 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemErrSyslogServerEventHandler.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemErrSyslogServerEventHandler.java @@ -3,13 +3,13 @@ package org.graylog2.syslog4j.server.impl.event.printstream; import org.graylog2.syslog4j.server.SyslogServerSessionEventHandlerIF; public class SystemErrSyslogServerEventHandler extends PrintStreamSyslogServerEventHandler { - private static final long serialVersionUID = -3496862887351690575L; + private static final long serialVersionUID = -3496862887351690575L; - public static SyslogServerSessionEventHandlerIF create() { - return new SystemErrSyslogServerEventHandler(); - } - - public SystemErrSyslogServerEventHandler() { - super(System.err); - } + public static SyslogServerSessionEventHandlerIF create() { + return new SystemErrSyslogServerEventHandler(); + } + + public SystemErrSyslogServerEventHandler() { + super(System.err); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemOutSyslogServerEventHandler.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemOutSyslogServerEventHandler.java index 6c8db67..75a447b 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemOutSyslogServerEventHandler.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/printstream/SystemOutSyslogServerEventHandler.java @@ -3,13 +3,13 @@ package org.graylog2.syslog4j.server.impl.event.printstream; import org.graylog2.syslog4j.server.SyslogServerSessionEventHandlerIF; public class SystemOutSyslogServerEventHandler extends PrintStreamSyslogServerEventHandler { - private static final long serialVersionUID = 1690551409588182601L; + private static final long serialVersionUID = 1690551409588182601L; - public static SyslogServerSessionEventHandlerIF create() { - return new SystemOutSyslogServerEventHandler(); - } - - public SystemOutSyslogServerEventHandler() { - super(System.out); - } + public static SyslogServerSessionEventHandlerIF create() { + return new SystemOutSyslogServerEventHandler(); + } + + public SystemOutSyslogServerEventHandler() { + super(System.out); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEvent.java b/src/main/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEvent.java index 8f81286..9f9acdd 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEvent.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEvent.java @@ -13,139 +13,139 @@ import org.graylog2.syslog4j.server.impl.event.SyslogServerEvent; * SyslogServerStructuredEvent provides an implementation of the * SyslogServerEventIF interface that supports receiving of structured syslog * messages, as defined in: - * + * ** http://tools.ietf.org/html/draft-ietf-syslog-protocol-23#section-6 *
- * + * ** Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy of the * LGPL license is available in the META-INF folder in all distributions of * Syslog4j and in the base directory of the "doc" ZIP. *
- * + * * @author Manish Motwani * @version $Id: StructuredSyslogServerEvent.java,v 1.6 2011/01/11 05:11:13 cvs Exp $ */ public class StructuredSyslogServerEvent extends SyslogServerEvent { - private static final long serialVersionUID = 1676499796406044315L; + private static final long serialVersionUID = 1676499796406044315L; - protected String applicationName = SyslogConstants.STRUCTURED_DATA_APP_NAME_DEFAULT_VALUE; - protected String processId = null; - protected DateTime dateTime = null; - protected DateTimeFormatter dateTimeFormatter = null; - - public StructuredSyslogServerEvent(final byte[] message, int length, InetAddress inetAddress) { - super(); - - initialize(message,length,inetAddress); - parse(); - } + protected String applicationName = SyslogConstants.STRUCTURED_DATA_APP_NAME_DEFAULT_VALUE; + protected String processId = null; + protected DateTime dateTime = null; + protected DateTimeFormatter dateTimeFormatter = null; - public StructuredSyslogServerEvent(final String message, InetAddress inetAddress) { - super(); - - initialize(message,inetAddress); - parse(); - } + public StructuredSyslogServerEvent(final byte[] message, int length, InetAddress inetAddress) { + super(); - public DateTimeFormatter getDateTimeFormatter() { - if (dateTimeFormatter == null) { - this.dateTimeFormatter = ISODateTimeFormat.dateTime(); - } - - return dateTimeFormatter; - } + initialize(message, length, inetAddress); + parse(); + } - public void setDateTimeFormatter(Object dateTimeFormatter) { - this.dateTimeFormatter = (DateTimeFormatter) dateTimeFormatter; - } + public StructuredSyslogServerEvent(final String message, InetAddress inetAddress) { + super(); - protected void parseApplicationName() { - int i = this.message.indexOf(' '); + initialize(message, inetAddress); + parse(); + } - if (i > -1) { - this.applicationName = this.message.substring(0, i).trim(); - this.message = this.message.substring(i + 1); - parseProcessId(); - } + public DateTimeFormatter getDateTimeFormatter() { + if (dateTimeFormatter == null) { + this.dateTimeFormatter = ISODateTimeFormat.dateTime(); + } - if (SyslogConstants.STRUCTURED_DATA_NILVALUE.equals(this.applicationName)) { - this.applicationName = null; - } - } + return dateTimeFormatter; + } - protected void parseProcessId() { - int i = this.message.indexOf(' '); + public void setDateTimeFormatter(Object dateTimeFormatter) { + this.dateTimeFormatter = (DateTimeFormatter) dateTimeFormatter; + } - if (i > -1) { - this.processId = this.message.substring(0, i).trim(); - this.message = this.message.substring(i + 1); - } + protected void parseApplicationName() { + int i = this.message.indexOf(' '); - if (SyslogConstants.STRUCTURED_DATA_NILVALUE.equals(this.processId)) { - this.processId = null; - } - } + if (i > -1) { + this.applicationName = this.message.substring(0, i).trim(); + this.message = this.message.substring(i + 1); + parseProcessId(); + } - protected void parseDate() { - // skip VERSION field - int i = this.message.indexOf(' '); - this.message = this.message.substring(i + 1); + if (SyslogConstants.STRUCTURED_DATA_NILVALUE.equals(this.applicationName)) { + this.applicationName = null; + } + } - // parse the date - i = this.message.indexOf(' '); + protected void parseProcessId() { + int i = this.message.indexOf(' '); - if (i > -1) { - String dateString = this.message.substring(0, i).trim(); - - try { - DateTimeFormatter formatter = getDateTimeFormatter(); - - this.dateTime = formatter.parseDateTime(dateString); - this.date = this.dateTime.toDate(); - - this.message = this.message.substring(dateString.length() + 1); - - } catch (Exception e) { - // Not structured date format, try super one - super.parseDate(); - } - } - } + if (i > -1) { + this.processId = this.message.substring(0, i).trim(); + this.message = this.message.substring(i + 1); + } - protected void parseHost() { - int i = this.message.indexOf(' '); - - if (i > -1) { - this.host = this.message.substring(0,i).trim(); - this.message = this.message.substring(i+1); - - parseApplicationName(); - } - } + if (SyslogConstants.STRUCTURED_DATA_NILVALUE.equals(this.processId)) { + this.processId = null; + } + } - public String getApplicationName() { - return this.applicationName; - } + protected void parseDate() { + // skip VERSION field + int i = this.message.indexOf(' '); + this.message = this.message.substring(i + 1); - public String getProcessId() { - return this.processId; - } - - public DateTime getDateTime() { - return this.dateTime; - } + // parse the date + i = this.message.indexOf(' '); - public StructuredSyslogMessage getStructuredMessage() { - try { - return StructuredSyslogMessage.fromString(getMessage()); + if (i > -1) { + String dateString = this.message.substring(0, i).trim(); - } catch (IllegalArgumentException e) { - // throw new SyslogRuntimeException( - // "Message received is not a valid structured message: " - // + getMessage(), e); - return new StructuredSyslogMessage(null,null,getMessage()); - } - } + try { + DateTimeFormatter formatter = getDateTimeFormatter(); + + this.dateTime = formatter.parseDateTime(dateString); + this.date = this.dateTime.toDate(); + + this.message = this.message.substring(dateString.length() + 1); + + } catch (Exception e) { + // Not structured date format, try super one + super.parseDate(); + } + } + } + + protected void parseHost() { + int i = this.message.indexOf(' '); + + if (i > -1) { + this.host = this.message.substring(0, i).trim(); + this.message = this.message.substring(i + 1); + + parseApplicationName(); + } + } + + public String getApplicationName() { + return this.applicationName; + } + + public String getProcessId() { + return this.processId; + } + + public DateTime getDateTime() { + return this.dateTime; + } + + public StructuredSyslogMessage getStructuredMessage() { + try { + return StructuredSyslogMessage.fromString(getMessage()); + + } catch (IllegalArgumentException e) { + // throw new SyslogRuntimeException( + // "Message received is not a valid structured message: " + // + getMessage(), e); + return new StructuredSyslogMessage(null, null, getMessage()); + } + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/AbstractNetSyslogServerConfig.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/AbstractNetSyslogServerConfig.java index ce7c943..5a5d4a8 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/AbstractNetSyslogServerConfig.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/AbstractNetSyslogServerConfig.java @@ -3,35 +3,35 @@ package org.graylog2.syslog4j.server.impl.net; import org.graylog2.syslog4j.server.impl.AbstractSyslogServerConfig; /** -* AbstractNetSyslogServerConfig provides a base abstract implementation of the AbstractSyslogServerConfig -* configuration interface. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: AbstractNetSyslogServerConfig.java,v 1.4 2008/11/07 15:15:41 cvs Exp $ -*/ + * AbstractNetSyslogServerConfig provides a base abstract implementation of the AbstractSyslogServerConfig + * configuration interface. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: AbstractNetSyslogServerConfig.java,v 1.4 2008/11/07 15:15:41 cvs Exp $ + */ public abstract class AbstractNetSyslogServerConfig extends AbstractSyslogServerConfig { - private static final long serialVersionUID = -3363374941938350263L; - - protected String host = null; - protected int port = SYSLOG_PORT_DEFAULT; - - public String getHost() { - return this.host; - } + private static final long serialVersionUID = -3363374941938350263L; - public void setHost(String host) { - this.host = host; - } + protected String host = null; + protected int port = SYSLOG_PORT_DEFAULT; - public int getPort() { - return this.port; - } + public String getHost() { + return this.host; + } - public void setPort(int port) { - this.port = port; - } + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return this.port; + } + + public void setPort(int port) { + this.port = port; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServer.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServer.java index a7d81c0..6c50f70 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServer.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServer.java @@ -20,233 +20,233 @@ import org.graylog2.syslog4j.server.impl.AbstractSyslogServer; import org.graylog2.syslog4j.util.SyslogUtility; /** -* TCPNetSyslogServer provides a simple threaded TCP/IP server implementation. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogServer.java,v 1.23 2010/11/28 22:07:57 cvs Exp $ -*/ + * TCPNetSyslogServer provides a simple threaded TCP/IP server implementation. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogServer.java,v 1.23 2010/11/28 22:07:57 cvs Exp $ + */ public class TCPNetSyslogServer extends AbstractSyslogServer { - public static class TCPNetSyslogSocketHandler implements Runnable { - protected SyslogServerIF server = null; - protected Socket socket = null; - protected Sessions sessions = null; - - public TCPNetSyslogSocketHandler(Sessions sessions, SyslogServerIF server, Socket socket) { - this.sessions = sessions; - this.server = server; - this.socket = socket; - - synchronized(this.sessions) { - this.sessions.addSocket(socket); - } - } - - public void run() { - boolean timeout = false; - - try { - BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); + public static class TCPNetSyslogSocketHandler implements Runnable { + protected SyslogServerIF server = null; + protected Socket socket = null; + protected Sessions sessions = null; - String line = br.readLine(); - - if (line != null) { - AbstractSyslogServer.handleSessionOpen(this.sessions,this.server,this.socket); - } - - while (line != null && line.length() != 0) { - SyslogServerEventIF event = createEvent(this.server.getConfig(),line,this.socket.getInetAddress()); - - AbstractSyslogServer.handleEvent(this.sessions,this.server,this.socket,event); + public TCPNetSyslogSocketHandler(Sessions sessions, SyslogServerIF server, Socket socket) { + this.sessions = sessions; + this.server = server; + this.socket = socket; - line = br.readLine(); - } - - } catch (SocketTimeoutException ste) { - timeout = true; - - } catch (SocketException se) { - AbstractSyslogServer.handleException(this.sessions,this.server,this.socket.getRemoteSocketAddress(),se); - - if ("Socket closed".equals(se.getMessage())) { - // - - } else { - // - } - - } catch (IOException ioe) { - AbstractSyslogServer.handleException(this.sessions,this.server,this.socket.getRemoteSocketAddress(),ioe); - } - - try { - AbstractSyslogServer.handleSessionClosed(this.sessions,this.server,this.socket,timeout); - - this.sessions.removeSocket(this.socket); - - this.socket.close(); - - } catch (IOException ioe) { - AbstractSyslogServer.handleException(this.sessions,this.server,this.socket.getRemoteSocketAddress(),ioe); - } - } - } + synchronized (this.sessions) { + this.sessions.addSocket(socket); + } + } - protected ServerSocket serverSocket = null; - - protected final Sessions sessions = new Sessions(); - - protected TCPNetSyslogServerConfigIF tcpNetSyslogServerConfig = null; - - public void initialize() throws SyslogRuntimeException { - this.tcpNetSyslogServerConfig = null; - - try { - this.tcpNetSyslogServerConfig = (TCPNetSyslogServerConfigIF) this.syslogServerConfig; - - } catch (ClassCastException cce) { - throw new SyslogRuntimeException("config must be of type TCPNetSyslogServerConfig"); - } - - if (this.syslogServerConfig == null) { - throw new SyslogRuntimeException("config cannot be null"); - } + public void run() { + boolean timeout = false; - if (this.tcpNetSyslogServerConfig.getBacklog() < 1) { - this.tcpNetSyslogServerConfig.setBacklog(SyslogConstants.SERVER_SOCKET_BACKLOG_DEFAULT); - } - } - - public Sessions getSessions() { - return this.sessions; - } - - public synchronized void shutdown() { - super.shutdown(); - - try { - if (this.serverSocket != null) { - if (this.syslogServerConfig.getShutdownWait() > 0) { - SyslogUtility.sleep(this.syslogServerConfig.getShutdownWait()); - } - - this.serverSocket.close(); - } - - synchronized(this.sessions) { - Iterator i = this.sessions.getSockets(); - - if (i != null) { - while(i.hasNext()) { - Socket s = (Socket) i.next(); - - s.close(); - } - } - } - - } catch (IOException ioe) { - // - } - - if (this.thread != null) { - this.thread.interrupt(); - this.thread = null; - } - } + try { + BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); - protected ServerSocketFactory getServerSocketFactory() throws IOException { - ServerSocketFactory serverSocketFactory = ServerSocketFactory.getDefault(); - - return serverSocketFactory; - } - - protected ServerSocket createServerSocket() throws IOException { - ServerSocket newServerSocket = null; - - ServerSocketFactory factory = getServerSocketFactory(); - - if (this.syslogServerConfig.getHost() != null) { - InetAddress inetAddress = InetAddress.getByName(this.syslogServerConfig.getHost()); - - newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort(),this.tcpNetSyslogServerConfig.getBacklog(),inetAddress); - - } else { - if (this.tcpNetSyslogServerConfig.getBacklog() < 1) { - newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort()); - - } else { - newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort(),this.tcpNetSyslogServerConfig.getBacklog()); - } - } - - return newServerSocket; - } + String line = br.readLine(); - public void run() { - try { - this.serverSocket = createServerSocket(); - this.shutdown = false; - - } catch (SocketException se) { - throw new SyslogRuntimeException(se); + if (line != null) { + AbstractSyslogServer.handleSessionOpen(this.sessions, this.server, this.socket); + } - } catch (IOException ioe) { - throw new SyslogRuntimeException(ioe); - } + while (line != null && line.length() != 0) { + SyslogServerEventIF event = createEvent(this.server.getConfig(), line, this.socket.getInetAddress()); - handleInitialize(this); - - while(!this.shutdown) { - try { - Socket socket = this.serverSocket.accept(); - - if (this.tcpNetSyslogServerConfig.getTimeout() > 0) { - socket.setSoTimeout(this.tcpNetSyslogServerConfig.getTimeout()); - } - - if (this.tcpNetSyslogServerConfig.getMaxActiveSockets() > 0 && this.sessions.size() >= this.tcpNetSyslogServerConfig.getMaxActiveSockets()) { - if (this.tcpNetSyslogServerConfig.getMaxActiveSocketsBehavior() == TCPNetSyslogServerConfigIF.MAX_ACTIVE_SOCKETS_BEHAVIOR_REJECT) { - try { - socket.close(); - - } catch (Exception e) { - // - } - - socket = null; - - } else if (this.tcpNetSyslogServerConfig.getMaxActiveSocketsBehavior() == TCPNetSyslogServerConfigIF.MAX_ACTIVE_SOCKETS_BEHAVIOR_BLOCK) { - while (!this.shutdown && this.sessions.size() >= this.tcpNetSyslogServerConfig.getMaxActiveSockets() && socket.isConnected() && !socket.isClosed()) { - SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); - } - } - } + AbstractSyslogServer.handleEvent(this.sessions, this.server, this.socket, event); - if (socket != null) { - TCPNetSyslogSocketHandler handler = new TCPNetSyslogSocketHandler(this.sessions,this,socket); - - Thread t = new Thread(handler); - - t.start(); - } - - } catch (SocketException se) { - if ("Socket closed".equals(se.getMessage())) { - this.shutdown = true; - - } else { - // - } - - } catch (IOException ioe) { - // - } - } - - handleDestroy(this); - } + line = br.readLine(); + } + + } catch (SocketTimeoutException ste) { + timeout = true; + + } catch (SocketException se) { + AbstractSyslogServer.handleException(this.sessions, this.server, this.socket.getRemoteSocketAddress(), se); + + if ("Socket closed".equals(se.getMessage())) { + // + + } else { + // + } + + } catch (IOException ioe) { + AbstractSyslogServer.handleException(this.sessions, this.server, this.socket.getRemoteSocketAddress(), ioe); + } + + try { + AbstractSyslogServer.handleSessionClosed(this.sessions, this.server, this.socket, timeout); + + this.sessions.removeSocket(this.socket); + + this.socket.close(); + + } catch (IOException ioe) { + AbstractSyslogServer.handleException(this.sessions, this.server, this.socket.getRemoteSocketAddress(), ioe); + } + } + } + + protected ServerSocket serverSocket = null; + + protected final Sessions sessions = new Sessions(); + + protected TCPNetSyslogServerConfigIF tcpNetSyslogServerConfig = null; + + public void initialize() throws SyslogRuntimeException { + this.tcpNetSyslogServerConfig = null; + + try { + this.tcpNetSyslogServerConfig = (TCPNetSyslogServerConfigIF) this.syslogServerConfig; + + } catch (ClassCastException cce) { + throw new SyslogRuntimeException("config must be of type TCPNetSyslogServerConfig"); + } + + if (this.syslogServerConfig == null) { + throw new SyslogRuntimeException("config cannot be null"); + } + + if (this.tcpNetSyslogServerConfig.getBacklog() < 1) { + this.tcpNetSyslogServerConfig.setBacklog(SyslogConstants.SERVER_SOCKET_BACKLOG_DEFAULT); + } + } + + public Sessions getSessions() { + return this.sessions; + } + + public synchronized void shutdown() { + super.shutdown(); + + try { + if (this.serverSocket != null) { + if (this.syslogServerConfig.getShutdownWait() > 0) { + SyslogUtility.sleep(this.syslogServerConfig.getShutdownWait()); + } + + this.serverSocket.close(); + } + + synchronized (this.sessions) { + Iterator i = this.sessions.getSockets(); + + if (i != null) { + while (i.hasNext()) { + Socket s = (Socket) i.next(); + + s.close(); + } + } + } + + } catch (IOException ioe) { + // + } + + if (this.thread != null) { + this.thread.interrupt(); + this.thread = null; + } + } + + protected ServerSocketFactory getServerSocketFactory() throws IOException { + ServerSocketFactory serverSocketFactory = ServerSocketFactory.getDefault(); + + return serverSocketFactory; + } + + protected ServerSocket createServerSocket() throws IOException { + ServerSocket newServerSocket = null; + + ServerSocketFactory factory = getServerSocketFactory(); + + if (this.syslogServerConfig.getHost() != null) { + InetAddress inetAddress = InetAddress.getByName(this.syslogServerConfig.getHost()); + + newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort(), this.tcpNetSyslogServerConfig.getBacklog(), inetAddress); + + } else { + if (this.tcpNetSyslogServerConfig.getBacklog() < 1) { + newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort()); + + } else { + newServerSocket = factory.createServerSocket(this.syslogServerConfig.getPort(), this.tcpNetSyslogServerConfig.getBacklog()); + } + } + + return newServerSocket; + } + + public void run() { + try { + this.serverSocket = createServerSocket(); + this.shutdown = false; + + } catch (SocketException se) { + throw new SyslogRuntimeException(se); + + } catch (IOException ioe) { + throw new SyslogRuntimeException(ioe); + } + + handleInitialize(this); + + while (!this.shutdown) { + try { + Socket socket = this.serverSocket.accept(); + + if (this.tcpNetSyslogServerConfig.getTimeout() > 0) { + socket.setSoTimeout(this.tcpNetSyslogServerConfig.getTimeout()); + } + + if (this.tcpNetSyslogServerConfig.getMaxActiveSockets() > 0 && this.sessions.size() >= this.tcpNetSyslogServerConfig.getMaxActiveSockets()) { + if (this.tcpNetSyslogServerConfig.getMaxActiveSocketsBehavior() == TCPNetSyslogServerConfigIF.MAX_ACTIVE_SOCKETS_BEHAVIOR_REJECT) { + try { + socket.close(); + + } catch (Exception e) { + // + } + + socket = null; + + } else if (this.tcpNetSyslogServerConfig.getMaxActiveSocketsBehavior() == TCPNetSyslogServerConfigIF.MAX_ACTIVE_SOCKETS_BEHAVIOR_BLOCK) { + while (!this.shutdown && this.sessions.size() >= this.tcpNetSyslogServerConfig.getMaxActiveSockets() && socket.isConnected() && !socket.isClosed()) { + SyslogUtility.sleep(SyslogConstants.THREAD_LOOP_INTERVAL_DEFAULT); + } + } + } + + if (socket != null) { + TCPNetSyslogSocketHandler handler = new TCPNetSyslogSocketHandler(this.sessions, this, socket); + + Thread t = new Thread(handler); + + t.start(); + } + + } catch (SocketException se) { + if ("Socket closed".equals(se.getMessage())) { + this.shutdown = true; + + } else { + // + } + + } catch (IOException ioe) { + // + } + } + + handleDestroy(this); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfig.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfig.java index 5d63b01..2a673f0 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfig.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfig.java @@ -3,84 +3,84 @@ package org.graylog2.syslog4j.server.impl.net.tcp; import org.graylog2.syslog4j.server.impl.net.AbstractNetSyslogServerConfig; /** -* TCPNetSyslogServerConfig provides configuration for TCPNetSyslogServer. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogServerConfig.java,v 1.8 2010/11/28 01:38:08 cvs Exp $ -*/ + * TCPNetSyslogServerConfig provides configuration for TCPNetSyslogServer. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogServerConfig.java,v 1.8 2010/11/28 01:38:08 cvs Exp $ + */ public class TCPNetSyslogServerConfig extends AbstractNetSyslogServerConfig implements TCPNetSyslogServerConfigIF { - private static final long serialVersionUID = -1546696301177599370L; - - protected int timeout = 0; - protected int backlog = 0; - protected int maxActiveSockets = TCP_MAX_ACTIVE_SOCKETS_DEFAULT; - protected byte maxActiveSocketsBehavior = TCP_MAX_ACTIVE_SOCKETS_BEHAVIOR_DEFAULT; + private static final long serialVersionUID = -1546696301177599370L; - public TCPNetSyslogServerConfig() { - // - } + protected int timeout = 0; + protected int backlog = 0; + protected int maxActiveSockets = TCP_MAX_ACTIVE_SOCKETS_DEFAULT; + protected byte maxActiveSocketsBehavior = TCP_MAX_ACTIVE_SOCKETS_BEHAVIOR_DEFAULT; - public TCPNetSyslogServerConfig(int port) { - this.port = port; - } + public TCPNetSyslogServerConfig() { + // + } - public TCPNetSyslogServerConfig(int port, int backlog) { - this.port = port; - this.backlog = backlog; - } + public TCPNetSyslogServerConfig(int port) { + this.port = port; + } - public TCPNetSyslogServerConfig(String host) { - this.host = host; - } + public TCPNetSyslogServerConfig(int port, int backlog) { + this.port = port; + this.backlog = backlog; + } - public TCPNetSyslogServerConfig(String host, int port) { - this.host = host; - this.port = port; - } + public TCPNetSyslogServerConfig(String host) { + this.host = host; + } - public TCPNetSyslogServerConfig(String host, int port, int backlog) { - this.host = host; - this.port = port; - this.backlog = backlog; - } + public TCPNetSyslogServerConfig(String host, int port) { + this.host = host; + this.port = port; + } - public Class getSyslogServerClass() { - return TCPNetSyslogServer.class; - } - - public int getTimeout() { - return timeout; - } + public TCPNetSyslogServerConfig(String host, int port, int backlog) { + this.host = host; + this.port = port; + this.backlog = backlog; + } - public void setTimeout(int timeout) { - this.timeout = timeout; - } + public Class getSyslogServerClass() { + return TCPNetSyslogServer.class; + } - public int getBacklog() { - return this.backlog; - } + public int getTimeout() { + return timeout; + } - public void setBacklog(int backlog) { - this.backlog = backlog; - } + public void setTimeout(int timeout) { + this.timeout = timeout; + } - public int getMaxActiveSockets() { - return maxActiveSockets; - } + public int getBacklog() { + return this.backlog; + } - public void setMaxActiveSockets(int maxActiveSockets) { - this.maxActiveSockets = maxActiveSockets; - } + public void setBacklog(int backlog) { + this.backlog = backlog; + } - public byte getMaxActiveSocketsBehavior() { - return maxActiveSocketsBehavior; - } + public int getMaxActiveSockets() { + return maxActiveSockets; + } - public void setMaxActiveSocketsBehavior(byte maxActiveSocketsBehavior) { - this.maxActiveSocketsBehavior = maxActiveSocketsBehavior; - } + public void setMaxActiveSockets(int maxActiveSockets) { + this.maxActiveSockets = maxActiveSockets; + } + + public byte getMaxActiveSocketsBehavior() { + return maxActiveSocketsBehavior; + } + + public void setMaxActiveSocketsBehavior(byte maxActiveSocketsBehavior) { + this.maxActiveSocketsBehavior = maxActiveSocketsBehavior; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfigIF.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfigIF.java index ce6fab2..a932c79 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/TCPNetSyslogServerConfigIF.java @@ -3,28 +3,32 @@ package org.graylog2.syslog4j.server.impl.net.tcp; import org.graylog2.syslog4j.server.SyslogServerConfigIF; /** -* TCPNetSyslogServerConfigIF provides configuration for TCPNetSyslogServer. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: TCPNetSyslogServerConfigIF.java,v 1.3 2010/11/28 01:38:08 cvs Exp $ -*/ + * TCPNetSyslogServerConfigIF provides configuration for TCPNetSyslogServer. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: TCPNetSyslogServerConfigIF.java,v 1.3 2010/11/28 01:38:08 cvs Exp $ + */ public interface TCPNetSyslogServerConfigIF extends SyslogServerConfigIF { - public final static byte MAX_ACTIVE_SOCKETS_BEHAVIOR_BLOCK = 0; - public final static byte MAX_ACTIVE_SOCKETS_BEHAVIOR_REJECT = 1; - - public int getTimeout(); - public void setTimeout(int timeout); - - public int getBacklog(); - public void setBacklog(int backlog); - - public int getMaxActiveSockets(); - public void setMaxActiveSockets(int maxActiveSockets); - - public byte getMaxActiveSocketsBehavior(); - public void setMaxActiveSocketsBehavior(byte maxActiveSocketsBehavior); + public final static byte MAX_ACTIVE_SOCKETS_BEHAVIOR_BLOCK = 0; + public final static byte MAX_ACTIVE_SOCKETS_BEHAVIOR_REJECT = 1; + + public int getTimeout(); + + public void setTimeout(int timeout); + + public int getBacklog(); + + public void setBacklog(int backlog); + + public int getMaxActiveSockets(); + + public void setMaxActiveSockets(int maxActiveSockets); + + public byte getMaxActiveSocketsBehavior(); + + public void setMaxActiveSocketsBehavior(byte maxActiveSocketsBehavior); } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServer.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServer.java index c2e0704..c1505d2 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServer.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServer.java @@ -9,50 +9,50 @@ import org.graylog2.syslog4j.SyslogRuntimeException; import org.graylog2.syslog4j.server.impl.net.tcp.TCPNetSyslogServer; /** -* SSLTCPNetSyslogServer provides a simple threaded TCP/IP server implementation -* which uses SSL/TLS. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogServer.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogServer provides a simple threaded TCP/IP server implementation + * which uses SSL/TLS. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogServer.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ + */ public class SSLTCPNetSyslogServer extends TCPNetSyslogServer { - public void initialize() throws SyslogRuntimeException { - super.initialize(); - - SSLTCPNetSyslogServerConfigIF sslTcpNetSyslogServerConfig = (SSLTCPNetSyslogServerConfigIF) this.tcpNetSyslogServerConfig; - - String keyStore = sslTcpNetSyslogServerConfig.getKeyStore(); - - if (keyStore != null && !"".equals(keyStore.trim())) { - System.setProperty("javax.net.ssl.keyStore",keyStore); - } + public void initialize() throws SyslogRuntimeException { + super.initialize(); - String keyStorePassword = sslTcpNetSyslogServerConfig.getKeyStorePassword(); - - if (keyStorePassword != null && !"".equals(keyStorePassword.trim())) { - System.setProperty("javax.net.ssl.keyStorePassword",keyStorePassword); - } + SSLTCPNetSyslogServerConfigIF sslTcpNetSyslogServerConfig = (SSLTCPNetSyslogServerConfigIF) this.tcpNetSyslogServerConfig; - String trustStore = sslTcpNetSyslogServerConfig.getTrustStore(); - - if (trustStore != null && !"".equals(trustStore.trim())) { - System.setProperty("javax.net.ssl.trustStore",trustStore); - } + String keyStore = sslTcpNetSyslogServerConfig.getKeyStore(); - String trustStorePassword = sslTcpNetSyslogServerConfig.getTrustStorePassword(); - - if (trustStorePassword != null && !"".equals(trustStorePassword.trim())) { - System.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword); - } - } + if (keyStore != null && !"".equals(keyStore.trim())) { + System.setProperty("javax.net.ssl.keyStore", keyStore); + } - protected ServerSocketFactory getServerSocketFactory() throws IOException { - ServerSocketFactory serverSocketFactory = SSLServerSocketFactory.getDefault(); - - return serverSocketFactory; - } + String keyStorePassword = sslTcpNetSyslogServerConfig.getKeyStorePassword(); + + if (keyStorePassword != null && !"".equals(keyStorePassword.trim())) { + System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); + } + + String trustStore = sslTcpNetSyslogServerConfig.getTrustStore(); + + if (trustStore != null && !"".equals(trustStore.trim())) { + System.setProperty("javax.net.ssl.trustStore", trustStore); + } + + String trustStorePassword = sslTcpNetSyslogServerConfig.getTrustStorePassword(); + + if (trustStorePassword != null && !"".equals(trustStorePassword.trim())) { + System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword); + } + } + + protected ServerSocketFactory getServerSocketFactory() throws IOException { + ServerSocketFactory serverSocketFactory = SSLServerSocketFactory.getDefault(); + + return serverSocketFactory; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfig.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfig.java index 21aae76..a77c202 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfig.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfig.java @@ -3,57 +3,57 @@ package org.graylog2.syslog4j.server.impl.net.tcp.ssl; import org.graylog2.syslog4j.server.impl.net.tcp.TCPNetSyslogServerConfig; /** -* SSLTCPNetSyslogServerConfig provides configuration for SSLTCPNetSyslogServer. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogServerConfig.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogServerConfig provides configuration for SSLTCPNetSyslogServer. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogServerConfig.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ + */ public class SSLTCPNetSyslogServerConfig extends TCPNetSyslogServerConfig implements SSLTCPNetSyslogServerConfigIF { - private static final long serialVersionUID = -840102682868286462L; + private static final long serialVersionUID = -840102682868286462L; - protected String keyStore = null; - protected String keyStorePassword = null; + protected String keyStore = null; + protected String keyStorePassword = null; - protected String trustStore = null; - protected String trustStorePassword = null; + protected String trustStore = null; + protected String trustStorePassword = null; - public String getKeyStore() { - return this.keyStore; - } - - public void setKeyStore(String keyStore) { - this.keyStore = keyStore; - } - - public String getKeyStorePassword() { - return this.keyStorePassword; - } - - public void setKeyStorePassword(String keyStorePassword) { - this.keyStorePassword = keyStorePassword; - } + public String getKeyStore() { + return this.keyStore; + } - public String getTrustStore() { - return this.trustStore; - } + public void setKeyStore(String keyStore) { + this.keyStore = keyStore; + } - public void setTrustStore(String trustStore) { - this.trustStore = trustStore; - } + public String getKeyStorePassword() { + return this.keyStorePassword; + } - public String getTrustStorePassword() { - return this.trustStorePassword; - } + public void setKeyStorePassword(String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } - public void setTrustStorePassword(String trustStorePassword) { - this.trustStorePassword = trustStorePassword; - } + public String getTrustStore() { + return this.trustStore; + } - public Class getSyslogServerClass() { - return SSLTCPNetSyslogServer.class; - } + public void setTrustStore(String trustStore) { + this.trustStore = trustStore; + } + + public String getTrustStorePassword() { + return this.trustStorePassword; + } + + public void setTrustStorePassword(String trustStorePassword) { + this.trustStorePassword = trustStorePassword; + } + + public Class getSyslogServerClass() { + return SSLTCPNetSyslogServer.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfigIF.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfigIF.java index a81f6ef..0b69156 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfigIF.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/tcp/ssl/SSLTCPNetSyslogServerConfigIF.java @@ -3,25 +3,29 @@ package org.graylog2.syslog4j.server.impl.net.tcp.ssl; import org.graylog2.syslog4j.server.impl.net.tcp.TCPNetSyslogServerConfigIF; /** -* SSLTCPNetSyslogServerConfigIF provides configuration for SSLTCPNetSyslogServer. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SSLTCPNetSyslogServerConfigIF.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ -*/ + * SSLTCPNetSyslogServerConfigIF provides configuration for SSLTCPNetSyslogServer. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SSLTCPNetSyslogServerConfigIF.java,v 1.1 2009/03/29 17:38:58 cvs Exp $ + */ public interface SSLTCPNetSyslogServerConfigIF extends TCPNetSyslogServerConfigIF { - public String getKeyStore(); - public void setKeyStore(String keyStore); - - public String getKeyStorePassword(); - public void setKeyStorePassword(String keyStorePassword); + public String getKeyStore(); - public String getTrustStore(); - public void setTrustStore(String trustStore); - - public String getTrustStorePassword(); - public void setTrustStorePassword(String trustStorePassword); + public void setKeyStore(String keyStore); + + public String getKeyStorePassword(); + + public void setKeyStorePassword(String keyStorePassword); + + public String getTrustStore(); + + public void setTrustStore(String trustStore); + + public String getTrustStorePassword(); + + public void setTrustStorePassword(String trustStorePassword); } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServer.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServer.java index 4390ea5..de943ea 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServer.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServer.java @@ -14,89 +14,89 @@ import org.graylog2.syslog4j.server.impl.AbstractSyslogServer; import org.graylog2.syslog4j.util.SyslogUtility; /** -* UDPNetSyslogServer provides a simple non-threaded UDP/IP server implementation. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UDPNetSyslogServer.java,v 1.16 2010/11/12 03:43:15 cvs Exp $ -*/ + * UDPNetSyslogServer provides a simple non-threaded UDP/IP server implementation. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UDPNetSyslogServer.java,v 1.16 2010/11/12 03:43:15 cvs Exp $ + */ public class UDPNetSyslogServer extends AbstractSyslogServer { - protected DatagramSocket ds = null; + protected DatagramSocket ds = null; - public void initialize() throws SyslogRuntimeException { - // - } - - public void shutdown() { - super.shutdown(); - - if (this.syslogServerConfig.getShutdownWait() > 0) { - SyslogUtility.sleep(this.syslogServerConfig.getShutdownWait()); - } - - if (this.ds != null && !this.ds.isClosed()) { - this.ds.close(); - } - } - - protected DatagramSocket createDatagramSocket() throws SocketException, UnknownHostException { - DatagramSocket datagramSocket = null; - - if (this.syslogServerConfig.getHost() != null) { - InetAddress inetAddress = InetAddress.getByName(this.syslogServerConfig.getHost()); - - datagramSocket = new DatagramSocket(this.syslogServerConfig.getPort(),inetAddress); - - } else { - datagramSocket = new DatagramSocket(this.syslogServerConfig.getPort()); - } - - return datagramSocket; - } + public void initialize() throws SyslogRuntimeException { + // + } - public void run() { - try { - this.ds = createDatagramSocket(); - this.shutdown = false; - - } catch (SocketException se) { - return; - - } catch (UnknownHostException uhe) { - return; - } - - byte[] receiveData = new byte[SyslogConstants.SYSLOG_BUFFER_SIZE]; - - handleInitialize(this); - - while(!this.shutdown) { - DatagramPacket dp = null; - - try { - dp = new DatagramPacket(receiveData,receiveData.length); - - this.ds.receive(dp); - - SyslogServerEventIF event = createEvent(this.getConfig(),receiveData,dp.getLength(),dp.getAddress()); - - handleEvent(null,this,dp,event); - - } catch (SocketException se) { - int i = se.getMessage() == null ? -1 : se.getMessage().toLowerCase().indexOf("socket closed"); - - if (i == -1) { - handleException(null,this,dp.getSocketAddress(),se); - } - - } catch (IOException ioe) { - handleException(null,this,dp.getSocketAddress(),ioe); - } - } - - handleDestroy(this); - } + public void shutdown() { + super.shutdown(); + + if (this.syslogServerConfig.getShutdownWait() > 0) { + SyslogUtility.sleep(this.syslogServerConfig.getShutdownWait()); + } + + if (this.ds != null && !this.ds.isClosed()) { + this.ds.close(); + } + } + + protected DatagramSocket createDatagramSocket() throws SocketException, UnknownHostException { + DatagramSocket datagramSocket = null; + + if (this.syslogServerConfig.getHost() != null) { + InetAddress inetAddress = InetAddress.getByName(this.syslogServerConfig.getHost()); + + datagramSocket = new DatagramSocket(this.syslogServerConfig.getPort(), inetAddress); + + } else { + datagramSocket = new DatagramSocket(this.syslogServerConfig.getPort()); + } + + return datagramSocket; + } + + public void run() { + try { + this.ds = createDatagramSocket(); + this.shutdown = false; + + } catch (SocketException se) { + return; + + } catch (UnknownHostException uhe) { + return; + } + + byte[] receiveData = new byte[SyslogConstants.SYSLOG_BUFFER_SIZE]; + + handleInitialize(this); + + while (!this.shutdown) { + DatagramPacket dp = null; + + try { + dp = new DatagramPacket(receiveData, receiveData.length); + + this.ds.receive(dp); + + SyslogServerEventIF event = createEvent(this.getConfig(), receiveData, dp.getLength(), dp.getAddress()); + + handleEvent(null, this, dp, event); + + } catch (SocketException se) { + int i = se.getMessage() == null ? -1 : se.getMessage().toLowerCase().indexOf("socket closed"); + + if (i == -1) { + handleException(null, this, dp.getSocketAddress(), se); + } + + } catch (IOException ioe) { + handleException(null, this, dp.getSocketAddress(), ioe); + } + } + + handleDestroy(this); + } } diff --git a/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServerConfig.java b/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServerConfig.java index 7e1885a..342df88 100644 --- a/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServerConfig.java +++ b/src/main/java/org/graylog2/syslog4j/server/impl/net/udp/UDPNetSyslogServerConfig.java @@ -3,36 +3,36 @@ package org.graylog2.syslog4j.server.impl.net.udp; import org.graylog2.syslog4j.server.impl.net.AbstractNetSyslogServerConfig; /** -* UDPNetSyslogServerConfig provides configuration for UDPNetSyslogServer. -* -*Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: UDPNetSyslogServerConfig.java,v 1.6 2010/10/28 05:10:57 cvs Exp $ -*/ + * UDPNetSyslogServerConfig provides configuration for UDPNetSyslogServer. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: UDPNetSyslogServerConfig.java,v 1.6 2010/10/28 05:10:57 cvs Exp $ + */ public class UDPNetSyslogServerConfig extends AbstractNetSyslogServerConfig { - private static final long serialVersionUID = -2005919161187055486L; + private static final long serialVersionUID = -2005919161187055486L; - public UDPNetSyslogServerConfig() { - // - } + public UDPNetSyslogServerConfig() { + // + } - public UDPNetSyslogServerConfig(int port) { - this.port = port; - } + public UDPNetSyslogServerConfig(int port) { + this.port = port; + } - public UDPNetSyslogServerConfig(String host) { - this.host = host; - } + public UDPNetSyslogServerConfig(String host) { + this.host = host; + } - public UDPNetSyslogServerConfig(String host, int port) { - this.host = host; - this.port = port; - } + public UDPNetSyslogServerConfig(String host, int port) { + this.host = host; + this.port = port; + } - public Class getSyslogServerClass() { - return UDPNetSyslogServer.class; - } + public Class getSyslogServerClass() { + return UDPNetSyslogServer.class; + } } diff --git a/src/main/java/org/graylog2/syslog4j/util/Base64.java b/src/main/java/org/graylog2/syslog4j/util/Base64.java index 89f2a86..b766279 100644 --- a/src/main/java/org/graylog2/syslog4j/util/Base64.java +++ b/src/main/java/org/graylog2/syslog4j/util/Base64.java @@ -3,76 +3,76 @@ package org.graylog2.syslog4j.util; /** *Encodes and decodes to and from Base64 notation.
*Homepage: http://iharder.net/base64.
- * - *The options parameter, which appears in a few places, is used to pass - * several pieces of information to the encoder. In the "higher level" methods such as - * encodeBytes( bytes, options ) the options parameter can be used to indicate such - * things as first gzipping the bytes before encoding them, not inserting linefeeds - * (though that breaks strict Base64 compatibility), and encoding using the URL-safe + *
+ *The options parameter, which appears in a few places, is used to pass + * several pieces of information to the encoder. In the "higher level" methods such as + * encodeBytes( bytes, options ) the options parameter can be used to indicate such + * things as first gzipping the bytes before encoding them, not inserting linefeeds + * (though that breaks strict Base64 compatibility), and encoding using the URL-safe * and Ordered dialects.
- * - *The constants defined in Base64 can be OR-ed together to combine options, so you + *
+ *The constants defined in Base64 can be OR-ed together to combine options, so you * might make a call like this:
- * + * *String encoded = Base64.encodeBytes( mybytes, Base64.GZIP | Base64.DONT_BREAK_LINES );
- *
+ *
* to compress the data before encoding it and then making the output have no newline characters.
- * - * + * + * ** Change Log: *
** I am placing this code in the Public Domain. Do with it as you will. * This software comes with no guarantees or warranties but with @@ -85,120 +85,139 @@ package org.graylog2.syslog4j.util; * @author rob@iharder.net * @version 2.2.2 */ -public class Base64 -{ +public class Base64 { -/* ******** P U B L I C F I E L D S ******** */ - - - /** No options specified. Value is zero. */ +/* ******** P U B L I C F I E L D S ******** */ + + + /** + * No options specified. Value is zero. + */ public final static int NO_OPTIONS = 0; - - /** Specify encoding. */ + + /** + * Specify encoding. + */ public final static int ENCODE = 1; - - - /** Specify decoding. */ + + + /** + * Specify decoding. + */ public final static int DECODE = 0; - - - /** Specify that data should be gzip-compressed. */ + + + /** + * Specify that data should be gzip-compressed. + */ public final static int GZIP = 2; - - - /** Don't break lines when encoding (violates strict Base64 specification) */ + + + /** + * Don't break lines when encoding (violates strict Base64 specification) + */ public final static int DONT_BREAK_LINES = 8; - - /** - * Encode using Base64-like encoding that is URL- and Filename-safe as described - * in Section 4 of RFC3548: - * http://www.faqs.org/rfcs/rfc3548.html. - * It is important to note that data encoded this way is not officially valid Base64, - * or at the very least should not be called Base64 without also specifying that is - * was encoded using the URL- and Filename-safe dialect. - */ - public final static int URL_SAFE = 16; - - - /** - * Encode using the special "ordered" dialect of Base64 described here: - * http://www.faqs.org/qa/rfcc-1940.html. - */ - public final static int ORDERED = 32; + + /** + * Encode using Base64-like encoding that is URL- and Filename-safe as described + * in Section 4 of RFC3548: + * http://www.faqs.org/rfcs/rfc3548.html. + * It is important to note that data encoded this way is not officially valid Base64, + * or at the very least should not be called Base64 without also specifying that is + * was encoded using the URL- and Filename-safe dialect. + */ + public final static int URL_SAFE = 16; + + + /** + * Encode using the special "ordered" dialect of Base64 described here: + * http://www.faqs.org/qa/rfcc-1940.html. + */ + public final static int ORDERED = 32; -/* ******** P R I V A T E F I E L D S ******** */ - - - /** Maximum line length (76) of Base64 output. */ +/* ******** P R I V A T E F I E L D S ******** */ + + + /** + * Maximum line length (76) of Base64 output. + */ private final static int MAX_LINE_LENGTH = 76; - - - /** The equals sign (=) as a byte. */ - private final static byte EQUALS_SIGN = (byte)'='; - - - /** The new line character (\n) as a byte. */ - private final static byte NEW_LINE = (byte)'\n'; - - - /** Preferred encoding. */ + + + /** + * The equals sign (=) as a byte. + */ + private final static byte EQUALS_SIGN = (byte) '='; + + + /** + * The new line character (\n) as a byte. + */ + private final static byte NEW_LINE = (byte) '\n'; + + + /** + * Preferred encoding. + */ private final static String PREFERRED_ENCODING = "UTF-8"; - - + + // I think I end up not using the BAD_ENCODING indicator. //private final static byte BAD_ENCODING = -9; // Indicates error in encoding private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding + - -/* ******** S T A N D A R D B A S E 6 4 A L P H A B E T ******** */ - - /** The 64 valid Base64 values. */ +/* ******** S T A N D A R D B A S E 6 4 A L P H A B E T ******** */ + + /** + * The 64 valid Base64 values. + */ //private final static byte[] ALPHABET; /* Host platform me be something funny like EBCDIC, so we hardcode these values. */ - private final static byte[] _STANDARD_ALPHABET = - { - (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', - (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', - (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', - (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', - (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', - (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', - (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', - (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', - (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'+', (byte)'/' - }; - - - /** + private final static byte[] _STANDARD_ALPHABET = + { + (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', + (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', + (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', + (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', + (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', + (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', + (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', + (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', + (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', + (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/' + }; + + + /** * Translates a Base64 value to either its 6-bit reconstruction value * or a negative number indicating some other meaning. - **/ + */ private final static byte[] _STANDARD_DECODABET = - { - -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 - -5,-5, // Whitespace: Tab and Linefeed - -9,-9, // Decimal 11 - 12 - -5, // Whitespace: Carriage Return - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 - -9,-9,-9,-9,-9, // Decimal 27 - 31 - -5, // Whitespace: Space - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 - 62, // Plus sign at decimal 43 - -9,-9,-9, // Decimal 44 - 46 - 63, // Slash at decimal 47 - 52,53,54,55,56,57,58,59,60,61, // Numbers zero through nine - -9,-9,-9, // Decimal 58 - 60 - -1, // Equals sign at decimal 61 - -9,-9,-9, // Decimal 62 - 64 - 0,1,2,3,4,5,6,7,8,9,10,11,12,13, // Letters 'A' through 'N' - 14,15,16,17,18,19,20,21,22,23,24,25, // Letters 'O' through 'Z' - -9,-9,-9,-9,-9,-9, // Decimal 91 - 96 - 26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm' - 39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z' - -9,-9,-9,-9 // Decimal 123 - 126 + { + -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 0 - 8 + -5, -5, // Whitespace: Tab and Linefeed + -9, -9, // Decimal 11 - 12 + -5, // Whitespace: Carriage Return + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26 + -9, -9, -9, -9, -9, // Decimal 27 - 31 + -5, // Whitespace: Space + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42 + 62, // Plus sign at decimal 43 + -9, -9, -9, // Decimal 44 - 46 + 63, // Slash at decimal 47 + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine + -9, -9, -9, // Decimal 58 - 60 + -1, // Equals sign at decimal 61 + -9, -9, -9, // Decimal 62 - 64 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through 'N' + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O' through 'Z' + -9, -9, -9, -9, -9, -9, // Decimal 91 - 96 + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a' through 'm' + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n' through 'z' + -9, -9, -9, -9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 @@ -209,60 +228,60 @@ public class Base64 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ - }; + }; /* ******** U R L S A F E B A S E 6 4 A L P H A B E T ******** */ - - /** - * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548: - * http://www.faqs.org/rfcs/rfc3548.html. - * Notice that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash." - */ + + /** + * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548: + * http://www.faqs.org/rfcs/rfc3548.html. + * Notice that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash." + */ private final static byte[] _URL_SAFE_ALPHABET = - { - (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', - (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', - (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', - (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', - (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', - (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', - (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', - (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', - (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'-', (byte)'_' - }; - - /** - * Used in decoding URL- and Filename-safe dialects of Base64. - */ + { + (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', + (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', + (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', + (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', + (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', + (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', + (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', + (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', + (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', + (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '-', (byte) '_' + }; + + /** + * Used in decoding URL- and Filename-safe dialects of Base64. + */ private final static byte[] _URL_SAFE_DECODABET = - { - -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 - -5,-5, // Whitespace: Tab and Linefeed - -9,-9, // Decimal 11 - 12 - -5, // Whitespace: Carriage Return - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 - -9,-9,-9,-9,-9, // Decimal 27 - 31 - -5, // Whitespace: Space - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 - -9, // Plus sign at decimal 43 - -9, // Decimal 44 - 62, // Minus sign at decimal 45 - -9, // Decimal 46 - -9, // Slash at decimal 47 - 52,53,54,55,56,57,58,59,60,61, // Numbers zero through nine - -9,-9,-9, // Decimal 58 - 60 - -1, // Equals sign at decimal 61 - -9,-9,-9, // Decimal 62 - 64 - 0,1,2,3,4,5,6,7,8,9,10,11,12,13, // Letters 'A' through 'N' - 14,15,16,17,18,19,20,21,22,23,24,25, // Letters 'O' through 'Z' - -9,-9,-9,-9, // Decimal 91 - 94 - 63, // Underscore at decimal 95 - -9, // Decimal 96 - 26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm' - 39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z' - -9,-9,-9,-9 // Decimal 123 - 126 + { + -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 0 - 8 + -5, -5, // Whitespace: Tab and Linefeed + -9, -9, // Decimal 11 - 12 + -5, // Whitespace: Carriage Return + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26 + -9, -9, -9, -9, -9, // Decimal 27 - 31 + -5, // Whitespace: Space + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42 + -9, // Plus sign at decimal 43 + -9, // Decimal 44 + 62, // Minus sign at decimal 45 + -9, // Decimal 46 + -9, // Slash at decimal 47 + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine + -9, -9, -9, // Decimal 58 - 60 + -1, // Equals sign at decimal 61 + -9, -9, -9, // Decimal 62 - 64 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through 'N' + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O' through 'Z' + -9, -9, -9, -9, // Decimal 91 - 94 + 63, // Underscore at decimal 95 + -9, // Decimal 96 + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a' through 'm' + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n' through 'z' + -9, -9, -9, -9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 @@ -273,62 +292,62 @@ public class Base64 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ - }; + }; /* ******** O R D E R E D B A S E 6 4 A L P H A B E T ******** */ - /** - * I don't get the point of this technique, but it is described here: - * http://www.faqs.org/qa/rfcc-1940.html. - */ + /** + * I don't get the point of this technique, but it is described here: + * http://www.faqs.org/qa/rfcc-1940.html. + */ private final static byte[] _ORDERED_ALPHABET = - { - (byte)'-', - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', - (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', - (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', - (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', - (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', - (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', - (byte)'_', - (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', - (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', - (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', - (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z' - }; - - /** - * Used in decoding the "ordered" dialect of Base64. - */ + { + (byte) '-', + (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', + (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', + (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', + (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', + (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', + (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', + (byte) '_', + (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', + (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', + (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', + (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z' + }; + + /** + * Used in decoding the "ordered" dialect of Base64. + */ private final static byte[] _ORDERED_DECODABET = - { - -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 - -5,-5, // Whitespace: Tab and Linefeed - -9,-9, // Decimal 11 - 12 - -5, // Whitespace: Carriage Return - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 - -9,-9,-9,-9,-9, // Decimal 27 - 31 - -5, // Whitespace: Space - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 - -9, // Plus sign at decimal 43 - -9, // Decimal 44 - 0, // Minus sign at decimal 45 - -9, // Decimal 46 - -9, // Slash at decimal 47 - 1,2,3,4,5,6,7,8,9,10, // Numbers zero through nine - -9,-9,-9, // Decimal 58 - 60 - -1, // Equals sign at decimal 61 - -9,-9,-9, // Decimal 62 - 64 - 11,12,13,14,15,16,17,18,19,20,21,22,23, // Letters 'A' through 'M' - 24,25,26,27,28,29,30,31,32,33,34,35,36, // Letters 'N' through 'Z' - -9,-9,-9,-9, // Decimal 91 - 94 - 37, // Underscore at decimal 95 - -9, // Decimal 96 - 38,39,40,41,42,43,44,45,46,47,48,49,50, // Letters 'a' through 'm' - 51,52,53,54,55,56,57,58,59,60,61,62,63, // Letters 'n' through 'z' - -9,-9,-9,-9 // Decimal 123 - 126 + { + -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 0 - 8 + -5, -5, // Whitespace: Tab and Linefeed + -9, -9, // Decimal 11 - 12 + -5, // Whitespace: Carriage Return + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26 + -9, -9, -9, -9, -9, // Decimal 27 - 31 + -5, // Whitespace: Space + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42 + -9, // Plus sign at decimal 43 + -9, // Decimal 44 + 0, // Minus sign at decimal 45 + -9, // Decimal 46 + -9, // Slash at decimal 47 + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // Numbers zero through nine + -9, -9, -9, // Decimal 58 - 60 + -1, // Equals sign at decimal 61 + -9, -9, -9, // Decimal 62 - 64 + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, // Letters 'A' through 'M' + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, // Letters 'N' through 'Z' + -9, -9, -9, -9, // Decimal 91 - 94 + 37, // Underscore at decimal 95 + -9, // Decimal 96 + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, // Letters 'a' through 'm' + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // Letters 'n' through 'z' + -9, -9, -9, -9 // Decimal 123 - 126 /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 @@ -339,71 +358,70 @@ public class Base64 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ - }; + }; /* ******** D E T E R M I N E W H I C H A L H A B E T ******** */ - /** - * Returns one of the _SOMETHING_ALPHABET byte arrays depending on - * the options specified. - * It's possible, though silly, to specify ORDERED and URLSAFE - * in which case one of them will be picked, though there is - * no guarantee as to which one will be picked. - */ - private final static byte[] getAlphabet( int options ) - { - if( (options & URL_SAFE) == URL_SAFE ) return _URL_SAFE_ALPHABET; - else if( (options & ORDERED) == ORDERED ) return _ORDERED_ALPHABET; - else return _STANDARD_ALPHABET; - - } // end getAlphabet - - - /** - * Returns one of the _SOMETHING_DECODABET byte arrays depending on - * the options specified. - * It's possible, though silly, to specify ORDERED and URL_SAFE - * in which case one of them will be picked, though there is - * no guarantee as to which one will be picked. - */ - private final static byte[] getDecodabet( int options ) - { - if( (options & URL_SAFE) == URL_SAFE ) return _URL_SAFE_DECODABET; - else if( (options & ORDERED) == ORDERED ) return _ORDERED_DECODABET; - else return _STANDARD_DECODABET; - - } // end getAlphabet - + /** + * Returns one of the _SOMETHING_ALPHABET byte arrays depending on + * the options specified. + * It's possible, though silly, to specify ORDERED and URLSAFE + * in which case one of them will be picked, though there is + * no guarantee as to which one will be picked. + */ + private final static byte[] getAlphabet(int options) { + if ((options & URL_SAFE) == URL_SAFE) return _URL_SAFE_ALPHABET; + else if ((options & ORDERED) == ORDERED) return _ORDERED_ALPHABET; + else return _STANDARD_ALPHABET; + + } // end getAlphabet + + + /** + * Returns one of the _SOMETHING_DECODABET byte arrays depending on + * the options specified. + * It's possible, though silly, to specify ORDERED and URL_SAFE + * in which case one of them will be picked, though there is + * no guarantee as to which one will be picked. + */ + private final static byte[] getDecodabet(int options) { + if ((options & URL_SAFE) == URL_SAFE) return _URL_SAFE_DECODABET; + else if ((options & ORDERED) == ORDERED) return _ORDERED_DECODABET; + else return _STANDARD_DECODABET; + + } // end getAlphabet + + + /** + * Defeats instantiation. + */ + private Base64() { + } - - /** Defeats instantiation. */ - private Base64(){} - /** * Encodes or decodes two files from the command line; * feel free to delete this method (in fact you probably should) * if you're embedding this code into a larger program. */ - public final static void main( String[] args ) - { - if( args.length < 3 ){ + public final static void main(String[] args) { + if (args.length < 3) { usage("Not enough arguments."); } // end if: args.length < 3 else { String flag = args[0]; String infile = args[1]; String outfile = args[2]; - if( flag.equals( "-e" ) ){ - Base64.encodeFileToFile( infile, outfile ); + if (flag.equals("-e")) { + Base64.encodeFileToFile(infile, outfile); } // end if: encode - else if( flag.equals( "-d" ) ) { - Base64.decodeFileToFile( infile, outfile ); + else if (flag.equals("-d")) { + Base64.decodeFileToFile(infile, outfile); } // end else if: decode else { - usage( "Unknown flag: " + flag ); + usage("Unknown flag: " + flag); } // end else } // end else } // end main @@ -413,16 +431,15 @@ public class Base64 * * @param msg A message to include with usage info. */ - private final static void usage( String msg ) - { - System.err.println( msg ); - System.err.println( "Usage: java Base64 -e|-d inputfile outputfile" ); + private final static void usage(String msg) { + System.err.println(msg); + System.err.println("Usage: java Base64 -e|-d inputfile outputfile"); } // end usage -/* ******** E N C O D I N G M E T H O D S ******** */ - - +/* ******** E N C O D I N G M E T H O D S ******** */ + + /** * Encodes up to the first three bytes of array threeBytes * and returns a four-byte array in Base64 notation. @@ -432,24 +449,23 @@ public class Base64 * numSigBytes. * Code can reuse a byte array by passing a four-byte array as b4. * - * @param b4 A reusable byte array to reduce array instantiation - * @param threeBytes the array to convert + * @param b4 A reusable byte array to reduce array instantiation + * @param threeBytes the array to convert * @param numSigBytes the number of significant bytes in your array * @return four byte array in Base64 notation. * @since 1.5.1 */ - private static byte[] encode3to4( byte[] b4, byte[] threeBytes, int numSigBytes, int options ) - { - encode3to4( threeBytes, 0, numSigBytes, b4, 0, options ); + private static byte[] encode3to4(byte[] b4, byte[] threeBytes, int numSigBytes, int options) { + encode3to4(threeBytes, 0, numSigBytes, b4, 0, options); return b4; } // end encode3to4 - + /** *
Encodes up to three bytes of the array source * and writes the resulting four Base64 bytes to destination. * The source and destination arrays can be manipulated - * anywhere along their length by specifying + * anywhere along their length by specifying * srcOffset and destOffset. * This method does not check to make sure your arrays * are large enough to accomodate srcOffset + 3 for @@ -457,68 +473,65 @@ public class Base64 * the destination array. * The actual number of significant bytes in your array is * given by numSigBytes.
- *This is the lowest level of the encoding methods with - * all possible parameters.
+ *This is the lowest level of the encoding methods with + * all possible parameters.
* - * @param source the array to convert - * @param srcOffset the index where conversion begins + * @param source the array to convert + * @param srcOffset the index where conversion begins * @param numSigBytes the number of significant bytes in your array * @param destination the array to hold the conversion - * @param destOffset the index where output will be put + * @param destOffset the index where output will be put * @return the destination array * @since 1.3 */ - private static byte[] encode3to4( - byte[] source, int srcOffset, int numSigBytes, - byte[] destination, int destOffset, int options ) - { - byte[] ALPHABET = getAlphabet( options ); - + private static byte[] encode3to4( + byte[] source, int srcOffset, int numSigBytes, + byte[] destination, int destOffset, int options) { + byte[] ALPHABET = getAlphabet(options); + // 1 2 3 // 01234567890123456789012345678901 Bit position // --------000000001111111122222222 Array position from threeBytes // --------| || || || | Six bit groups to index ALPHABET // >>18 >>12 >> 6 >> 0 Right shift necessary // 0x3f 0x3f 0x3f Additional AND - + // Create buffer with zero-padding if there are only one or two // significant bytes passed in the array. // We have to shift left 24 in order to flush out the 1's that appear // when Java treats a value as negative that is cast from a byte to an int. - int inBuff = ( numSigBytes > 0 ? ((source[ srcOffset ] << 24) >>> 8) : 0 ) - | ( numSigBytes > 1 ? ((source[ srcOffset + 1 ] << 24) >>> 16) : 0 ) - | ( numSigBytes > 2 ? ((source[ srcOffset + 2 ] << 24) >>> 24) : 0 ); + int inBuff = (numSigBytes > 0 ? ((source[srcOffset] << 24) >>> 8) : 0) + | (numSigBytes > 1 ? ((source[srcOffset + 1] << 24) >>> 16) : 0) + | (numSigBytes > 2 ? ((source[srcOffset + 2] << 24) >>> 24) : 0); - switch( numSigBytes ) - { + switch (numSigBytes) { case 3: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; - destination[ destOffset + 3 ] = ALPHABET[ (inBuff ) & 0x3f ]; + destination[destOffset] = ALPHABET[(inBuff >>> 18)]; + destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; + destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f]; + destination[destOffset + 3] = ALPHABET[(inBuff) & 0x3f]; return destination; - + case 2: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; - destination[ destOffset + 3 ] = EQUALS_SIGN; + destination[destOffset] = ALPHABET[(inBuff >>> 18)]; + destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; + destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f]; + destination[destOffset + 3] = EQUALS_SIGN; return destination; - + case 1: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = EQUALS_SIGN; - destination[ destOffset + 3 ] = EQUALS_SIGN; + destination[destOffset] = ALPHABET[(inBuff >>> 18)]; + destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; + destination[destOffset + 2] = EQUALS_SIGN; + destination[destOffset + 3] = EQUALS_SIGN; return destination; - + default: return destination; } // end switch } // end encode3to4 - - - + + /** * Serializes an object and returns the Base64-encoded * version of that serialized object. If the object @@ -530,11 +543,9 @@ public class Base64 * @return The Base64-encoded object * @since 1.4 */ - public static String encodeObject( java.io.Serializable serializableObject ) - { - return encodeObject( serializableObject, NO_OPTIONS ); + public static String encodeObject(java.io.Serializable serializableObject) { + return encodeObject(serializableObject, NO_OPTIONS); } // end encodeObject - /** @@ -542,83 +553,87 @@ public class Base64 * version of that serialized object. If the object * cannot be serialized or there is another error, * the method will return null. - *+ *
* Valid options:* GZIP: gzip-compresses object before encoding it. * DONT_BREAK_LINES: don't break lines at 76 characters * Note: Technically, this makes your encoding non-compliant. *- *
+ *
* Example:encodeObject( myObj, Base64.GZIP )
or
- * + *
* Example:encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES )
*
* @param serializableObject The object to encode
- * @param options Specified options
+ * @param options Specified options
* @return The Base64-encoded object
* @see Base64#GZIP
* @see Base64#DONT_BREAK_LINES
* @since 2.0
*/
- public static String encodeObject( java.io.Serializable serializableObject, int options )
- {
+ public static String encodeObject(java.io.Serializable serializableObject, int options) {
// Streams
- java.io.ByteArrayOutputStream baos = null;
- java.io.OutputStream b64os = null;
- java.io.ObjectOutputStream oos = null;
- java.util.zip.GZIPOutputStream gzos = null;
-
+ java.io.ByteArrayOutputStream baos = null;
+ java.io.OutputStream b64os = null;
+ java.io.ObjectOutputStream oos = null;
+ java.util.zip.GZIPOutputStream gzos = null;
+
// Isolate options
- int gzip = (options & GZIP);
-
- try
- {
+ int gzip = (options & GZIP);
+
+ try {
// ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
- baos = new java.io.ByteArrayOutputStream();
- b64os = new Base64.OutputStream( baos, ENCODE | options );
-
+ baos = new java.io.ByteArrayOutputStream();
+ b64os = new Base64.OutputStream(baos, ENCODE | options);
+
// GZip?
- if( gzip == GZIP )
- {
- gzos = new java.util.zip.GZIPOutputStream( b64os );
- oos = new java.io.ObjectOutputStream( gzos );
+ if (gzip == GZIP) {
+ gzos = new java.util.zip.GZIPOutputStream(b64os);
+ oos = new java.io.ObjectOutputStream(gzos);
} // end if: gzip
else
- oos = new java.io.ObjectOutputStream( b64os );
-
- oos.writeObject( serializableObject );
+ oos = new java.io.ObjectOutputStream(b64os);
+
+ oos.writeObject(serializableObject);
} // end try
- catch( java.io.IOException e )
- {
+ catch (java.io.IOException e) {
e.printStackTrace();
return null;
} // end catch
- finally
- {
- try{ if (oos != null) oos.close(); } catch( Exception e ){}
- try{ if (gzos != null) gzos.close(); } catch( Exception e ){}
- try{ if (b64os != null) b64os.close(); } catch( Exception e ){}
- try{ if (baos != null) baos.close(); } catch( Exception e ){}
+ finally {
+ try {
+ if (oos != null) oos.close();
+ } catch (Exception e) {
+ }
+ try {
+ if (gzos != null) gzos.close();
+ } catch (Exception e) {
+ }
+ try {
+ if (b64os != null) b64os.close();
+ } catch (Exception e) {
+ }
+ try {
+ if (baos != null) baos.close();
+ } catch (Exception e) {
+ }
} // end finally
-
+
// Return value according to relevant encoding.
- try
- {
- if (baos != null) {
- return new String( baos.toByteArray(), PREFERRED_ENCODING );
- }
+ try {
+ if (baos != null) {
+ return new String(baos.toByteArray(), PREFERRED_ENCODING);
+ }
} // end try
- catch (java.io.UnsupportedEncodingException uue)
- {
- if (baos != null) {
- return new String( baos.toByteArray() );
- }
+ catch (java.io.UnsupportedEncodingException uue) {
+ if (baos != null) {
+ return new String(baos.toByteArray());
+ }
} // end catch
-
+
return null;
} // end encode
-
-
+
/**
* Encodes a byte array into Base64 notation.
@@ -627,176 +642,165 @@ public class Base64
* @param source The data to convert
* @since 1.4
*/
- public static String encodeBytes( byte[] source )
- {
- return encodeBytes( source, 0, source.length, NO_OPTIONS );
+ public static String encodeBytes(byte[] source) {
+ return encodeBytes(source, 0, source.length, NO_OPTIONS);
} // end encodeBytes
-
/**
* Encodes a byte array into Base64 notation.
- * + *
* Valid options:* GZIP: gzip-compresses object before encoding it. * DONT_BREAK_LINES: don't break lines at 76 characters * Note: Technically, this makes your encoding non-compliant. *- *
+ *
* Example:encodeBytes( myData, Base64.GZIP )
or
- * + *
* Example:encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )
*
- *
- * @param source The data to convert
+ * @param source The data to convert
* @param options Specified options
* @see Base64#GZIP
* @see Base64#DONT_BREAK_LINES
* @since 2.0
*/
- public static String encodeBytes( byte[] source, int options )
- {
- return encodeBytes( source, 0, source.length, options );
+ public static String encodeBytes(byte[] source, int options) {
+ return encodeBytes(source, 0, source.length, options);
} // end encodeBytes
-
-
+
+
/**
* Encodes a byte array into Base64 notation.
* Does not GZip-compress data.
*
* @param source The data to convert
- * @param off Offset in array where conversion should begin
- * @param len Length of data to convert
+ * @param off Offset in array where conversion should begin
+ * @param len Length of data to convert
* @since 1.4
*/
- public static String encodeBytes( byte[] source, int off, int len )
- {
- return encodeBytes( source, off, len, NO_OPTIONS );
+ public static String encodeBytes(byte[] source, int off, int len) {
+ return encodeBytes(source, off, len, NO_OPTIONS);
} // end encodeBytes
-
-
+
/**
* Encodes a byte array into Base64 notation.
- * + *
* Valid options:* GZIP: gzip-compresses object before encoding it. * DONT_BREAK_LINES: don't break lines at 76 characters * Note: Technically, this makes your encoding non-compliant. *- *
+ *
* Example:encodeBytes( myData, Base64.GZIP )
or
- * + *
* Example:encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )
*
- *
- * @param source The data to convert
- * @param off Offset in array where conversion should begin
- * @param len Length of data to convert
+ * @param source The data to convert
+ * @param off Offset in array where conversion should begin
+ * @param len Length of data to convert
* @param options Specified options -- alphabet type is pulled from this (standard, url-safe, ordered)
* @see Base64#GZIP
* @see Base64#DONT_BREAK_LINES
* @since 2.0
*/
- public static String encodeBytes( byte[] source, int off, int len, int options )
- {
+ public static String encodeBytes(byte[] source, int off, int len, int options) {
// Isolate options
- int dontBreakLines = ( options & DONT_BREAK_LINES );
- int gzip = ( options & GZIP );
-
+ int dontBreakLines = (options & DONT_BREAK_LINES);
+ int gzip = (options & GZIP);
+
// Compress?
- if( gzip == GZIP )
- {
- java.io.ByteArrayOutputStream baos = null;
- java.util.zip.GZIPOutputStream gzos = null;
- Base64.OutputStream b64os = null;
-
-
- try
- {
+ if (gzip == GZIP) {
+ java.io.ByteArrayOutputStream baos = null;
+ java.util.zip.GZIPOutputStream gzos = null;
+ Base64.OutputStream b64os = null;
+
+
+ try {
// GZip -> Base64 -> ByteArray
baos = new java.io.ByteArrayOutputStream();
- b64os = new Base64.OutputStream( baos, ENCODE | options );
- gzos = new java.util.zip.GZIPOutputStream( b64os );
-
- gzos.write( source, off, len );
+ b64os = new Base64.OutputStream(baos, ENCODE | options);
+ gzos = new java.util.zip.GZIPOutputStream(b64os);
+
+ gzos.write(source, off, len);
gzos.close();
} // end try
- catch( java.io.IOException e )
- {
+ catch (java.io.IOException e) {
e.printStackTrace();
return null;
} // end catch
- finally
- {
- try{ if (gzos != null) gzos.close(); } catch( Exception e ){}
- try{ if (b64os != null) b64os.close(); } catch( Exception e ){}
- try{ if (baos != null) baos.close(); } catch( Exception e ){}
+ finally {
+ try {
+ if (gzos != null) gzos.close();
+ } catch (Exception e) {
+ }
+ try {
+ if (b64os != null) b64os.close();
+ } catch (Exception e) {
+ }
+ try {
+ if (baos != null) baos.close();
+ } catch (Exception e) {
+ }
} // end finally
// Return value according to relevant encoding.
- try
- {
- if (baos != null) {
- return new String( baos.toByteArray(), PREFERRED_ENCODING );
- }
+ try {
+ if (baos != null) {
+ return new String(baos.toByteArray(), PREFERRED_ENCODING);
+ }
} // end try
- catch (java.io.UnsupportedEncodingException uue)
- {
- if (baos != null) {
- return new String( baos.toByteArray() );
- }
+ catch (java.io.UnsupportedEncodingException uue) {
+ if (baos != null) {
+ return new String(baos.toByteArray());
+ }
} // end catch
-
+
return null;
} // end if: compress
-
+
// Else, don't compress. Better not to use streams at all then.
- else
- {
+ else {
// Convert option to boolean in way that code likes it.
boolean breakLines = dontBreakLines == 0;
-
- int len43 = len * 4 / 3;
- byte[] outBuff = new byte[ ( len43 ) // Main 4:3
- + ( (len % 3) > 0 ? 4 : 0 ) // Account for padding
- + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines
+
+ int len43 = len * 4 / 3;
+ byte[] outBuff = new byte[(len43) // Main 4:3
+ + ((len % 3) > 0 ? 4 : 0) // Account for padding
+ + (breakLines ? (len43 / MAX_LINE_LENGTH) : 0)]; // New lines
int d = 0;
int e = 0;
int len2 = len - 2;
int lineLength = 0;
- for( ; d < len2; d+=3, e+=4 )
- {
- encode3to4( source, d+off, 3, outBuff, e, options );
+ for (; d < len2; d += 3, e += 4) {
+ encode3to4(source, d + off, 3, outBuff, e, options);
lineLength += 4;
- if( breakLines && lineLength == MAX_LINE_LENGTH )
- {
- outBuff[e+4] = NEW_LINE;
+ if (breakLines && lineLength == MAX_LINE_LENGTH) {
+ outBuff[e + 4] = NEW_LINE;
e++;
lineLength = 0;
} // end if: end of line
} // en dfor: each piece of array
- if( d < len )
- {
- encode3to4( source, d+off, len - d, outBuff, e, options );
+ if (d < len) {
+ encode3to4(source, d + off, len - d, outBuff, e, options);
e += 4;
} // end if: some padding needed
-
+
// Return value according to relevant encoding.
- try
- {
- return new String( outBuff, 0, e, PREFERRED_ENCODING );
+ try {
+ return new String(outBuff, 0, e, PREFERRED_ENCODING);
} // end try
- catch (java.io.UnsupportedEncodingException uue)
- {
- return new String( outBuff, 0, e );
+ catch (java.io.UnsupportedEncodingException uue) {
+ return new String(outBuff, 0, e);
} // end catch
-
+
} // end else: don't compress
-
+
} // end encodeBytes
@@ -804,99 +808,92 @@ public class Base64
/* ******** D E C O D I N G M E T H O D S ******** */
-
-
+
+
/**
* Decodes four bytes from array source
* and writes the resulting bytes (up to three of them)
* to destination.
* The source and destination arrays can be manipulated
- * anywhere along their length by specifying
+ * anywhere along their length by specifying
* srcOffset and destOffset.
* This method does not check to make sure your arrays
* are large enough to accomodate srcOffset + 4 for
* the source array or destOffset + 3 for
* the destination array.
- * This method returns the actual number of bytes that
+ * This method returns the actual number of bytes that
* were converted from the Base64 encoding.
- * This is the lowest level of the decoding methods with - * all possible parameters.
- * + *This is the lowest level of the decoding methods with + * all possible parameters.
* - * @param source the array to convert - * @param srcOffset the index where conversion begins + * @param source the array to convert + * @param srcOffset the index where conversion begins * @param destination the array to hold the conversion - * @param destOffset the index where output will be put - * @param options alphabet type is pulled from this (standard, url-safe, ordered) + * @param destOffset the index where output will be put + * @param options alphabet type is pulled from this (standard, url-safe, ordered) * @return the number of decoded bytes converted * @since 1.3 */ - private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset, int options ) - { - byte[] DECODABET = getDecodabet( options ); - + private static int decode4to3(byte[] source, int srcOffset, byte[] destination, int destOffset, int options) { + byte[] DECODABET = getDecodabet(options); + // Example: Dk== - if( source[ srcOffset + 2] == EQUALS_SIGN ) - { + if (source[srcOffset + 2] == EQUALS_SIGN) { // Two ways to do the same thing. Don't know which way I like best. //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 ); - - destination[ destOffset ] = (byte)( outBuff >>> 16 ); + int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) + | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12); + + destination[destOffset] = (byte) (outBuff >>> 16); return 1; } - + // Example: DkL= - else if( source[ srcOffset + 3 ] == EQUALS_SIGN ) - { + else if (source[srcOffset + 3] == EQUALS_SIGN) { // Two ways to do the same thing. Don't know which way I like best. //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) - | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6 ); - - destination[ destOffset ] = (byte)( outBuff >>> 16 ); - destination[ destOffset + 1 ] = (byte)( outBuff >>> 8 ); + int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) + | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) + | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6); + + destination[destOffset] = (byte) (outBuff >>> 16); + destination[destOffset + 1] = (byte) (outBuff >>> 8); return 2; } - + // Example: DkLE - else - { - try{ - // Two ways to do the same thing. Don't know which way I like best. - //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) - // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) - // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) - // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) - | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6) - | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF ) ); + else { + try { + // Two ways to do the same thing. Don't know which way I like best. + //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) + // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) + // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) + // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); + int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) + | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) + | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6) + | ((DECODABET[source[srcOffset + 3]] & 0xFF)); - - destination[ destOffset ] = (byte)( outBuff >> 16 ); - destination[ destOffset + 1 ] = (byte)( outBuff >> 8 ); - destination[ destOffset + 2 ] = (byte)( outBuff ); - return 3; - }catch( Exception e){ - System.out.println(""+source[srcOffset]+ ": " + ( DECODABET[ source[ srcOffset ] ] ) ); - System.out.println(""+source[srcOffset+1]+ ": " + ( DECODABET[ source[ srcOffset + 1 ] ] ) ); - System.out.println(""+source[srcOffset+2]+ ": " + ( DECODABET[ source[ srcOffset + 2 ] ] ) ); - System.out.println(""+source[srcOffset+3]+ ": " + ( DECODABET[ source[ srcOffset + 3 ] ] ) ); + destination[destOffset] = (byte) (outBuff >> 16); + destination[destOffset + 1] = (byte) (outBuff >> 8); + destination[destOffset + 2] = (byte) (outBuff); + + return 3; + } catch (Exception e) { + System.out.println("" + source[srcOffset] + ": " + (DECODABET[source[srcOffset]])); + System.out.println("" + source[srcOffset + 1] + ": " + (DECODABET[source[srcOffset + 1]])); + System.out.println("" + source[srcOffset + 2] + ": " + (DECODABET[source[srcOffset + 2]])); + System.out.println("" + source[srcOffset + 3] + ": " + (DECODABET[source[srcOffset + 3]])); return -1; } // end catch } } // end decodeToBytes - - - - + + /** * Very low-level access to decoding ASCII characters in * the form of a byte array. Does not support automatically @@ -908,57 +905,50 @@ public class Base64 * @return decoded data * @since 1.3 */ - public static byte[] decode( byte[] source, int off, int len, int options ) - { - byte[] DECODABET = getDecodabet( options ); - - int len34 = len * 3 / 4; - byte[] outBuff = new byte[ len34 ]; // Upper limit on size of output - int outBuffPosn = 0; - - byte[] b4 = new byte[4]; - int b4Posn = 0; - int i = 0; - byte sbiCrop = 0; - byte sbiDecode = 0; - for( i = off; i < off+len; i++ ) - { - sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits - sbiDecode = DECODABET[ sbiCrop ]; - - if( sbiDecode >= WHITE_SPACE_ENC ) // White space, Equals sign or better + public static byte[] decode(byte[] source, int off, int len, int options) { + byte[] DECODABET = getDecodabet(options); + + int len34 = len * 3 / 4; + byte[] outBuff = new byte[len34]; // Upper limit on size of output + int outBuffPosn = 0; + + byte[] b4 = new byte[4]; + int b4Posn = 0; + int i = 0; + byte sbiCrop = 0; + byte sbiDecode = 0; + for (i = off; i < off + len; i++) { + sbiCrop = (byte) (source[i] & 0x7f); // Only the low seven bits + sbiDecode = DECODABET[sbiCrop]; + + if (sbiDecode >= WHITE_SPACE_ENC) // White space, Equals sign or better { - if( sbiDecode >= EQUALS_SIGN_ENC ) - { - b4[ b4Posn++ ] = sbiCrop; - if( b4Posn > 3 ) - { - outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options ); + if (sbiDecode >= EQUALS_SIGN_ENC) { + b4[b4Posn++] = sbiCrop; + if (b4Posn > 3) { + outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, options); b4Posn = 0; - + // If that was the equals sign, break out of 'for' loop - if( sbiCrop == EQUALS_SIGN ) + if (sbiCrop == EQUALS_SIGN) break; } // end if: quartet built - + } // end if: equals sign or better - + } // end if: white space, equals sign or better - else - { - System.err.println( "Bad Base64 input character at " + i + ": " + source[i] + "(decimal)" ); + else { + System.err.println("Bad Base64 input character at " + i + ": " + source[i] + "(decimal)"); return null; } // end else: } // each input character - - byte[] out = new byte[ outBuffPosn ]; - System.arraycopy( outBuff, 0, out, 0, outBuffPosn ); + + byte[] out = new byte[outBuffPosn]; + System.arraycopy(outBuff, 0, out, 0, outBuffPosn); return out; } // end decode - - - - + + /** * Decodes data from Base64 notation, automatically * detecting gzip-compressed data and decompressing it. @@ -967,87 +957,84 @@ public class Base64 * @return the decoded data * @since 1.4 */ - public static byte[] decode( String s ) - { - return decode( s, NO_OPTIONS ); - } - - + public static byte[] decode(String s) { + return decode(s, NO_OPTIONS); + } + + /** * Decodes data from Base64 notation, automatically * detecting gzip-compressed data and decompressing it. * - * @param s the string to decode - * @param options encode options such as URL_SAFE + * @param s the string to decode + * @param options encode options such as URL_SAFE * @return the decoded data * @since 1.4 */ - public static byte[] decode( String s, int options ) - { + public static byte[] decode(String s, int options) { byte[] bytes; - try - { - bytes = s.getBytes( PREFERRED_ENCODING ); + try { + bytes = s.getBytes(PREFERRED_ENCODING); } // end try - catch( java.io.UnsupportedEncodingException uee ) - { + catch (java.io.UnsupportedEncodingException uee) { bytes = s.getBytes(); } // end catch - // - + // + // Decode - bytes = decode( bytes, 0, bytes.length, options ); - - + bytes = decode(bytes, 0, bytes.length, options); + + // Check to see if it's gzip-compressed // GZIP Magic Two-Byte Number: 0x8b1f (35615) - if( bytes != null && bytes.length >= 4 ) - { - - int head = ((int)bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); - if( java.util.zip.GZIPInputStream.GZIP_MAGIC == head ) - { - java.io.ByteArrayInputStream bais = null; + if (bytes != null && bytes.length >= 4) { + + int head = ((int) bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); + if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) { + java.io.ByteArrayInputStream bais = null; java.util.zip.GZIPInputStream gzis = null; java.io.ByteArrayOutputStream baos = null; byte[] buffer = new byte[2048]; - int length = 0; + int length = 0; - try - { + try { baos = new java.io.ByteArrayOutputStream(); - bais = new java.io.ByteArrayInputStream( bytes ); - gzis = new java.util.zip.GZIPInputStream( bais ); + bais = new java.io.ByteArrayInputStream(bytes); + gzis = new java.util.zip.GZIPInputStream(bais); - while( ( length = gzis.read( buffer ) ) >= 0 ) - { - baos.write(buffer,0,length); + while ((length = gzis.read(buffer)) >= 0) { + baos.write(buffer, 0, length); } // end while: reading input // No error? Get new bytes. bytes = baos.toByteArray(); } // end try - catch( java.io.IOException e ) - { + catch (java.io.IOException e) { // Just return originally-decoded bytes } // end catch - finally - { - try{ if (baos != null) baos.close(); } catch( Exception e ){} - try{ if (gzis != null) gzis.close(); } catch( Exception e ){} - try{ if (bais != null) bais.close(); } catch( Exception e ){} + finally { + try { + if (baos != null) baos.close(); + } catch (Exception e) { + } + try { + if (gzis != null) gzis.close(); + } catch (Exception e) { + } + try { + if (bais != null) bais.close(); + } catch (Exception e) { + } } // end finally } // end if: gzipped } // end if: bytes.length >= 2 - + return bytes; } // end decode - - /** * Attempts to decode Base64 data and deserialize a Java * Object within. Returns null if there was an error. @@ -1056,295 +1043,289 @@ public class Base64 * @return The decoded and deserialized object * @since 1.5 */ - public static Object decodeToObject( String encodedObject ) - { + public static Object decodeToObject(String encodedObject) { // Decode and gunzip if necessary - byte[] objBytes = decode( encodedObject ); - - java.io.ByteArrayInputStream bais = null; - java.io.ObjectInputStream ois = null; + byte[] objBytes = decode(encodedObject); + + java.io.ByteArrayInputStream bais = null; + java.io.ObjectInputStream ois = null; Object obj = null; - - try - { - bais = new java.io.ByteArrayInputStream( objBytes ); - ois = new java.io.ObjectInputStream( bais ); - + + try { + bais = new java.io.ByteArrayInputStream(objBytes); + ois = new java.io.ObjectInputStream(bais); + obj = ois.readObject(); } // end try - catch( java.io.IOException e ) - { + catch (java.io.IOException e) { e.printStackTrace(); obj = null; } // end catch - catch( java.lang.ClassNotFoundException e ) - { + catch (java.lang.ClassNotFoundException e) { e.printStackTrace(); obj = null; } // end catch - finally - { - try{ if (bais != null) bais.close(); } catch( Exception e ){} - try{ if (ois != null) ois.close(); } catch( Exception e ){} + finally { + try { + if (bais != null) bais.close(); + } catch (Exception e) { + } + try { + if (ois != null) ois.close(); + } catch (Exception e) { + } } // end finally - + return obj; } // end decodeObject - - - + + /** * Convenience method for encoding data to a file. * * @param dataToEncode byte array of data to encode in base64 form - * @param filename Filename for saving encoded data + * @param filename Filename for saving encoded data * @return true if successful, false otherwise - * * @since 2.1 */ - public static boolean encodeToFile( byte[] dataToEncode, String filename ) - { + public static boolean encodeToFile(byte[] dataToEncode, String filename) { boolean success = false; Base64.OutputStream bos = null; - try - { - bos = new Base64.OutputStream( - new java.io.FileOutputStream( filename ), Base64.ENCODE ); - bos.write( dataToEncode ); + try { + bos = new Base64.OutputStream( + new java.io.FileOutputStream(filename), Base64.ENCODE); + bos.write(dataToEncode); success = true; } // end try - catch( java.io.IOException e ) - { - + catch (java.io.IOException e) { + success = false; } // end catch: IOException - finally - { - try{ if (bos != null) bos.close(); } catch( Exception e ){} + finally { + try { + if (bos != null) bos.close(); + } catch (Exception e) { + } } // end finally - + return success; } // end encodeToFile - - + + /** * Convenience method for decoding data to a file. * * @param dataToDecode Base64-encoded data as a string - * @param filename Filename for saving decoded data + * @param filename Filename for saving decoded data * @return true if successful, false otherwise - * * @since 2.1 */ - public static boolean decodeToFile( String dataToDecode, String filename ) - { + public static boolean decodeToFile(String dataToDecode, String filename) { boolean success = false; Base64.OutputStream bos = null; - try - { - bos = new Base64.OutputStream( - new java.io.FileOutputStream( filename ), Base64.DECODE ); - bos.write( dataToDecode.getBytes( PREFERRED_ENCODING ) ); - success = true; + try { + bos = new Base64.OutputStream( + new java.io.FileOutputStream(filename), Base64.DECODE); + bos.write(dataToDecode.getBytes(PREFERRED_ENCODING)); + success = true; } // end try - catch( java.io.IOException e ) - { + catch (java.io.IOException e) { success = false; } // end catch: IOException - finally - { - try{ if (bos != null) bos.close(); } catch( Exception e ){} + finally { + try { + if (bos != null) bos.close(); + } catch (Exception e) { + } } // end finally - + return success; } // end decodeToFile - - - - + + /** * Convenience method for reading a base64-encoded * file and decoding it. * * @param filename Filename for reading encoded data * @return decoded byte array or null if unsuccessful - * * @since 2.1 */ - public static byte[] decodeFromFile( String filename ) - { + public static byte[] decodeFromFile(String filename) { byte[] decodedData = null; Base64.InputStream bis = null; - try - { + try { // Set up some useful variables - java.io.File file = new java.io.File( filename ); + java.io.File file = new java.io.File(filename); byte[] buffer = null; - int length = 0; + int length = 0; int numBytes = 0; - + // Check for size of file - if( file.length() > Integer.MAX_VALUE ) - { - System.err.println( "File is too big for this convenience method (" + file.length() + " bytes)." ); + if (file.length() > Integer.MAX_VALUE) { + System.err.println("File is too big for this convenience method (" + file.length() + " bytes)."); return null; } // end if: file too big for int index - buffer = new byte[ (int)file.length() ]; - + buffer = new byte[(int) file.length()]; + // Open a stream - bis = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( file ) ), Base64.DECODE ); - + bis = new Base64.InputStream( + new java.io.BufferedInputStream( + new java.io.FileInputStream(file)), Base64.DECODE); + // Read until done - while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) + while ((numBytes = bis.read(buffer, length, 4096)) >= 0) length += numBytes; - + // Save in a variable to return - decodedData = new byte[ length ]; - System.arraycopy( buffer, 0, decodedData, 0, length ); - + decodedData = new byte[length]; + System.arraycopy(buffer, 0, decodedData, 0, length); + } // end try - catch( java.io.IOException e ) - { - System.err.println( "Error decoding from file " + filename ); + catch (java.io.IOException e) { + System.err.println("Error decoding from file " + filename); } // end catch: IOException - finally - { - try{ if (bis != null) bis.close(); } catch( Exception e) {} + finally { + try { + if (bis != null) bis.close(); + } catch (Exception e) { + } } // end finally - + return decodedData; } // end decodeFromFile - - - + + /** * Convenience method for reading a binary file * and base64-encoding it. * * @param filename Filename for reading binary data * @return base64-encoded string or null if unsuccessful - * * @since 2.1 */ - public static String encodeFromFile( String filename ) - { + public static String encodeFromFile(String filename) { String encodedData = null; Base64.InputStream bis = null; - try - { + try { // Set up some useful variables - java.io.File file = new java.io.File( filename ); - byte[] buffer = new byte[ Math.max((int)(file.length() * 1.4),40) ]; // Need max() for math on small files (v2.2.1) - int length = 0; + java.io.File file = new java.io.File(filename); + byte[] buffer = new byte[Math.max((int) (file.length() * 1.4), 40)]; // Need max() for math on small files (v2.2.1) + int length = 0; int numBytes = 0; - + // Open a stream - bis = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( file ) ), Base64.ENCODE ); - + bis = new Base64.InputStream( + new java.io.BufferedInputStream( + new java.io.FileInputStream(file)), Base64.ENCODE); + // Read until done - while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) + while ((numBytes = bis.read(buffer, length, 4096)) >= 0) length += numBytes; - + // Save in a variable to return - encodedData = new String( buffer, 0, length, Base64.PREFERRED_ENCODING ); - + encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING); + } // end try - catch( java.io.IOException e ) - { - System.err.println( "Error encoding from file " + filename ); + catch (java.io.IOException e) { + System.err.println("Error encoding from file " + filename); } // end catch: IOException - finally - { - try{ if (bis != null) bis.close(); } catch( Exception e) {} + finally { + try { + if (bis != null) bis.close(); + } catch (Exception e) { + } } // end finally - + return encodedData; - } // end encodeFromFile - - - - + } // end encodeFromFile + + /** * Reads infile and encodes it to outfile. * - * @param infile Input file + * @param infile Input file * @param outfile Output file * @return true if the operation is successful * @since 2.2 */ - public static boolean encodeFileToFile( String infile, String outfile ) - { + public static boolean encodeFileToFile(String infile, String outfile) { boolean success = false; java.io.InputStream in = null; java.io.OutputStream out = null; - try{ - in = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( infile ) ), - Base64.ENCODE ); - out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) ); + try { + in = new Base64.InputStream( + new java.io.BufferedInputStream( + new java.io.FileInputStream(infile)), + Base64.ENCODE); + out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile)); byte[] buffer = new byte[65536]; // 64K int read = -1; - while( ( read = in.read(buffer) ) >= 0 ){ - out.write( buffer,0,read ); + while ((read = in.read(buffer)) >= 0) { + out.write(buffer, 0, read); } // end while: through file success = true; - } catch( java.io.IOException exc ){ + } catch (java.io.IOException exc) { exc.printStackTrace(); - } finally{ - try{ if (in != null) in.close(); } catch( Exception exc ){} - try{ if (out != null) out.close(); } catch( Exception exc ){} + } finally { + try { + if (in != null) in.close(); + } catch (Exception exc) { + } + try { + if (out != null) out.close(); + } catch (Exception exc) { + } } // end finally - + return success; } // end encodeFileToFile - - - + + /** * Reads infile and decodes it to outfile. * - * @param infile Input file + * @param infile Input file * @param outfile Output file * @return true if the operation is successful * @since 2.2 */ - public static boolean decodeFileToFile( String infile, String outfile ) - { + public static boolean decodeFileToFile(String infile, String outfile) { boolean success = false; java.io.InputStream in = null; java.io.OutputStream out = null; - try{ - in = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( infile ) ), - Base64.DECODE ); - out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) ); + try { + in = new Base64.InputStream( + new java.io.BufferedInputStream( + new java.io.FileInputStream(infile)), + Base64.DECODE); + out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile)); byte[] buffer = new byte[65536]; // 64K int read = -1; - while( ( read = in.read(buffer) ) >= 0 ){ - out.write( buffer,0,read ); + while ((read = in.read(buffer)) >= 0) { + out.write(buffer, 0, read); } // end while: through file success = true; - } catch( java.io.IOException exc ){ + } catch (java.io.IOException exc) { exc.printStackTrace(); - } finally{ - try{ if (in != null) in.close(); } catch( Exception exc ){} - try{ if (out != null) out.close(); } catch( Exception exc ){} + } finally { + try { + if (in != null) in.close(); + } catch (Exception exc) { + } + try { + if (out != null) out.close(); + } catch (Exception exc) { + } } // end finally - + return success; } // end decodeFileToFile /* ******** I N N E R C L A S S I N P U T S T R E A M ******** */ - - - + + /** * A {@link Base64.InputStream} will read data from another * java.io.InputStream, given in the constructor, @@ -1353,65 +1334,61 @@ public class Base64 * @see Base64 * @since 1.3 */ - public static class InputStream extends java.io.FilterInputStream - { + public static class InputStream extends java.io.FilterInputStream { private boolean encode; // Encoding or decoding - private int position; // Current position in the buffer - private byte[] buffer; // Small buffer holding converted data - private int bufferLength; // Length of buffer (3 or 4) - private int numSigBytes; // Number of meaningful bytes in the buffer - private int lineLength; + private int position; // Current position in the buffer + private byte[] buffer; // Small buffer holding converted data + private int bufferLength; // Length of buffer (3 or 4) + private int numSigBytes; // Number of meaningful bytes in the buffer + private int lineLength; private boolean breakLines; // Break lines at less than 80 characters - private int options; // Record options used to create the stream. - private byte[] decodabet; // Local copies to avoid extra method calls - - + private int options; // Record options used to create the stream. + private byte[] decodabet; // Local copies to avoid extra method calls + + /** * Constructs a {@link Base64.InputStream} in DECODE mode. * * @param in the java.io.InputStream from which to read data. * @since 1.3 */ - public InputStream( java.io.InputStream in ) - { - this( in, DECODE ); + public InputStream(java.io.InputStream in) { + this(in, DECODE); } // end constructor - - + + /** * Constructs a {@link Base64.InputStream} in * either ENCODE or DECODE mode. - *+ *
* Valid options:* ENCODE or DECODE: Encode or Decode as data is read. * DONT_BREAK_LINES: don't break lines at 76 characters * (only meaningful when encoding) * Note: Technically, this makes your encoding non-compliant. *- *
+ *
* Example:new Base64.InputStream( in, Base64.DECODE )
*
- *
- * @param in the java.io.InputStream from which to read data.
+ * @param in the java.io.InputStream from which to read data.
* @param options Specified options
* @see Base64#ENCODE
* @see Base64#DECODE
* @see Base64#DONT_BREAK_LINES
* @since 2.0
*/
- public InputStream( java.io.InputStream in, int options )
- {
- super( in );
- this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
- this.encode = (options & ENCODE) == ENCODE;
+ public InputStream(java.io.InputStream in, int options) {
+ super(in);
+ this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
+ this.encode = (options & ENCODE) == ENCODE;
this.bufferLength = this.encode ? 4 : 3;
- this.buffer = new byte[ this.bufferLength ];
- this.position = -1;
- this.lineLength = 0;
- this.options = options; // Record for later, mostly to determine which alphabet to use
- this.decodabet = getDecodabet(options);
+ this.buffer = new byte[this.bufferLength];
+ this.position = -1;
+ this.lineLength = 0;
+ this.options = options; // Record for later, mostly to determine which alphabet to use
+ this.decodabet = getDecodabet(options);
} // end constructor
-
+
/**
* Reads enough of the input stream to convert
* to/from Base64 and returns the next byte.
@@ -1419,122 +1396,107 @@ public class Base64
* @return next byte
* @since 1.3
*/
- public int read() throws java.io.IOException
- {
+ public int read() throws java.io.IOException {
// Do we need to get data?
- if( this.position < 0 )
- {
- if( this.encode )
- {
+ if (this.position < 0) {
+ if (this.encode) {
byte[] b3 = new byte[3];
int numBinaryBytes = 0;
- for( int i = 0; i < 3; i++ )
- {
- try
- {
+ for (int i = 0; i < 3; i++) {
+ try {
int b = this.in.read();
-
+
// If end of stream, b is -1.
- if( b >= 0 )
- {
- b3[i] = (byte)b;
+ if (b >= 0) {
+ b3[i] = (byte) b;
numBinaryBytes++;
} // end if: not end of stream
-
+
} // end try: read
- catch( java.io.IOException e )
- {
+ catch (java.io.IOException e) {
// Only a problem if we got no data at all.
- if( i == 0 )
+ if (i == 0)
throw e;
-
+
} // end catch
} // end for: each needed input byte
-
- if( numBinaryBytes > 0 )
- {
- encode3to4( b3, 0, numBinaryBytes, this.buffer, 0, this.options );
+
+ if (numBinaryBytes > 0) {
+ encode3to4(b3, 0, numBinaryBytes, this.buffer, 0, this.options);
this.position = 0;
this.numSigBytes = 4;
} // end if: got data
- else
- {
+ else {
return -1;
} // end else
} // end if: encoding
-
+
// Else decoding
- else
- {
+ else {
byte[] b4 = new byte[4];
int i = 0;
- for( i = 0; i < 4; i++ )
- {
+ for (i = 0; i < 4; i++) {
// Read four "meaningful" bytes:
int b = 0;
- do{ b = this.in.read(); }
- while( b >= 0 && this.decodabet[ b & 0x7f ] <= WHITE_SPACE_ENC );
-
- if( b < 0 )
+ do {
+ b = this.in.read();
+ }
+ while (b >= 0 && this.decodabet[b & 0x7f] <= WHITE_SPACE_ENC);
+
+ if (b < 0)
break; // Reads a -1 if end of stream
-
- b4[i] = (byte)b;
+
+ b4[i] = (byte) b;
} // end for: each needed input byte
-
- if( i == 4 )
- {
- this.numSigBytes = decode4to3( b4, 0, this.buffer, 0, this.options );
+
+ if (i == 4) {
+ this.numSigBytes = decode4to3(b4, 0, this.buffer, 0, this.options);
this.position = 0;
} // end if: got four characters
- else if( i == 0 ){
+ else if (i == 0) {
return -1;
} // end else if: also padded correctly
- else
- {
+ else {
// Must have broken out from above.
- throw new java.io.IOException( "Improperly padded Base64 input." );
+ throw new java.io.IOException("Improperly padded Base64 input.");
} // end
-
+
} // end else: decode
} // end else: get data
-
+
// Got data?
- if( this.position >= 0 )
- {
+ if (this.position >= 0) {
// End of relevant data?
- if( /*!encode &&*/ this.position >= this.numSigBytes )
+ if ( /*!encode &&*/ this.position >= this.numSigBytes)
return -1;
-
- if( this.encode && this.breakLines && this.lineLength >= MAX_LINE_LENGTH )
- {
- this.lineLength = 0;
+
+ if (this.encode && this.breakLines && this.lineLength >= MAX_LINE_LENGTH) {
+ this.lineLength = 0;
return '\n';
} // end if
- else
- {
- this.lineLength++; // This isn't important when decoding
- // but throwing an extra "if" seems
- // just as wasteful.
-
- int b = this.buffer[ this.position++ ];
+ else {
+ this.lineLength++; // This isn't important when decoding
+ // but throwing an extra "if" seems
+ // just as wasteful.
- if( this.position >= this.bufferLength )
- this.position = -1;
+ int b = this.buffer[this.position++];
+
+ if (this.position >= this.bufferLength)
+ this.position = -1;
return b & 0xFF; // This is how you "cast" a byte that's
- // intended to be unsigned.
+ // intended to be unsigned.
} // end else
} // end if: position >= 0
-
+
// Else error
- else
- {
+ else {
// When JDK1.4 is more accepted, use an assertion here.
- throw new java.io.IOException( "Error in Base64 code reading stream." );
+ throw new java.io.IOException("Error in Base64 code reading stream.");
} // end else
} // end read
-
-
+
+
/**
* Calls {@link #read()} repeatedly until the end of stream
* is reached or len bytes are read.
@@ -1542,32 +1504,30 @@ public class Base64
* end of stream is encountered.
*
* @param dest array to hold values
- * @param off offset for array
- * @param len max number of bytes to read into array
+ * @param off offset for array
+ * @param len max number of bytes to read into array
* @return bytes read into array or -1 if end of stream is encountered.
* @since 1.3
*/
- public int read( byte[] dest, int off, int len ) throws java.io.IOException
- {
+ public int read(byte[] dest, int off, int len) throws java.io.IOException {
int i;
int b;
- for( i = 0; i < len; i++ )
- {
+ for (i = 0; i < len; i++) {
b = read();
-
+
//if( b < 0 && i == 0 )
// return -1;
-
- if( b >= 0 )
- dest[off + i] = (byte)b;
- else if( i == 0 )
+
+ if (b >= 0)
+ dest[off + i] = (byte) b;
+ else if (i == 0)
return -1;
else
break; // Out of 'for' loop
} // end for: each byte read
return i;
} // end read
-
+
} // end inner class InputStream
@@ -1576,9 +1536,8 @@ public class Base64
/* ******** I N N E R C L A S S O U T P U T S T R E A M ******** */
-
-
-
+
+
/**
* A {@link Base64.OutputStream} will write data to another
* java.io.OutputStream, given in the constructor,
@@ -1587,67 +1546,64 @@ public class Base64
* @see Base64
* @since 1.3
*/
- public static class OutputStream extends java.io.FilterOutputStream
- {
+ public static class OutputStream extends java.io.FilterOutputStream {
private boolean encode;
- private int position;
- private byte[] buffer;
- private int bufferLength;
- private int lineLength;
+ private int position;
+ private byte[] buffer;
+ private int bufferLength;
+ private int lineLength;
private boolean breakLines;
- private byte[] b4; // Scratch used in a few places
+ private byte[] b4; // Scratch used in a few places
private boolean suspendEncoding;
- private int options; // Record for later
- private byte[] decodabet; // Local copies to avoid extra method calls
-
+ private int options; // Record for later
+ private byte[] decodabet; // Local copies to avoid extra method calls
+
/**
* Constructs a {@link Base64.OutputStream} in ENCODE mode.
*
* @param out the java.io.OutputStream to which data will be written.
* @since 1.3
*/
- public OutputStream( java.io.OutputStream out )
- {
- this( out, ENCODE );
+ public OutputStream(java.io.OutputStream out) {
+ this(out, ENCODE);
} // end constructor
-
-
+
+
/**
* Constructs a {@link Base64.OutputStream} in
* either ENCODE or DECODE mode.
- * + *
* Valid options:* ENCODE or DECODE: Encode or Decode as data is read. * DONT_BREAK_LINES: don't break lines at 76 characters * (only meaningful when encoding) * Note: Technically, this makes your encoding non-compliant. *- *
+ *
* Example:new Base64.OutputStream( out, Base64.ENCODE )
*
- * @param out the java.io.OutputStream to which data will be written.
+ * @param out the java.io.OutputStream to which data will be written.
* @param options Specified options.
* @see Base64#ENCODE
* @see Base64#DECODE
* @see Base64#DONT_BREAK_LINES
* @since 1.3
*/
- public OutputStream( java.io.OutputStream out, int options )
- {
- super( out );
- this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
- this.encode = (options & ENCODE) == ENCODE;
+ public OutputStream(java.io.OutputStream out, int options) {
+ super(out);
+ this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
+ this.encode = (options & ENCODE) == ENCODE;
this.bufferLength = this.encode ? 3 : 4;
- this.buffer = new byte[ this.bufferLength ];
- this.position = 0;
- this.lineLength = 0;
+ this.buffer = new byte[this.bufferLength];
+ this.position = 0;
+ this.lineLength = 0;
this.suspendEncoding = false;
- this.b4 = new byte[4];
- this.options = options;
- this.decodabet = getDecodabet(options);
+ this.b4 = new byte[4];
+ this.options = options;
+ this.decodabet = getDecodabet(options);
} // end constructor
-
-
+
+
/**
* Writes the byte to the output stream after
* converting to/from Base64 notation.
@@ -1660,28 +1616,24 @@ public class Base64
* @param theByte the byte to write
* @since 1.3
*/
- public void write(int theByte) throws java.io.IOException
- {
+ public void write(int theByte) throws java.io.IOException {
// Encoding suspended?
- if( this.suspendEncoding )
- {
- super.out.write( theByte );
+ if (this.suspendEncoding) {
+ super.out.write(theByte);
return;
} // end if: supsended
-
- // Encode?
- if( this.encode )
- {
- this.buffer[ this.position++ ] = (byte)theByte;
- if( this.position >= this.bufferLength ) // Enough to encode.
- {
- this.out.write( encode3to4( this.b4, this.buffer, this.bufferLength, this.options ) );
- this.lineLength += 4;
- if( this.breakLines && this.lineLength >= MAX_LINE_LENGTH )
- {
- this.out.write( NEW_LINE );
- this.lineLength = 0;
+ // Encode?
+ if (this.encode) {
+ this.buffer[this.position++] = (byte) theByte;
+ if (this.position >= this.bufferLength) // Enough to encode.
+ {
+ this.out.write(encode3to4(this.b4, this.buffer, this.bufferLength, this.options));
+
+ this.lineLength += 4;
+ if (this.breakLines && this.lineLength >= MAX_LINE_LENGTH) {
+ this.out.write(NEW_LINE);
+ this.lineLength = 0;
} // end if: end of line
this.position = 0;
@@ -1689,98 +1641,84 @@ public class Base64
} // end if: encoding
// Else, Decoding
- else
- {
+ else {
// Meaningful Base64 character?
- if( this.decodabet[ theByte & 0x7f ] > WHITE_SPACE_ENC )
- {
- this.buffer[ this.position++ ] = (byte)theByte;
- if( this.position >= this.bufferLength ) // Enough to output.
+ if (this.decodabet[theByte & 0x7f] > WHITE_SPACE_ENC) {
+ this.buffer[this.position++] = (byte) theByte;
+ if (this.position >= this.bufferLength) // Enough to output.
{
- int len = Base64.decode4to3( this.buffer, 0, this.b4, 0, this.options );
- this.out.write( this.b4, 0, len );
+ int len = Base64.decode4to3(this.buffer, 0, this.b4, 0, this.options);
+ this.out.write(this.b4, 0, len);
//out.write( Base64.decode4to3( buffer ) );
this.position = 0;
} // end if: enough to output
} // end if: meaningful base64 character
- else if( this.decodabet[ theByte & 0x7f ] != WHITE_SPACE_ENC )
- {
- throw new java.io.IOException( "Invalid character in Base64 data." );
+ else if (this.decodabet[theByte & 0x7f] != WHITE_SPACE_ENC) {
+ throw new java.io.IOException("Invalid character in Base64 data.");
} // end else: not white space either
} // end else: decoding
} // end write
-
-
-
+
+
/**
- * Calls {@link #write(int)} repeatedly until len
+ * Calls {@link #write(int)} repeatedly until len
* bytes are written.
*
* @param theBytes array from which to read bytes
- * @param off offset for array
- * @param len max number of bytes to read into array
+ * @param off offset for array
+ * @param len max number of bytes to read into array
* @since 1.3
*/
- public void write( byte[] theBytes, int off, int len ) throws java.io.IOException
- {
+ public void write(byte[] theBytes, int off, int len) throws java.io.IOException {
// Encoding suspended?
- if( this.suspendEncoding )
- {
- super.out.write( theBytes, off, len );
+ if (this.suspendEncoding) {
+ super.out.write(theBytes, off, len);
return;
} // end if: supsended
-
- for( int i = 0; i < len; i++ )
- {
- write( theBytes[ off + i ] );
+
+ for (int i = 0; i < len; i++) {
+ write(theBytes[off + i]);
} // end for: each byte written
-
+
} // end write
-
-
-
+
+
/**
* Method added by PHIL. [Thanks, PHIL. -Rob]
* This pads the buffer without closing the stream.
*/
- public void flushBase64() throws java.io.IOException
- {
- if( this.position > 0 )
- {
- if( this.encode )
- {
- this.out.write( encode3to4( this.b4, this.buffer, this.position, this.options ) );
+ public void flushBase64() throws java.io.IOException {
+ if (this.position > 0) {
+ if (this.encode) {
+ this.out.write(encode3to4(this.b4, this.buffer, this.position, this.options));
this.position = 0;
} // end if: encoding
- else
- {
- throw new java.io.IOException( "Base64 input not properly padded." );
+ else {
+ throw new java.io.IOException("Base64 input not properly padded.");
} // end else: decoding
} // end if: buffer partially full
} // end flush
-
- /**
- * Flushes and closes (I think, in the superclass) the stream.
+
+ /**
+ * Flushes and closes (I think, in the superclass) the stream.
*
* @since 1.3
*/
- public void close() throws java.io.IOException
- {
+ public void close() throws java.io.IOException {
// 1. Ensure that pending characters are written
flushBase64();
// 2. Actually close the stream
// Base class both flushes and closes.
super.close();
-
+
this.buffer = null;
- this.out = null;
+ this.out = null;
} // end close
-
-
-
+
+
/**
* Suspends encoding of the stream.
* May be helpful if you need to embed a piece of
@@ -1788,13 +1726,12 @@ public class Base64
*
* @since 1.5.1
*/
- public void suspendEncoding() throws java.io.IOException
- {
+ public void suspendEncoding() throws java.io.IOException {
flushBase64();
this.suspendEncoding = true;
} // end suspendEncoding
-
-
+
+
/**
* Resumes encoding of the stream.
* May be helpful if you need to embed a piece of
@@ -1802,14 +1739,12 @@ public class Base64
*
* @since 1.5.1
*/
- public void resumeEncoding()
- {
+ public void resumeEncoding() {
this.suspendEncoding = false;
} // end resumeEncoding
-
-
-
+
+
} // end inner class OutputStream
-
-
+
+
} // end class Base64
diff --git a/src/main/java/org/graylog2/syslog4j/util/OSDetectUtility.java b/src/main/java/org/graylog2/syslog4j/util/OSDetectUtility.java
index 9fe1cbc..9c5b51f 100644
--- a/src/main/java/org/graylog2/syslog4j/util/OSDetectUtility.java
+++ b/src/main/java/org/graylog2/syslog4j/util/OSDetectUtility.java
@@ -1,77 +1,77 @@
package org.graylog2.syslog4j.util;
/**
-* OSDetectUtility provides operating system detection used to determine
-* whether Syslog4j is running on a Unix platform.
-*
-* Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: OSDetectUtility.java,v 1.4 2008/11/14 04:31:59 cvs Exp $ -*/ + * OSDetectUtility provides operating system detection used to determine + * whether Syslog4j is running on a Unix platform. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: OSDetectUtility.java,v 1.4 2008/11/14 04:31:59 cvs Exp $ + */ public final class OSDetectUtility { - private final static String[] UNIX_PLATFORMS = { - "Linux", - "Mac OS", - "Solaris", - "SunOS", - "MPE/iX", - "HP-UX", - "AIX", - "OS/390", - "FreeBSD", - "Irix", - "Digital Unix", - "FreeBSD", - "OSF1", - "OpenVMS" - }; + private final static String[] UNIX_PLATFORMS = { + "Linux", + "Mac OS", + "Solaris", + "SunOS", + "MPE/iX", + "HP-UX", + "AIX", + "OS/390", + "FreeBSD", + "Irix", + "Digital Unix", + "FreeBSD", + "OSF1", + "OpenVMS" + }; - private final static String[] WINDOWS_PLATFORMS = { - "Windows", - "OS/2" - }; - - private static boolean UNIX = false; - private static boolean WINDOWS = false; - - private OSDetectUtility() { - // - } - - private static boolean isMatch(String[] platforms) { - boolean match = false; - - String osName = System.getProperty("os.name"); - - if (osName != null && !"".equals(osName.trim())) { - osName = osName.toLowerCase(); - - for(int i=0; iSyslog4j is licensed under the Lesser GNU Public License v2.1. A copy -* of the LGPL license is available in the META-INF folder in all -* distributions of Syslog4j and in the base directory of the "doc" ZIP.
-* -* @author <syslog4j@productivity.org> -* @version $Id: SyslogUtility.java,v 1.21 2010/11/28 01:38:08 cvs Exp $ -*/ + * SyslogUtility provides several common utility methods used within + * Syslog4j. + * + *Syslog4j is licensed under the Lesser GNU Public License v2.1. A copy + * of the LGPL license is available in the META-INF folder in all + * distributions of Syslog4j and in the base directory of the "doc" ZIP.
+ * + * @author <syslog4j@productivity.org> + * @version $Id: SyslogUtility.java,v 1.21 2010/11/28 01:38:08 cvs Exp $ + */ public final class SyslogUtility implements SyslogConstants { - private static final long serialVersionUID = 915031554586613648L; - - private SyslogUtility() { - // - } - - public static final InetAddress getInetAddress(String host) throws SyslogRuntimeException { - InetAddress address = null; - - try { - address = InetAddress.getByName(host); - - } catch (UnknownHostException uhe) { - throw new SyslogRuntimeException(uhe); - } - - return address; - } - - public static final String getFacilityString(int syslogFacility) { - switch(syslogFacility) { - case FACILITY_KERN: return "kern"; - case FACILITY_USER: return "user"; - case FACILITY_MAIL: return "mail"; - case FACILITY_DAEMON: return "daemon"; - case FACILITY_AUTH: return "auth"; - case FACILITY_SYSLOG: return "syslog"; - case FACILITY_LPR: return "lpr"; - case FACILITY_NEWS: return "news"; - case FACILITY_UUCP: return "uucp"; - case FACILITY_CRON: return "cron"; - case FACILITY_AUTHPRIV: return "authpriv"; - case FACILITY_FTP: return "ftp"; - case FACILITY_LOCAL0: return "local0"; - case FACILITY_LOCAL1: return "local1"; - case FACILITY_LOCAL2: return "local2"; - case FACILITY_LOCAL3: return "local3"; - case FACILITY_LOCAL4: return "local4"; - case FACILITY_LOCAL5: return "local5"; - case FACILITY_LOCAL6: return "local6"; - case FACILITY_LOCAL7: return "local7"; - - default: return "UNKNOWN"; - } - } - - public static final int getFacility(String facilityName) { - String _facilityName = facilityName; - - if (facilityName == null) { - return -1; - - } else { - _facilityName = facilityName.trim(); - } - - if("KERN".equalsIgnoreCase(_facilityName)) { return FACILITY_KERN; - } else if("USER".equalsIgnoreCase(facilityName)) { return FACILITY_USER; - } else if("MAIL".equalsIgnoreCase(facilityName)) { return FACILITY_MAIL; - } else if("DAEMON".equalsIgnoreCase(facilityName)) { return FACILITY_DAEMON; - } else if("AUTH".equalsIgnoreCase(facilityName)) { return FACILITY_AUTH; - } else if("SYSLOG".equalsIgnoreCase(facilityName)) { return FACILITY_SYSLOG; - } else if("LPR".equalsIgnoreCase(facilityName)) { return FACILITY_LPR; - } else if("NEWS".equalsIgnoreCase(facilityName)) { return FACILITY_NEWS; - } else if("UUCP".equalsIgnoreCase(facilityName)) { return FACILITY_UUCP; - } else if("CRON".equalsIgnoreCase(facilityName)) { return FACILITY_CRON; - } else if("AUTHPRIV".equalsIgnoreCase(facilityName)) { return FACILITY_AUTHPRIV; - } else if("FTP".equalsIgnoreCase(facilityName)) { return FACILITY_FTP; - } else if("LOCAL0".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL0; - } else if("LOCAL1".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL1; - } else if("LOCAL2".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL2; - } else if("LOCAL3".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL3; - } else if("LOCAL4".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL4; - } else if("LOCAL5".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL5; - } else if("LOCAL6".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL6; - } else if("LOCAL7".equalsIgnoreCase(facilityName)) { return FACILITY_LOCAL7; - } else { return -1; - } - } - - public static final int getLevel(String levelName) { - String _levelName = levelName; - - if (levelName == null) { - return -1; - - } else { - _levelName = levelName.trim(); - } - - if("DEBUG".equalsIgnoreCase(_levelName)) { return LEVEL_DEBUG; - } else if("INFO".equalsIgnoreCase(_levelName)) { return LEVEL_INFO; - } else if("NOTICE".equalsIgnoreCase(_levelName)) { return LEVEL_NOTICE; - } else if("WARN".equalsIgnoreCase(_levelName)) { return LEVEL_WARN; - } else if("ERROR".equalsIgnoreCase(_levelName)) { return LEVEL_ERROR; - } else if("CRITICAL".equalsIgnoreCase(_levelName)) { return LEVEL_CRITICAL; - } else if("ALERT".equalsIgnoreCase(_levelName)) { return LEVEL_ALERT; - } else if("EMERGENCY".equalsIgnoreCase(_levelName)) { return LEVEL_EMERGENCY; - } else { return -1; - } - } + private static final long serialVersionUID = 915031554586613648L; + + private SyslogUtility() { + // + } + + public static final InetAddress getInetAddress(String host) throws SyslogRuntimeException { + InetAddress address = null; - public static final boolean isClassExists(String className) { - try { - Class.forName(className); - return true; - - } catch (ClassNotFoundException cnfe) { - // - } - - return false; - } - - public static final String getLocalName() { - String localName = SEND_LOCAL_NAME_DEFAULT_VALUE; - try { - InetAddress addr = InetAddress.getLocalHost(); - localName = addr.getHostName(); - + address = InetAddress.getByName(host); + } catch (UnknownHostException uhe) { - // + throw new SyslogRuntimeException(uhe); } - + + return address; + } + + public static final String getFacilityString(int syslogFacility) { + switch (syslogFacility) { + case FACILITY_KERN: + return "kern"; + case FACILITY_USER: + return "user"; + case FACILITY_MAIL: + return "mail"; + case FACILITY_DAEMON: + return "daemon"; + case FACILITY_AUTH: + return "auth"; + case FACILITY_SYSLOG: + return "syslog"; + case FACILITY_LPR: + return "lpr"; + case FACILITY_NEWS: + return "news"; + case FACILITY_UUCP: + return "uucp"; + case FACILITY_CRON: + return "cron"; + case FACILITY_AUTHPRIV: + return "authpriv"; + case FACILITY_FTP: + return "ftp"; + case FACILITY_LOCAL0: + return "local0"; + case FACILITY_LOCAL1: + return "local1"; + case FACILITY_LOCAL2: + return "local2"; + case FACILITY_LOCAL3: + return "local3"; + case FACILITY_LOCAL4: + return "local4"; + case FACILITY_LOCAL5: + return "local5"; + case FACILITY_LOCAL6: + return "local6"; + case FACILITY_LOCAL7: + return "local7"; + + default: + return "UNKNOWN"; + } + } + + public static final int getFacility(String facilityName) { + String _facilityName = facilityName; + + if (facilityName == null) { + return -1; + + } else { + _facilityName = facilityName.trim(); + } + + if ("KERN".equalsIgnoreCase(_facilityName)) { + return FACILITY_KERN; + } else if ("USER".equalsIgnoreCase(facilityName)) { + return FACILITY_USER; + } else if ("MAIL".equalsIgnoreCase(facilityName)) { + return FACILITY_MAIL; + } else if ("DAEMON".equalsIgnoreCase(facilityName)) { + return FACILITY_DAEMON; + } else if ("AUTH".equalsIgnoreCase(facilityName)) { + return FACILITY_AUTH; + } else if ("SYSLOG".equalsIgnoreCase(facilityName)) { + return FACILITY_SYSLOG; + } else if ("LPR".equalsIgnoreCase(facilityName)) { + return FACILITY_LPR; + } else if ("NEWS".equalsIgnoreCase(facilityName)) { + return FACILITY_NEWS; + } else if ("UUCP".equalsIgnoreCase(facilityName)) { + return FACILITY_UUCP; + } else if ("CRON".equalsIgnoreCase(facilityName)) { + return FACILITY_CRON; + } else if ("AUTHPRIV".equalsIgnoreCase(facilityName)) { + return FACILITY_AUTHPRIV; + } else if ("FTP".equalsIgnoreCase(facilityName)) { + return FACILITY_FTP; + } else if ("LOCAL0".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL0; + } else if ("LOCAL1".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL1; + } else if ("LOCAL2".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL2; + } else if ("LOCAL3".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL3; + } else if ("LOCAL4".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL4; + } else if ("LOCAL5".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL5; + } else if ("LOCAL6".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL6; + } else if ("LOCAL7".equalsIgnoreCase(facilityName)) { + return FACILITY_LOCAL7; + } else { + return -1; + } + } + + public static final int getLevel(String levelName) { + String _levelName = levelName; + + if (levelName == null) { + return -1; + + } else { + _levelName = levelName.trim(); + } + + if ("DEBUG".equalsIgnoreCase(_levelName)) { + return LEVEL_DEBUG; + } else if ("INFO".equalsIgnoreCase(_levelName)) { + return LEVEL_INFO; + } else if ("NOTICE".equalsIgnoreCase(_levelName)) { + return LEVEL_NOTICE; + } else if ("WARN".equalsIgnoreCase(_levelName)) { + return LEVEL_WARN; + } else if ("ERROR".equalsIgnoreCase(_levelName)) { + return LEVEL_ERROR; + } else if ("CRITICAL".equalsIgnoreCase(_levelName)) { + return LEVEL_CRITICAL; + } else if ("ALERT".equalsIgnoreCase(_levelName)) { + return LEVEL_ALERT; + } else if ("EMERGENCY".equalsIgnoreCase(_levelName)) { + return LEVEL_EMERGENCY; + } else { + return -1; + } + } + + public static final boolean isClassExists(String className) { + try { + Class.forName(className); + return true; + + } catch (ClassNotFoundException cnfe) { + // + } + + return false; + } + + public static final String getLocalName() { + String localName = SEND_LOCAL_NAME_DEFAULT_VALUE; + + try { + InetAddress addr = InetAddress.getLocalHost(); + localName = addr.getHostName(); + + } catch (UnknownHostException uhe) { + // + } + return localName; - } - - public static final byte[] getBytes(SyslogCharSetIF syslogCharSet, String data) { - byte[] dataBytes = null; - - try { - dataBytes = data.getBytes(syslogCharSet.getCharSet()); - - } catch (UnsupportedEncodingException uee) { - dataBytes = data.getBytes(); - } - - return dataBytes; - } - - public static final String newString(SyslogCharSetIF syslogCharSet, byte[] dataBytes) { - String data = newString(syslogCharSet,dataBytes,dataBytes.length); - - return data; - } + } - public static final String newString(SyslogCharSetIF syslogCharSet, byte[] dataBytes, int dataLength) { - String data = null; - - try { - data = new String(dataBytes,0,dataLength,syslogCharSet.getCharSet()); - - } catch (UnsupportedEncodingException uee) { - data = new String(dataBytes); - } - - return data; - } + public static final byte[] getBytes(SyslogCharSetIF syslogCharSet, String data) { + byte[] dataBytes = null; - public static final String getLevelString(int level) { - switch(level) { - case SyslogConstants.LEVEL_DEBUG: return "DEBUG"; - case SyslogConstants.LEVEL_INFO: return "INFO"; - case SyslogConstants.LEVEL_NOTICE: return "NOTICE"; - case SyslogConstants.LEVEL_WARN: return "WARN"; - case SyslogConstants.LEVEL_ERROR: return "ERROR"; - case SyslogConstants.LEVEL_CRITICAL: return "CRITICAL"; - case SyslogConstants.LEVEL_ALERT: return "ALERT"; - case SyslogConstants.LEVEL_EMERGENCY: return "EMERGENCY"; - - default: - return "UNKNOWN"; - } - } - - - public static void sleep(long duration) { - try { - Thread.sleep(duration); - - } catch (InterruptedException ie) { - // - } - } + try { + dataBytes = data.getBytes(syslogCharSet.getCharSet()); + + } catch (UnsupportedEncodingException uee) { + dataBytes = data.getBytes(); + } + + return dataBytes; + } + + public static final String newString(SyslogCharSetIF syslogCharSet, byte[] dataBytes) { + String data = newString(syslogCharSet, dataBytes, dataBytes.length); + + return data; + } + + public static final String newString(SyslogCharSetIF syslogCharSet, byte[] dataBytes, int dataLength) { + String data = null; + + try { + data = new String(dataBytes, 0, dataLength, syslogCharSet.getCharSet()); + + } catch (UnsupportedEncodingException uee) { + data = new String(dataBytes); + } + + return data; + } + + public static final String getLevelString(int level) { + switch (level) { + case SyslogConstants.LEVEL_DEBUG: + return "DEBUG"; + case SyslogConstants.LEVEL_INFO: + return "INFO"; + case SyslogConstants.LEVEL_NOTICE: + return "NOTICE"; + case SyslogConstants.LEVEL_WARN: + return "WARN"; + case SyslogConstants.LEVEL_ERROR: + return "ERROR"; + case SyslogConstants.LEVEL_CRITICAL: + return "CRITICAL"; + case SyslogConstants.LEVEL_ALERT: + return "ALERT"; + case SyslogConstants.LEVEL_EMERGENCY: + return "EMERGENCY"; + + default: + return "UNKNOWN"; + } + } + + + public static void sleep(long duration) { + try { + Thread.sleep(duration); + + } catch (InterruptedException ie) { + // + } + } }