Author: ningjiang Date: Mon May 28 02:27:28 2012 New Revision: 1343126 URL: http://svn.apache.org/viewvc?rev=1343126&view=rev Log: CAMEL-5264 fixed the issue that SNMP-Component doesn't response to INFORM-Traps
Modified: camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpTrapConsumer.java Modified: camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpTrapConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpTrapConsumer.java?rev=1343126&r1=1343125&r2=1343126&view=diff ============================================================================== --- camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpTrapConsumer.java (original) +++ camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpTrapConsumer.java Mon May 28 02:27:28 2012 @@ -23,9 +23,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.snmp4j.CommandResponder; import org.snmp4j.CommandResponderEvent; +import org.snmp4j.MessageException; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.TransportMapping; +import org.snmp4j.mp.StateReference; +import org.snmp4j.mp.StatusInformation; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.TcpAddress; @@ -98,6 +101,31 @@ public class SnmpTrapConsumer extends De PDU pdu = event.getPDU(); // check PDU not null if (pdu != null) { + // check for INFORM + // code take from the book "Essential SNMP" + if ((pdu.getType() != PDU.TRAP) && (pdu.getType() != PDU.V1TRAP) && (pdu.getType() != PDU.REPORT) + && (pdu.getType() != PDU.RESPONSE)) { + // first response the inform-message and then process the + // message + pdu.setErrorIndex(0); + pdu.setErrorStatus(0); + pdu.setType(PDU.RESPONSE); + StatusInformation statusInformation = new StatusInformation(); + StateReference ref = event.getStateReference(); + try { + event.getMessageDispatcher().returnResponsePdu(event.getMessageProcessingModel(), + event.getSecurityModel(), + event.getSecurityName(), + event.getSecurityLevel(), pdu, + event.getMaxSizeResponsePDU(), ref, + statusInformation); + if (LOG.isDebugEnabled()) { + LOG.debug("response to INFORM sent"); + } + } catch (MessageException ex) { + getExceptionHandler().handleException(ex); + } + } processPDU(pdu, event); } else { LOG.debug("Received invalid trap PDU: " + pdu);