You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/01/13 09:19:38 UTC

svn commit: r1058457 - in /camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp: SnmpEndpoint.java SnmpOIDPoller.java SnmpTrapConsumer.java

Author: davsclaus
Date: Thu Jan 13 08:19:38 2011
New Revision: 1058457

URL: http://svn.apache.org/viewvc?rev=1058457&view=rev
Log:
CAMEL-3537: camel-snmp supports selecting protocol. Better logging when starting/stopping.

Modified:
    camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpEndpoint.java
    camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpOIDPoller.java
    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/SnmpEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpEndpoint.java?rev=1058457&r1=1058456&r2=1058457&view=diff
==============================================================================
--- camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpEndpoint.java (original)
+++ camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpEndpoint.java Thu Jan 13 08:19:38 2011
@@ -40,7 +40,7 @@ public class SnmpEndpoint extends Defaul
 
     private OIDList oids = new OIDList();
     private String address;
-    private String protocol;
+    private String protocol = "udp";
     private int retries = DEFAULT_SNMP_RETRIES;
     private int timeout = DEFAULT_SNMP_TIMEOUT;
     private int snmpVersion = DEFAULT_SNMP_VERSION;

Modified: camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpOIDPoller.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpOIDPoller.java?rev=1058457&r1=1058456&r2=1058457&view=diff
==============================================================================
--- camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpOIDPoller.java (original)
+++ camel/trunk/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpOIDPoller.java Thu Jan 13 08:19:38 2011
@@ -36,6 +36,7 @@ import org.snmp4j.smi.GenericAddress;
 import org.snmp4j.smi.OID;
 import org.snmp4j.smi.OctetString;
 import org.snmp4j.smi.VariableBinding;
+import org.snmp4j.transport.DefaultTcpTransportMapping;
 import org.snmp4j.transport.DefaultUdpTransportMapping;
 
 public class SnmpOIDPoller extends ScheduledPollConsumer implements ResponseListener {
@@ -61,9 +62,17 @@ public class SnmpOIDPoller extends Sched
     protected void doStart() throws Exception {
         super.doStart();
 
-        LOG.debug("Activating oid poller");
         this.targetAddress = GenericAddress.parse(this.endpoint.getAddress());
-        this.transport = new DefaultUdpTransportMapping();
+
+        // either tcp or udp
+        if ("tcp".equals(endpoint.getProtocol())) {
+            this.transport = new DefaultTcpTransportMapping();
+        } else if ("udp".equals(endpoint.getProtocol())) {
+            this.transport = new DefaultUdpTransportMapping();
+        } else {
+            throw new IllegalArgumentException("Unknown protocol: " + endpoint.getProtocol());
+        }
+
         this.snmp = new Snmp(this.transport);
         this.usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
         SecurityModels.getInstance().addSecurityModel(usm);
@@ -78,15 +87,24 @@ public class SnmpOIDPoller extends Sched
 
         // creating PDU
         this.pdu = new PDU();
+
         // listen to the transport
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Starting OID poller on " + endpoint.getAddress() + " using " + endpoint.getProtocol() + " protocol");
+        }
         this.transport.listen();
+        LOG.info("Started OID poller on " + endpoint.getAddress() + " using " + endpoint.getProtocol() + " protocol");
     }
 
     @Override
     protected void doStop() throws Exception {
         // stop listening to the transport
-        if (this.transport.isListening()) {
+        if (this.transport != null && this.transport.isListening()) {
+            if (LOG.isDebugEnabled()) {
+                LOG.info("Stopping OID poller on " + targetAddress);
+            }
             this.transport.close();
+            LOG.info("Stopped OID poller on " + targetAddress);
         }
 
         super.doStop();
@@ -109,14 +127,13 @@ public class SnmpOIDPoller extends Sched
     public void onResponse(ResponseEvent event) {
         // Always cancel async request when response has been received
         // otherwise a memory leak is created! Not canceling a request
-        // immediately can be useful when sending a request to a broadcast
-        // address.
+        // immediately can be useful when sending a request to a broadcast address.
         ((Snmp)event.getSource()).cancel(event.getRequest(), this);
 
         // check for valid response
         if (event.getRequest() == null || event.getResponse() == null) {
             // ignore null requests/responses
-            LOG.debug("Received invalid snmp event. Request: " + event.getRequest() + " / Response: " + event.getResponse());
+            LOG.debug("Received invalid SNMP event. Request: " + event.getRequest() + " / Response: " + event.getResponse());
             return;
         }
         
@@ -136,8 +153,8 @@ public class SnmpOIDPoller extends Sched
         Exchange exchange = endpoint.createExchange(pdu);
         try {
             getProcessor().process(exchange);
-        } catch (Exception ex) {
-            exchange.setException(ex);
+        } catch (Exception e) {
+            getExceptionHandler().handleException(e);
         }
     }
 

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=1058457&r1=1058456&r2=1058457&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 Thu Jan 13 08:19:38 2011
@@ -28,7 +28,9 @@ import org.snmp4j.Snmp;
 import org.snmp4j.TransportMapping;
 import org.snmp4j.smi.Address;
 import org.snmp4j.smi.GenericAddress;
+import org.snmp4j.smi.TcpAddress;
 import org.snmp4j.smi.UdpAddress;
+import org.snmp4j.transport.DefaultTcpTransportMapping;
 import org.snmp4j.transport.DefaultUdpTransportMapping;
 
 public class SnmpTrapConsumer extends DefaultConsumer implements CommandResponder {
@@ -53,23 +55,38 @@ public class SnmpTrapConsumer extends De
         if (LOG.isInfoEnabled()) {
             LOG.info("Starting trap consumer on " + this.endpoint.getAddress());
         }
+
         this.listenGenericAddress = GenericAddress.parse(this.endpoint.getAddress());
-        this.transport = new DefaultUdpTransportMapping((UdpAddress)this.listenGenericAddress);
+
+        // either tcp or udp
+        if ("tcp".equals(endpoint.getProtocol())) {
+            this.transport = new DefaultTcpTransportMapping((TcpAddress)this.listenGenericAddress);
+        } else if ("udp".equals(endpoint.getProtocol())) {
+            this.transport = new DefaultUdpTransportMapping((UdpAddress)this.listenGenericAddress);
+        } else {
+            throw new IllegalArgumentException("Unknown protocol: " + endpoint.getProtocol());
+        }
+
         this.snmp = new Snmp(transport);
         this.snmp.addCommandResponder(this);
         
         // listen to the transport
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Starting trap consumer on " + endpoint.getAddress() + " using " + endpoint.getProtocol() + " protocol");
+        }
         this.transport.listen();
+        LOG.info("Started trap consumer on " + endpoint.getAddress() + " using " + endpoint.getProtocol() + " protocol");
     }
 
     @Override
     protected void doStop() throws Exception {
         // stop listening to the transport
         if (this.transport != null && this.transport.isListening()) {
-            if (LOG.isInfoEnabled()) {
-                LOG.info("Stopping trap consumer on " + this.endpoint.getAddress());
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Stopping trap consumer on " + this.endpoint.getAddress());
             }
             this.transport.close();
+            LOG.info("Stopped trap consumer on " + this.endpoint.getAddress());
         }
         
         super.doStop();
@@ -92,8 +109,8 @@ public class SnmpTrapConsumer extends De
         Exchange exchange = endpoint.createExchange(pdu);
         try {
             getProcessor().process(exchange);
-        } catch (Exception ex) {
-            exchange.setException(ex);
+        } catch (Exception e) {
+            getExceptionHandler().handleException(e);
         }
     }
 }