feat(jdk8): move files to new folder to avoid resources compiled.
This commit is contained in:
768
jdkSrc/jdk8/com/sun/jmx/snmp/agent/SnmpMibAgent.java
Normal file
768
jdkSrc/jdk8/com/sun/jmx/snmp/agent/SnmpMibAgent.java
Normal file
@@ -0,0 +1,768 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
|
||||
package com.sun.jmx.snmp.agent;
|
||||
|
||||
|
||||
|
||||
// java imports
|
||||
//
|
||||
import java.io.Serializable;
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
|
||||
// jmx imports
|
||||
//
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.MBeanRegistration;
|
||||
import javax.management.ObjectName;
|
||||
import javax.management.InstanceNotFoundException;
|
||||
import javax.management.ServiceNotFoundException;
|
||||
import javax.management.ReflectionException;
|
||||
import javax.management.MBeanException;
|
||||
import com.sun.jmx.snmp.SnmpVarBind;
|
||||
import com.sun.jmx.snmp.SnmpDefinitions;
|
||||
import com.sun.jmx.snmp.SnmpStatusException;
|
||||
import com.sun.jmx.snmp.SnmpPdu;
|
||||
import com.sun.jmx.snmp.SnmpOid;
|
||||
import com.sun.jmx.snmp.SnmpEngine;
|
||||
|
||||
/**
|
||||
* Abstract class for representing an SNMP agent.
|
||||
*
|
||||
* The class is used by the SNMP protocol adaptor as the entry point in
|
||||
* the SNMP agent to query.
|
||||
*
|
||||
* <p><b>This API is a Sun Microsystems internal API and is subject
|
||||
* to change without notice.</b></p>
|
||||
*/
|
||||
|
||||
public abstract class SnmpMibAgent
|
||||
implements SnmpMibAgentMBean, MBeanRegistration, Serializable {
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public SnmpMibAgent() {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// PUBLIC METHODS
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Initializes the MIB (with no registration of the MBeans into the
|
||||
* MBean server).
|
||||
*
|
||||
* @exception IllegalAccessException The MIB can not be initialized.
|
||||
*/
|
||||
public abstract void init() throws IllegalAccessException;
|
||||
|
||||
/**
|
||||
* Initializes the MIB but each single MBean representing the MIB
|
||||
* is inserted into the MBean server.
|
||||
*
|
||||
* @param server The MBean server to register the service with.
|
||||
* @param name The object name.
|
||||
*
|
||||
* @return The name of the SNMP MIB registered.
|
||||
*
|
||||
* @exception java.lang.Exception
|
||||
*/
|
||||
@Override
|
||||
public abstract ObjectName preRegister(MBeanServer server,
|
||||
ObjectName name)
|
||||
throws java.lang.Exception;
|
||||
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void postRegister (Boolean registrationDone) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void preDeregister() throws java.lang.Exception {
|
||||
}
|
||||
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void postDeregister() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a <CODE>get</CODE> operation.
|
||||
* This method must update the SnmpVarBinds contained in the
|
||||
* <var>{@link SnmpMibRequest} req</var> parameter.
|
||||
*
|
||||
* @param req The SnmpMibRequest object holding the list of variable to
|
||||
* be retrieved. This list is composed of
|
||||
* <CODE>SnmpVarBind</CODE> objects.
|
||||
*
|
||||
* @exception SnmpStatusException An error occurred during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void get(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
/**
|
||||
* Processes a <CODE>getNext</CODE> operation.
|
||||
* This method must update the SnmpVarBinds contained in the
|
||||
* <var>{@link SnmpMibRequest} req</var> parameter.
|
||||
*
|
||||
* @param req The SnmpMibRequest object holding the list of
|
||||
* OIDs from which the next variables should be retrieved.
|
||||
* This list is composed of <CODE>SnmpVarBind</CODE> objects.
|
||||
*
|
||||
* @exception SnmpStatusException An error occurred during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void getNext(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
/**
|
||||
* Processes a <CODE>getBulk</CODE> operation.
|
||||
* This method must update the SnmpVarBinds contained in the
|
||||
* <var>{@link SnmpMibRequest} req</var> parameter.
|
||||
*
|
||||
* @param req The SnmpMibRequest object holding the list of variable to
|
||||
* be retrieved. This list is composed of
|
||||
* <CODE>SnmpVarBind</CODE> objects.
|
||||
*
|
||||
* @param nonRepeat The number of variables, starting with the first
|
||||
* variable in the variable-bindings, for which a single
|
||||
* lexicographic successor is requested.
|
||||
*
|
||||
* @param maxRepeat The number of lexicographic successors requested
|
||||
* for each of the last R variables. R is the number of variables
|
||||
* following the first <CODE>nonRepeat</CODE> variables for which
|
||||
* multiple lexicographic successors are requested.
|
||||
*
|
||||
* @exception SnmpStatusException An error occurred during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void getBulk(SnmpMibRequest req, int nonRepeat,
|
||||
int maxRepeat)
|
||||
throws SnmpStatusException;
|
||||
|
||||
/**
|
||||
* Processes a <CODE>set</CODE> operation.
|
||||
* This method must update the SnmpVarBinds contained in the
|
||||
* <var>{@link SnmpMibRequest} req</var> parameter.
|
||||
* This method is called during the second phase of the SET two-phase
|
||||
* commit.
|
||||
*
|
||||
* @param req The SnmpMibRequest object holding the list of variable to
|
||||
* be set. This list is composed of
|
||||
* <CODE>SnmpVarBind</CODE> objects.
|
||||
*
|
||||
* @exception SnmpStatusException An error occurred during the operation.
|
||||
* Throwing an exception in this method will break the
|
||||
* atomicity of the SET operation. Care must be taken so that
|
||||
* the exception is thrown in the {@link #check(SnmpMibRequest)}
|
||||
* method instead.
|
||||
*/
|
||||
@Override
|
||||
public abstract void set(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
|
||||
/**
|
||||
* Checks if a <CODE>set</CODE> operation can be performed.
|
||||
* If the operation can not be performed, the method should throw an
|
||||
* <CODE>SnmpStatusException</CODE>.
|
||||
* This method is called during the first phase of the SET two-phase
|
||||
* commit.
|
||||
*
|
||||
* @param req The SnmpMibRequest object holding the list of variable to
|
||||
* be set. This list is composed of
|
||||
* <CODE>SnmpVarBind</CODE> objects.
|
||||
*
|
||||
* @exception SnmpStatusException The <CODE>set</CODE> operation
|
||||
* cannot be performed.
|
||||
*/
|
||||
@Override
|
||||
public abstract void check(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
/**
|
||||
* Gets the root object identifier of the MIB.
|
||||
* <P>The root object identifier is the object identifier uniquely
|
||||
* identifying the MIB.
|
||||
*
|
||||
* @return The root object identifier.
|
||||
*/
|
||||
public abstract long[] getRootOid();
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// GETTERS AND SETTERS
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Gets the reference to the MBean server in which the SNMP MIB is
|
||||
* registered.
|
||||
*
|
||||
* @return The MBean server or null if the MIB is not registered in any
|
||||
* MBean server.
|
||||
*/
|
||||
@Override
|
||||
public MBeanServer getMBeanServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the reference to the SNMP protocol adaptor to which the MIB is
|
||||
* bound.
|
||||
*
|
||||
* @return The SNMP MIB handler.
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler getSnmpAdaptor() {
|
||||
return adaptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler.
|
||||
*
|
||||
* @param stack The SNMP MIB handler.
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
}
|
||||
adaptor = stack;
|
||||
if (adaptor != null) {
|
||||
adaptor.addMib(this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler.
|
||||
* This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
|
||||
* Some OID can be implemented in more than one MIB. In this case, the OID nearest the agent will be used on SNMP operations.
|
||||
* @param stack The SNMP MIB handler.
|
||||
* @param oids The set of OIDs this agent implements.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
}
|
||||
adaptor = stack;
|
||||
if (adaptor != null) {
|
||||
adaptor.addMib(this, oids);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
|
||||
* Adds a new contextualized MIB in the SNMP MIB handler.
|
||||
*
|
||||
* @param stack The SNMP MIB handler.
|
||||
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
|
||||
*
|
||||
* @exception IllegalArgumentException If the parameter is null.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack, String contextName) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this, contextName);
|
||||
}
|
||||
adaptor = stack;
|
||||
if (adaptor != null) {
|
||||
adaptor.addMib(this, contextName);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
|
||||
* Adds a new contextualized MIB in the SNMP MIB handler.
|
||||
*
|
||||
* @param stack The SNMP MIB handler.
|
||||
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
|
||||
* @param oids The set of OIDs this agent implements.
|
||||
* @exception IllegalArgumentException If the parameter is null.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack,
|
||||
String contextName,
|
||||
SnmpOid[] oids) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this, contextName);
|
||||
}
|
||||
adaptor = stack;
|
||||
if (adaptor != null) {
|
||||
adaptor.addMib(this, contextName, oids);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the object name of the SNMP protocol adaptor to which the MIB
|
||||
* is bound.
|
||||
*
|
||||
* @return The name of the SNMP protocol adaptor.
|
||||
*/
|
||||
@Override
|
||||
public ObjectName getSnmpAdaptorName() {
|
||||
return adaptorName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
|
||||
* associated to the specified <CODE>name</CODE>.
|
||||
*
|
||||
* @param name The name of the SNMP protocol adaptor.
|
||||
*
|
||||
* @exception InstanceNotFoundException The SNMP protocol adaptor does
|
||||
* not exist in the MBean server.
|
||||
*
|
||||
* @exception ServiceNotFoundException This SNMP MIB is not registered
|
||||
* in the MBean server or the requested service is not supported.
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
if (server == null) {
|
||||
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
|
||||
}
|
||||
// First remove the reference on the old adaptor server.
|
||||
//
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
}
|
||||
|
||||
// Then update the reference to the new adaptor server.
|
||||
//
|
||||
Object[] params = {this};
|
||||
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent"};
|
||||
try {
|
||||
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
|
||||
signature));
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new InstanceNotFoundException(name.toString());
|
||||
} catch (ReflectionException e) {
|
||||
throw new ServiceNotFoundException(name.toString());
|
||||
} catch (MBeanException e) {
|
||||
// Should never occur...
|
||||
}
|
||||
|
||||
adaptorName = name;
|
||||
}
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
|
||||
* associated to the specified <CODE>name</CODE>.
|
||||
* This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
|
||||
* Some OID can be implemented in more than one MIB. In this case, the OID nearer agent will be used on SNMP operations.
|
||||
* @param name The name of the SNMP protocol adaptor.
|
||||
* @param oids The set of OIDs this agent implements.
|
||||
* @exception InstanceNotFoundException The SNMP protocol adaptor does
|
||||
* not exist in the MBean server.
|
||||
*
|
||||
* @exception ServiceNotFoundException This SNMP MIB is not registered
|
||||
* in the MBean server or the requested service is not supported.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
if (server == null) {
|
||||
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
|
||||
}
|
||||
// First remove the reference on the old adaptor server.
|
||||
//
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
}
|
||||
|
||||
// Then update the reference to the new adaptor server.
|
||||
//
|
||||
Object[] params = {this, oids};
|
||||
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent",
|
||||
oids.getClass().getName()};
|
||||
try {
|
||||
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
|
||||
signature));
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new InstanceNotFoundException(name.toString());
|
||||
} catch (ReflectionException e) {
|
||||
throw new ServiceNotFoundException(name.toString());
|
||||
} catch (MBeanException e) {
|
||||
// Should never occur...
|
||||
}
|
||||
|
||||
adaptorName = name;
|
||||
}
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
|
||||
* associated to the specified <CODE>name</CODE>.
|
||||
*
|
||||
* @param name The name of the SNMP protocol adaptor.
|
||||
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
|
||||
* @exception InstanceNotFoundException The SNMP protocol adaptor does
|
||||
* not exist in the MBean server.
|
||||
*
|
||||
* @exception ServiceNotFoundException This SNMP MIB is not registered
|
||||
* in the MBean server or the requested service is not supported.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name, String contextName)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
if (server == null) {
|
||||
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
|
||||
}
|
||||
|
||||
// First remove the reference on the old adaptor server.
|
||||
//
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this, contextName);
|
||||
}
|
||||
|
||||
// Then update the reference to the new adaptor server.
|
||||
//
|
||||
Object[] params = {this, contextName};
|
||||
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String"};
|
||||
try {
|
||||
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
|
||||
signature));
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new InstanceNotFoundException(name.toString());
|
||||
} catch (ReflectionException e) {
|
||||
throw new ServiceNotFoundException(name.toString());
|
||||
} catch (MBeanException e) {
|
||||
// Should never occur...
|
||||
}
|
||||
|
||||
adaptorName = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reference to the SNMP protocol adaptor through which the MIB
|
||||
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
|
||||
* associated to the specified <CODE>name</CODE>.
|
||||
*
|
||||
* @param name The name of the SNMP protocol adaptor.
|
||||
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
|
||||
* @param oids The set of OIDs this agent implements.
|
||||
* @exception InstanceNotFoundException The SNMP protocol adaptor does
|
||||
* not exist in the MBean server.
|
||||
*
|
||||
* @exception ServiceNotFoundException This SNMP MIB is not registered
|
||||
* in the MBean server or the requested service is not supported.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name,
|
||||
String contextName, SnmpOid[] oids)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
if (server == null) {
|
||||
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
|
||||
}
|
||||
|
||||
// First remove the reference on the old adaptor server.
|
||||
//
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this, contextName);
|
||||
}
|
||||
|
||||
// Then update the reference to the new adaptor server.
|
||||
//
|
||||
Object[] params = {this, contextName, oids};
|
||||
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String", oids.getClass().getName()};
|
||||
try {
|
||||
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
|
||||
signature));
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new InstanceNotFoundException(name.toString());
|
||||
} catch (ReflectionException e) {
|
||||
throw new ServiceNotFoundException(name.toString());
|
||||
} catch (MBeanException e) {
|
||||
// Should never occur...
|
||||
}
|
||||
|
||||
adaptorName = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether or not the MIB module is bound to a SNMP protocol
|
||||
* adaptor.
|
||||
* As a reminder, only bound MIBs can be accessed through SNMP protocol
|
||||
* adaptor.
|
||||
*
|
||||
* @return <CODE>true</CODE> if the MIB module is bound,
|
||||
* <CODE>false</CODE> otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean getBindingState() {
|
||||
if (adaptor == null)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the MIB name.
|
||||
*
|
||||
* @return The MIB name.
|
||||
*/
|
||||
@Override
|
||||
public String getMibName() {
|
||||
return mibName;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a factory method for creating new SnmpMibRequest objects.
|
||||
* @param reqPdu The received PDU.
|
||||
* @param vblist The vector of SnmpVarBind objects in which the
|
||||
* MIB concerned by this request is involved.
|
||||
* @param version The protocol version of the SNMP request.
|
||||
* @param userData User allocated contextual data.
|
||||
*
|
||||
* @return A new SnmpMibRequest object.
|
||||
*
|
||||
* @since 1.5
|
||||
**/
|
||||
public static SnmpMibRequest newMibRequest(SnmpPdu reqPdu,
|
||||
Vector<SnmpVarBind> vblist,
|
||||
int version,
|
||||
Object userData)
|
||||
{
|
||||
return new SnmpMibRequestImpl(null,
|
||||
reqPdu,
|
||||
vblist,
|
||||
version,
|
||||
userData,
|
||||
null,
|
||||
SnmpDefinitions.noAuthNoPriv,
|
||||
getSecurityModel(version),
|
||||
null,null);
|
||||
}
|
||||
/**
|
||||
* This is a factory method for creating new SnmpMibRequest objects.
|
||||
* @param engine The local engine.
|
||||
* @param reqPdu The received pdu.
|
||||
* @param vblist The vector of SnmpVarBind objects in which the
|
||||
* MIB concerned by this request is involved.
|
||||
* @param version The protocol version of the SNMP request.
|
||||
* @param userData User allocated contextual data.
|
||||
*
|
||||
* @return A new SnmpMibRequest object.
|
||||
*
|
||||
* @since 1.5
|
||||
**/
|
||||
public static SnmpMibRequest newMibRequest(SnmpEngine engine,
|
||||
SnmpPdu reqPdu,
|
||||
Vector<SnmpVarBind> vblist,
|
||||
int version,
|
||||
Object userData,
|
||||
String principal,
|
||||
int securityLevel,
|
||||
int securityModel,
|
||||
byte[] contextName,
|
||||
byte[] accessContextName) {
|
||||
return new SnmpMibRequestImpl(engine,
|
||||
reqPdu,
|
||||
vblist,
|
||||
version,
|
||||
userData,
|
||||
principal,
|
||||
securityLevel,
|
||||
securityModel,
|
||||
contextName,
|
||||
accessContextName);
|
||||
}
|
||||
// ---------------------------------------------------------------------
|
||||
// PACKAGE METHODS
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Processes a <CODE>getBulk</CODE> operation using call to
|
||||
* <CODE>getNext</CODE>.
|
||||
* The method implements the <CODE>getBulk</CODE> operation by calling
|
||||
* appropriately the <CODE>getNext</CODE> method.
|
||||
*
|
||||
* @param req The SnmpMibRequest containing the variable list to be
|
||||
* retrieved.
|
||||
*
|
||||
* @param nonRepeat The number of variables, starting with the first
|
||||
* variable in the variable-bindings, for which a single lexicographic
|
||||
* successor is requested.
|
||||
*
|
||||
* @param maxRepeat The number of lexicographic successors
|
||||
* requested for each of the last R variables. R is the number of
|
||||
* variables following the first nonRepeat variables for which
|
||||
* multiple lexicographic successors are requested.
|
||||
*
|
||||
* @return The variable list containing returned values.
|
||||
*
|
||||
* @exception SnmpStatusException An error occurred during the operation.
|
||||
*/
|
||||
void getBulkWithGetNext(SnmpMibRequest req, int nonRepeat, int maxRepeat)
|
||||
throws SnmpStatusException {
|
||||
final Vector<SnmpVarBind> list = req.getSubList();
|
||||
|
||||
// RFC 1905, Section 4.2.3, p14
|
||||
final int L = list.size() ;
|
||||
final int N = Math.max(Math.min(nonRepeat, L), 0) ;
|
||||
final int M = Math.max(maxRepeat, 0) ;
|
||||
final int R = L - N ;
|
||||
|
||||
// Let's build the varBindList for the response pdu
|
||||
//
|
||||
// int errorStatus = SnmpDefinitions.snmpRspNoError ;
|
||||
// int errorIndex = 0 ;
|
||||
if (L != 0) {
|
||||
|
||||
// Non-repeaters and first row of repeaters
|
||||
//
|
||||
getNext(req);
|
||||
|
||||
// Now the remaining repeaters
|
||||
//
|
||||
Vector<SnmpVarBind> repeaters= splitFrom(list, N);
|
||||
SnmpMibRequestImpl repeatedReq =
|
||||
new SnmpMibRequestImpl(req.getEngine(),
|
||||
req.getPdu(),
|
||||
repeaters,
|
||||
SnmpDefinitions.snmpVersionTwo,
|
||||
req.getUserData(),
|
||||
req.getPrincipal(),
|
||||
req.getSecurityLevel(),
|
||||
req.getSecurityModel(),
|
||||
req.getContextName(),
|
||||
req.getAccessContextName());
|
||||
for (int i = 2 ; i <= M ; i++) {
|
||||
getNext(repeatedReq);
|
||||
concatVector(req, repeaters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// PRIVATE METHODS
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* This method creates a new Vector which does not contain the first
|
||||
* element up to the specified limit.
|
||||
*
|
||||
* @param original The original vector.
|
||||
* @param limit The limit.
|
||||
*/
|
||||
private Vector<SnmpVarBind> splitFrom(Vector<SnmpVarBind> original, int limit) {
|
||||
|
||||
int max= original.size();
|
||||
Vector<SnmpVarBind> result= new Vector<>(max - limit);
|
||||
int i= limit;
|
||||
|
||||
// Ok the loop looks a bit strange. But in order to improve the
|
||||
// perf, we try to avoid reference to the limit variable from
|
||||
// within the loop ...
|
||||
//
|
||||
for(Enumeration<SnmpVarBind> e= original.elements(); e.hasMoreElements(); --i) {
|
||||
SnmpVarBind var= e.nextElement();
|
||||
if (i >0)
|
||||
continue;
|
||||
result.addElement(new SnmpVarBind(var.oid, var.value));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void concatVector(SnmpMibRequest req, Vector<SnmpVarBind> source) {
|
||||
for(Enumeration<SnmpVarBind> e= source.elements(); e.hasMoreElements(); ) {
|
||||
SnmpVarBind var= e.nextElement();
|
||||
// We need to duplicate the SnmpVarBind otherwise it is going
|
||||
// to be overloaded by the next get Next ...
|
||||
req.addVarBind(new SnmpVarBind(var.oid, var.value));
|
||||
}
|
||||
}
|
||||
|
||||
private static int getSecurityModel(int version) {
|
||||
switch(version) {
|
||||
case SnmpDefinitions.snmpVersionOne:
|
||||
return SnmpDefinitions.snmpV1SecurityModel;
|
||||
default:
|
||||
return SnmpDefinitions.snmpV2SecurityModel;
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// PROTECTED VARIABLES
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The object name of the MIB.
|
||||
* @serial
|
||||
*/
|
||||
protected String mibName;
|
||||
|
||||
/**
|
||||
* The reference to the MBean server.
|
||||
* @serial
|
||||
*/
|
||||
protected MBeanServer server;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// PRIVATE VARIABLES
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The object name of the SNMP protocol adaptor.
|
||||
* @serial
|
||||
*/
|
||||
private ObjectName adaptorName;
|
||||
|
||||
/**
|
||||
* The reference to the SNMP stack.
|
||||
*/
|
||||
private transient SnmpMibHandler adaptor;
|
||||
}
|
||||
Reference in New Issue
Block a user