/** * Send the specified message on trapSocket. */ private void sendTrapMessage(SnmpMessage msg) throws IOException, SnmpTooBigException { byte[] buffer = new byte[bufferSize] ; DatagramPacket packet = new DatagramPacket(buffer, buffer.length) ; int encodingLength = msg.encodeMessage(buffer) ; packet.setLength(encodingLength) ; packet.setAddress(msg.address) ; packet.setPort(msg.port) ; if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "sendTrapMessage", "sending trap to " + msg.address + ":" + msg.port); } trapSocket.send(packet) ; if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "sendTrapMessage", "sent to " + msg.address + ":" + msg.port); } snmpOutTraps++; snmpOutPkts++; }
/** * Encodes this message and puts the result in the specified byte array. * For internal use only. * * @param outputBytes An array to receive the resulting encoding. * * @exception ArrayIndexOutOfBoundsException If the result does not fit * into the specified array. */ public int encodeMessage(byte[] outputBytes) throws SnmpTooBigException { int encodingLength = 0; if (SNMP_LOGGER.isLoggable(Level.FINER)) { SNMP_LOGGER.logp(Level.FINER, SnmpV3Message.class.getName(), "encodeMessage", "Can't encode directly V3Message! Need a SecuritySubSystem"); } throw new IllegalArgumentException("Can't encode"); }
private SnmpPduPacket reduceResponsePdu(SnmpPduPacket req, SnmpPduPacket resp, int acceptedVbCount) throws SnmpTooBigException { // Reduction can be attempted only on bulk response // if (req.type != SnmpPduPacket.pduGetBulkRequestPdu) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", "cannot remove anything"); } throw new SnmpTooBigException(acceptedVbCount) ; } // We're going to reduce the varbind list. // First determine which items should be removed. // Next duplicate and replace the existing list by the reduced one. // // acceptedVbCount is the number of varbind which have been // successfully encoded before reaching bufferSize: // * when it is >= 2, we split the varbindlist at this // position (-1 to be safe), // * when it is 1, we only put one (big?) item in the varbindlist // * when it is 0 (in fact, acceptedVbCount is not available), // we split the varbindlist by 2. // int vbCount; if (acceptedVbCount >= 3) vbCount = Math.min(acceptedVbCount - 1, resp.varBindList.length) ; else if (acceptedVbCount == 1) vbCount = 1 ; else // acceptedCount == 0 ie it is unknown vbCount = resp.varBindList.length / 2 ; if (vbCount < 1) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", "cannot remove anything"); } throw new SnmpTooBigException(acceptedVbCount) ; } else { SnmpVarBind[] newVbList = new SnmpVarBind[vbCount] ; for (int i = 0 ; i < vbCount ; i++) { newVbList[i] = resp.varBindList[i] ; } if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", (resp.varBindList.length - newVbList.length) + " items have been removed"); } resp.varBindList = newVbList ; } return resp ; }
private SnmpPduPacket reduceResponsePdu(SnmpPduPacket req, SnmpPduPacket resp, int acceptedVbCount) throws SnmpTooBigException { // Reduction can be attempted only on bulk response // if (req.type != req.pduGetBulkRequestPdu) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", "cannot remove anything"); } throw new SnmpTooBigException(acceptedVbCount) ; } // We're going to reduce the varbind list. // First determine which items should be removed. // Next duplicate and replace the existing list by the reduced one. // // acceptedVbCount is the number of varbind which have been // successfully encoded before reaching bufferSize: // * when it is >= 2, we split the varbindlist at this // position (-1 to be safe), // * when it is 1, we only put one (big?) item in the varbindlist // * when it is 0 (in fact, acceptedVbCount is not available), // we split the varbindlist by 2. // int vbCount = resp.varBindList.length ; if (acceptedVbCount >= 3) vbCount = Math.min(acceptedVbCount - 1, resp.varBindList.length) ; else if (acceptedVbCount == 1) vbCount = 1 ; else // acceptedCount == 0 ie it is unknown vbCount = resp.varBindList.length / 2 ; if (vbCount < 1) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", "cannot remove anything"); } throw new SnmpTooBigException(acceptedVbCount) ; } else { SnmpVarBind[] newVbList = new SnmpVarBind[vbCount] ; for (int i = 0 ; i < vbCount ; i++) { newVbList[i] = resp.varBindList[i] ; } if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "reduceResponsePdu", (resp.varBindList.length - newVbList.length) + " items have been removed"); } resp.varBindList = newVbList ; } return resp ; }
/** * This method is called to encode a full scoped pdu that as not been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known. It will be routed to the dedicated model according to the version value. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param version The SNMP protocol version. * @param msgID The SNMP message ID. * @param msgMaxSize The max message size. * @param msgFlags The message flags. * @param msgSecurityModel The message security model. * @param params The security parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The encoded data. * @param dataLength The encoded data length. * @param outputBytes The buffer containing the encoded message. * @return The encoded bytes number. */ public int encode(int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException, SnmpUnknownMsgProcModelException ;
/** * This method is called to encode a full scoped pdu that as been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are not known. It will be routed to the dedicated model according to the version value. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param version The SNMP protocol version. * @param msgID The SNMP message ID. * @param msgMaxSize The max message size. * @param msgFlags The message flags. * @param msgSecurityModel The message security model. * @param params The security parameters. * @param encryptedPdu The encrypted pdu. * @param outputBytes The buffer containing the encoded message. * @return The encoded bytes number. */ public int encodePriv(int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] encryptedPdu, byte[] outputBytes) throws SnmpTooBigException, SnmpUnknownMsgProcModelException;
/** * This method is called to encode a full scoped pdu that has not been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param version The SNMP protocol version. * @param msgID The SNMP message ID. * @param msgMaxSize The max message size. * @param msgFlags The message flags. * @param msgSecurityModel The message security model. * @param params The security parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The encoded data. * @param dataLength The encoded data length. * @param outputBytes The buffer containing the encoded message. * @return The encoded bytes number. */ public int encode(int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException;
/** * This method is called to encode a full scoped pdu that as been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param version The SNMP protocol version. * @param msgID The SNMP message ID. * @param msgMaxSize The max message size. * @param msgFlags The message flags. * @param msgSecurityModel The message security model. * @param params The security parameters. * @param encryptedPdu The encrypted pdu. * @param outputBytes The buffer containing the encoded message. * @return The encoded bytes number. */ public int encodePriv(int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] encryptedPdu, byte[] outputBytes) throws SnmpTooBigException;
/** * Called when a request is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model. * @param version The SNMP protocol version. * @param msgID The current request id. * @param msgMaxSize The message max size. * @param msgFlags The message flags (reportable, Auth and Priv). * @param msgSecurityModel This current security model. * @param params The security parameters that contain the model dependant parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The marshalled varbind list * @param dataLength The marshalled varbind list length. * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network. * @return The marshalled byte number. */ public int generateRequestMsg(SnmpSecurityCache cache, int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
/** * Called when a response is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model. * @param version The SNMP protocol version. * @param msgID The current request id. * @param msgMaxSize The message max size. * @param msgFlags The message flags (reportable, Auth and Priv). * @param msgSecurityModel This current security model. * @param params The security parameters that contain the model dependant parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The marshalled varbind list * @param dataLength The marshalled varbind list length. * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network. * @return The marshalled byte number. */ public int generateResponseMsg(SnmpSecurityCache cache, int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
/** * Called when a request is to be sent to the network. It must be securized. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model. * @param version The SNMP protocol version. * @param msgID The current request id. * @param msgMaxSize The message max size. * @param msgFlags The message flags (reportable, Auth and Priv). * @param msgSecurityModel This current security model. * @param params The security parameters that contain the model dependant parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The marshalled varbind list. * @param dataLength The marshalled varbind list length. * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network. * @return The marshalled byte number. */ public int generateRequestMsg(SnmpSecurityCache cache, int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException;
/** * Called when a response is to be sent to the network. It must be securized. * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class). * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model. * @param version The SNMP protocol version. * @param msgID The current request id. * @param msgMaxSize The message max size. * @param msgFlags The message flags (reportable, Auth and Priv) * @param msgSecurityModel This current security model. * @param params The security parameters that contain the model dependant parameters. * @param contextEngineID The context engine ID. * @param contextName The context name. * @param data The marshalled varbind list. * @param dataLength The marshalled varbind list length. * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network. * @return The marshalled byte number. */ public int generateResponseMsg(SnmpSecurityCache cache, int version, int msgID, int msgMaxSize, byte msgFlags, int msgSecurityModel, SnmpSecurityParameters params, byte[] contextEngineID, byte[] contextName, byte[] data, int dataLength, byte[] outputBytes) throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException;