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

📄 snmpgenericobjectserver.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     *     * @exception SnmpStatusException whenever an SNMP exception must be      *      raised. Raising an exception will abort the request. <br>     *      Exceptions should never be raised directly, but only by means of      * <code>     * req.registerGetException(<i>VariableId</i>,<i>SnmpStatusException</i>)     * </code>     **/                public void set(SnmpGenericMetaServer meta, ObjectName name, 		    SnmpMibSubRequest req, int depth) 	throws SnmpStatusException {	final int size               = req.getSize();	final AttributeList attList  = new AttributeList(size);	final String[]      nameList = new String[size];	final SnmpVarBind[] varList  = new SnmpVarBind[size];	final long[]        idList   = new long[size];	int   i = 0;	for (Enumeration e=req.getElements(); e.hasMoreElements();) {            final SnmpVarBind var= (SnmpVarBind) e.nextElement(); 	    try {		final long id = var.oid.getOidArc(depth);		final String attname = meta.getAttributeName(id);		final Object attvalue= 		    meta.buildAttributeValue(id,var.value);		final Attribute att = new Attribute(attname,attvalue);		attList.add(att);		nameList[i]   = attname;		varList[i]    = var;		idList[i]     = id;		i++;            } catch(SnmpStatusException x) {		req.registerSetException(var,x);	    }	}	AttributeList result = null;	int errorCode = SnmpStatusException.noAccess;	try {	    result = server.setAttributes(name,attList);	} catch (InstanceNotFoundException f) {	    result = new AttributeList();	    errorCode = SnmpStatusException.snmpRspInconsistentName;	} catch (ReflectionException r) {	    errorCode = SnmpStatusException.snmpRspInconsistentName;	    result = new AttributeList();	} catch (Exception x) {	    result = new AttributeList();	}	final Iterator it = result.iterator();		for (int j=0; j < i; j++) {	    if (!it.hasNext()) {		final SnmpStatusException x =		    new SnmpStatusException(errorCode);		req.registerSetException(varList[j],x);		continue;	    }	    final Attribute att = (Attribute) it.next();	    while ((j < i) && (! nameList[j].equals(att.getName()))) {		final SnmpStatusException x =		    new SnmpStatusException(SnmpStatusException.noAccess);		req.registerSetException(varList[j],x);		j++;	    }	    if ( j == i) break;	    	    try {		varList[j].value = 		    meta.buildSnmpValue(idList[j],att.getValue());	    } catch (SnmpStatusException x) {		req.registerSetException(varList[j],x);	    }	    	}    }    /**     * Set the value of an SNMP variable.     *     * <p><b><i>     * You should never need to use this method directly.     * </i></b></p>     *     * @param meta  The impacted metadata object     * @param name  The ObjectName of the impacted MBean     * @param x     The new requested SnmpValue     * @param id    The OID arc identifying the variable we're trying to set.     * @param data  User contextual data allocated through the     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}     *     * @return The new value of the variable after the operation.     *     * @exception SnmpStatusException whenever an SNMP exception must be      *      raised. Raising an exception will abort the request. <br>     *      Exceptions should never be raised directly, but only by means of      * <code>     * req.registerSetException(<i>VariableId</i>,<i>SnmpStatusException</i>)     * </code>     **/                public SnmpValue set(SnmpGenericMetaServer meta, ObjectName name, 			 SnmpValue x, long id, Object data) 	throws SnmpStatusException {	final String attname = meta.getAttributeName(id);	final Object attvalue= 	    meta.buildAttributeValue(id,x);	final Attribute att = new Attribute(attname,attvalue);	Object result = null;	try {	    server.setAttribute(name,att);	    result = server.getAttribute(name,attname);	} catch(InvalidAttributeValueException iv) {	    throw new 		SnmpStatusException(SnmpStatusException.snmpRspWrongValue);	} catch (InstanceNotFoundException f) {	    throw new 		SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);	} catch (ReflectionException r) {	    throw new 		SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);	} catch (MBeanException m) {	    Exception t = m.getTargetException();	    if (t instanceof SnmpStatusException) 		throw (SnmpStatusException) t;	    throw new 		SnmpStatusException(SnmpStatusException.noAccess);	} catch (Exception e) {	    throw new 		SnmpStatusException(SnmpStatusException.noAccess);	}	return meta.buildSnmpValue(id,result);    }    /**     * Checks whether an SNMP SET request can be successfully performed.      *     * <p>     * For each variable in the subrequest, this method calls      * checkSetAccess() on the meta object, and then tries to invoke the     * check<i>AttributeName</i>() method on the MBean. If this method     * is not defined then it is assumed that the SET won't fail.     * </p>     *     * <p><b><i>     * This method is called internally by <code>mibgen</code> generated     * objects and you should never need to call it directly.     * </i></b></p>     *     * @param meta  The metadata object impacted by the subrequest     * @param name  The ObjectName of the MBean impacted by this subrequest     * @param req   The SNMP subrequest to execute on the MBean     * @param depth The depth of the SNMP object in the OID tree.     *     * @exception SnmpStatusException if the requested SET operation must     *      be rejected. Raising an exception will abort the request. <br>     *      Exceptions should never be raised directly, but only by means of      * <code>     * req.registerCheckException(<i>VariableId</i>,<i>SnmpStatusException</i>)     * </code>     *     **/                public void check(SnmpGenericMetaServer meta, ObjectName name, 		      SnmpMibSubRequest req, int depth) 	throws SnmpStatusException {	final Object data = req.getUserData();	for (Enumeration e=req.getElements(); e.hasMoreElements();) {            final SnmpVarBind var= (SnmpVarBind) e.nextElement(); 	    try {		final long id = var.oid.getOidArc(depth);		// call meta.check() here, and meta.check will call check()		check(meta,name,var.value,id,data);            } catch(SnmpStatusException x) {		req.registerCheckException(var,x);	    }	}    }    /**     * Checks whether a SET operation can be performed on a given SNMP     * variable.     *     * @param meta  The impacted metadata object     * @param name  The ObjectName of the impacted MBean     * @param x     The new requested SnmpValue     * @param id    The OID arc identifying the variable we're trying to set.     * @param data  User contextual data allocated through the     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}     *     * <p>     * This method calls checkSetAccess() on the meta object, and then      * tries to invoke the check<i>AttributeName</i>() method on the MBean.      * If this method is not defined then it is assumed that the SET      * won't fail.     * </p>     *     * <p><b><i>     * This method is called internally by <code>mibgen</code> generated     * objects and you should never need to call it directly.     * </i></b></p>     *     * @exception SnmpStatusException if the requested SET operation must     *      be rejected. Raising an exception will abort the request. <br>     *      Exceptions should never be raised directly, but only by means of      * <code>     * req.registerCheckException(<i>VariableId</i>,<i>SnmpStatusException</i>)     * </code>     *     **/    // XXX xxx ZZZ zzz Maybe we should go through the MBeanInfo here?    public void check(SnmpGenericMetaServer meta, ObjectName name, 		      SnmpValue x, long id, Object data) 	throws SnmpStatusException {		meta.checkSetAccess(x,id,data);	try {	    final String attname = meta.getAttributeName(id);	    final Object attvalue= meta.buildAttributeValue(id,x);	    final  Object[] params = new Object[1];	    final  String[] signature = new String[1];	    params[0]    = attvalue;	    signature[0] = attvalue.getClass().getName();	    server.invoke(name,"check"+attname,params,signature);	} catch( SnmpStatusException e) {	    throw e;  	} 	catch (InstanceNotFoundException i) {	    throw new 		SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);	} catch (ReflectionException r) {	    // checkXXXX() not defined => do nothing	} catch (MBeanException m) {	    Exception t = m.getTargetException();	    if (t instanceof SnmpStatusException) 		throw (SnmpStatusException) t;	    throw new SnmpStatusException(SnmpStatusException.noAccess);	} catch (Exception e) {	    throw new 		SnmpStatusException(SnmpStatusException.noAccess);	}    }    public void registerTableEntry(SnmpMibTable meta, SnmpOid rowOid,				   ObjectName objname, Object entry) 	throws SnmpStatusException {        if (objname == null)           throw new 	     SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);        try  {            if (entry != null && !server.isRegistered(objname))                 server.registerMBean(entry, objname);	} catch (InstanceAlreadyExistsException e) {            throw new 	      SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);	} catch (MBeanRegistrationException e) {            throw new SnmpStatusException(SnmpStatusException.snmpRspNoAccess);	} catch (NotCompliantMBeanException e) {            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);	} catch (RuntimeOperationsException e) {            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);        } catch(Exception e) {            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);        }    }}

⌨️ 快捷键说明

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