⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmpv3message.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)file      SnmpV3Message.java * @(#)author    Sun Microsystems, Inc. * @(#)version   4.12 * @(#)date      01/01/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * */package com.sun.jmx.snmp;// java imports//import java.util.Vector;import java.net.InetAddress;// import debug stuff//import com.sun.jmx.trace.Trace;import com.sun.jmx.snmp.internal.SnmpMsgProcessingSubSystem;import com.sun.jmx.snmp.internal.SnmpSecurityModel;import com.sun.jmx.snmp.internal.SnmpDecryptedPdu;import com.sun.jmx.snmp.internal.SnmpSecurityCache;import com.sun.jmx.snmp.SnmpMsg;import com.sun.jmx.snmp.SnmpPdu;import com.sun.jmx.snmp.SnmpStatusException;import com.sun.jmx.snmp.SnmpTooBigException;import com.sun.jmx.snmp.SnmpScopedPduBulk;import com.sun.jmx.snmp.BerException;import com.sun.jmx.snmp.SnmpScopedPduRequest;import com.sun.jmx.snmp.BerDecoder;import com.sun.jmx.snmp.SnmpDefinitions;import com.sun.jmx.snmp.SnmpEngineId;import com.sun.jmx.snmp.SnmpScopedPduPacket;import com.sun.jmx.snmp.BerEncoder;import com.sun.jmx.snmp.SnmpPduRequestType;import com.sun.jmx.snmp.SnmpPduBulkType;/** * Is a partially decoded representation of an SNMP V3 packet. * <P> * This class can be used when developing customized manager or agent. * <P> * The <CODE>SnmpV3Message</CODE> class is directly mapped onto the  * message syntax defined in RFC 2572. * <BLOCKQUOTE> * <PRE> * SNMPv3Message ::= SEQUENCE { *          msgVersion INTEGER ( 0 .. 2147483647 ), *          -- administrative parameters *          msgGlobalData HeaderData, *          -- security model-specific parameters *          -- format defined by Security Model *          msgSecurityParameters OCTET STRING, *          msgData  ScopedPduData *      } *     HeaderData ::= SEQUENCE { *         msgID      INTEGER (0..2147483647), *         msgMaxSize INTEGER (484..2147483647), * *         msgFlags   OCTET STRING (SIZE(1)), *                    --  .... ...1   authFlag *                    --  .... ..1.   privFlag *                    --  .... .1..   reportableFlag *                    --              Please observe: *                    --  .... ..00   is OK, means noAuthNoPriv *                    --  .... ..01   is OK, means authNoPriv *                    --  .... ..10   reserved, must NOT be used. *                    --  .... ..11   is OK, means authPriv * *         msgSecurityModel INTEGER (1..2147483647) *     } * </BLOCKQUOTE> * </PRE> * <p><b>This API is a Sun Microsystems internal API  and is subject  * to change without notice.</b></p> * @since 1.5 */public class SnmpV3Message extends SnmpMsg {      /**     * Message identifier.     */    public int msgId = 0;    /**     * Message max size the pdu sender can deal with.     */    public int msgMaxSize = 0;    /**     * Message flags. Reportable flag  and security level.</P>     *<PRE>     * --  .... ...1   authFlag     * --  .... ..1.   privFlag     * --  .... .1..   reportableFlag     * --              Please observe:     * --  .... ..00   is OK, means noAuthNoPriv     * --  .... ..01   is OK, means authNoPriv     * --  .... ..10   reserved, must NOT be used.     * --  .... ..11   is OK, means authPriv     *</PRE>     */    public byte msgFlags = 0;    /**     * The security model the security sub system MUST use in order to deal with this pdu (eg: User based Security Model Id = 3).     */    public int msgSecurityModel = 0;    /**     * The unmarshalled security parameters.     */    public byte[] msgSecurityParameters = null;    /**     * The context engine Id in which the pdu must be handled (Generaly the local engine Id).     */    public byte[] contextEngineId = null;    /**     * The context name in which the OID has to be interpreted.     */    public byte[] contextName = null;    /** The encrypted form of the scoped pdu (Only relevant when dealing with privacy).     */    public byte[] encryptedPdu = null;    /**      * Constructor.     *      */    public SnmpV3Message() {    }    /**     * 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(isTraceOn()) {	    trace("encodeMessage", "Can't encode directly V3Message!!!!! Need a SecuritySubSystem");	}	throw new IllegalArgumentException("Can't encode");    }    /**     * Decodes the specified bytes and initializes this message.     * For internal use only.     *      * @param inputBytes The bytes to be decoded.     *     * @exception SnmpStatusException If the specified bytes are not a valid encoding.     */    public void decodeMessage(byte[] inputBytes, int byteCount)         throws SnmpStatusException {	        try {            BerDecoder bdec = new BerDecoder(inputBytes);            bdec.openSequence();            version = bdec.fetchInteger();	    bdec.openSequence();	    msgId = bdec.fetchInteger();	    msgMaxSize = bdec.fetchInteger();	    msgFlags = bdec.fetchOctetString()[0];	    msgSecurityModel =bdec.fetchInteger();	    bdec.closeSequence();	    msgSecurityParameters = bdec.fetchOctetString();	    if( (msgFlags & SnmpDefinitions.privMask) == 0 ) {		bdec.openSequence();		contextEngineId = bdec.fetchOctetString();		contextName = bdec.fetchOctetString();		data = bdec.fetchAny();		dataLength = data.length;		bdec.closeSequence();	    }	    else {		encryptedPdu = bdec.fetchOctetString();	    }            bdec.closeSequence() ;        }        catch(BerException x) {	    x.printStackTrace();            throw new SnmpStatusException("Invalid encoding") ;        }		if(isTraceOn()) {	    trace("decodeMessage", "Unmarshalled message : \n" +		  "version :" + version + "\n" +		  "msgId :" + msgId +  "\n" +		  "msgMaxSize :" + msgMaxSize + "\n" +		  "msgFlags :" + msgFlags + "\n" +		  "msgSecurityModel :" + msgSecurityModel + "\n" +		  "contextEngineId :" + (contextEngineId == null ? null : SnmpEngineId.createEngineId(contextEngineId)) + "\n" +		  "contextName :" + (contextName == null ? null : new String(contextName)) + "\n" +		  "data :" + data + "\n" +		  "dat len :" + ((data == null) ? 0 : data.length) + "\n" +		  "encryptedPdu :" + encryptedPdu + "\n");	}    }    /**     * Returns the associated request Id.     * @param data The flat message.     * @return The request Id.     */    public int getRequestId(byte[] data) throws SnmpStatusException {	BerDecoder bdec = null;	int msgId = 0;	try {            bdec = new BerDecoder(data);            bdec.openSequence();            bdec.fetchInteger();	    bdec.openSequence();	    msgId = bdec.fetchInteger();	}catch(BerException x) {	    throw new SnmpStatusException("Invalid encoding") ;	}	try {	    bdec.closeSequence();	}	catch(BerException x) {	}		return msgId;    }    /**     * Initializes this message with the specified <CODE>pdu</CODE>.     * <P>     * This method initializes the data field with an array of      * <CODE>maxDataLength</CODE> bytes. It encodes the <CODE>pdu</CODE>.      * The resulting encoding is stored in the data field     * and the length of the encoding is stored in <CODE>dataLength</CODE>.     * <p>     * If the encoding length exceeds <CODE>maxDataLength</CODE>,      * the method throws an exception.     *      * @param p The PDU to be encoded.     * @param maxDataLength The maximum length permitted for the data field.     *     * @exception SnmpStatusException If the specified <CODE>pdu</CODE>      *   is not valid.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -