[SNMP4J] Code hangs on syncResponse.wait();

Oosten, Harry van harry.van.oosten at logica.com
Wed Aug 6 14:10:52 CEST 2008


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:fock at agentpp.com] 
Sent: woensdag 6 augustus 2008 13:58
To: Oosten, Harry van
Cc: snmp4j at agentpp.org
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: snmp4j-bounces at agentpp.org [mailto:snmp4j-bounces at agentpp.org]
On
> Behalf Of Oosten, Harry van
> Sent: dinsdag 5 augustus 2008 10:08
> To: snmp4j at agentpp.org
> 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
> SNMP4J at agentpp.org
> 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
> SNMP4J at agentpp.org
> 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.





More information about the SNMP4J mailing list