001: /*
002: * Copyright (c) 2003, Intracom S.A. - www.intracom.com
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: *
018: * This package and its source code is available at www.jboss.org
019: **/
020: package org.jboss.jmx.adaptor.snmp.trapd;
021:
022: import java.net.InetAddress;
023:
024: import org.jboss.logging.Logger;
025: import org.opennms.protocols.snmp.SnmpOctetString;
026: import org.opennms.protocols.snmp.SnmpPduPacket;
027: import org.opennms.protocols.snmp.SnmpPduRequest;
028: import org.opennms.protocols.snmp.SnmpPduTrap;
029: import org.opennms.protocols.snmp.SnmpTrapHandler;
030: import org.opennms.protocols.snmp.SnmpTrapSession;
031: import org.opennms.protocols.snmp.SnmpVarBind;
032:
033: /**
034: * Implements an SNMP trap reception engine
035: *
036: * @version $Revision: 23902 $
037: *
038: * @author <a href="mailto:spol@intracom.gr">Spyros Pollatos</a>
039: * @author <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
040: **/
041: public class TrapReceiver implements SnmpTrapHandler {
042: /** target logger */
043: protected final Logger log;
044:
045: /**
046: * Public CTOR
047: *
048: * @param log the logger used to output info messages
049: **/
050: public TrapReceiver(Logger log) {
051: this .log = log;
052: }
053:
054: /**
055: * Receives and logs information about SNMPv2 traps.
056: *
057: * @param session the trap session that received the PDU
058: * @param agent the address of the remote sender
059: * @param port the remote port where the pdu was transmitted from
060: * @param community the decoded community string
061: * @param pdu the decoded v2 trap pdu
062: **/
063: public void snmpReceivedTrap(SnmpTrapSession session,
064: InetAddress agent, int port, SnmpOctetString community,
065: SnmpPduPacket pdu) {
066: if (log.isDebugEnabled()) {
067: StringBuffer sbuf = new StringBuffer();
068:
069: sbuf.append("V2 Trap from ").append(agent.toString());
070: sbuf.append(" on port ").append(port);
071: sbuf.append("\nPDU command......... ").append(
072: pdu.getCommand());
073: sbuf.append("\nPDU Length.......... ").append(
074: pdu.getLength());
075: sbuf.append("\nCommunity string.... ").append(
076: community.toString());
077:
078: if (pdu instanceof SnmpPduRequest) {
079: SnmpPduRequest spdu = (SnmpPduRequest) pdu;
080:
081: sbuf.append("\nPDU Error Status.... ").append(
082: spdu.getErrorStatus());
083: sbuf.append("\nPDU Error Index..... ").append(
084: spdu.getErrorIndex());
085: sbuf.append("\n");
086: }
087:
088: for (int i = 0; i < pdu.getLength(); i++) {
089: SnmpVarBind vb = pdu.getVarBindAt(i);
090:
091: sbuf.append("Varbind[").append(i).append("] := ");
092: sbuf.append(vb.getName().toString()).append(" --> ");
093: sbuf.append(vb.getValue().toString()).append("\n");
094: }
095: log.debug(sbuf.toString());
096: }
097: } // snmpReceivedTrap
098:
099: /**
100: * Receives and logs information about SNMPv1 traps.
101: *
102: * @param session the trap session that received the PDU
103: * @param agent the address of the remote sender
104: * @param port the remote port where the pdu was transmitted from
105: * @param community the decoded community string
106: * @param pdu the decoded v1 trap pdu
107: **/
108: public void snmpReceivedTrap(SnmpTrapSession session,
109: InetAddress agent, int port, SnmpOctetString community,
110: SnmpPduTrap pdu) {
111: if (log.isDebugEnabled()) {
112: StringBuffer sbuf = new StringBuffer();
113:
114: sbuf.append("V1 Trap from agent ").append(agent.toString());
115: sbuf.append(" on port ").append(port);
116: sbuf.append("\nIP Address......... ").append(
117: pdu.getAgentAddress());
118: sbuf.append("\nEnterprise Id...... ").append(
119: pdu.getEnterprise());
120: sbuf.append("\nGeneric ........... ").append(
121: pdu.getGeneric());
122: sbuf.append("\nSpecific .......... ").append(
123: pdu.getSpecific());
124: sbuf.append("\nTimeStamp ......... ").append(
125: pdu.getTimeStamp());
126: sbuf.append("\nLength............. ").append(
127: pdu.getLength());
128: sbuf.append("\nCommunity string... ").append(
129: community.toString());
130: sbuf.append("\n");
131:
132: for (int i = 0; i < pdu.getLength(); i++) {
133: SnmpVarBind vb = pdu.getVarBindAt(i);
134:
135: sbuf.append("Varbind[").append(i).append("] := ");
136: sbuf.append(vb.getName().toString()).append(" --> ");
137: sbuf.append(vb.getValue().toString()).append("\n");
138: }
139: log.debug(sbuf.toString());
140: }
141: } // snmpReceivedTrap
142:
143: /**
144: * Processes session errors.
145: *
146: * @param session the trap session in error
147: * @param error the error condition
148: * @param ref the reference object, if any
149: **/
150: public void snmpTrapSessionError(SnmpTrapSession session,
151: int error, Object ref) {
152: StringBuffer sbuf = new StringBuffer();
153:
154: if (ref != null) {
155: sbuf.append("Session error (").append(error).append(
156: ") reference: ");
157: sbuf.append(ref.toString());
158: } else {
159: sbuf.append("Session error (").append(error).append(")");
160: }
161:
162: try {
163: if (error == SnmpTrapSession.ERROR_EXCEPTION)
164: session.raise();
165: } catch (Throwable e) {
166: sbuf.append(" <").append(e).append(">");
167: }
168:
169: log.error(sbuf.toString());
170:
171: } // snmpTrapSessionError
172:
173: } // class TrapReceiver
|