Java Code Examples for com.sun.jmx.snmp.SnmpStatusException#snmpRspGenErr()

The following examples show how to use com.sun.jmx.snmp.SnmpStatusException#snmpRspGenErr() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SnmpMibOid.java    From openjdk-8-source with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 2
Source File: SnmpMibOid.java    From jdk1.8-source-analysis with Apache License 2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 3
Source File: SnmpMibOid.java    From dragonwell8_jdk with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 4
Source File: SnmpMibOid.java    From jdk8u-jdk with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 5
Source File: SnmpMibOid.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 6
Source File: SnmpMibOid.java    From jdk8u-jdk with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 7
Source File: SnmpMibOid.java    From TencentKona-8 with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 8
Source File: SnmpMibOid.java    From JDKSourceCode1.8 with MIT License 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 9
Source File: SnmpMibOid.java    From jdk8u60 with GNU General Public License v2.0 5 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {


    final int length = oid.length;
    SnmpMibNode node = null;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth > length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noSuchObject);
    } else if (depth == length) {
        // The oid is not complete...
        throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
    } else {
        // Some children variable or subobject is being querried
        // getChild() will raise an exception if no child is found.
        //
        final SnmpMibNode child= getChild(oid[depth]);

        // XXXX zzzz : what about null children?
        //             (variables for nested groups)
        // if child==null, then we're dealing with a variable or
        // a table: we register this node.
        // This behaviour should be overriden in subclasses,
        // in particular in group meta classes: the group
        // meta classes that hold tables should take care
        // of forwarding this call to all the tables involved.
        //
        if (child == null)
            handlers.add(this,depth,varbind);
        else
            child.findHandlingNode(varbind,oid,depth+1,handlers);
    }
}
 
Example 10
Source File: SnmpMibTable.java    From JDKSourceCode1.8 with MIT License 4 votes vote down vote up
@Override
final synchronized void findHandlingNode(SnmpVarBind varbind,
                                         long[] oid, int depth,
                                         SnmpRequestTree handlers)
    throws SnmpStatusException {

    final int  length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth >= length)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    if (oid[depth] != nodeId)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    if (depth+2 >= length)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    // Checks that the oid is valid
    // validateOid(oid,depth);

    // Gets the part of the OID that identifies the entry
    final SnmpOid entryoid = new SnmpEntryOid(oid, depth+2);

    // Finds the entry: false means that the entry does not exists
    final Object data = handlers.getUserData();
    final boolean hasEntry = contains(entryoid, data);

    // Fails if the entry is not found and the table does not
    // not support creation.
    // We know that the entry does not exists if (isentry == false).
    if (!hasEntry) {
        if (!handlers.isCreationAllowed()) {
            // we're not doing a set
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        } else if (!isCreationEnabled())
            // we're doing a set but creation is disabled.
            throw new
                SnmpStatusException(SnmpStatusException.snmpRspNoAccess);
    }

    final long   var  = oid[depth+1];

    // Validate the entry id
    if (hasEntry) {
        // The entry already exists - validate the id
        validateVarEntryId(entryoid,var,data);
    }

    // Registers this node for the identified entry.
    //
    if (handlers.isSetRequest() && isRowStatus(entryoid,var,data))

        // We only try to identify the RowStatus for SET operations
        //
        handlers.add(this,depth,entryoid,varbind,(!hasEntry),varbind);

    else
        handlers.add(this,depth,entryoid,varbind,(!hasEntry));
}
 
Example 11
Source File: SnmpMibGroup.java    From hottub with GNU General Public License v2.0 4 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {

    int length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    final Object data = handlers.getUserData();

    if (depth >= length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noAccess);
    }

    long arc = oid[depth];

    if (isNestedArc(arc)) {
        // This arc leads to a subgroup: delegates the search to the
        // method defined in SnmpMibOid
        super.findHandlingNode(varbind,oid,depth,handlers);
    } else if (isTable(arc)) {
        // This arc leads to a table: forward the search to the table.

        // Gets the table
        SnmpMibTable table = getTable(arc);

        // Forward the search to the table
        table.findHandlingNode(varbind,oid,depth+1,handlers);

    } else {
        // If it's not a variable, throws an exception
        validateVarId(arc, data);

        // The trailing .0 is missing in the OID
        if (depth+2 > length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // There are too many arcs left in the OID (there should remain
        // a single trailing .0)
        if (depth+2 < length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // The last trailing arc is not .0
        if (oid[depth+1] != 0L) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // It's one of our variable, register this node.
        handlers.add(this,depth,varbind);
    }
}
 
Example 12
Source File: SnmpRequestTree.java    From openjdk-jdk8u with GNU General Public License v2.0 4 votes vote down vote up
public static int mapGetException(int errorStatus, int version)
    throws SnmpStatusException {

    final int errorCode = errorStatus;
    if (version == SnmpDefinitions.snmpVersionOne)
        return errorCode;

    int mappedErrorCode = errorCode;

    // Now take care of V2 errorCodes that can be stored
    // in the varbind itself:
    if (errorCode ==
        SnmpStatusException.noSuchObject)
        // noSuchObject => noSuchObject
        mappedErrorCode = errorCode;

    else if (errorCode ==
             SnmpStatusException.noSuchInstance)
        // noSuchInstance => noSuchInstance
        mappedErrorCode = errorCode;

    // Now we're going to try to transform every other
    // global code in either noSuchInstance or noSuchObject,
    // so that the get can return a partial result.
    //
    // Only noSuchInstance or noSuchObject can be stored
    // in the varbind itself.
    //

    // According to RFC 1905: noAccess is emitted when the
    // the access is denied because it is not in the MIB view...
    //
    else if (errorCode ==
             SnmpStatusException.noAccess)
        // noAccess => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // According to RFC 1905: (my interpretation because it is not
    // really clear) The specified variable name exists - but the
    // variable does not exists and cannot be created under the
    // present circumstances (probably because the request specifies
    // another variable/value which is incompatible, or because the
    // value of some other variable in the MIB prevents the creation)
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if (errorCode == SnmpStatusException.snmpRspInconsistentName)
        // inconsistentName => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // All the errors comprised between snmpRspWrongType and
    // snmpRspInconsistentValue concern values: so we're going
    // to assume the OID was correct, and reply with noSuchInstance.
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if ((errorCode >= SnmpStatusException.snmpRspWrongType) &&
             (errorCode <= SnmpStatusException.snmpRspInconsistentValue))
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // We're going to assume the OID was correct, and reply
    // with noSuchInstance.
    //
    else if (errorCode == SnmpStatusException.readOnly)
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // For all other errors but genErr, we're going to reply with
    // noSuchObject
    //
    else if (errorCode != SnmpStatusException.snmpRspAuthorizationError &&
             errorCode != SnmpStatusException.snmpRspGenErr)
        mappedErrorCode = SnmpStatusException.noSuchObject;

    // Only genErr will abort the GET and be returned as global
    // error.
    //
    return mappedErrorCode;

}
 
Example 13
Source File: SnmpMibGroup.java    From openjdk-8-source with GNU General Public License v2.0 4 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {

    int length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    final Object data = handlers.getUserData();

    if (depth >= length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noAccess);
    }

    long arc = oid[depth];

    if (isNestedArc(arc)) {
        // This arc leads to a subgroup: delegates the search to the
        // method defined in SnmpMibOid
        super.findHandlingNode(varbind,oid,depth,handlers);
    } else if (isTable(arc)) {
        // This arc leads to a table: forward the search to the table.

        // Gets the table
        SnmpMibTable table = getTable(arc);

        // Forward the search to the table
        table.findHandlingNode(varbind,oid,depth+1,handlers);

    } else {
        // If it's not a variable, throws an exception
        validateVarId(arc, data);

        // The trailing .0 is missing in the OID
        if (depth+2 > length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // There are too many arcs left in the OID (there should remain
        // a single trailing .0)
        if (depth+2 < length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // The last trailing arc is not .0
        if (oid[depth+1] != 0L) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // It's one of our variable, register this node.
        handlers.add(this,depth,varbind);
    }
}
 
Example 14
Source File: SnmpRequestTree.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
public static int mapGetException(int errorStatus, int version)
    throws SnmpStatusException {

    final int errorCode = errorStatus;
    if (version == SnmpDefinitions.snmpVersionOne)
        return errorCode;

    int mappedErrorCode = errorCode;

    // Now take care of V2 errorCodes that can be stored
    // in the varbind itself:
    if (errorCode ==
        SnmpStatusException.noSuchObject)
        // noSuchObject => noSuchObject
        mappedErrorCode = errorCode;

    else if (errorCode ==
             SnmpStatusException.noSuchInstance)
        // noSuchInstance => noSuchInstance
        mappedErrorCode = errorCode;

    // Now we're going to try to transform every other
    // global code in either noSuchInstance or noSuchObject,
    // so that the get can return a partial result.
    //
    // Only noSuchInstance or noSuchObject can be stored
    // in the varbind itself.
    //

    // According to RFC 1905: noAccess is emitted when the
    // the access is denied because it is not in the MIB view...
    //
    else if (errorCode ==
             SnmpStatusException.noAccess)
        // noAccess => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // According to RFC 1905: (my interpretation because it is not
    // really clear) The specified variable name exists - but the
    // variable does not exists and cannot be created under the
    // present circumstances (probably because the request specifies
    // another variable/value which is incompatible, or because the
    // value of some other variable in the MIB prevents the creation)
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if (errorCode == SnmpStatusException.snmpRspInconsistentName)
        // inconsistentName => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // All the errors comprised between snmpRspWrongType and
    // snmpRspInconsistentValue concern values: so we're going
    // to assume the OID was correct, and reply with noSuchInstance.
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if ((errorCode >= SnmpStatusException.snmpRspWrongType) &&
             (errorCode <= SnmpStatusException.snmpRspInconsistentValue))
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // We're going to assume the OID was correct, and reply
    // with noSuchInstance.
    //
    else if (errorCode == SnmpStatusException.readOnly)
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // For all other errors but genErr, we're going to reply with
    // noSuchObject
    //
    else if (errorCode != SnmpStatusException.snmpRspAuthorizationError &&
             errorCode != SnmpStatusException.snmpRspGenErr)
        mappedErrorCode = SnmpStatusException.noSuchObject;

    // Only genErr will abort the GET and be returned as global
    // error.
    //
    return mappedErrorCode;

}
 
Example 15
Source File: SnmpMibGroup.java    From jdk8u-dev-jdk with GNU General Public License v2.0 4 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {

    int length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    final Object data = handlers.getUserData();

    if (depth >= length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noAccess);
    }

    long arc = oid[depth];

    if (isNestedArc(arc)) {
        // This arc leads to a subgroup: delegates the search to the
        // method defined in SnmpMibOid
        super.findHandlingNode(varbind,oid,depth,handlers);
    } else if (isTable(arc)) {
        // This arc leads to a table: forward the search to the table.

        // Gets the table
        SnmpMibTable table = getTable(arc);

        // Forward the search to the table
        table.findHandlingNode(varbind,oid,depth+1,handlers);

    } else {
        // If it's not a variable, throws an exception
        validateVarId(arc, data);

        // The trailing .0 is missing in the OID
        if (depth+2 > length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // There are too many arcs left in the OID (there should remain
        // a single trailing .0)
        if (depth+2 < length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // The last trailing arc is not .0
        if (oid[depth+1] != 0L) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // It's one of our variable, register this node.
        handlers.add(this,depth,varbind);
    }
}
 
Example 16
Source File: SnmpRequestTree.java    From TencentKona-8 with GNU General Public License v2.0 4 votes vote down vote up
public static int mapGetException(int errorStatus, int version)
    throws SnmpStatusException {

    final int errorCode = errorStatus;
    if (version == SnmpDefinitions.snmpVersionOne)
        return errorCode;

    int mappedErrorCode = errorCode;

    // Now take care of V2 errorCodes that can be stored
    // in the varbind itself:
    if (errorCode ==
        SnmpStatusException.noSuchObject)
        // noSuchObject => noSuchObject
        mappedErrorCode = errorCode;

    else if (errorCode ==
             SnmpStatusException.noSuchInstance)
        // noSuchInstance => noSuchInstance
        mappedErrorCode = errorCode;

    // Now we're going to try to transform every other
    // global code in either noSuchInstance or noSuchObject,
    // so that the get can return a partial result.
    //
    // Only noSuchInstance or noSuchObject can be stored
    // in the varbind itself.
    //

    // According to RFC 1905: noAccess is emitted when the
    // the access is denied because it is not in the MIB view...
    //
    else if (errorCode ==
             SnmpStatusException.noAccess)
        // noAccess => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // According to RFC 1905: (my interpretation because it is not
    // really clear) The specified variable name exists - but the
    // variable does not exists and cannot be created under the
    // present circumstances (probably because the request specifies
    // another variable/value which is incompatible, or because the
    // value of some other variable in the MIB prevents the creation)
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if (errorCode == SnmpStatusException.snmpRspInconsistentName)
        // inconsistentName => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // All the errors comprised between snmpRspWrongType and
    // snmpRspInconsistentValue concern values: so we're going
    // to assume the OID was correct, and reply with noSuchInstance.
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if ((errorCode >= SnmpStatusException.snmpRspWrongType) &&
             (errorCode <= SnmpStatusException.snmpRspInconsistentValue))
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // We're going to assume the OID was correct, and reply
    // with noSuchInstance.
    //
    else if (errorCode == SnmpStatusException.readOnly)
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // For all other errors but genErr, we're going to reply with
    // noSuchObject
    //
    else if (errorCode != SnmpStatusException.snmpRspAuthorizationError &&
             errorCode != SnmpStatusException.snmpRspGenErr)
        mappedErrorCode = SnmpStatusException.noSuchObject;

    // Only genErr will abort the GET and be returned as global
    // error.
    //
    return mappedErrorCode;

}
 
Example 17
Source File: SnmpMibGroup.java    From jdk8u-jdk with GNU General Public License v2.0 4 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {

    int length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    final Object data = handlers.getUserData();

    if (depth >= length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noAccess);
    }

    long arc = oid[depth];

    if (isNestedArc(arc)) {
        // This arc leads to a subgroup: delegates the search to the
        // method defined in SnmpMibOid
        super.findHandlingNode(varbind,oid,depth,handlers);
    } else if (isTable(arc)) {
        // This arc leads to a table: forward the search to the table.

        // Gets the table
        SnmpMibTable table = getTable(arc);

        // Forward the search to the table
        table.findHandlingNode(varbind,oid,depth+1,handlers);

    } else {
        // If it's not a variable, throws an exception
        validateVarId(arc, data);

        // The trailing .0 is missing in the OID
        if (depth+2 > length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // There are too many arcs left in the OID (there should remain
        // a single trailing .0)
        if (depth+2 < length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // The last trailing arc is not .0
        if (oid[depth+1] != 0L) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // It's one of our variable, register this node.
        handlers.add(this,depth,varbind);
    }
}
 
Example 18
Source File: SnmpMibGroup.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
@Override
void findHandlingNode(SnmpVarBind varbind,
                      long[] oid, int depth,
                      SnmpRequestTree handlers)
    throws SnmpStatusException {

    int length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    final Object data = handlers.getUserData();

    if (depth >= length) {
        // Nothing is left... the oid is not valid
        throw new SnmpStatusException(SnmpStatusException.noAccess);
    }

    long arc = oid[depth];

    if (isNestedArc(arc)) {
        // This arc leads to a subgroup: delegates the search to the
        // method defined in SnmpMibOid
        super.findHandlingNode(varbind,oid,depth,handlers);
    } else if (isTable(arc)) {
        // This arc leads to a table: forward the search to the table.

        // Gets the table
        SnmpMibTable table = getTable(arc);

        // Forward the search to the table
        table.findHandlingNode(varbind,oid,depth+1,handlers);

    } else {
        // If it's not a variable, throws an exception
        validateVarId(arc, data);

        // The trailing .0 is missing in the OID
        if (depth+2 > length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // There are too many arcs left in the OID (there should remain
        // a single trailing .0)
        if (depth+2 < length) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // The last trailing arc is not .0
        if (oid[depth+1] != 0L) {
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        }

        // It's one of our variable, register this node.
        handlers.add(this,depth,varbind);
    }
}
 
Example 19
Source File: SnmpMibTable.java    From jdk1.8-source-analysis with Apache License 2.0 4 votes vote down vote up
@Override
final synchronized void findHandlingNode(SnmpVarBind varbind,
                                         long[] oid, int depth,
                                         SnmpRequestTree handlers)
    throws SnmpStatusException {

    final int  length = oid.length;

    if (handlers == null)
        throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);

    if (depth >= length)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    if (oid[depth] != nodeId)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    if (depth+2 >= length)
        throw new SnmpStatusException(SnmpStatusException.noAccess);

    // Checks that the oid is valid
    // validateOid(oid,depth);

    // Gets the part of the OID that identifies the entry
    final SnmpOid entryoid = new SnmpEntryOid(oid, depth+2);

    // Finds the entry: false means that the entry does not exists
    final Object data = handlers.getUserData();
    final boolean hasEntry = contains(entryoid, data);

    // Fails if the entry is not found and the table does not
    // not support creation.
    // We know that the entry does not exists if (isentry == false).
    if (!hasEntry) {
        if (!handlers.isCreationAllowed()) {
            // we're not doing a set
            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
        } else if (!isCreationEnabled())
            // we're doing a set but creation is disabled.
            throw new
                SnmpStatusException(SnmpStatusException.snmpRspNoAccess);
    }

    final long   var  = oid[depth+1];

    // Validate the entry id
    if (hasEntry) {
        // The entry already exists - validate the id
        validateVarEntryId(entryoid,var,data);
    }

    // Registers this node for the identified entry.
    //
    if (handlers.isSetRequest() && isRowStatus(entryoid,var,data))

        // We only try to identify the RowStatus for SET operations
        //
        handlers.add(this,depth,entryoid,varbind,(!hasEntry),varbind);

    else
        handlers.add(this,depth,entryoid,varbind,(!hasEntry));
}
 
Example 20
Source File: SnmpRequestTree.java    From jdk1.8-source-analysis with Apache License 2.0 4 votes vote down vote up
public static int mapGetException(int errorStatus, int version)
    throws SnmpStatusException {

    final int errorCode = errorStatus;
    if (version == SnmpDefinitions.snmpVersionOne)
        return errorCode;

    int mappedErrorCode = errorCode;

    // Now take care of V2 errorCodes that can be stored
    // in the varbind itself:
    if (errorCode ==
        SnmpStatusException.noSuchObject)
        // noSuchObject => noSuchObject
        mappedErrorCode = errorCode;

    else if (errorCode ==
             SnmpStatusException.noSuchInstance)
        // noSuchInstance => noSuchInstance
        mappedErrorCode = errorCode;

    // Now we're going to try to transform every other
    // global code in either noSuchInstance or noSuchObject,
    // so that the get can return a partial result.
    //
    // Only noSuchInstance or noSuchObject can be stored
    // in the varbind itself.
    //

    // According to RFC 1905: noAccess is emitted when the
    // the access is denied because it is not in the MIB view...
    //
    else if (errorCode ==
             SnmpStatusException.noAccess)
        // noAccess => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // According to RFC 1905: (my interpretation because it is not
    // really clear) The specified variable name exists - but the
    // variable does not exists and cannot be created under the
    // present circumstances (probably because the request specifies
    // another variable/value which is incompatible, or because the
    // value of some other variable in the MIB prevents the creation)
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if (errorCode == SnmpStatusException.snmpRspInconsistentName)
        // inconsistentName => noSuchInstance
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // All the errors comprised between snmpRspWrongType and
    // snmpRspInconsistentValue concern values: so we're going
    // to assume the OID was correct, and reply with noSuchInstance.
    //
    // Note that this error should never be raised in a GET context
    // but who knows?
    //
    else if ((errorCode >= SnmpStatusException.snmpRspWrongType) &&
             (errorCode <= SnmpStatusException.snmpRspInconsistentValue))
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // We're going to assume the OID was correct, and reply
    // with noSuchInstance.
    //
    else if (errorCode == SnmpStatusException.readOnly)
        mappedErrorCode = SnmpStatusException.noSuchInstance;

    // For all other errors but genErr, we're going to reply with
    // noSuchObject
    //
    else if (errorCode != SnmpStatusException.snmpRspAuthorizationError &&
             errorCode != SnmpStatusException.snmpRspGenErr)
        mappedErrorCode = SnmpStatusException.noSuchObject;

    // Only genErr will abort the GET and be returned as global
    // error.
    //
    return mappedErrorCode;

}