package org.infosec.ismp.syslogd; import java.io.UnsupportedEncodingException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Random; import org.infosec.ismp.model.event.Event; import org.infosec.ismp.util.ThreadCategory; public class SyslogConnection implements Runnable { private final DatagramPacket m_packet; private final UeiList m_ueiList; private String m_logPrefix; private static final String LOG4J_CATEGORY = "ISMP.Syslogd"; public SyslogConnection(final DatagramPacket packet, final UeiList ueiList) { m_packet = copyPacket(packet); m_ueiList = ueiList; m_logPrefix = LOG4J_CATEGORY; } @Override public void run() { ThreadCategory.setPrefix(m_logPrefix); ThreadCategory log = ThreadCategory.getInstance(getClass()); Event re = null; try { re = ConvertToEvent.make(m_packet, m_ueiList); } catch (UnsupportedEncodingException e1) { log.debug("Failure to convert package"); } catch (MessageDiscardedException e) { log.debug("Message discarded, returning without enqueueing event."); return; } log.debug("Sending received packet to the queue"); SyslogHandler.queueManager.putInQueue(re); // delay a random period of time try { Thread.sleep((new Random()).nextInt(100)); } catch (InterruptedException e) { log.debug("Syslogd: Interruption " + e); } } void setLogPrefix(String prefix) { m_logPrefix = prefix; } private DatagramPacket copyPacket(final DatagramPacket packet) { byte[] message = new byte[packet.getLength()]; System.arraycopy(packet.getData(), 0, message, 0, packet.getLength()); InetAddress addr = null; try { addr = InetAddress.getByAddress(packet.getAddress().getHostName(), packet.getAddress().getAddress()); DatagramPacket retPacket = new DatagramPacket(message, packet.getOffset(), packet.getLength(), addr, packet.getPort()); return retPacket; } catch (UnknownHostException e) { ThreadCategory.getInstance(getClass()).warn( "unable to clone InetAddress object for " + packet.getAddress()); } return null; } } // END OF CLASS