void discoverIfNeeded() throws java.io.IOException, PduException { uk.co.westhawk.snmp.beans.UsmDiscoveryBean discBean = null; boolean isNeeded = false; TimeWindow tWindow = TimeWindow.getCurrent(); String engineId = tWindow.getSnmpEngineId(hostAddr, hostPort); if (engineId == null) { isNeeded = true; discBean = new uk.co.westhawk.snmp.beans.UsmDiscoveryBean(hostAddr, hostPort, typeSocket); } if (isUseAuthentication()) { if (isNeeded) { discBean.setAuthenticationDetails( userName, userAuthenticationPassword, authenticationProtocol); } else if (tWindow.isTimeLineKnown(engineId) == false) { isNeeded = true; discBean = new uk.co.westhawk.snmp.beans.UsmDiscoveryBean(hostAddr, hostPort, typeSocket); discBean.setAuthenticationDetails( userName, userAuthenticationPassword, authenticationProtocol); } if (isNeeded && isUsePrivacy()) { discBean.setPrivacyDetails(userPrivacyPassword); } } if (isNeeded) { discBean.startDiscovery(); } }
/** * Encodes a discovery pdu packet. This methods encodes without checking is the discovery * paramters are all known. */ public byte[] encodeDiscoveryPacket( byte msg_type, int rId, int errstat, int errind, Enumeration ve) throws java.io.IOException, EncodingException { String engineId = ""; TimeWindow tWindow = TimeWindow.getCurrent(); if (tWindow.isSnmpEngineIdKnown(hostAddr, hostPort) == true) { engineId = tWindow.getSnmpEngineId(hostAddr, hostPort); } TimeWindowNode node = new TimeWindowNode(engineId, 0, 0); return actualEncodePacket(msg_type, rId, errstat, errind, ve, node); }
/** * Constructor. * * @param host The host to which the Pdu will send * @param port The port where the SNMP server will be * @param typeSocketA The type of socket to use. * @see AbstractSnmpContext#AbstractSnmpContext(String, int, String) * @see SnmpContextBasisFace#STANDARD_SOCKET * @see SnmpContextBasisFace#NETSCAPE_SOCKET * @see SnmpContextBasisFace#KVM_SOCKET */ public SnmpContextv3(String host, int port, String typeSocketA) throws java.io.IOException { super(host, port, typeSocketA); if (TimeWindow.getCurrent() == null) { TimeWindow timew = new TimeWindow(); } if (usmAgent == null) { usmAgent = createUsmAgent(); } }
/** * Encodes a pdu packet. If the stack is authoritative, the timeline details are retrieved from * the usmAgent. If not, this methods first checks if all the discovery paramters are all known, * if not it will throw an EncodingException. If so, it encodes and returns the bytes. */ public byte[] encodePacket(byte msg_type, int rId, int errstat, int errind, Enumeration ve) throws java.io.IOException, EncodingException { TimeWindowNode node; if (isDestroyed == true) { throw new EncodingException("Context can no longer be used, since it is already destroyed"); } else { if (isAuthoritative(msg_type) == true) { usmAgent.setSnmpContext(this); node = new TimeWindowNode( usmAgent.getSnmpEngineId(), usmAgent.getSnmpEngineBoots(), usmAgent.getSnmpEngineTime()); } else { TimeWindow tWindow = TimeWindow.getCurrent(); if (tWindow.isSnmpEngineIdKnown(hostAddr, hostPort) == false) { throw new EncodingException( "Engine ID of host " + hostAddr + ", port " + hostPort + " is unknown. Perform discovery."); } String engineId = tWindow.getSnmpEngineId(hostAddr, hostPort); node = new TimeWindowNode(engineId, 0, 0); if (isUseAuthentication()) { if (tWindow.isTimeLineKnown(engineId) == true) { node = tWindow.getTimeLine(engineId); } else { throw new EncodingException( "Time Line of Engine ID of host " + hostAddr + ", port " + hostPort + " is unknown. " + "Perform discovery."); } } } } return actualEncodePacket(msg_type, rId, errstat, errind, ve, node); }