/* * Copyright (c) 2003, Intracom S.A. - www.intracom.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * This package and its source code is available at www.jboss.org **/ package org.jboss.jmx.adaptor.snmp.trapd; import java.net.InetAddress; import org.jboss.logging.Logger; import org.opennms.protocols.snmp.SnmpOctetString; import org.opennms.protocols.snmp.SnmpPduPacket; import org.opennms.protocols.snmp.SnmpPduRequest; import org.opennms.protocols.snmp.SnmpPduTrap; import org.opennms.protocols.snmp.SnmpTrapHandler; import org.opennms.protocols.snmp.SnmpTrapSession; import org.opennms.protocols.snmp.SnmpVarBind; /** * Implements an SNMP trap reception engine * * @version $Revision: 30193 $ * * @author <a href="mailto:spol@intracom.gr">Spyros Pollatos</a> * @author <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a> **/ public class TrapReceiver implements SnmpTrapHandler { /** target logger */ protected final Logger log; /** * Public CTOR * * @param log the logger used to output info messages **/ public TrapReceiver(Logger log) { this.log = log; } /** * Receives and logs information about SNMPv2 traps. * * @param session the trap session that received the PDU * @param agent the address of the remote sender * @param port the remote port where the pdu was transmitted from * @param community the decoded community string * @param pdu the decoded v2 trap pdu **/ public void snmpReceivedTrap(SnmpTrapSession session, InetAddress agent, int port, SnmpOctetString community, SnmpPduPacket pdu) { StringBuffer sbuf = new StringBuffer(); sbuf.append("V2 Trap from ").append(agent.toString()); sbuf.append(" on port ").append(port); sbuf.append("\nPDU command......... ").append(pdu.getCommand()); sbuf.append("\nPDU Length.......... ").append(pdu.getLength()); sbuf.append("\nCommunity string.... ").append(community.toString()); if(pdu instanceof SnmpPduRequest) { SnmpPduRequest spdu = (SnmpPduRequest) pdu; sbuf.append("\nPDU Error Status.... ").append(spdu.getErrorStatus()); sbuf.append("\nPDU Error Index..... ").append(spdu.getErrorIndex()); sbuf.append("\n"); } for (int i = 0; i < pdu.getLength(); i++ ) { SnmpVarBind vb = pdu.getVarBindAt(i); sbuf.append("Varbind[").append(i).append("] := "); sbuf.append(vb.getName().toString()).append(" --> "); sbuf.append(vb.getValue().toString()).append("\n"); } log.debug(sbuf.toString()); } // snmpReceivedTrap /** * Receives and logs information about SNMPv1 traps. * * @param session the trap session that received the PDU * @param agent the address of the remote sender * @param port the remote port where the pdu was transmitted from * @param community the decoded community string * @param pdu the decoded v1 trap pdu **/ public void snmpReceivedTrap(SnmpTrapSession session, InetAddress agent, int port, SnmpOctetString community, SnmpPduTrap pdu) { StringBuffer sbuf = new StringBuffer(); sbuf.append("V1 Trap from agent ").append(agent.toString()); sbuf.append(" on port ").append(port); sbuf.append("\nIP Address......... ").append(pdu.getAgentAddress()); sbuf.append("\nEnterprise Id...... ").append(pdu.getEnterprise()); sbuf.append("\nGeneric ........... ").append(pdu.getGeneric()); sbuf.append("\nSpecific .......... ").append(pdu.getSpecific()); sbuf.append("\nTimeStamp ......... ").append(pdu.getTimeStamp()); sbuf.append("\nLength............. ").append(pdu.getLength()); sbuf.append("\nCommunity string... ").append(community.toString()); sbuf.append("\n"); for (int i = 0; i < pdu.getLength(); i++ ) { SnmpVarBind vb = pdu.getVarBindAt(i); sbuf.append("Varbind[").append(i).append("] := "); sbuf.append(vb.getName().toString()).append(" --> "); sbuf.append(vb.getValue().toString()).append("\n"); } log.debug(sbuf.toString()); } // snmpReceivedTrap /** * Processes session errors. * * @param session the trap session in error * @param error the error condition * @param ref the reference object, if any **/ public void snmpTrapSessionError(SnmpTrapSession session, int error, Object ref) { StringBuffer sbuf = new StringBuffer(); if(ref != null) { sbuf.append("Session error (").append(error).append(") reference: "); sbuf.append(ref.toString()); } else { sbuf.append("Session error (").append(error).append(")"); } try { if(error == SnmpTrapSession.ERROR_EXCEPTION) session.raise(); } catch (Throwable e) { sbuf.append(" <").append(e).append(">"); } log.error(sbuf.toString()); } // snmpTrapSessionError } // class TrapReceiver