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

📄 snmpsubrequesthandler.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)file      SnmpSubRequestHandler.java * @(#)author    Sun Microsystems, Inc. * @(#)version   4.38 * @(#)date      08/09/12 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * */package com.sun.jmx.snmp.daemon;// java import//import java.util.Vector;// jmx imports//import com.sun.jmx.snmp.SnmpPdu;import com.sun.jmx.snmp.SnmpVarBind;import com.sun.jmx.snmp.SnmpDefinitions;import com.sun.jmx.snmp.SnmpStatusException;import com.sun.jmx.snmp.SnmpEngine;// RI imports//import com.sun.jmx.trace.Trace;// SNMP Runtime import//import com.sun.jmx.snmp.agent.SnmpMibAgent;import com.sun.jmx.snmp.agent.SnmpMibRequest;import com.sun.jmx.snmp.ThreadContext;import com.sun.jmx.snmp.internal.SnmpIncomingRequest;class SnmpSubRequestHandler implements SnmpDefinitions, Runnable {        protected SnmpIncomingRequest incRequest = null;    protected SnmpEngine engine = null;    /**     * V3 enabled Adaptor. Each Oid is added using updateRequest method.     */    protected SnmpSubRequestHandler(SnmpEngine engine,				    SnmpIncomingRequest incRequest,				    SnmpMibAgent agent, 				    SnmpPdu req) {        this(agent, req);	init(engine, incRequest);    }        /**     * V3 enabled Adaptor.      */    protected SnmpSubRequestHandler(SnmpEngine engine,				    SnmpIncomingRequest incRequest,				    SnmpMibAgent agent, 				    SnmpPdu req,				    boolean nouse) {        this(agent, req, nouse);	init(engine, incRequest);    }    /**     * SNMP V1/V2 . To be called with updateRequest.     */    protected SnmpSubRequestHandler(SnmpMibAgent agent, SnmpPdu req) {                dbgTag = makeDebugTag();        if (isTraceOn()) {            trace("constructor", "creating instance for request " + String.valueOf(req.requestId));        }	        version= req.version;        type= req.type;        this.agent= agent;		// We get a ref on the pdu in order to pass it to SnmpMibRequest.	reqPdu = req;	        //Pre-allocate room for storing varbindlist and translation table.        //        int length= req.varBindList.length;        translation= new int[length];        varBind= new NonSyncVector(length);    }    /**     * SNMP V1/V2 The constuctor initialize the subrequest with the whole varbind list contained     * in the original request.     */    protected SnmpSubRequestHandler(SnmpMibAgent agent, 				    SnmpPdu req, 				    boolean nouse) {        this(agent,req);             // The translation table is easy in this case ...        //        int max= translation.length;        SnmpVarBind[] list= req.varBindList;        for(int i=0; i < max; i++) {            translation[i]= i;            ((NonSyncVector)varBind).addNonSyncElement(list[i]);        }    }    SnmpMibRequest createMibRequest(Vector vblist, 				    int protocolVersion,				    Object userData) {	// This is an optimization: 	//    The SnmpMibRequest created in the check() phase is	//    reused in the set() phase.	//	if (type == pduSetRequestPdu && mibRequest != null)	    return mibRequest;		//This is a request comming from an SnmpV3AdaptorServer.	//Full power.	SnmpMibRequest result = null;	if(incRequest != null) {	    result = SnmpMibAgent.newMibRequest(engine,						reqPdu,						vblist,						protocolVersion,						userData,						incRequest.getPrincipal(),						incRequest.getSecurityLevel(),						incRequest.getSecurityModel(),						incRequest.getContextName(),						incRequest.getAccessContext());	} else {	    result = SnmpMibAgent.newMibRequest(reqPdu,						vblist,						protocolVersion,						userData);	}	// If we're doing the check() phase, we store the SnmpMibRequest	// so that we can reuse it in the set() phase.	//	if (type == pduWalkRequest)	    mibRequest = result;	return result;    }    void setUserData(Object userData) {	data = userData;    }    public void run() {            try {	    final ThreadContext oldContext = 		ThreadContext.push("SnmpUserData",data);	    try {		switch(type) {		case pduGetRequestPdu:		    // Invoke a get operation		    //		    if (isTraceOn()) {			trace("run", "[" + Thread.currentThread() + 			      "]:get operation on " + agent.getMibName());		    }				    agent.get(createMibRequest(varBind,version,data));		    break;			case pduGetNextRequestPdu:		    if (isTraceOn()) {			trace("run", "[" + Thread.currentThread() + 			      "]:getNext operation on " + agent.getMibName());		    }		    //#ifdef DEBUG		    agent.getNext(createMibRequest(varBind,version,data));		    break;		    		case pduSetRequestPdu:		    if (isTraceOn()) {			trace("run", "[" + Thread.currentThread() +			      "]:set operation on " + agent.getMibName());		    }		    agent.set(createMibRequest(varBind,version,data));		    break;		    		case pduWalkRequest:		    if (isTraceOn()) {			trace("run", "[" + Thread.currentThread() + 			      "]:check operation on " + agent.getMibName());		    }		    agent.check(createMibRequest(varBind,version,data));		    break;		    		default:		    if (isDebugOn()) {			debug("run", "[" + Thread.currentThread() + 			      "]:unknown operation (" +  type + ") on " + 			      agent.getMibName());		    }		    errorStatus= snmpRspGenErr;		    errorIndex= 1;		    break;		    		}// end of switch			    } finally {		ThreadContext.restore(oldContext);	    }	} catch(SnmpStatusException x) {	    errorStatus = x.getStatus() ;	    errorIndex=  x.getErrorIndex();	    if (isDebugOn()) {		debug("run", "[" + Thread.currentThread() + 		      "]:an Snmp error occured during the operation");		debug("run", x);	    }	}	catch(Exception x) {	    errorStatus = SnmpDefinitions.snmpRspGenErr ;	    if (isTraceOn()) {		trace("run", "[" + Thread.currentThread() + 		      "]:a generic error occured during the operation");	    }	    if (isDebugOn()) {		debug("run", "Error is: " + x);		debug("run", x);	    }	}	if (isTraceOn()) {	    trace("run", "[" + Thread.currentThread() +		  "]:operation completed");	}    }        // -------------------------------------------------------------    //    // This function does a best-effort to map global error status    // to SNMP v1 valid global error status.    //    // An SnmpStatusException can contain either:    // <li> v2 local error codes (that should be stored in the varbind)</li>    // <li> v2 global error codes </li>    // <li> v1 global error codes </li>    //    // v2 local error codes (noSuchInstance, noSuchObject) are    // transformed in a global v1 snmpRspNoSuchName error.    //    // v2 global error codes are transformed in the following way:    //        //    If the request was a GET/GETNEXT then either     //         snmpRspNoSuchName or snmpRspGenErr is returned.    //    //    Otherwise:    //      snmpRspNoAccess, snmpRspInconsistentName     //               => snmpRspNoSuchName    //      snmpRspAuthorizationError, snmpRspNotWritable, snmpRspNoCreation    //               => snmpRspReadOnly  (snmpRspNoSuchName for GET/GETNEXT)    //      snmpRspWrong*     //               => snmpRspBadValue  (snmpRspNoSuchName for GET/GETNEXT)    //      snmpRspResourceUnavailable, snmpRspRspCommitFailed,     //      snmpRspUndoFailed    //                  => snmpRspGenErr    //    // -------------------------------------------------------------    //    static final int mapErrorStatusToV1(int errorStatus, int reqPduType) {	// Map v2 codes onto v1 codes	//         if (errorStatus == SnmpDefinitions.snmpRspNoError)            return SnmpDefinitions.snmpRspNoError;        if (errorStatus == SnmpDefinitions.snmpRspGenErr)            return SnmpDefinitions.snmpRspGenErr;        if (errorStatus == SnmpDefinitions.snmpRspNoSuchName)            return SnmpDefinitions.snmpRspNoSuchName;		if ((errorStatus == SnmpStatusException.noSuchInstance) ||	    (errorStatus == SnmpStatusException.noSuchObject)   ||	    (errorStatus == SnmpDefinitions.snmpRspNoAccess)    ||	    (errorStatus == SnmpDefinitions.snmpRspInconsistentName) ||	    (errorStatus == SnmpDefinitions.snmpRspAuthorizationError)){	    	    return SnmpDefinitions.snmpRspNoSuchName;	    	} else if ((errorStatus == 		    SnmpDefinitions.snmpRspAuthorizationError)         ||		   (errorStatus == SnmpDefinitions.snmpRspNotWritable)) {	    	    if (reqPduType == SnmpDefinitions.pduWalkRequest)		return SnmpDefinitions.snmpRspReadOnly;	    else		return SnmpDefinitions.snmpRspNoSuchName;	    	} else if ((errorStatus == SnmpDefinitions.snmpRspNoCreation)) {	    		return SnmpDefinitions.snmpRspNoSuchName;	} else if ((errorStatus == SnmpDefinitions.snmpRspWrongType)      ||		   (errorStatus == SnmpDefinitions.snmpRspWrongLength)    ||		   (errorStatus == SnmpDefinitions.snmpRspWrongEncoding)  ||		   (errorStatus == SnmpDefinitions.snmpRspWrongValue)     ||		   (errorStatus == SnmpDefinitions.snmpRspWrongLength)    ||		   (errorStatus == 		    SnmpDefinitions.snmpRspInconsistentValue)) {	    	    if ((reqPduType == SnmpDefinitions.pduSetRequestPdu) || 		(reqPduType == SnmpDefinitions.pduWalkRequest))		return SnmpDefinitions.snmpRspBadValue;	    else		return SnmpDefinitions.snmpRspNoSuchName;	    	} else if ((errorStatus == 		    SnmpDefinitions.snmpRspResourceUnavailable) ||		   (errorStatus == 		    SnmpDefinitions.snmpRspCommitFailed)        ||		   (errorStatus == SnmpDefinitions.snmpRspUndoFailed)) {	    	    return SnmpDefinitions.snmpRspGenErr;	    	}

⌨️ 快捷键说明

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