jdk/src/jdk.snmp/share/classes/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java
changeset 27214 d9f500808d8a
parent 27213 957656314d82
parent 27202 a489e57ccf52
child 27220 315d620f5726
equal deleted inserted replaced
27213:957656314d82 27214:d9f500808d8a
     1 /*
       
     2  * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 package com.sun.jmx.snmp.agent;
       
    27 
       
    28 import java.util.Enumeration;
       
    29 import java.util.Vector;
       
    30 
       
    31 
       
    32 import com.sun.jmx.snmp.SnmpPdu;
       
    33 import com.sun.jmx.snmp.SnmpVarBind;
       
    34 import com.sun.jmx.snmp.SnmpEngine;
       
    35 
       
    36 /**
       
    37  * This class implements the SnmpMibRequest interface.
       
    38  * It represents the part of a SNMP request that involves a specific
       
    39  * MIB. One instance of this class will be created for every MIB
       
    40  * involved in a SNMP request, and will be passed to the SnmpMibAgent
       
    41  * in charge of handling that MIB.
       
    42  *
       
    43  * Instances of this class are allocated by the SNMP engine. You will
       
    44  * never need to use this class directly. You will only access
       
    45  * instances of this class through their SnmpMibRequest interface.
       
    46  *
       
    47  */
       
    48 final class SnmpMibRequestImpl implements SnmpMibRequest {
       
    49 
       
    50     /**
       
    51      * @param engine The local engine.
       
    52      * @param reqPdu The received pdu.
       
    53      * @param vblist The vector of SnmpVarBind objects in which the
       
    54      *        MIB concerned by this request is involved.
       
    55      * @param protocolVersion  The protocol version of the SNMP request.
       
    56      * @param userData     User allocated contextual data. This object must
       
    57      *        be allocated on a per SNMP request basis through the
       
    58      *        SnmpUserDataFactory registered with the SnmpAdaptorServer,
       
    59      *        and is handed back to the user through SnmpMibRequest objects.
       
    60      */
       
    61     public SnmpMibRequestImpl(SnmpEngine engine,
       
    62                               SnmpPdu reqPdu,
       
    63                               Vector<SnmpVarBind> vblist,
       
    64                               int protocolVersion,
       
    65                               Object userData,
       
    66                               String principal,
       
    67                               int securityLevel,
       
    68                               int securityModel,
       
    69                               byte[] contextName,
       
    70                               byte[] accessContextName) {
       
    71         varbinds   = vblist;
       
    72         version    = protocolVersion;
       
    73         data       = userData;
       
    74         this.reqPdu = reqPdu;
       
    75         this.engine = engine;
       
    76         this.principal = principal;
       
    77         this.securityLevel = securityLevel;
       
    78         this.securityModel = securityModel;
       
    79         this.contextName = contextName;
       
    80         this.accessContextName = accessContextName;
       
    81     }
       
    82     // -------------------------------------------------------------------
       
    83     // PUBLIC METHODS from SnmpMibRequest
       
    84     // -------------------------------------------------------------------
       
    85 
       
    86     /**
       
    87      * Returns the local engine. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
       
    88      * @return the local engine.
       
    89      */
       
    90     @Override
       
    91     public SnmpEngine getEngine() {
       
    92         return engine;
       
    93     }
       
    94 
       
    95     /**
       
    96      * Gets the incoming request principal. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
       
    97      * @return The request principal.
       
    98      **/
       
    99     @Override
       
   100     public String getPrincipal() {
       
   101         return principal;
       
   102     }
       
   103 
       
   104     /**
       
   105      * Gets the incoming request security level. This level is defined in {@link com.sun.jmx.snmp.SnmpEngine SnmpEngine}. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
       
   106      * @return The security level.
       
   107      */
       
   108     @Override
       
   109     public int getSecurityLevel() {
       
   110         return securityLevel;
       
   111     }
       
   112     /**
       
   113      * Gets the incoming request security model. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
       
   114      * @return The security model.
       
   115      */
       
   116     @Override
       
   117     public int getSecurityModel() {
       
   118         return securityModel;
       
   119     }
       
   120     /**
       
   121      * Gets the incoming request context name. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
       
   122      * @return The context name.
       
   123      */
       
   124     @Override
       
   125     public byte[] getContextName() {
       
   126         return contextName;
       
   127     }
       
   128 
       
   129     /**
       
   130      * Gets the incoming request context name used by Access Control Model in order to allow or deny the access to OIDs. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
       
   131      * @return The checked context.
       
   132      */
       
   133     @Override
       
   134     public byte[] getAccessContextName() {
       
   135         return accessContextName;
       
   136     }
       
   137 
       
   138     // -------------------------------------------------------------------
       
   139     // Implements the method defined in SnmpMibRequest interface.
       
   140     // See SnmpMibRequest for the java doc.
       
   141     // -------------------------------------------------------------------
       
   142     @Override
       
   143     public final SnmpPdu getPdu() {
       
   144         return reqPdu;
       
   145     }
       
   146 
       
   147     // -------------------------------------------------------------------
       
   148     // Implements the method defined in SnmpMibRequest interface.
       
   149     // See SnmpMibRequest for the java doc.
       
   150     // -------------------------------------------------------------------
       
   151     @Override
       
   152     public final Enumeration<SnmpVarBind> getElements()  {return varbinds.elements();}
       
   153 
       
   154     // -------------------------------------------------------------------
       
   155     // Implements the method defined in SnmpMibRequest interface.
       
   156     // See SnmpMibRequest for the java doc.
       
   157     // -------------------------------------------------------------------
       
   158     @Override
       
   159     public final Vector<SnmpVarBind> getSubList()  {return varbinds;}
       
   160 
       
   161     // -------------------------------------------------------------------
       
   162     // Implements the method defined in SnmpMibRequest interface.
       
   163     // See SnmpMibRequest for the java doc.
       
   164     // -------------------------------------------------------------------
       
   165     @Override
       
   166     public final int getSize()  {
       
   167         if (varbinds == null) return 0;
       
   168         return varbinds.size();
       
   169     }
       
   170 
       
   171     // -------------------------------------------------------------------
       
   172     // Implements the method defined in SnmpMibRequest interface.
       
   173     // See SnmpMibRequest for the java doc.
       
   174     // -------------------------------------------------------------------
       
   175     @Override
       
   176     public final int         getVersion()  {return version;}
       
   177 
       
   178     // -------------------------------------------------------------------
       
   179     // Implements the method defined in SnmpMibRequest interface.
       
   180     // See SnmpMibRequest for the java doc.
       
   181     // -------------------------------------------------------------------
       
   182     @Override
       
   183     public final int         getRequestPduVersion()  {return reqPdu.version;}
       
   184 
       
   185     // -------------------------------------------------------------------
       
   186     // Implements the method defined in SnmpMibRequest interface.
       
   187     // See SnmpMibRequest for the java doc.
       
   188     // -------------------------------------------------------------------
       
   189     @Override
       
   190     public final Object      getUserData() {return data;}
       
   191 
       
   192     // -------------------------------------------------------------------
       
   193     // Implements the method defined in SnmpMibRequest interface.
       
   194     // See SnmpMibRequest for the java doc.
       
   195     // -------------------------------------------------------------------
       
   196     @Override
       
   197     public final int getVarIndex(SnmpVarBind varbind) {
       
   198         return varbinds.indexOf(varbind);
       
   199     }
       
   200 
       
   201     // -------------------------------------------------------------------
       
   202     // Implements the method defined in SnmpMibRequest interface.
       
   203     // See SnmpMibRequest for the java doc.
       
   204     // -------------------------------------------------------------------
       
   205     @Override
       
   206     public void addVarBind(SnmpVarBind varbind) {
       
   207         varbinds.addElement(varbind);
       
   208     }
       
   209 
       
   210     // -------------------------------------------------------------------
       
   211     // PACKAGE METHODS
       
   212     // -------------------------------------------------------------------
       
   213 
       
   214     // -------------------------------------------------------------------
       
   215     // Allow to pass the request tree built during the check() phase
       
   216     // to the set() method. Note: the if the tree is `null', then the
       
   217     // set() method will rebuild a new tree identical to the tree built
       
   218     // in the check() method.
       
   219     //
       
   220     // Passing this tree in the SnmpMibRequestImpl object allows to
       
   221     // optimize the SET requests.
       
   222     //
       
   223     // -------------------------------------------------------------------
       
   224     final void setRequestTree(SnmpRequestTree tree) {this.tree = tree;}
       
   225 
       
   226     // -------------------------------------------------------------------
       
   227     // Returns the SnmpRequestTree object built in the first operation
       
   228     // phase for two-phase SNMP requests (like SET).
       
   229     // -------------------------------------------------------------------
       
   230     final SnmpRequestTree getRequestTree() {return tree;}
       
   231 
       
   232     // -------------------------------------------------------------------
       
   233     // Returns the underlying vector of SNMP varbinds (used for algorithm
       
   234     // optimization).
       
   235     // -------------------------------------------------------------------
       
   236     final Vector<SnmpVarBind> getVarbinds() {return varbinds;}
       
   237 
       
   238     // -------------------------------------------------------------------
       
   239     // Private variables
       
   240     // -------------------------------------------------------------------
       
   241 
       
   242     // Ideally these variables should be declared final but it makes
       
   243     // the jdk1.1.x compiler complain (seems to be a compiler bug, jdk1.2
       
   244     // is OK).
       
   245     private Vector<SnmpVarBind> varbinds;
       
   246     private int    version;
       
   247     private Object data;
       
   248     private SnmpPdu reqPdu = null;
       
   249     // Non final variable.
       
   250     private SnmpRequestTree tree = null;
       
   251     private SnmpEngine engine = null;
       
   252     private String principal = null;
       
   253     private int securityLevel = -1;
       
   254     private int securityModel = -1;
       
   255     private byte[] contextName = null;
       
   256     private byte[] accessContextName = null;
       
   257 }