/* |
|
* 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; |
|
} |