1 package ist.coach.coachEmfServicesComponents; 2 3 8 9 import java.lang.*; 10 import java.lang.System ; 11 import java.net.*; 12 import org.opennms.protocols.snmp.*; 13 import java.util.Vector ; 14 15 import ist.coach.coachEmfServices.SnmpAdapter.SnmpApplicationError; 16 import ist.coach.coachEmfCommon.ExceptionMessages; 17 18 public class SnmpProtocolConverter implements SnmpHandler{ 19 20 private int m_version = SnmpSMI.SNMPV2; 21 private String m_community = "public"; 22 private int m_retries = 5; 23 private int m_timeout = 180; 24 private int m_port = 161; 25 private String m_host = null; 26 27 28 private boolean snmpWalkRequest; 29 private String m_startOid = null; 30 private SnmpObjectId m_stopAt = null; 31 public Vector resultSet = null; 32 33 34 private boolean agentResponded; 35 36 private int commandType = -1; 37 38 public SnmpProtocolConverter ( 39 int version, 40 String community, 41 int retries, 42 int timeout, 43 int port, 44 String host, 45 String startOid) { 46 47 this.m_version = version; 48 this.m_community = community; 49 this.m_retries = retries; 50 this.m_timeout = timeout; 51 this.m_port = port; 52 this.m_host = host; 53 54 this.m_startOid = startOid; 55 56 this.resultSet = new Vector (); 57 58 } 59 60 public SnmpProtocolConverter ( 61 String host, 62 String community, 63 int port, 64 String startOid) { 65 66 this.m_version = SnmpSMI.SNMPV2; 67 this.m_community = community; 68 this.m_retries = 5; 69 this.m_timeout = 500; 70 this.m_port = port; 72 this.m_host = host; 73 this.m_startOid = startOid; 74 75 this.resultSet = new Vector (); 76 } 77 78 public void snmpInternalError(SnmpSession session, 79 int err, SnmpSyntax pdu){ 80 81 System.out.println("An unexpected error occured with the SNMP Session"); 82 System.out.println("The error code is " + err); 83 84 synchronized(session){ 85 session.notify(); 86 } 87 } 88 89 public void snmpTimeoutError(SnmpSession session, 90 SnmpSyntax pdu) { 91 92 System.err.println("The session timed out trying to communicate with the remote host"); 93 94 synchronized(session){ 95 session.notify(); 96 } 97 98 this.agentResponded = false; 99 } 100 101 public void snmpGet(SnmpVarBind[] vblist) 102 throws SnmpApplicationError { 103 104 SnmpPeer snmpPeer = null; 105 this.snmpWalkRequest = false; 106 this.agentResponded = true; 107 108 resultSet.clear(); 110 111 try { 112 snmpPeer = new SnmpPeer(InetAddress.getByName(this.m_host)); 113 } 114 catch (UnknownHostException ue) { 115 ue.printStackTrace(); 116 throw new SnmpApplicationError(ExceptionMessages.snmp_host_resolve_error); 117 } 118 119 snmpPeer.setPort(this.m_port); 120 snmpPeer.setTimeout(this.m_timeout); 121 snmpPeer.setRetries(this.m_retries); 122 123 SnmpParameters parms = snmpPeer.getParameters(); 124 parms.setVersion(this.m_version); 125 parms.setReadCommunity(this.m_community); 126 127 SnmpSession session = null; 128 129 try { 130 session = new SnmpSession(snmpPeer); 131 } 132 catch (SocketException se) { 133 se.printStackTrace(); 134 throw new SnmpApplicationError(ExceptionMessages.agent_create_error); 135 } 136 137 session.setDefaultHandler(this); 138 139 SnmpPduRequest pdu = new SnmpPduRequest(SnmpPduPacket.GET, vblist); 140 141 try { 142 143 synchronized(session) { 144 session.send(pdu); 145 session.wait(); 146 } 147 } 148 catch (InterruptedException ie) { 149 ie.printStackTrace(); 150 } 151 finally { 152 153 System.out.println("Closing!"); 154 155 session.close(); 156 157 } 158 } 159 160 public void snmpGetNext(SnmpObjectId oid) 161 throws SnmpApplicationError { 162 163 SnmpPeer snmpPeer = null; 164 this.snmpWalkRequest = false; 165 this.agentResponded = true; 166 167 resultSet.clear(); 169 170 try { 171 snmpPeer = new SnmpPeer(InetAddress.getByName(this.m_host)); 172 } 173 catch (UnknownHostException ue) { 174 ue.printStackTrace(); 175 throw new SnmpApplicationError(ExceptionMessages.snmp_host_resolve_error); 176 } 177 178 snmpPeer.setPort(this.m_port); 179 snmpPeer.setTimeout(this.m_timeout); 180 snmpPeer.setRetries(this.m_retries); 181 182 SnmpParameters parms = snmpPeer.getParameters(); 183 parms.setVersion(this.m_version); 184 parms.setReadCommunity(this.m_community); 185 186 SnmpSession session = null; 187 188 try { 189 session = new SnmpSession(snmpPeer); 190 } 191 catch (SocketException se) { 192 se.printStackTrace(); 193 throw new SnmpApplicationError(ExceptionMessages.agent_create_error); 194 } 195 196 session.setDefaultHandler(this); 197 198 SnmpVarBind [] vblist = {new SnmpVarBind(oid)}; 199 200 SnmpPduRequest pdu = new SnmpPduRequest(SnmpPduPacket.GETNEXT, vblist); 201 202 try { 203 204 synchronized(session) { 205 session.send(pdu); 206 session.wait(); 207 } 208 } 209 catch (InterruptedException ie) { 210 ie.printStackTrace(); 211 } 212 finally { 213 214 System.out.println("Closing!"); 215 216 session.close(); 217 218 } 219 } 220 221 public void snmpWalk() 222 throws SnmpApplicationError { 223 224 SnmpPeer peer = null; 225 this.snmpWalkRequest = true; 226 this.agentResponded = true; 227 228 resultSet.clear(); 230 231 try { 232 peer = new SnmpPeer(InetAddress.getByName(this.m_host)); 233 } 234 catch (UnknownHostException eh) { 235 eh.printStackTrace(); 236 throw new SnmpApplicationError(ExceptionMessages.snmp_host_resolve_error); 237 } 238 peer.setPort(this.m_port); 239 peer.setTimeout(this.m_timeout); 240 peer.setRetries(this.m_retries); 241 242 SnmpParameters parms = peer.getParameters(); 243 parms.setVersion(this.m_version); 244 parms.setReadCommunity(this.m_community); 245 246 SnmpSession session = null; 247 try { 248 249 session = new SnmpSession(peer); 250 } 251 catch(SocketException e) { 252 System.err.println("SocketException creating the SNMP session"); 253 System.err.println("SocketException: " + e.getMessage()); 254 throw new SnmpApplicationError(ExceptionMessages.agent_create_error); 255 } 256 257 session.setDefaultHandler(this); 258 259 if (m_stopAt == null) { 260 SnmpObjectId id = new SnmpObjectId(m_startOid); 261 int[] ids = id.getIdentifiers(); 262 ++ids[ids.length-1]; 263 id.setIdentifiers(ids); 264 m_stopAt = id; 265 } 266 267 SnmpVarBind[] vblist = { new SnmpVarBind(m_startOid) }; 268 SnmpPduRequest pdu = new SnmpPduRequest(SnmpPduPacket.GETNEXT, vblist); 269 try { 270 synchronized(session) 271 { 272 session.send(pdu); 273 session.wait(); 274 } 275 } 276 catch(InterruptedException e) { 277 278 e.printStackTrace(); 279 280 } 282 finally { 283 284 System.out.println("Closing"); 285 session.close(); 286 } 288 } 289 290 public void snmpSet(SnmpVarBind[] vblist) 291 throws SnmpApplicationError { 292 293 SnmpPeer snmpPeer = null; 294 this.snmpWalkRequest = false; 295 this.agentResponded = true; 296 297 resultSet.clear(); 299 300 try { 301 302 snmpPeer = new SnmpPeer(InetAddress.getByName(this.m_host)); 303 } 304 catch (UnknownHostException ue) { 305 ue.printStackTrace(); 306 throw new SnmpApplicationError(ExceptionMessages.snmp_host_resolve_error); 307 } 308 309 snmpPeer.setPort(this.m_port); 310 snmpPeer.setTimeout(this.m_timeout); 311 snmpPeer.setRetries(this.m_retries); 312 313 SnmpParameters parms = snmpPeer.getParameters(); 314 parms.setVersion(this.m_version); 315 parms.setWriteCommunity(this.m_community); 316 317 SnmpSession session = null; 318 319 try { 320 session = new SnmpSession(snmpPeer); 321 } 322 catch (SocketException se) { 323 se.printStackTrace(); 324 throw new SnmpApplicationError(ExceptionMessages.agent_create_error); 325 } 326 327 session.setDefaultHandler(this); 328 329 SnmpPduRequest pdu = new SnmpPduRequest(SnmpPduPacket.SET, vblist); 330 331 try { 332 333 synchronized(session) { 334 session.send(pdu); 335 session.wait(); 336 } 337 } 338 catch (InterruptedException ie) { 339 ie.printStackTrace(); 340 } 341 finally { 342 343 session.close(); 344 345 } 346 } 347 348 public void snmpReceivedPdu(SnmpSession session, 349 int cmd, 350 SnmpPduPacket pdu){ 351 352 SnmpPduRequest req = null; 353 354 if(pdu instanceof SnmpPduRequest){ 355 req = (SnmpPduRequest)pdu; 356 } 357 358 System.out.println("Error index: " + req.getErrorIndex()); 359 System.out.println("Error status: " + req.getErrorStatus()); 360 361 if(pdu.getCommand() != SnmpPduPacket.RESPONSE){ 362 System.err.println("Error: Received non-response command " + 363 pdu.getCommand()); 364 365 synchronized(session){ 366 session.notify(); 367 } 368 369 return; 370 } 371 372 if(req.getErrorStatus() != 0){ 373 System.out.println("End of mib reached"); 374 375 synchronized(session){ 376 session.notify(); 377 } 378 return; 379 } 380 381 if (this.snmpWalkRequest == true) { 382 383 SnmpVarBind vb = pdu.getVarBindAt(0); 384 if (vb.getValue().typeId() == SnmpEndOfMibView.ASNTYPE || 385 (m_stopAt != null && m_stopAt.compare(vb.getName()) < 0)) { 386 387 System.out.println("End of Mib reached"); 388 synchronized (session) { 389 session.notify(); 390 } 391 return; 392 } 393 394 this.resultSet.add(vb); 395 396 System.out.println(vb.toString()); 397 398 SnmpVarBind[] vblist = { new SnmpVarBind(vb.getName())}; 399 SnmpPduRequest newReq = new SnmpPduRequest(SnmpPduPacket.GETNEXT, vblist); 400 401 session.send(newReq); 402 } 403 404 else { 405 406 System.out.println("Pdu length: " + pdu.getLength()); 407 408 for (int i = 0; i < pdu.getLength(); i++) { 409 this.resultSet.add(pdu.getVarBindAt(i)); 411 } 412 413 synchronized (session) { 414 session.notify(); 415 } 416 417 return; 418 } 419 } 420 421 public boolean agentResponded() { 422 423 return this.agentResponded; 424 } 425 426 } 427 428 | Popular Tags |