String previousOID = "";
try {
// Build the list of variables you want to query
//
final SnmpVarBindList list = new SnmpVarBindList("Get varbind list");
// Read specific OIDs
//
if (walk) {
// Walk request
//
list.addVarBind("0.0");
previousOID = "0.0";
} else {
// Get request
//
list.addVarBind(oids);
}
// Make the SNMP get request
//
System.out.println(
"getRequest() of SNMPGet: Start SNMP V" + version +
" GET request for SNMP agent on \"" + remoteHost +
"\" at port \"" + port + "\".");
while (previousOID.compareTo("end") != 0) {
SnmpRequest request = null;
if (walk) {
// Walk request
//
request = session.snmpGetNextRequest(null, list);
} else {
// Get request
//
request = session.snmpGetRequest(null, list);
}
// Check for a timeout of the request
//
boolean completed =
request.waitForCompletion((maxRetries + 1) * timeOut);
if (completed == false) {
if (connectStatus.compareTo("reqTimeout") != 0) {
System.out.println(
"getRequest() of SNMPGet: Request timed out, " +
"check reachability of agent.");
// Print request
//
System.out.println(
"getRequest() of SNMPGet: Request= " +
request.toString() + ".");
rc = 1;
} else {
System.out.println(
"getRequest() of SNMPGet: Request timed out as expected.");
}
}
if (rc == 0 && completed) {
System.out.println(
"getRequest() of SNMPGet: Finish SNMP V" +
version + " GET request.");
// Now we have a response. Check if the response contains an error
//
String errorStatus = SnmpRequest.snmpErrorToString(
request.getErrorStatus());
if (errorStatus.compareTo("noError") != 0) {
System.out.println(
"getRequest() of SNMPGet: Error status= " +
errorStatus + ".");
System.out.println(
"getRequest() of SNMPGet: Error index= " +
request.getErrorIndex() + ".");
if (errorStatus.compareTo(connectStatus) == 0) {
System.out.println(
"getRequest() of SNMPGet: Get request failed as " +
"expected with " + connectStatus + " status.");
} else {
if (walk && errorStatus.compareTo("noSuchName") == 0) {
System.out.println(
"getRequest() of SNMPGet: Get request failed as " +
"expected with " + connectStatus + " status.");
} else {
System.out.println(
"getRequest() of SNMPGet: Get request should " +
"fail with " + connectStatus + " status.");
rc = 1;
}
}
previousOID = "end";
} else {
// Now we shall display the content of the result
//
SnmpVarBindList resp = request.getResponseVarBindList();
System.out.println("getRequest() of SNMPGet: Result=");
String tmpOID = "";
String realOID = "";
for (int i = 0; i < resp.getVarBindCount(); i++) {
tmpOID = resp.getVarBindAt(i).getOid().toString();
int endIndex = tmpOID.lastIndexOf(".");
String indexOID = tmpOID.substring(endIndex, tmpOID.length());
realOID = tmpOID.substring(0, endIndex);
if (realOID.startsWith("1.3.6.1.2.1.66.2")) {
endIndex = realOID.lastIndexOf(".");
realOID = realOID.substring(0, endIndex);
}
String name = resp.getVarBindAt(i).resolveVarName(realOID).getName();
String value = resp.getVarBindAt(i).getStringValue();
System.out.println(name + indexOID + "=" + value);
if (walk) {
list.removeVarBind(previousOID);
list.addVarBind(tmpOID);
previousOID = tmpOID;
} else {
previousOID = "end";
}
}
if (connectStatus.compareTo("noError") != 0) {
// Request should failed
//
System.out.println(
"getRequest() of SNMPGet: Get request should " +
"fail with " + connectStatus + " status.");
rc = 1;
} else {
if (validOIDs) {
// Check that we obtain correct values for the OIDs
//
if (resp.checkForValidValues()) {
System.out.println(
"getRequest() of SNMPGet: Returned values for" +
" OIDs are correct.");
} else {
System.out.println(
"getRequest() of SNMPGet: Returned values for" +
" OIDs are not correct.");
rc = 1;
}
} else {
// Check that we obtain incorrect values for the OIDs
//
if (resp.checkForValidValues()) {
System.out.println(
"getRequest() of SNMPGet: Returned values for" +
" OIDs should not be correct.");
rc = 1;