/* * SnmpTrapListener.java * * Created on 8 de abril de 2008, 15:22 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.wonesys.emsModule.alarms; import java.io.BufferedWriter; import java.io.IOException; import java.util.StringTokenizer; import uk.co.westhawk.snmp.event.TrapEvent; import uk.co.westhawk.snmp.event.TrapListener; import uk.co.westhawk.snmp.stack.DecodingException; import uk.co.westhawk.snmp.stack.DefaultTrapContext; import uk.co.westhawk.snmp.stack.Pdu; import uk.co.westhawk.snmp.stack.PduException; import uk.co.westhawk.snmp.stack.SnmpContext; import uk.co.westhawk.snmp.stack.SnmpContextPool; import uk.co.westhawk.snmp.stack.SnmpContextv2c; import uk.co.westhawk.snmp.stack.varbind; public class SnmpTrapListener_old implements TrapListener { // Oid's // General OIDs static final String enterprise = "1.3.6.1.4.1.9."; static final String sysUpTime = "1.3.6.1.2.1.1.3.0"; static final String mplsTunnelUp = "1.3.6.1.4.1.15289.2.1.3.0.1"; static final String mplsTunnelDown = "1.3.6.1.4.1.15289.2.1.3.0.2"; // Trap OIDs static final String VTPNotificationsVLANCreated = enterprise + "9.46.2.0.10"; static final String VTPNotificationsVLANDeleted = enterprise + "9.46.2.0.11"; static final String SNMPTrapsColdStart = "1.3.6.1.6.3.1.1.5.1"; static final String SNMPTrapsWarmStart = "1.3.6.1.6.3.1.1.5.2"; static final String SNMPTrapsLinkDown = "1.3.6.1.6.3.1.1.5.3"; static final String SNMPTrapsLinkUp = "1.3.6.1.6.3.1.1.5.4"; static final String SNMPTrapsAuthFailure = "1.3.6.1.6.3.1.1.5.5"; // Fi Oid's private int port = 162; private BufferedWriter out; DefaultTrapContext trapContext; SnmpContextv2c context; AlarmsControler alarmsControler; public SnmpTrapListener_old(int port, AlarmsControler alarmsControler) { this.port = port; this.alarmsControler = alarmsControler; } public void rcv() { try { context = new SnmpContextv2c("127.0.0.1", port, SnmpContext.STANDARD_SOCKET); trapContext = DefaultTrapContext.getInstance(port, SnmpContextPool.STANDARD_SOCKET); trapContext.addTrapListener(this); System.out.println("WoneView-AlarmListener On"); } catch (IOException ex) { System.out.println("WoneView-AlarmListener error: " + ex); } } public String returnValue(String s) { return s.substring(s.toString().indexOf(":") + 2, s.toString().length()); } public void trapReceived(TrapEvent evt) { if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Trap received"); int ver = evt.getVersion(); String hostaddr = evt.getHostAddress(); if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Version " + ver + " , Host " + hostaddr); /* * S'ha tret el context fora i s'han afegit destroy() fora, per evitar el IOException que no mola. * * Idea: Obrir el context nomes un cop al iniciar i fer servir el mateix sempre. */ String log = "hostaddr = " + hostaddr + ", ver = " + ver + ", deco = " + evt.isDecoded(); // System.out.println(log); // EscriptorFitxers.writeLogTraps( log ); Pdu trapPdu = null; String voodoo = ", received "; boolean decoded = false; String community = "publica"; byte[] mess = null; try { if (ver == 0) // snmp v1 { /* * SnmpContext context = new SnmpContext (hostaddr, port, SnmpContext.STANDARD_SOCKET); context.setCommunity (community); trapPdu = * context.processIncomingTrap(evt.getMessage()); context.destroy(); decoded = true; */ } else { // context = new SnmpContextv2c (hostaddr, port, SnmpContext.STANDARD_SOCKET); context.setCommunity(community); trapPdu = context.processIncomingTrap(evt.getMessage()); // context.destroy(); decoded = true; if (AlarmsControler.debug) System.out.println("SnmpTrapListener: PDU decoded"); } } catch (DecodingException ex) { // context.destroy(); if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Decoding exception: " + ex.getMessage()); String dm = ex.getMessage(); if (dm.startsWith("Wrong community: expected")) { if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Wrong community"); int sloc = dm.lastIndexOf(voodoo); if (sloc > 0) { sloc += voodoo.length(); community = dm.substring(sloc); decoded = false; } } } catch (IOException ex) { // context.destroy(); // System.out.println(ex.toString()); ex.printStackTrace(); } if (!decoded) try { if (ver == 0) // snmp v1 { /* * SnmpContext context = new SnmpContext (hostaddr, port, SnmpContext.STANDARD_SOCKET); context.setCommunity (community); trapPdu * = context.processIncomingTrap(evt.getMessage()); context.destroy(); decoded = true; */ } else { // context = new SnmpContextv2c (hostaddr, port, SnmpContext.STANDARD_SOCKET); context.setCommunity(community); trapPdu = context.processIncomingTrap(evt.getMessage()); // context.destroy(); decoded = true; } } catch (DecodingException ex) { } catch (IOException ex) { ex.printStackTrace(); } procesTrap(hostaddr, trapPdu, evt.isDecoded()); } public void procesTrap(String hostaddr, Pdu trapPdu, boolean decoded) { varbind[] b = null; String trap = trapPdu.toString(); if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Process Trap"); String str = "\t"; StringTokenizer tok = new StringTokenizer(trap, "[,]"); while (tok.hasMoreTokens()) str = str + tok.nextToken() + " "; try { b = trapPdu.getResponseVarbinds(); String snmpTrap = returnValue(b[1].toString()); String values = ""; for (int i = 1; i < b.length; i++) { char[] chars = returnValue(b[i].toString()).toCharArray(); if (chars.length >= 1) { if (chars[0] == 0x00) { values += "0x00" + "#"; if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Value " + i + " is 0x00"); } else { values += returnValue(b[i].toString()) + "#"; if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Value " + i + " is " + returnValue(b[i].toString())); } } } // alarmsControler.registerAlarm(returnValue(b[1].toString()),hostaddr,values); } catch (PduException pdue) { // EscriptorFitxers.writeLogExcepcions(pdue.toString()); // System.out.println(pdue); if (AlarmsControler.debug) System.out.println("SnmpTrapListener:PDU Exception: " + pdue.getMessage()); } catch (Exception e) { e.printStackTrace(); if (AlarmsControler.debug) System.out.println("SnmpTrapListener: Unkown Exception: " + e.getMessage()); } } }