The question is, does it hang longer than 5000ms?
Does the debugger stop all other threads when
you step through?
Please try also the latest version 1.9.3b which
fixed a race condition which might have been
occurred in your case.
Best regards,
Frank Fock
Oosten, Harry van wrote:
I use 1.8.2.
I've callec Snmp.listen() and it only happens when I use a wrong
password or username. The request is then ignored by the agent and the
code is hanging on syncResponse.wait(); When I debug.
Met vriendelijke groet / Kind Regards,
ing. Harry van Oosten
Software engineer
_________________________________________
Logica Nederland B.V.
Registered office in Amstelveen, The Netherlands
Registration Number Chamber of Commerce: 33136004
-----Original Message-----
From: Frank Fock [mailto:[EMAIL PROTECTED]
Sent: zondag 10 augustus 2008 13:47
To: Oosten, Harry van
Cc: [email protected]
Subject: Re: [SNMP4J] Code hangs on syncResponse.wait();
Harry,
That's all you need to do. What SNMP4J version
are you using? Have you called Snmp.listen()
before sending the request?
Best regards,
Frank
Oosten, Harry van wrote:
Frank,
I've set the time out of the target to 5000 ms.
But on the scopedPDU I create for the request message I can't set any
timeout. How do I set the time out off the request message?
Met vriendelijke groet / Kind Regards,
ing. Harry van Oosten
Software engineer
_________________________________________
-----Original Message-----
From: Frank Fock [mailto:[EMAIL PROTECTED]
Sent: woensdag 6 augustus 2008 13:58
To: Oosten, Harry van
Cc: [email protected]
Subject: Re: [SNMP4J] Code hangs on syncResponse.wait();
I have not read your code, but in general
this is handled by the timeout value of the
request. Try to decrease the value. The
wait() is OK. The timeout is handled
elsewhere.
Best regards,
Frank
Oosten, Harry van schrieb:
Anybody got an idea? I don't understands why the code hangs on the
wait
as the request is being ignored. Could it help to set .the
syncResponse.wait(); with an timeout value of 10 seconds or is there
more time needed for the agent to response?
Thanks.
Met vriendelijke groet / Kind Regards,
ing. Harry van Oosten
Software engineer
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On
Behalf Of Oosten, Harry van
Sent: dinsdag 5 augustus 2008 10:08
To: [email protected]
Subject: [SNMP4J] Code hangs on syncResponse.wait();
Hi,
I managed to create an test class that's send a GETBULK request to an
configured switch and router. This goes well as long as I use the
right
username password.
Only when I change a username or password the request is ignored by
the
device and the code hangs on the syncResponse.wait();
MyCode:
public class SNMPManager {
private boolean needConfig = false;
public static void main(String[] args) {
SNMPManager snmpMan = new SNMPManager();
System.out.println("Switch = up?
"+snmpMan.isResponding("192.168.16.122", "1AuthUser", "AuthPassword",
null)); //wrong username
System.out.println(snmpMan.needConfig);
}
public boolean isResponding(String ipAddress, String userName,
String authPassword, String privPassword){
List<String> OIDList = new LinkedList<String>();
//OIDList.add("");
PDU pdu;
try {
pdu = getPDU(ipAddress, userName, authPassword,
privPassword
,OIDList);
if (pdu != null) {
System.out.println(pdu);
return true;
} else{
return false;
}
} catch (IOException e) {
e.printStackTrace();
needConfig = true;
return false;
}
}
private PDU getPDU(String ipAddress, String userName, String
authPassword, String privPassword ,List<String> OIDList) throws
IOException {
//Create transport.
Address targetAddress =
GenericAddress.parse("udp:"+ipAddress+"/161");
TransportMapping transport = new
DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance(), new
OctetString(MPv3.createLocalEngineID()),0);
SecurityModels.getInstance().addSecurityModel(usm);
transport.listen();
// add user to the USM
if (privPassword != null) {
snmp.getUSM().addUser(new OctetString(userName),
//new
OctetString("80:00:13:70:c0:a8:01:0d"),
new UsmUser(new
OctetString(userName),
AuthMD5.ID,
new
OctetString(authPassword),
PrivDES.ID,
new
OctetString(privPassword)
)); //Fill out!
} else {
snmp.getUSM().addUser(new OctetString(userName),
//new
OctetString("80:00:13:70:c0:a8:01:0d"),
new UsmUser(new OctetString(userName),
AuthMD5.ID,
new
OctetString(authPassword),
null,
null));
}
//Create target.
UserTarget target = createTarget(targetAddress, userName);
//Create the PDU
PDU pdu = createPDU(OIDList);
//Send the PDU
ResponseEvent responseEvent = snmp.send(pdu, target);
//Exctract the response PDU (could be null if timed out)
PDU responsePDU = responseEvent.getResponse();
closeTransport(transport);
return responsePDU;
}
/**
* Used to create the PDU.
* Gets a list of Strings containing the OID's that needs to be
acquired.
* @param OIDList String List
* @return PDU
*/
private PDU createPDU(List<String> OIDList) {
PDU pdu = new ScopedPDU();
for (String oid :OIDList ) {
pdu.add(new VariableBinding(new OID(oid)));
}
pdu.setType(PDU.GETBULK);
return pdu;
}
private UserTarget createTarget(Address targetAddress, String
userName) {
UserTarget target = new UserTarget();
target.setAddress(targetAddress);
target.setRetries(0);
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
target.setSecurityName(new OctetString(userName));
return target;
}
private void closeTransport(TransportMapping transport) throws
IOException {
transport.close();
}
}
Where it goes wrong: (snmp.java)
public ResponseEvent send(PDU pdu, Target target,
TransportMapping transport) throws
IOException {
if (!pdu.isConfirmedPdu()) {
sendMessage(pdu, target, transport, null);
return null;
}
if (timer == null) {
createPendingTimer();
}
SyncResponseListener syncResponse = new SyncResponseListener();
PendingRequest retryRequest = null;
synchronized (syncResponse) {
PduHandle handle = null;
PendingRequest request =
new PendingRequest(syncResponse, target, pdu, target,
transport);
handle = sendMessage(pdu, target, transport, request);
try {
syncResponse.wait();
retryRequest = (PendingRequest)
pendingRequests.remove(handle);
if (logger.isDebugEnabled()) {
logger.debug("Removed pending request with handle:
"+handle);
}
request.setFinished();
request.cancel();
}
catch (InterruptedException iex) {
logger.warn(iex);
// ignore
}
}
if (retryRequest != null) {
retryRequest.setFinished();
retryRequest.cancel();
}
return syncResponse.response;
}
private synchronized void createPendingTimer() {
if (timer == null) {
timer = SNMP4JSettings.getTimerFactory().createTimer();
}
}
Hope you can help!
Met vriendelijke groet / Kind Regards,
ing. Harry van Oosten
Software engineer
_________________________________________
This e-mail and any attachment is for authorised use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be
copied, disclosed to, retained or used by, any other party. If you
are
not an intended recipient then please promptly delete this e-mail and
any attachment and all copies and inform the sender. Thank you.
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j
This e-mail and any attachment is for authorised use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be
copied, disclosed to, retained or used by, any other party. If you are
not an intended recipient then please promptly delete this e-mail and
any attachment and all copies and inform the sender. Thank you.
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j
This e-mail and any attachment is for authorised use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be
copied, disclosed to, retained or used by, any other party. If you are
not an intended recipient then please promptly delete this e-mail and
any attachment and all copies and inform the sender. Thank you.
--
AGENT++
http://www.agentpp.com
http://www.mibexplorer.com
http://www.mibdesigner.com
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j