mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-14 12:25:21 +00:00
Merge
This commit is contained in:
commit
38bcfd05a2
@ -131,6 +131,7 @@ CORE_PKGS = \
|
||||
java.util.concurrent \
|
||||
java.util.concurrent.atomic \
|
||||
java.util.concurrent.locks \
|
||||
java.util.function \
|
||||
java.util.jar \
|
||||
java.util.logging \
|
||||
java.util.prefs \
|
||||
|
||||
@ -147,6 +147,7 @@ JAVA_JAVA_java = \
|
||||
java/lang/ref/PhantomReference.java \
|
||||
java/lang/ref/ReferenceQueue.java \
|
||||
java/lang/ref/Finalizer.java \
|
||||
java/util/Base64.java \
|
||||
java/util/BitSet.java \
|
||||
java/util/Calendar.java \
|
||||
java/util/GregorianCalendar.java \
|
||||
|
||||
@ -37,6 +37,8 @@ SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
|
||||
JAVAC_MAX_WARNINGS=true
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
AUTO_FILES_JAVA_DIRS = java/util/function
|
||||
|
||||
# windows compiler flags
|
||||
ifeq ($(PLATFORM),windows)
|
||||
OTHER_CFLAGS =
|
||||
|
||||
@ -28,10 +28,6 @@ package com.sun.jmx.snmp;
|
||||
import java.io.Serializable;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import com.sun.jmx.snmp.SnmpValue;
|
||||
import com.sun.jmx.snmp.SnmpInt;
|
||||
|
||||
import com.sun.jmx.snmp.Enumerated;
|
||||
|
||||
/**
|
||||
* This class is an internal class which is used to represent RowStatus
|
||||
@ -263,30 +259,30 @@ public class EnumRowStatus extends Enumerated implements Serializable {
|
||||
|
||||
// Documented in Enumerated
|
||||
//
|
||||
protected Hashtable getIntTable() {
|
||||
@Override
|
||||
protected Hashtable<Integer, String> getIntTable() {
|
||||
return EnumRowStatus.getRSIntTable();
|
||||
}
|
||||
|
||||
// Documented in Enumerated
|
||||
//
|
||||
protected Hashtable getStringTable() {
|
||||
@Override
|
||||
protected Hashtable<String, Integer> getStringTable() {
|
||||
return EnumRowStatus.getRSStringTable();
|
||||
}
|
||||
|
||||
static final Hashtable getRSIntTable() {
|
||||
static Hashtable<Integer, String> getRSIntTable() {
|
||||
return intTable ;
|
||||
}
|
||||
|
||||
static final Hashtable getRSStringTable() {
|
||||
static Hashtable<String, Integer> getRSStringTable() {
|
||||
return stringTable ;
|
||||
}
|
||||
|
||||
// Initialize the mapping tables.
|
||||
//
|
||||
final static Hashtable<Integer, String> intTable =
|
||||
new Hashtable<Integer, String>();
|
||||
final static Hashtable<String, Integer> stringTable =
|
||||
new Hashtable<String, Integer>();
|
||||
final static Hashtable<Integer, String> intTable = new Hashtable<>();
|
||||
final static Hashtable<String, Integer> stringTable = new Hashtable<>();
|
||||
static {
|
||||
intTable.put(new Integer(0), "unspecified");
|
||||
intTable.put(new Integer(3), "notReady");
|
||||
|
||||
@ -54,9 +54,9 @@ abstract public class Enumerated implements Serializable {
|
||||
* @exception IllegalArgumentException One of the arguments passed to the method is illegal or inappropriate.
|
||||
*/
|
||||
public Enumerated() throws IllegalArgumentException {
|
||||
Enumeration e =getIntTable().keys() ;
|
||||
Enumeration<Integer> e =getIntTable().keys();
|
||||
if (e.hasMoreElements()) {
|
||||
value = ((Integer)e.nextElement()).intValue() ;
|
||||
value = e.nextElement().intValue() ;
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException() ;
|
||||
@ -100,7 +100,7 @@ abstract public class Enumerated implements Serializable {
|
||||
* to the method is illegal or inappropriate.
|
||||
*/
|
||||
public Enumerated(String valueString) throws IllegalArgumentException {
|
||||
Integer index = (Integer)getStringTable().get(valueString) ;
|
||||
Integer index = getStringTable().get(valueString) ;
|
||||
if (index == null) {
|
||||
throw new IllegalArgumentException() ;
|
||||
}
|
||||
@ -127,7 +127,7 @@ abstract public class Enumerated implements Serializable {
|
||||
* @return An enumeration of Integer instances
|
||||
*/
|
||||
|
||||
public Enumeration valueIndexes() {
|
||||
public Enumeration<Integer> valueIndexes() {
|
||||
return getIntTable().keys() ;
|
||||
}
|
||||
|
||||
@ -138,7 +138,7 @@ abstract public class Enumerated implements Serializable {
|
||||
* @return An enumeration of String instances
|
||||
*/
|
||||
|
||||
public Enumeration valueStrings() {
|
||||
public Enumeration<String> valueStrings() {
|
||||
return getStringTable().keys() ;
|
||||
}
|
||||
|
||||
@ -153,6 +153,7 @@ abstract public class Enumerated implements Serializable {
|
||||
*
|
||||
* @return True if this and obj are the same; false otherwise
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
return ((obj != null) &&
|
||||
@ -166,6 +167,7 @@ abstract public class Enumerated implements Serializable {
|
||||
*
|
||||
* @return A hash code value for this object.
|
||||
*/
|
||||
@Override
|
||||
public int hashCode() {
|
||||
String hashString = getClass().getName() + String.valueOf(value) ;
|
||||
return hashString.hashCode() ;
|
||||
@ -177,9 +179,9 @@ abstract public class Enumerated implements Serializable {
|
||||
*
|
||||
* @return The string for for this object.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return (String)getIntTable().get(new Integer(value)) ;
|
||||
return getIntTable().get(new Integer(value)) ;
|
||||
}
|
||||
|
||||
|
||||
@ -193,7 +195,7 @@ abstract public class Enumerated implements Serializable {
|
||||
* @return An hashtable for read-only purpose
|
||||
*/
|
||||
|
||||
protected abstract Hashtable getIntTable() ;
|
||||
protected abstract Hashtable<Integer,String> getIntTable() ;
|
||||
|
||||
|
||||
|
||||
@ -207,12 +209,12 @@ abstract public class Enumerated implements Serializable {
|
||||
* @return An hashtable for read-only purpose
|
||||
*/
|
||||
|
||||
protected abstract Hashtable getStringTable() ;
|
||||
protected abstract Hashtable<String,Integer> getStringTable() ;
|
||||
|
||||
|
||||
/**
|
||||
* This variable keeps the integer form of the enumerated.
|
||||
* The string form is retreived using getIntTable().
|
||||
* The string form is retrieved using getIntTable().
|
||||
*/
|
||||
protected int value ;
|
||||
|
||||
|
||||
@ -66,7 +66,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
*/
|
||||
public AclImpl (PrincipalImpl owner, String name) {
|
||||
super(owner);
|
||||
entryList = new Vector<AclEntry>();
|
||||
entryList = new Vector<>();
|
||||
aclName = name;
|
||||
}
|
||||
|
||||
@ -81,6 +81,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* of this ACL.
|
||||
* @see java.security.Principal
|
||||
*/
|
||||
@Override
|
||||
public void setName(Principal caller, String name)
|
||||
throws NotOwnerException {
|
||||
if (!isOwner(caller))
|
||||
@ -93,6 +94,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
*
|
||||
* @return the name of this ACL.
|
||||
*/
|
||||
@Override
|
||||
public String getName(){
|
||||
return aclName;
|
||||
}
|
||||
@ -113,6 +115,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* this ACL.
|
||||
* @see java.security.Principal
|
||||
*/
|
||||
@Override
|
||||
public boolean addEntry(Principal caller, AclEntry entry)
|
||||
throws NotOwnerException {
|
||||
if (!isOwner(caller))
|
||||
@ -144,6 +147,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* @see java.security.Principal
|
||||
* @see java.security.acl.AclEntry
|
||||
*/
|
||||
@Override
|
||||
public boolean removeEntry(Principal caller, AclEntry entry)
|
||||
throws NotOwnerException {
|
||||
if (!isOwner(caller))
|
||||
@ -185,8 +189,9 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* is allowed.
|
||||
* @see java.security.Principal
|
||||
*/
|
||||
@Override
|
||||
public Enumeration<Permission> getPermissions(Principal user){
|
||||
Vector<Permission> empty = new Vector<Permission>();
|
||||
Vector<Permission> empty = new Vector<>();
|
||||
for (Enumeration<AclEntry> e = entryList.elements();e.hasMoreElements();){
|
||||
AclEntry ent = e.nextElement();
|
||||
if (ent.getPrincipal().equals(user))
|
||||
@ -201,6 +206,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
*
|
||||
* @return an enumeration of the entries in this ACL.
|
||||
*/
|
||||
@Override
|
||||
public Enumeration<AclEntry> entries(){
|
||||
return entryList.elements();
|
||||
}
|
||||
@ -221,10 +227,11 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* @see java.security.Principal
|
||||
* @see java.security.Permission
|
||||
*/
|
||||
@Override
|
||||
public boolean checkPermission(Principal user,
|
||||
java.security.acl.Permission perm) {
|
||||
for (Enumeration e = entryList.elements();e.hasMoreElements();){
|
||||
AclEntry ent = (AclEntry) e.nextElement();
|
||||
for (Enumeration<AclEntry> e = entryList.elements();e.hasMoreElements();){
|
||||
AclEntry ent = e.nextElement();
|
||||
if (ent.getPrincipal().equals(user))
|
||||
if (ent.checkPermission(perm)) return true;
|
||||
}
|
||||
@ -250,7 +257,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
*/
|
||||
public boolean checkPermission(Principal user, String community,
|
||||
java.security.acl.Permission perm) {
|
||||
for (Enumeration e = entryList.elements();e.hasMoreElements();){
|
||||
for (Enumeration<AclEntry> e = entryList.elements();e.hasMoreElements();){
|
||||
AclEntryImpl ent = (AclEntryImpl) e.nextElement();
|
||||
if (ent.getPrincipal().equals(user))
|
||||
if (ent.checkPermission(perm) && ent.checkCommunity(community)) return true;
|
||||
@ -269,7 +276,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
* @see java.security.Permission
|
||||
*/
|
||||
public boolean checkCommunity(String community) {
|
||||
for (Enumeration e = entryList.elements();e.hasMoreElements();){
|
||||
for (Enumeration<AclEntry> e = entryList.elements();e.hasMoreElements();){
|
||||
AclEntryImpl ent = (AclEntryImpl) e.nextElement();
|
||||
if (ent.checkCommunity(community)) return true;
|
||||
}
|
||||
@ -281,6 +288,7 @@ class AclImpl extends OwnerImpl implements Acl, Serializable {
|
||||
*
|
||||
* @return a string representation of the ACL contents.
|
||||
*/
|
||||
@Override
|
||||
public String toString(){
|
||||
return ("AclImpl: "+ getName());
|
||||
}
|
||||
|
||||
@ -28,7 +28,9 @@
|
||||
|
||||
package com.sun.jmx.snmp.IPAcl;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
|
||||
class JDMAclBlock extends SimpleNode {
|
||||
JDMAclBlock(int id) {
|
||||
@ -51,11 +53,13 @@ class JDMAclBlock extends SimpleNode {
|
||||
* Do no need to go through this part of the tree for
|
||||
* building TrapEntry.
|
||||
*/
|
||||
public void buildTrapEntries(Hashtable dest) {}
|
||||
@Override
|
||||
public void buildTrapEntries(Hashtable<InetAddress, Vector<String>> dest) {}
|
||||
|
||||
/**
|
||||
* Do no need to go through this part of the tree for
|
||||
* building InformEntry.
|
||||
*/
|
||||
public void buildInformEntries(Hashtable dest) {}
|
||||
@Override
|
||||
public void buildInformEntries(Hashtable<InetAddress, Vector<String>> dest) {}
|
||||
}
|
||||
|
||||
@ -27,7 +27,9 @@
|
||||
|
||||
package com.sun.jmx.snmp.IPAcl;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
|
||||
class JDMInformBlock extends SimpleNode {
|
||||
JDMInformBlock(int id) {
|
||||
@ -50,11 +52,13 @@ class JDMInformBlock extends SimpleNode {
|
||||
* Do no need to go through this part of the tree for
|
||||
* building AclEntry.
|
||||
*/
|
||||
@Override
|
||||
public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {}
|
||||
|
||||
/**
|
||||
* Do no need to go through this part of the tree for
|
||||
* building TrapEntry.
|
||||
*/
|
||||
public void buildTrapEntries(Hashtable dest) {}
|
||||
@Override
|
||||
public void buildTrapEntries(Hashtable<InetAddress, Vector<String>> dest) {}
|
||||
}
|
||||
|
||||
@ -28,7 +28,9 @@
|
||||
|
||||
package com.sun.jmx.snmp.IPAcl;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
|
||||
class JDMTrapBlock extends SimpleNode {
|
||||
JDMTrapBlock(int id) {
|
||||
@ -51,11 +53,13 @@ class JDMTrapBlock extends SimpleNode {
|
||||
* Do no need to go through this part of the tree for
|
||||
* building AclEntry.
|
||||
*/
|
||||
@Override
|
||||
public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {}
|
||||
|
||||
/**
|
||||
* Do no need to go through this part of the tree for
|
||||
* building InformEntry.
|
||||
*/
|
||||
public void buildInformEntries(Hashtable dest) {}
|
||||
@Override
|
||||
public void buildInformEntries(Hashtable<InetAddress, Vector<String>> dest) {}
|
||||
}
|
||||
|
||||
@ -27,18 +27,17 @@
|
||||
|
||||
package com.sun.jmx.snmp.IPAcl;
|
||||
|
||||
@SuppressWarnings("unchecked") // generated code, not worth fixing
|
||||
class JJTParserState {
|
||||
private java.util.Stack nodes;
|
||||
private java.util.Stack marks;
|
||||
private java.util.Stack<Node> nodes;
|
||||
private java.util.Stack<Integer> marks;
|
||||
|
||||
private int sp; // number of nodes on stack
|
||||
private int mk; // current mark
|
||||
private boolean node_created;
|
||||
|
||||
JJTParserState() {
|
||||
nodes = new java.util.Stack();
|
||||
marks = new java.util.Stack();
|
||||
nodes = new java.util.Stack<>();
|
||||
marks = new java.util.Stack<>();
|
||||
sp = 0;
|
||||
mk = 0;
|
||||
}
|
||||
@ -62,7 +61,7 @@ class JJTParserState {
|
||||
/* Returns the root node of the AST. It only makes sense to call
|
||||
this after a successful parse. */
|
||||
Node rootNode() {
|
||||
return (Node)nodes.elementAt(0);
|
||||
return nodes.elementAt(0);
|
||||
}
|
||||
|
||||
/* Pushes a node on to the stack. */
|
||||
@ -75,14 +74,14 @@ class JJTParserState {
|
||||
stack. */
|
||||
Node popNode() {
|
||||
if (--sp < mk) {
|
||||
mk = ((Integer)marks.pop()).intValue();
|
||||
mk = marks.pop().intValue();
|
||||
}
|
||||
return (Node)nodes.pop();
|
||||
return nodes.pop();
|
||||
}
|
||||
|
||||
/* Returns the node currently on the top of the stack. */
|
||||
Node peekNode() {
|
||||
return (Node)nodes.peek();
|
||||
return nodes.peek();
|
||||
}
|
||||
|
||||
/* Returns the number of children on the stack in the current node
|
||||
@ -96,7 +95,7 @@ class JJTParserState {
|
||||
while (sp > mk) {
|
||||
popNode();
|
||||
}
|
||||
mk = ((Integer)marks.pop()).intValue();
|
||||
mk = marks.pop().intValue();
|
||||
}
|
||||
|
||||
|
||||
@ -112,7 +111,7 @@ class JJTParserState {
|
||||
made the children of the definite node. Then the definite node
|
||||
is pushed on to the stack. */
|
||||
void closeNodeScope(Node n, int num) {
|
||||
mk = ((Integer)marks.pop()).intValue();
|
||||
mk = marks.pop().intValue();
|
||||
while (num-- > 0) {
|
||||
Node c = popNode();
|
||||
c.jjtSetParent(n);
|
||||
@ -132,7 +131,7 @@ class JJTParserState {
|
||||
void closeNodeScope(Node n, boolean condition) {
|
||||
if (condition) {
|
||||
int a = nodeArity();
|
||||
mk = ((Integer)marks.pop()).intValue();
|
||||
mk = marks.pop().intValue();
|
||||
while (a-- > 0) {
|
||||
Node c = popNode();
|
||||
c.jjtSetParent(n);
|
||||
@ -142,7 +141,7 @@ class JJTParserState {
|
||||
pushNode(n);
|
||||
node_created = true;
|
||||
} else {
|
||||
mk = ((Integer)marks.pop()).intValue();
|
||||
mk = marks.pop().intValue();
|
||||
node_created = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1168,7 +1168,7 @@ jjtree.openNodeScope(jjtn000);Token t;
|
||||
return (jj_ntk = jj_nt.kind);
|
||||
}
|
||||
|
||||
private java.util.Vector jj_expentries = new java.util.Vector();
|
||||
private java.util.Vector<int[]> jj_expentries = new java.util.Vector<>();
|
||||
private int[] jj_expentry;
|
||||
private int jj_kind = -1;
|
||||
private int[] jj_lasttokens = new int[100];
|
||||
@ -1184,8 +1184,8 @@ jjtree.openNodeScope(jjtn000);Token t;
|
||||
jj_expentry[i] = jj_lasttokens[i];
|
||||
}
|
||||
boolean exists = false;
|
||||
for (java.util.Enumeration enumv = jj_expentries.elements(); enumv.hasMoreElements();) {
|
||||
int[] oldentry = (int[])(enumv.nextElement());
|
||||
for (java.util.Enumeration<int[]> enumv = jj_expentries.elements(); enumv.hasMoreElements();) {
|
||||
int[] oldentry = enumv.nextElement();
|
||||
if (oldentry.length == jj_expentry.length) {
|
||||
exists = true;
|
||||
for (int i = 0; i < jj_expentry.length; i++) {
|
||||
@ -1236,7 +1236,7 @@ jjtree.openNodeScope(jjtn000);Token t;
|
||||
jj_add_error_token(0, 0);
|
||||
int[][] exptokseq = new int[jj_expentries.size()][];
|
||||
for (int i = 0; i < jj_expentries.size(); i++) {
|
||||
exptokseq[i] = (int[])jj_expentries.elementAt(i);
|
||||
exptokseq[i] = jj_expentries.elementAt(i);
|
||||
}
|
||||
return new ParseException(token, exptokseq, tokenImage);
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
*
|
||||
* @return An enumeration of the entries in this ACL.
|
||||
*/
|
||||
public Enumeration entries() {
|
||||
public Enumeration<AclEntry> entries() {
|
||||
return acl.entries();
|
||||
}
|
||||
|
||||
@ -137,11 +137,11 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
public Enumeration<String> communities() {
|
||||
HashSet<String> set = new HashSet<String>();
|
||||
Vector<String> res = new Vector<String>();
|
||||
for (Enumeration e = acl.entries() ; e.hasMoreElements() ;) {
|
||||
for (Enumeration<AclEntry> e = acl.entries() ; e.hasMoreElements() ;) {
|
||||
AclEntryImpl entry = (AclEntryImpl) e.nextElement();
|
||||
for (Enumeration cs = entry.communities();
|
||||
for (Enumeration<String> cs = entry.communities();
|
||||
cs.hasMoreElements() ;) {
|
||||
set.add((String) cs.nextElement());
|
||||
set.add(cs.nextElement());
|
||||
}
|
||||
}
|
||||
String[] objs = set.toArray(new String[0]);
|
||||
@ -316,7 +316,7 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
*
|
||||
* @return An enumeration of the trap destinations (enumeration of <CODE>InetAddress</CODE>).
|
||||
*/
|
||||
public Enumeration getTrapDestinations() {
|
||||
public Enumeration<InetAddress> getTrapDestinations() {
|
||||
return trapDestList.keys();
|
||||
}
|
||||
|
||||
@ -327,16 +327,16 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
*
|
||||
* @return An enumeration of trap communities for a given host (enumeration of <CODE>String</CODE>).
|
||||
*/
|
||||
public Enumeration getTrapCommunities(InetAddress i) {
|
||||
Vector list = null;
|
||||
if ((list = (Vector)trapDestList.get(i)) != null ) {
|
||||
public Enumeration<String> getTrapCommunities(InetAddress i) {
|
||||
Vector<String> list = null;
|
||||
if ((list = trapDestList.get(i)) != null ) {
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"getTrapCommunities", "["+i.toString()+"] is in list");
|
||||
}
|
||||
return list.elements();
|
||||
} else {
|
||||
list = new Vector();
|
||||
list = new Vector<>();
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"getTrapCommunities", "["+i.toString()+"] is not in list");
|
||||
@ -350,7 +350,7 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
*
|
||||
* @return An enumeration of the inform destinations (enumeration of <CODE>InetAddress</CODE>).
|
||||
*/
|
||||
public Enumeration getInformDestinations() {
|
||||
public Enumeration<InetAddress> getInformDestinations() {
|
||||
return informDestList.keys();
|
||||
}
|
||||
|
||||
@ -361,16 +361,16 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
*
|
||||
* @return An enumeration of inform communities for a given host (enumeration of <CODE>String</CODE>).
|
||||
*/
|
||||
public Enumeration getInformCommunities(InetAddress i) {
|
||||
Vector list = null;
|
||||
if ((list = (Vector)informDestList.get(i)) != null ) {
|
||||
public Enumeration<String> getInformCommunities(InetAddress i) {
|
||||
Vector<String> list = null;
|
||||
if ((list = informDestList.get(i)) != null ) {
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"getInformCommunities", "["+i.toString()+"] is in list");
|
||||
}
|
||||
return list.elements();
|
||||
} else {
|
||||
list = new Vector();
|
||||
list = new Vector<>();
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"getInformCommunities", "["+i.toString()+"] is not in list");
|
||||
@ -426,15 +426,15 @@ public class SnmpAcl implements InetAddressAcl, Serializable {
|
||||
throw new IllegalArgumentException(err.getMessage());
|
||||
}
|
||||
|
||||
for(Enumeration e = acl.entries(); e.hasMoreElements();) {
|
||||
for(Enumeration<AclEntry> e = acl.entries(); e.hasMoreElements();) {
|
||||
AclEntryImpl aa = (AclEntryImpl) e.nextElement();
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"readAuthorizedListFile",
|
||||
"===> " + aa.getPrincipal().toString());
|
||||
}
|
||||
for (Enumeration eee = aa.permissions();eee.hasMoreElements();) {
|
||||
java.security.acl.Permission perm = (java.security.acl.Permission)eee.nextElement();
|
||||
for (Enumeration<java.security.acl.Permission> eee = aa.permissions();eee.hasMoreElements();) {
|
||||
java.security.acl.Permission perm = eee.nextElement();
|
||||
if (SNMP_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
|
||||
"readAuthorizedListFile", "perm = " + perm);
|
||||
|
||||
@ -99,7 +99,7 @@ public interface InetAddressAcl {
|
||||
*
|
||||
* @return An enumeration of the trap destinations (enumeration of <CODE>InetAddress</CODE>).
|
||||
*/
|
||||
public Enumeration getTrapDestinations();
|
||||
public Enumeration<InetAddress> getTrapDestinations();
|
||||
|
||||
/**
|
||||
* Returns an enumeration of trap communities for a given host.
|
||||
@ -108,14 +108,14 @@ public interface InetAddressAcl {
|
||||
*
|
||||
* @return An enumeration of trap communities for a given host (enumeration of <CODE>String</CODE>).
|
||||
*/
|
||||
public Enumeration getTrapCommunities(InetAddress address);
|
||||
public Enumeration<String> getTrapCommunities(InetAddress address);
|
||||
|
||||
/**
|
||||
* Returns an enumeration of inform destinations.
|
||||
*
|
||||
* @return An enumeration of the inform destinations (enumeration of <CODE>InetAddress</CODE>).
|
||||
*/
|
||||
public Enumeration getInformDestinations();
|
||||
public Enumeration<InetAddress> getInformDestinations();
|
||||
|
||||
/**
|
||||
* Returns an enumeration of inform communities for a given host.
|
||||
@ -124,5 +124,5 @@ public interface InetAddressAcl {
|
||||
*
|
||||
* @return An enumeration of inform communities for a given host (enumeration of <CODE>String</CODE>).
|
||||
*/
|
||||
public Enumeration getInformCommunities(InetAddress address);
|
||||
public Enumeration<String> getInformCommunities(InetAddress address);
|
||||
}
|
||||
|
||||
@ -59,6 +59,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception IllegalAccessException The MIB cannot be initialized.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void init() throws IllegalAccessException {
|
||||
}
|
||||
|
||||
@ -74,6 +75,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception java.lang.Exception
|
||||
*/
|
||||
|
||||
@Override
|
||||
public ObjectName preRegister(MBeanServer server, ObjectName name)
|
||||
throws Exception {
|
||||
return name;
|
||||
@ -87,6 +89,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @return The returned oid is null.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public long[] getRootOid() {
|
||||
return null;
|
||||
}
|
||||
@ -99,6 +102,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void get(SnmpMibRequest inRequest) throws SnmpStatusException {
|
||||
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
|
||||
@ -108,9 +112,9 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
|
||||
throw new SnmpStatusException(SnmpStatusException.noSuchName);
|
||||
|
||||
Enumeration l = inRequest.getElements();
|
||||
Enumeration<SnmpVarBind> l = inRequest.getElements();
|
||||
while(l.hasMoreElements()) {
|
||||
SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
|
||||
SnmpVarBind varbind = l.nextElement();
|
||||
varbind.setNoSuchObject();
|
||||
}
|
||||
}
|
||||
@ -128,6 +132,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* cannot be performed.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void check(SnmpMibRequest inRequest) throws SnmpStatusException {
|
||||
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
|
||||
@ -145,6 +150,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void set(SnmpMibRequest inRequest) throws SnmpStatusException {
|
||||
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
|
||||
@ -162,6 +168,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void getNext(SnmpMibRequest inRequest) throws SnmpStatusException {
|
||||
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
|
||||
@ -171,9 +178,9 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
|
||||
throw new SnmpStatusException(SnmpStatusException.noSuchName);
|
||||
|
||||
Enumeration l = inRequest.getElements();
|
||||
Enumeration<SnmpVarBind> l = inRequest.getElements();
|
||||
while(l.hasMoreElements()) {
|
||||
SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
|
||||
SnmpVarBind varbind = l.nextElement();
|
||||
varbind.setEndOfMibView();
|
||||
}
|
||||
}
|
||||
@ -186,6 +193,7 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void getBulk(SnmpMibRequest inRequest, int nonRepeat, int maxRepeat)
|
||||
throws SnmpStatusException {
|
||||
|
||||
@ -196,9 +204,9 @@ public class SnmpErrorHandlerAgent extends SnmpMibAgent
|
||||
if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
|
||||
throw new SnmpStatusException(SnmpDefinitions.snmpRspGenErr, 0);
|
||||
|
||||
Enumeration l = inRequest.getElements();
|
||||
Enumeration<SnmpVarBind> l = inRequest.getElements();
|
||||
while(l.hasMoreElements()) {
|
||||
SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
|
||||
SnmpVarBind varbind = l.nextElement();
|
||||
varbind.setEndOfMibView();
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,7 +28,6 @@ package com.sun.jmx.snmp.agent;
|
||||
|
||||
// java imports
|
||||
//
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
|
||||
@ -149,8 +148,8 @@ public class SnmpGenericObjectServer {
|
||||
final long[] idList = new long[size];
|
||||
int i = 0;
|
||||
|
||||
for (Enumeration e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= e.nextElement();
|
||||
try {
|
||||
final long id = var.oid.getOidArc(depth);
|
||||
nameList[i] = meta.getAttributeName(id);
|
||||
@ -190,7 +189,7 @@ public class SnmpGenericObjectServer {
|
||||
}
|
||||
|
||||
|
||||
final Iterator it = result.iterator();
|
||||
final Iterator<?> it = result.iterator();
|
||||
|
||||
for (int j=0; j < i; j++) {
|
||||
if (!it.hasNext()) {
|
||||
@ -312,8 +311,8 @@ public class SnmpGenericObjectServer {
|
||||
final long[] idList = new long[size];
|
||||
int i = 0;
|
||||
|
||||
for (Enumeration e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= e.nextElement();
|
||||
try {
|
||||
final long id = var.oid.getOidArc(depth);
|
||||
final String attname = meta.getAttributeName(id);
|
||||
@ -330,7 +329,7 @@ public class SnmpGenericObjectServer {
|
||||
}
|
||||
}
|
||||
|
||||
AttributeList result = null;
|
||||
AttributeList result;
|
||||
int errorCode = SnmpStatusException.noAccess;
|
||||
|
||||
try {
|
||||
@ -345,7 +344,7 @@ public class SnmpGenericObjectServer {
|
||||
result = new AttributeList();
|
||||
}
|
||||
|
||||
final Iterator it = result.iterator();
|
||||
final Iterator<?> it = result.iterator();
|
||||
|
||||
for (int j=0; j < i; j++) {
|
||||
if (!it.hasNext()) {
|
||||
@ -469,8 +468,8 @@ public class SnmpGenericObjectServer {
|
||||
|
||||
final Object data = req.getUserData();
|
||||
|
||||
for (Enumeration e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e=req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= e.nextElement();
|
||||
try {
|
||||
final long id = var.oid.getOidArc(depth);
|
||||
// call meta.check() here, and meta.check will call check()
|
||||
|
||||
@ -164,11 +164,12 @@ public class SnmpIndex implements Serializable {
|
||||
*
|
||||
* @return A string representation of the index.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer msg= new StringBuffer();
|
||||
for(Enumeration e= oids.elements(); e.hasMoreElements(); ) {
|
||||
SnmpOid val= (SnmpOid) e.nextElement();
|
||||
msg.append( "//" + val.toString());
|
||||
final StringBuilder msg= new StringBuilder();
|
||||
for(Enumeration<SnmpOid> e= oids.elements(); e.hasMoreElements(); ) {
|
||||
SnmpOid val= e.nextElement();
|
||||
msg.append("//").append( val.toString());
|
||||
}
|
||||
return msg.toString();
|
||||
}
|
||||
@ -180,7 +181,7 @@ public class SnmpIndex implements Serializable {
|
||||
* The list of OIDs.
|
||||
* @serial
|
||||
*/
|
||||
private Vector<SnmpOid> oids = new Vector<SnmpOid>();
|
||||
private Vector<SnmpOid> oids = new Vector<>();
|
||||
|
||||
/**
|
||||
* The number of elements in the index.
|
||||
|
||||
@ -42,10 +42,6 @@ import com.sun.jmx.snmp.SnmpOid;
|
||||
import com.sun.jmx.snmp.SnmpVarBind;
|
||||
import com.sun.jmx.snmp.SnmpDefinitions;
|
||||
import com.sun.jmx.snmp.SnmpStatusException;
|
||||
import com.sun.jmx.snmp.SnmpEngine;
|
||||
import com.sun.jmx.snmp.SnmpUnknownModelException;
|
||||
import com.sun.jmx.snmp.internal.SnmpAccessControlModel;
|
||||
import com.sun.jmx.snmp.internal.SnmpEngineImpl;
|
||||
|
||||
/**
|
||||
* Abstract class for representing an SNMP MIB.
|
||||
@ -241,6 +237,7 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Implements the method defined in SnmpMibAgent. See SnmpMibAgent
|
||||
// for java-doc
|
||||
//
|
||||
@Override
|
||||
public void get(SnmpMibRequest req) throws SnmpStatusException {
|
||||
|
||||
// Builds the request tree: creation is not allowed, operation
|
||||
@ -259,8 +256,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
|
||||
// For each sub-request stored in the request-tree, invoke the
|
||||
// get() method.
|
||||
for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = (SnmpRequestTree.Handler) eh.nextElement();
|
||||
for (Enumeration<SnmpRequestTree.Handler> eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = eh.nextElement();
|
||||
|
||||
// Gets the Meta node. It can be either a Group Meta or a
|
||||
// Table Meta.
|
||||
@ -270,11 +267,11 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Gets the depth of the Meta node in the OID tree
|
||||
final int depth = handlers.getOidDepth(h);
|
||||
|
||||
for (Enumeration rqs=handlers.getSubRequests(h);
|
||||
for (Enumeration<SnmpMibSubRequest> rqs=handlers.getSubRequests(h);
|
||||
rqs.hasMoreElements();) {
|
||||
|
||||
// Invoke the get() operation.
|
||||
meta.get((SnmpMibSubRequest)rqs.nextElement(),depth);
|
||||
meta.get(rqs.nextElement(),depth);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -286,6 +283,7 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Implements the method defined in SnmpMibAgent. See SnmpMibAgent
|
||||
// for java-doc
|
||||
//
|
||||
@Override
|
||||
public void set(SnmpMibRequest req) throws SnmpStatusException {
|
||||
|
||||
SnmpRequestTree handlers = null;
|
||||
@ -307,8 +305,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
handlers.switchCreationFlag(false);
|
||||
handlers.setPduType(reqType);
|
||||
|
||||
SnmpRequestTree.Handler h = null;
|
||||
SnmpMibNode meta = null;
|
||||
SnmpRequestTree.Handler h;
|
||||
SnmpMibNode meta;
|
||||
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
|
||||
@ -317,8 +315,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
|
||||
// For each sub-request stored in the request-tree, invoke the
|
||||
// get() method.
|
||||
for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = (SnmpRequestTree.Handler) eh.nextElement();
|
||||
for (Enumeration<SnmpRequestTree.Handler> eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = eh.nextElement();
|
||||
|
||||
// Gets the Meta node. It can be either a Group Meta or a
|
||||
// Table Meta.
|
||||
@ -328,11 +326,11 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Gets the depth of the Meta node in the OID tree
|
||||
final int depth = handlers.getOidDepth(h);
|
||||
|
||||
for (Enumeration rqs=handlers.getSubRequests(h);
|
||||
for (Enumeration<SnmpMibSubRequest> rqs=handlers.getSubRequests(h);
|
||||
rqs.hasMoreElements();) {
|
||||
|
||||
// Invoke the set() operation
|
||||
meta.set((SnmpMibSubRequest)rqs.nextElement(),depth);
|
||||
meta.set(rqs.nextElement(),depth);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -346,6 +344,7 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Implements the method defined in SnmpMibAgent. See SnmpMibAgent
|
||||
// for java-doc
|
||||
//
|
||||
@Override
|
||||
public void check(SnmpMibRequest req) throws SnmpStatusException {
|
||||
|
||||
final int reqType = SnmpDefinitions.pduWalkRequest;
|
||||
@ -353,8 +352,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// is atomic.
|
||||
SnmpRequestTree handlers = getHandlers(req,true,true,reqType);
|
||||
|
||||
SnmpRequestTree.Handler h = null;
|
||||
SnmpMibNode meta = null;
|
||||
SnmpRequestTree.Handler h;
|
||||
SnmpMibNode meta;
|
||||
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
|
||||
@ -363,8 +362,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
|
||||
// For each sub-request stored in the request-tree, invoke the
|
||||
// check() method.
|
||||
for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = (SnmpRequestTree.Handler) eh.nextElement();
|
||||
for (Enumeration<SnmpRequestTree.Handler> eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = eh.nextElement();
|
||||
|
||||
// Gets the Meta node. It can be either a Group Meta or a
|
||||
// Table Meta.
|
||||
@ -374,11 +373,11 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Gets the depth of the Meta node in the OID tree
|
||||
final int depth = handlers.getOidDepth(h);
|
||||
|
||||
for (Enumeration rqs=handlers.getSubRequests(h);
|
||||
for (Enumeration<SnmpMibSubRequest> rqs=handlers.getSubRequests(h);
|
||||
rqs.hasMoreElements();) {
|
||||
|
||||
// Invoke the check() operation
|
||||
meta.check((SnmpMibSubRequest)rqs.nextElement(),depth);
|
||||
meta.check(rqs.nextElement(),depth);
|
||||
}
|
||||
}
|
||||
|
||||
@ -398,13 +397,14 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Implements the method defined in SnmpMibAgent. See SnmpMibAgent
|
||||
// for java-doc
|
||||
//
|
||||
@Override
|
||||
public void getNext(SnmpMibRequest req) throws SnmpStatusException {
|
||||
// Build the request tree for the operation
|
||||
// The subrequest stored in the request tree are valid GET requests
|
||||
SnmpRequestTree handlers = getGetNextHandlers(req);
|
||||
|
||||
SnmpRequestTree.Handler h = null;
|
||||
SnmpMibNode meta = null;
|
||||
SnmpRequestTree.Handler h;
|
||||
SnmpMibNode meta;
|
||||
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
|
||||
@ -412,8 +412,8 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
}
|
||||
|
||||
// Now invoke get() for each subrequest of the request tree.
|
||||
for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = (SnmpRequestTree.Handler) eh.nextElement();
|
||||
for (Enumeration<SnmpRequestTree.Handler> eh=handlers.getHandlers();eh.hasMoreElements();) {
|
||||
h = eh.nextElement();
|
||||
|
||||
// Gets the Meta node. It can be either a Group Meta or a
|
||||
// Table Meta.
|
||||
@ -423,11 +423,11 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Gets the depth of the Meta node in the OID tree
|
||||
int depth = handlers.getOidDepth(h);
|
||||
|
||||
for (Enumeration rqs=handlers.getSubRequests(h);
|
||||
for (Enumeration<SnmpMibSubRequest> rqs=handlers.getSubRequests(h);
|
||||
rqs.hasMoreElements();) {
|
||||
|
||||
// Invoke the get() operation
|
||||
meta.get((SnmpMibSubRequest)rqs.nextElement(),depth);
|
||||
meta.get(rqs.nextElement(),depth);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -442,6 +442,7 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// Implements the method defined in SnmpMibAgent. See SnmpMibAgent
|
||||
// for java-doc
|
||||
//
|
||||
@Override
|
||||
public void getBulk(SnmpMibRequest req, int nonRepeat, int maxRepeat)
|
||||
throws SnmpStatusException {
|
||||
|
||||
@ -456,10 +457,11 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
*
|
||||
* @return The root object identifier.
|
||||
*/
|
||||
@Override
|
||||
public long[] getRootOid() {
|
||||
|
||||
if( rootOid == null) {
|
||||
Vector<Integer> list= new Vector<Integer>(10);
|
||||
Vector<Integer> list= new Vector<>(10);
|
||||
|
||||
// Ask the tree to do the job !
|
||||
//
|
||||
@ -507,13 +509,13 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
new SnmpRequestTree(req,createflag,type);
|
||||
|
||||
int index=0;
|
||||
SnmpVarBind var = null;
|
||||
SnmpVarBind var;
|
||||
final int ver= req.getVersion();
|
||||
|
||||
// For each varbind in the list finds its handling node.
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements(); index++) {
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements(); index++) {
|
||||
|
||||
var= (SnmpVarBind) e.nextElement();
|
||||
var= e.nextElement();
|
||||
|
||||
try {
|
||||
// Find the handling node for this varbind.
|
||||
@ -657,10 +659,10 @@ public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
|
||||
// request into a valid GET request, replacing the OIDs in the
|
||||
// original GET-NEXT request with the OID of the first leaf that
|
||||
// follows.
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements(); index++) {
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements(); index++) {
|
||||
|
||||
var = (SnmpVarBind) e.nextElement();
|
||||
SnmpOid result = null;
|
||||
var = e.nextElement();
|
||||
SnmpOid result;
|
||||
try {
|
||||
// Find the node handling the OID that follows the varbind
|
||||
// OID. `result' contains this next leaf OID.
|
||||
|
||||
@ -33,14 +33,12 @@ package com.sun.jmx.snmp.agent;
|
||||
import java.io.Serializable;
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Set;
|
||||
|
||||
// jmx imports
|
||||
//
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.MBeanRegistration;
|
||||
import javax.management.ObjectName;
|
||||
import javax.management.MalformedObjectNameException;
|
||||
import javax.management.InstanceNotFoundException;
|
||||
import javax.management.ServiceNotFoundException;
|
||||
import javax.management.ReflectionException;
|
||||
@ -94,6 +92,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @exception java.lang.Exception
|
||||
*/
|
||||
@Override
|
||||
public abstract ObjectName preRegister(MBeanServer server,
|
||||
ObjectName name)
|
||||
throws java.lang.Exception;
|
||||
@ -101,18 +100,21 @@ public abstract class SnmpMibAgent
|
||||
/**
|
||||
* 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() {
|
||||
}
|
||||
|
||||
@ -127,6 +129,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void get(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -141,6 +144,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void getNext(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -164,6 +168,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @exception SnmpStatusException An error occured during the operation.
|
||||
*/
|
||||
@Override
|
||||
public abstract void getBulk(SnmpMibRequest req, int nonRepeat,
|
||||
int maxRepeat)
|
||||
throws SnmpStatusException;
|
||||
@ -185,6 +190,7 @@ public abstract class SnmpMibAgent
|
||||
* the exception is thrown in the {@link #check(SnmpMibRequest)}
|
||||
* method instead.
|
||||
*/
|
||||
@Override
|
||||
public abstract void set(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -203,6 +209,7 @@ public abstract class SnmpMibAgent
|
||||
* @exception SnmpStatusException The <CODE>set</CODE> operation
|
||||
* cannot be performed.
|
||||
*/
|
||||
@Override
|
||||
public abstract void check(SnmpMibRequest req)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -226,6 +233,7 @@ public abstract class SnmpMibAgent
|
||||
* @return The MBean server or null if the MIB is not registered in any
|
||||
* MBean server.
|
||||
*/
|
||||
@Override
|
||||
public MBeanServer getMBeanServer() {
|
||||
return server;
|
||||
}
|
||||
@ -236,6 +244,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @return The SNMP MIB handler.
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler getSnmpAdaptor() {
|
||||
return adaptor;
|
||||
}
|
||||
@ -246,6 +255,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @param stack The SNMP MIB handler.
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
@ -266,6 +276,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this);
|
||||
@ -288,6 +299,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack, String contextName) {
|
||||
if (adaptor != null) {
|
||||
adaptor.removeMib(this, contextName);
|
||||
@ -309,6 +321,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptor(SnmpMibHandler stack,
|
||||
String contextName,
|
||||
SnmpOid[] oids) {
|
||||
@ -327,6 +340,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @return The name of the SNMP protocol adaptor.
|
||||
*/
|
||||
@Override
|
||||
public ObjectName getSnmpAdaptorName() {
|
||||
return adaptorName;
|
||||
}
|
||||
@ -344,6 +358,7 @@ public abstract class SnmpMibAgent
|
||||
* @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 {
|
||||
|
||||
@ -389,6 +404,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
@ -434,6 +450,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name, String contextName)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
|
||||
@ -481,6 +498,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void setSnmpAdaptorName(ObjectName name,
|
||||
String contextName, SnmpOid[] oids)
|
||||
throws InstanceNotFoundException, ServiceNotFoundException {
|
||||
@ -522,6 +540,7 @@ public abstract class SnmpMibAgent
|
||||
* @return <CODE>true</CODE> if the MIB module is bound,
|
||||
* <CODE>false</CODE> otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean getBindingState() {
|
||||
if (adaptor == null)
|
||||
return false;
|
||||
@ -534,6 +553,7 @@ public abstract class SnmpMibAgent
|
||||
*
|
||||
* @return The MIB name.
|
||||
*/
|
||||
@Override
|
||||
public String getMibName() {
|
||||
return mibName;
|
||||
}
|
||||
@ -681,7 +701,7 @@ public abstract class SnmpMibAgent
|
||||
private Vector<SnmpVarBind> splitFrom(Vector<SnmpVarBind> original, int limit) {
|
||||
|
||||
int max= original.size();
|
||||
Vector<SnmpVarBind> result= new Vector<SnmpVarBind>(max - limit);
|
||||
Vector<SnmpVarBind> result= new Vector<>(max - limit);
|
||||
int i= limit;
|
||||
|
||||
// Ok the loop looks a bit strange. But in order to improve the
|
||||
@ -697,21 +717,12 @@ public abstract class SnmpMibAgent
|
||||
return result;
|
||||
}
|
||||
|
||||
private void concatVector(SnmpMibRequest req, Vector source) {
|
||||
for(Enumeration e= source.elements(); e.hasMoreElements(); ) {
|
||||
SnmpVarBind var= (SnmpVarBind) 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 void concatVector(Vector<SnmpVarBind> target, Vector<SnmpVarBind> source) {
|
||||
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 ...
|
||||
target.addElement(new SnmpVarBind(var.oid, var.value));
|
||||
req.addVarBind(new SnmpVarBind(var.oid, var.value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -29,20 +29,13 @@ package com.sun.jmx.snmp.agent;
|
||||
//
|
||||
import java.io.Serializable;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Vector;
|
||||
|
||||
// jmx imports
|
||||
//
|
||||
import com.sun.jmx.snmp.SnmpOid;
|
||||
import com.sun.jmx.snmp.SnmpValue;
|
||||
import com.sun.jmx.snmp.SnmpVarBind;
|
||||
import com.sun.jmx.snmp.SnmpStatusException;
|
||||
|
||||
// SNMP Runtime imports
|
||||
//
|
||||
import com.sun.jmx.snmp.agent.SnmpMibOid;
|
||||
import com.sun.jmx.snmp.agent.SnmpMibNode;
|
||||
|
||||
/**
|
||||
* Represents a node in an SNMP MIB which corresponds to a group.
|
||||
@ -174,6 +167,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
* @exception SnmpStatusException An error occurred while accessing
|
||||
* the MIB node.
|
||||
*/
|
||||
@Override
|
||||
abstract public void get(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -203,6 +197,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
* @exception SnmpStatusException An error occurred while accessing
|
||||
* the MIB node.
|
||||
*/
|
||||
@Override
|
||||
abstract public void set(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -234,6 +229,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
* @exception SnmpStatusException An error occurred while accessing
|
||||
* the MIB node.
|
||||
*/
|
||||
@Override
|
||||
abstract public void check(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException;
|
||||
|
||||
@ -241,8 +237,8 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
// If we reach this node, we are below the root OID, so we just
|
||||
// return.
|
||||
// --------------------------------------------------------------------
|
||||
public void getRootOid(Vector result) {
|
||||
return;
|
||||
@Override
|
||||
public void getRootOid(Vector<Integer> result) {
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
@ -264,7 +260,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
*/
|
||||
void registerNestedArc(long arc) {
|
||||
Long obj = new Long(arc);
|
||||
if (subgroups == null) subgroups = new Hashtable<Long, Long>();
|
||||
if (subgroups == null) subgroups = new Hashtable<>();
|
||||
// registers the arc in the hashtable.
|
||||
subgroups.put(obj,obj);
|
||||
}
|
||||
@ -312,6 +308,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
* @param node The node being registered.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
void registerNode(long[] oid, int cursor ,SnmpMibNode node)
|
||||
throws IllegalAccessException {
|
||||
super.registerNode(oid,cursor,node);
|
||||
@ -325,13 +322,13 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
// -------------------------------------------------------------------
|
||||
// see comments in SnmpMibNode
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
void findHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int depth,
|
||||
SnmpRequestTree handlers)
|
||||
throws SnmpStatusException {
|
||||
|
||||
int length = oid.length;
|
||||
SnmpMibNode node = null;
|
||||
|
||||
if (handlers == null)
|
||||
throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
|
||||
@ -349,7 +346,6 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
// This arc leads to a subgroup: delegates the search to the
|
||||
// method defined in SnmpMibOid
|
||||
super.findHandlingNode(varbind,oid,depth,handlers);
|
||||
return;
|
||||
} else if (isTable(arc)) {
|
||||
// This arc leads to a table: forward the search to the table.
|
||||
|
||||
@ -384,6 +380,7 @@ public abstract class SnmpMibGroup extends SnmpMibOid
|
||||
// -------------------------------------------------------------------
|
||||
// See comments in SnmpMibNode.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
long[] findNextHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int pos, int depth,
|
||||
SnmpRequestTree handlers, AcmChecker checker)
|
||||
|
||||
@ -37,7 +37,6 @@ import java.util.Enumeration;
|
||||
// jmx imports
|
||||
//
|
||||
import com.sun.jmx.snmp.SnmpOid;
|
||||
import com.sun.jmx.snmp.SnmpValue;
|
||||
import com.sun.jmx.snmp.SnmpVarBind;
|
||||
import com.sun.jmx.snmp.SnmpStatusException;
|
||||
|
||||
@ -79,10 +78,11 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
* @exception SnmpStatusException The default implementation (if not
|
||||
* overridden) is to generate a SnmpStatusException.
|
||||
*/
|
||||
@Override
|
||||
public void get(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= e.nextElement();
|
||||
SnmpStatusException x =
|
||||
new SnmpStatusException(SnmpStatusException.noSuchObject);
|
||||
req.registerGetException(var,x);
|
||||
@ -102,10 +102,11 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
* @exception SnmpStatusException The default implementation (if not
|
||||
* overridden) is to generate a SnmpStatusException.
|
||||
*/
|
||||
@Override
|
||||
public void set(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= e.nextElement();
|
||||
SnmpStatusException x =
|
||||
new SnmpStatusException(SnmpStatusException.noAccess);
|
||||
req.registerSetException(var,x);
|
||||
@ -123,12 +124,13 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
* @param depth The depth reached in the OID tree.
|
||||
*
|
||||
* @exception SnmpStatusException The default implementation (if not
|
||||
* overriden) is to generate a SnmpStatusException.
|
||||
* overridden) is to generate a SnmpStatusException.
|
||||
*/
|
||||
@Override
|
||||
public void check(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var= e.nextElement();
|
||||
SnmpStatusException x =
|
||||
new SnmpStatusException(SnmpStatusException.noAccess);
|
||||
req.registerCheckException(var,x);
|
||||
@ -143,6 +145,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
//
|
||||
@Override
|
||||
void findHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int depth,
|
||||
SnmpRequestTree handlers)
|
||||
@ -191,6 +194,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
//
|
||||
@Override
|
||||
long[] findNextHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int pos, int depth,
|
||||
SnmpRequestTree handlers,
|
||||
@ -267,6 +271,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
/**
|
||||
* Computes the root OID of the MIB.
|
||||
*/
|
||||
@Override
|
||||
public void getRootOid(Vector<Integer> result) {
|
||||
|
||||
// If a node has several children, let assume that we are one step to
|
||||
@ -359,7 +364,6 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
// String.valueOf(var) + " position= " + cursor);
|
||||
children.insertElementAt(child, newPos);
|
||||
child.registerNode(oid, cursor + 1, node);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
// The node is already registered
|
||||
@ -404,7 +408,6 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
}
|
||||
}
|
||||
children.setElementAt(node,pos);
|
||||
return;
|
||||
} else {
|
||||
if (child == null)
|
||||
throw new IllegalAccessException();
|
||||
@ -469,7 +472,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
|
||||
int max= varList.length -1 ;
|
||||
int curr= low + (max-low)/2;
|
||||
int elmt= 0;
|
||||
int elmt;
|
||||
while (low <= max) {
|
||||
elmt= varList[curr];
|
||||
if (cursor == elmt) {
|
||||
@ -494,7 +497,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
if (varList == null)
|
||||
return -1;
|
||||
int max= varList.length -1 ;
|
||||
int elmt=0;
|
||||
int elmt;
|
||||
//final int[] v = varList;
|
||||
|
||||
//if (index > a[max])
|
||||
@ -528,7 +531,7 @@ public class SnmpMibOid extends SnmpMibNode implements Serializable {
|
||||
/**
|
||||
* Contains the list of sub nodes.
|
||||
*/
|
||||
private NonSyncVector<SnmpMibNode> children = new NonSyncVector<SnmpMibNode>(1);
|
||||
private NonSyncVector<SnmpMibNode> children = new NonSyncVector<>(1);
|
||||
|
||||
/**
|
||||
* The number of sub nodes.
|
||||
|
||||
@ -50,7 +50,7 @@ public interface SnmpMibRequest {
|
||||
* @return The element of the enumeration are instances of
|
||||
* {@link com.sun.jmx.snmp.SnmpVarBind}
|
||||
*/
|
||||
public Enumeration getElements();
|
||||
public Enumeration<SnmpVarBind> getElements();
|
||||
|
||||
/**
|
||||
* Returns the vector of varbind to be handled by the SNMP mib node.
|
||||
|
||||
@ -87,6 +87,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* Returns the local engine. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
|
||||
* @return the local engine.
|
||||
*/
|
||||
@Override
|
||||
public SnmpEngine getEngine() {
|
||||
return engine;
|
||||
}
|
||||
@ -95,6 +96,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* Gets the incoming request principal. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
|
||||
* @return The request principal.
|
||||
**/
|
||||
@Override
|
||||
public String getPrincipal() {
|
||||
return principal;
|
||||
}
|
||||
@ -103,6 +105,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* 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.
|
||||
* @return The security level.
|
||||
*/
|
||||
@Override
|
||||
public int getSecurityLevel() {
|
||||
return securityLevel;
|
||||
}
|
||||
@ -110,6 +113,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* 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.
|
||||
* @return The security model.
|
||||
*/
|
||||
@Override
|
||||
public int getSecurityModel() {
|
||||
return securityModel;
|
||||
}
|
||||
@ -117,6 +121,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* 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.
|
||||
* @return The context name.
|
||||
*/
|
||||
@Override
|
||||
public byte[] getContextName() {
|
||||
return contextName;
|
||||
}
|
||||
@ -125,6 +130,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
* 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.
|
||||
* @return The checked context.
|
||||
*/
|
||||
@Override
|
||||
public byte[] getAccessContextName() {
|
||||
return accessContextName;
|
||||
}
|
||||
@ -133,6 +139,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final SnmpPdu getPdu() {
|
||||
return reqPdu;
|
||||
}
|
||||
@ -141,18 +148,21 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
public final Enumeration getElements() {return varbinds.elements();}
|
||||
@Override
|
||||
public final Enumeration<SnmpVarBind> getElements() {return varbinds.elements();}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final Vector<SnmpVarBind> getSubList() {return varbinds;}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final int getSize() {
|
||||
if (varbinds == null) return 0;
|
||||
return varbinds.size();
|
||||
@ -162,24 +172,28 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final int getVersion() {return version;}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final int getRequestPduVersion() {return reqPdu.version;}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final Object getUserData() {return data;}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public final int getVarIndex(SnmpVarBind varbind) {
|
||||
return varbinds.indexOf(varbind);
|
||||
}
|
||||
@ -188,6 +202,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------------
|
||||
@Override
|
||||
public void addVarBind(SnmpVarBind varbind) {
|
||||
varbinds.addElement(varbind);
|
||||
}
|
||||
@ -218,7 +233,7 @@ final class SnmpMibRequestImpl implements SnmpMibRequest {
|
||||
// Returns the underlying vector of SNMP varbinds (used for algorithm
|
||||
// optimization).
|
||||
// -------------------------------------------------------------------
|
||||
final Vector getVarbinds() {return varbinds;}
|
||||
final Vector<SnmpVarBind> getVarbinds() {return varbinds;}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Private variables
|
||||
|
||||
@ -65,7 +65,8 @@ public interface SnmpMibSubRequest extends SnmpMibRequest {
|
||||
* @return The elements of the enumeration are instances of
|
||||
* {@link com.sun.jmx.snmp.SnmpVarBind}
|
||||
*/
|
||||
public Enumeration getElements();
|
||||
@Override
|
||||
public Enumeration<SnmpVarBind> getElements();
|
||||
|
||||
/**
|
||||
* Return the list of varbind to be handled by the SNMP MIB node.
|
||||
@ -85,6 +86,7 @@ public interface SnmpMibSubRequest extends SnmpMibRequest {
|
||||
* @return The elements of the vector are instances of
|
||||
* {@link com.sun.jmx.snmp.SnmpVarBind}
|
||||
*/
|
||||
@Override
|
||||
public Vector<SnmpVarBind> getSubList();
|
||||
|
||||
/**
|
||||
|
||||
@ -266,6 +266,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* <p>
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void get(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
|
||||
@ -276,9 +277,9 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
// each varbind involved (nb: should not happen, the error
|
||||
// should have been registered earlier)
|
||||
if (isnew) {
|
||||
SnmpVarBind var = null;
|
||||
for (Enumeration e= r.getElements(); e.hasMoreElements();) {
|
||||
var = (SnmpVarBind) e.nextElement();
|
||||
SnmpVarBind var;
|
||||
for (Enumeration<SnmpVarBind> e= r.getElements(); e.hasMoreElements();) {
|
||||
var = e.nextElement();
|
||||
r.registerGetException(var,noSuchInstanceException);
|
||||
}
|
||||
}
|
||||
@ -329,6 +330,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* <p>
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void check(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
final SnmpOid oid = req.getEntryOid();
|
||||
@ -389,6 +391,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* <p>
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void set(SnmpMibSubRequest req, int depth)
|
||||
throws SnmpStatusException {
|
||||
|
||||
@ -755,6 +758,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
*
|
||||
* @exception IllegalArgumentException Listener parameter is null.
|
||||
*/
|
||||
@Override
|
||||
public synchronized void
|
||||
addNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter, Object handback) {
|
||||
@ -768,13 +772,11 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
|
||||
// looking for listener in handbackTable
|
||||
//
|
||||
Vector<Object> handbackList =
|
||||
handbackTable.get(listener) ;
|
||||
Vector<NotificationFilter> filterList =
|
||||
filterTable.get(listener) ;
|
||||
Vector<Object> handbackList = handbackTable.get(listener) ;
|
||||
Vector<NotificationFilter> filterList = filterTable.get(listener) ;
|
||||
if ( handbackList == null ) {
|
||||
handbackList = new Vector<Object>() ;
|
||||
filterList = new Vector<NotificationFilter>() ;
|
||||
handbackList = new Vector<>() ;
|
||||
filterList = new Vector<>() ;
|
||||
handbackTable.put(listener, handbackList) ;
|
||||
filterTable.put(listener, filterList) ;
|
||||
}
|
||||
@ -797,16 +799,14 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* @exception ListenerNotFoundException The listener is not registered
|
||||
* in the MBean.
|
||||
*/
|
||||
@Override
|
||||
public synchronized void
|
||||
removeNotificationListener(NotificationListener listener)
|
||||
throws ListenerNotFoundException {
|
||||
|
||||
// looking for listener in handbackTable
|
||||
//
|
||||
java.util.Vector handbackList =
|
||||
(java.util.Vector) handbackTable.get(listener) ;
|
||||
java.util.Vector filterList =
|
||||
(java.util.Vector) filterTable.get(listener) ;
|
||||
java.util.Vector<?> handbackList = handbackTable.get(listener) ;
|
||||
if ( handbackList == null ) {
|
||||
throw new ListenerNotFoundException("listener");
|
||||
}
|
||||
@ -822,6 +822,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* notification class and the notification type sent by the
|
||||
* <CODE>SnmpMibTable</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public MBeanNotificationInfo[] getNotificationInfo() {
|
||||
|
||||
String[] types = {SnmpTableEntryNotification.SNMP_ENTRY_ADDED,
|
||||
@ -1813,9 +1814,9 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
final static void checkRowStatusFail(SnmpMibSubRequest req,
|
||||
int errorStatus)
|
||||
static void checkRowStatusFail(SnmpMibSubRequest req, int errorStatus)
|
||||
throws SnmpStatusException {
|
||||
|
||||
final SnmpVarBind statusvb = req.getRowStatusVarBind();
|
||||
final SnmpStatusException x = new SnmpStatusException(errorStatus);
|
||||
req.registerCheckException(statusvb,x);
|
||||
@ -1827,9 +1828,9 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
final static void setRowStatusFail(SnmpMibSubRequest req,
|
||||
int errorStatus)
|
||||
static void setRowStatusFail(SnmpMibSubRequest req, int errorStatus)
|
||||
throws SnmpStatusException {
|
||||
|
||||
final SnmpVarBind statusvb = req.getRowStatusVarBind();
|
||||
final SnmpStatusException x = new SnmpStatusException(errorStatus);
|
||||
req.registerSetException(statusvb,x);
|
||||
@ -1840,6 +1841,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
// Implements the method defined in SnmpMibNode.
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
@Override
|
||||
final synchronized void findHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int depth,
|
||||
SnmpRequestTree handlers)
|
||||
@ -1909,11 +1911,15 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
// largely inspired from the original getNext() method.
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
@Override
|
||||
final synchronized long[] findNextHandlingNode(SnmpVarBind varbind,
|
||||
long[] oid, int pos, int depth,
|
||||
SnmpRequestTree handlers,
|
||||
AcmChecker checker)
|
||||
long[] oid,
|
||||
int pos,
|
||||
int depth,
|
||||
SnmpRequestTree handlers,
|
||||
AcmChecker checker)
|
||||
throws SnmpStatusException {
|
||||
|
||||
int length = oid.length;
|
||||
|
||||
if (handlers == null)
|
||||
@ -1974,7 +1980,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
}
|
||||
|
||||
// Now that we've got everything right we can begin.
|
||||
SnmpOid entryoid = null ;
|
||||
SnmpOid entryoid;
|
||||
|
||||
if (pos == (length - 1)) {
|
||||
// pos points to the last arc in the oid, and this arc is
|
||||
@ -2200,28 +2206,25 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
|
||||
// loop on listener
|
||||
//
|
||||
for(java.util.Enumeration k = handbackTable.keys();
|
||||
for(java.util.Enumeration<NotificationListener> k = handbackTable.keys();
|
||||
k.hasMoreElements(); ) {
|
||||
|
||||
NotificationListener listener =
|
||||
(NotificationListener) k.nextElement();
|
||||
NotificationListener listener = k.nextElement();
|
||||
|
||||
// Get the associated handback list and the associated filter list
|
||||
//
|
||||
java.util.Vector handbackList =
|
||||
(java.util.Vector) handbackTable.get(listener) ;
|
||||
java.util.Vector filterList =
|
||||
(java.util.Vector) filterTable.get(listener) ;
|
||||
java.util.Vector<?> handbackList = handbackTable.get(listener) ;
|
||||
java.util.Vector<NotificationFilter> filterList =
|
||||
filterTable.get(listener) ;
|
||||
|
||||
// loop on handback
|
||||
//
|
||||
java.util.Enumeration f = filterList.elements();
|
||||
for(java.util.Enumeration h = handbackList.elements();
|
||||
java.util.Enumeration<NotificationFilter> f = filterList.elements();
|
||||
for(java.util.Enumeration<?> h = handbackList.elements();
|
||||
h.hasMoreElements(); ) {
|
||||
|
||||
Object handback = h.nextElement();
|
||||
NotificationFilter filter =
|
||||
(NotificationFilter)f.nextElement();
|
||||
NotificationFilter filter = f.nextElement();
|
||||
|
||||
if ((filter == null) ||
|
||||
(filter.isNotificationEnabled(notification))) {
|
||||
@ -2300,7 +2303,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* OID was not found.
|
||||
*
|
||||
**/
|
||||
private final int findObject(SnmpOid oid) {
|
||||
private int findObject(SnmpOid oid) {
|
||||
int low= 0;
|
||||
int max= size - 1;
|
||||
SnmpOid pos;
|
||||
@ -2332,25 +2335,6 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the position at which the given oid should be inserted
|
||||
* in the OID table (tableoids).
|
||||
*
|
||||
* <p>
|
||||
* @param oid The OID we would like to insert.
|
||||
*
|
||||
* @return The position at which the OID should be inserted in
|
||||
* the table.
|
||||
*
|
||||
* @exception SnmpStatusException if the OID is already present in the
|
||||
* table.
|
||||
*
|
||||
**/
|
||||
private final int getInsertionPoint(SnmpOid oid)
|
||||
throws SnmpStatusException {
|
||||
return getInsertionPoint(oid, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the position at which the given oid should be inserted
|
||||
* in the OID table (tableoids).
|
||||
@ -2371,7 +2355,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* table and <code>fail</code> is <code>true</code>.
|
||||
*
|
||||
**/
|
||||
private final int getInsertionPoint(SnmpOid oid, boolean fail)
|
||||
private int getInsertionPoint(SnmpOid oid, boolean fail)
|
||||
throws SnmpStatusException {
|
||||
|
||||
final int failStatus = SnmpStatusException.snmpRspNotWritable;
|
||||
@ -2413,7 +2397,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* @param pos The position at which the OID to be removed is located.
|
||||
*
|
||||
**/
|
||||
private final void removeOid(int pos) {
|
||||
private void removeOid(int pos) {
|
||||
if (pos >= tablecount) return;
|
||||
if (pos < 0) return;
|
||||
final int l1 = --tablecount-pos;
|
||||
@ -2431,7 +2415,7 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* @param pos The position at which the OID to be added is located.
|
||||
*
|
||||
**/
|
||||
private final void insertOid(int pos, SnmpOid oid) {
|
||||
private void insertOid(int pos, SnmpOid oid) {
|
||||
if (pos >= tablesize || tablecount == tablesize) {
|
||||
// Vector must be enlarged
|
||||
|
||||
@ -2534,13 +2518,13 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
* The list of entries.
|
||||
* @serial
|
||||
*/
|
||||
private final Vector<Object> entries= new Vector<Object>();
|
||||
private final Vector<Object> entries= new Vector<>();
|
||||
|
||||
/**
|
||||
* The list of object names.
|
||||
* @serial
|
||||
*/
|
||||
private final Vector<ObjectName> entrynames= new Vector<ObjectName>();
|
||||
private final Vector<ObjectName> entrynames= new Vector<>();
|
||||
|
||||
/**
|
||||
* Callback handlers
|
||||
@ -2548,17 +2532,16 @@ public abstract class SnmpMibTable extends SnmpMibNode
|
||||
// final Vector callbacks = new Vector();
|
||||
|
||||
/**
|
||||
* Listener hastable containing the hand-back objects.
|
||||
* Listener hashtable containing the hand-back objects.
|
||||
*/
|
||||
private Hashtable<NotificationListener, Vector<Object>> handbackTable =
|
||||
new Hashtable<NotificationListener, Vector<Object>>();
|
||||
new Hashtable<>();
|
||||
|
||||
/**
|
||||
* Listener hastable containing the filter objects.
|
||||
* Listener hashtable containing the filter objects.
|
||||
*/
|
||||
private Hashtable<NotificationListener, Vector<NotificationFilter>>
|
||||
filterTable =
|
||||
new Hashtable<NotificationListener, Vector<NotificationFilter>>();
|
||||
filterTable = new Hashtable<>();
|
||||
|
||||
// PACKAGE VARIABLES
|
||||
//------------------
|
||||
|
||||
@ -25,11 +25,9 @@
|
||||
package com.sun.jmx.snmp.agent;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Arrays;
|
||||
import java.util.logging.Level;
|
||||
@ -77,7 +75,7 @@ final class SnmpRequestTree {
|
||||
this.request = req;
|
||||
this.version = req.getVersion();
|
||||
this.creationflag = creationflag;
|
||||
this.hashtable = new Hashtable<Object, Handler>();
|
||||
this.hashtable = new Hashtable<>();
|
||||
setPduType(pdutype);
|
||||
}
|
||||
|
||||
@ -191,7 +189,7 @@ final class SnmpRequestTree {
|
||||
// SnmSubRequest associated with an Handler node.
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
static final class Enum implements Enumeration {
|
||||
static final class Enum implements Enumeration<SnmpMibSubRequest> {
|
||||
Enum(SnmpRequestTree hlist,Handler h) {
|
||||
handler = h;
|
||||
this.hlist = hlist;
|
||||
@ -203,11 +201,13 @@ final class SnmpRequestTree {
|
||||
private int iter = 0;
|
||||
private int size = 0;
|
||||
|
||||
@Override
|
||||
public boolean hasMoreElements() {
|
||||
return iter < size;
|
||||
}
|
||||
|
||||
public Object nextElement() throws NoSuchElementException {
|
||||
@Override
|
||||
public SnmpMibSubRequest nextElement() throws NoSuchElementException {
|
||||
if (iter == 0) {
|
||||
if (handler.sublist != null) {
|
||||
iter++;
|
||||
@ -216,7 +216,7 @@ final class SnmpRequestTree {
|
||||
}
|
||||
iter ++;
|
||||
if (iter > size) throw new NoSuchElementException();
|
||||
Object result = hlist.getSubRequest(handler,entry);
|
||||
SnmpMibSubRequest result = hlist.getSubRequest(handler,entry);
|
||||
entry++;
|
||||
return result;
|
||||
}
|
||||
@ -252,7 +252,8 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
public Enumeration getElements() {
|
||||
@Override
|
||||
public Enumeration<SnmpVarBind> getElements() {
|
||||
return varbinds.elements();
|
||||
}
|
||||
|
||||
@ -260,6 +261,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public Vector<SnmpVarBind> getSubList() {
|
||||
return varbinds;
|
||||
}
|
||||
@ -268,6 +270,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public final int getSize() {
|
||||
if (varbinds == null) return 0;
|
||||
return varbinds.size();
|
||||
@ -277,6 +280,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public void addVarBind(SnmpVarBind varbind) {
|
||||
// XXX not sure we must also add the varbind in the global
|
||||
// request? or whether we should raise an exception:
|
||||
@ -289,6 +293,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibSubRequest interface.
|
||||
// See SnmpMibSubRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public boolean isNewEntry() {
|
||||
return isnew;
|
||||
}
|
||||
@ -297,6 +302,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibSubRequest interface.
|
||||
// See SnmpMibSubRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public SnmpOid getEntryOid() {
|
||||
return entryoid;
|
||||
}
|
||||
@ -305,6 +311,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public int getVarIndex(SnmpVarBind varbind) {
|
||||
if (varbind == null) return 0;
|
||||
return global.getVarIndex(varbind);
|
||||
@ -314,6 +321,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public Object getUserData() { return global.getUserData(); }
|
||||
|
||||
|
||||
@ -322,6 +330,7 @@ final class SnmpRequestTree {
|
||||
// See SnmpMibSubRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public void registerGetException(SnmpVarBind var,
|
||||
SnmpStatusException exception)
|
||||
throws SnmpStatusException {
|
||||
@ -364,6 +373,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibSubRequest interface.
|
||||
// See SnmpMibSubRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public void registerSetException(SnmpVarBind var,
|
||||
SnmpStatusException exception)
|
||||
throws SnmpStatusException {
|
||||
@ -387,6 +397,7 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibSubRequest interface.
|
||||
// See SnmpMibSubRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public void registerCheckException(SnmpVarBind var,
|
||||
SnmpStatusException exception)
|
||||
throws SnmpStatusException {
|
||||
@ -410,42 +421,52 @@ final class SnmpRequestTree {
|
||||
// Implements the method defined in SnmpMibRequest interface.
|
||||
// See SnmpMibRequest for the java doc.
|
||||
// -------------------------------------------------------------
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SnmpVarBind getRowStatusVarBind() {
|
||||
return statusvb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SnmpPdu getPdu() {
|
||||
return global.getPdu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequestPduVersion() {
|
||||
return global.getRequestPduVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SnmpEngine getEngine() {
|
||||
return global.getEngine();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrincipal() {
|
||||
return global.getPrincipal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSecurityLevel() {
|
||||
return global.getSecurityLevel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSecurityModel() {
|
||||
return global.getSecurityModel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getContextName() {
|
||||
return global.getContextName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getAccessContextName() {
|
||||
return global.getAccessContextName();
|
||||
}
|
||||
@ -485,7 +506,7 @@ final class SnmpRequestTree {
|
||||
* Adds a varbind in this node sublist.
|
||||
*/
|
||||
public void addVarbind(SnmpVarBind varbind) {
|
||||
if (sublist == null) sublist = new Vector<SnmpVarBind>();
|
||||
if (sublist == null) sublist = new Vector<>();
|
||||
sublist.addElement(varbind);
|
||||
}
|
||||
|
||||
@ -503,7 +524,7 @@ final class SnmpRequestTree {
|
||||
// Vectors are null: Allocate new vectors
|
||||
|
||||
entryoids = new SnmpOid[Delta];
|
||||
entrylists = new Vector[Delta];
|
||||
entrylists = (Vector<SnmpVarBind>[])new Vector<?>[Delta];
|
||||
isentrynew = new boolean[Delta];
|
||||
rowstatus = new SnmpVarBind[Delta];
|
||||
entrysize = Delta;
|
||||
@ -521,7 +542,7 @@ final class SnmpRequestTree {
|
||||
// Allocate larger vectors
|
||||
entrysize += Delta;
|
||||
entryoids = new SnmpOid[entrysize];
|
||||
entrylists = new Vector[entrysize];
|
||||
entrylists = (Vector<SnmpVarBind>[])new Vector<?>[entrysize];
|
||||
isentrynew = new boolean[entrysize];
|
||||
rowstatus = new SnmpVarBind[entrysize];
|
||||
|
||||
@ -595,7 +616,7 @@ final class SnmpRequestTree {
|
||||
// entryoids = new ArrayList();
|
||||
// entrylists = new ArrayList();
|
||||
// isentrynew = new ArrayList();
|
||||
v = new Vector<SnmpVarBind>();
|
||||
v = new Vector<>();
|
||||
// entryoids.add(entryoid);
|
||||
// entrylists.add(v);
|
||||
// isentrynew.add(new Boolean(isnew));
|
||||
@ -614,7 +635,7 @@ final class SnmpRequestTree {
|
||||
// if (pos == -1 || pos >= entrycount ) {
|
||||
// pos = getInsertionPoint(entryoids,entryoid);
|
||||
// pos = getInsertionPoint(entryoids,entrycount,entryoid);
|
||||
v = new Vector<SnmpVarBind>();
|
||||
v = new Vector<>();
|
||||
// entryoids.add(pos,entryoid);
|
||||
// entrylists.add(pos,v);
|
||||
// isentrynew.add(pos,new Boolean(isnew));
|
||||
@ -775,7 +796,7 @@ final class SnmpRequestTree {
|
||||
// If it is a table, there will be one subrequest per entry involved.
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
public Enumeration getSubRequests(Handler handler) {
|
||||
public Enumeration<SnmpMibSubRequest> getSubRequests(Handler handler) {
|
||||
return new Enum(this,handler);
|
||||
}
|
||||
|
||||
@ -783,7 +804,7 @@ final class SnmpRequestTree {
|
||||
// returns an enumeration of the Handlers stored in the Hashtable.
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
public Enumeration getHandlers() {
|
||||
public Enumeration<Handler> getHandlers() {
|
||||
return hashtable.elements();
|
||||
}
|
||||
|
||||
@ -1048,7 +1069,6 @@ final class SnmpRequestTree {
|
||||
handler.addVarbind(varbind);
|
||||
else
|
||||
handler.addVarbind(varbind,entryoid,isnew,statusvb);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -27,14 +27,7 @@ package com.sun.jmx.snmp.agent;
|
||||
// java imports
|
||||
//
|
||||
import java.io.Serializable;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Vector;
|
||||
|
||||
// jmx imports
|
||||
//
|
||||
import com.sun.jmx.snmp.SnmpOid;
|
||||
import com.sun.jmx.snmp.SnmpValue;
|
||||
import com.sun.jmx.snmp.SnmpVarBind;
|
||||
import com.sun.jmx.snmp.SnmpStatusException;
|
||||
|
||||
@ -121,8 +114,8 @@ public class SnmpStandardObjectServer implements Serializable {
|
||||
|
||||
final Object data = req.getUserData();
|
||||
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var= e.nextElement();
|
||||
try {
|
||||
final long id = var.oid.getOidArc(depth);
|
||||
var.value = meta.get(id, data);
|
||||
@ -182,9 +175,8 @@ public class SnmpStandardObjectServer implements Serializable {
|
||||
|
||||
final Object data = req.getUserData();
|
||||
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var = null;
|
||||
var = (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
SnmpVarBind var = e.nextElement();
|
||||
try {
|
||||
// This method will generate a SnmpStatusException
|
||||
// if `depth' is out of bounds.
|
||||
@ -248,8 +240,8 @@ public class SnmpStandardObjectServer implements Serializable {
|
||||
|
||||
final Object data = req.getUserData();
|
||||
|
||||
for (Enumeration e= req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var = (SnmpVarBind) e.nextElement();
|
||||
for (Enumeration<SnmpVarBind> e= req.getElements(); e.hasMoreElements();) {
|
||||
final SnmpVarBind var = e.nextElement();
|
||||
try {
|
||||
// This method will generate a SnmpStatusException
|
||||
// if `depth' is out of bounds.
|
||||
|
||||
@ -33,7 +33,6 @@ package com.sun.jmx.snmp.daemon;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.util.Enumeration;
|
||||
import java.util.logging.Level;
|
||||
import java.util.Vector;
|
||||
import java.util.NoSuchElementException;
|
||||
@ -50,8 +49,6 @@ import javax.management.NotificationBroadcasterSupport;
|
||||
import javax.management.MBeanNotificationInfo;
|
||||
import javax.management.AttributeChangeNotification;
|
||||
import javax.management.ListenerNotFoundException;
|
||||
import javax.management.loading.ClassLoaderRepository;
|
||||
import javax.management.MBeanServerFactory;
|
||||
|
||||
import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
|
||||
|
||||
@ -225,9 +222,8 @@ public abstract class CommunicatorServer
|
||||
private transient Object stateLock = new Object();
|
||||
|
||||
private transient Vector<ClientHandler>
|
||||
clientHandlerVector = new Vector<ClientHandler>() ;
|
||||
clientHandlerVector = new Vector<>() ;
|
||||
|
||||
private transient Thread fatherThread = Thread.currentThread() ;
|
||||
private transient Thread mainThread = null ;
|
||||
|
||||
private volatile boolean stopRequested = false ;
|
||||
@ -328,6 +324,7 @@ public abstract class CommunicatorServer
|
||||
* Has no effect if this <CODE>CommunicatorServer</CODE> is
|
||||
* <CODE>ONLINE</CODE> or <CODE>STOPPING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void start() {
|
||||
try {
|
||||
start(0);
|
||||
@ -346,6 +343,7 @@ public abstract class CommunicatorServer
|
||||
* Has no effect if this <CODE>CommunicatorServer</CODE> is
|
||||
* <CODE>OFFLINE</CODE> or <CODE>STOPPING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void stop() {
|
||||
synchronized (stateLock) {
|
||||
if (state == OFFLINE || state == STOPPING) {
|
||||
@ -393,6 +391,7 @@ public abstract class CommunicatorServer
|
||||
*
|
||||
* @return True if connector is <CODE>ONLINE</CODE>; false otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
synchronized (stateLock) {
|
||||
return (state == ONLINE);
|
||||
@ -431,6 +430,7 @@ public abstract class CommunicatorServer
|
||||
* @return true if the value of this MBean's State attribute is the
|
||||
* same as the <VAR>wantedState</VAR> parameter; false otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean waitState(int wantedState, long timeOut) {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
|
||||
@ -595,6 +595,7 @@ public abstract class CommunicatorServer
|
||||
* @return <CODE>ONLINE</CODE>, <CODE>OFFLINE</CODE>,
|
||||
* <CODE>STARTING</CODE> or <CODE>STOPPING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public int getState() {
|
||||
synchronized (stateLock) {
|
||||
return state ;
|
||||
@ -607,6 +608,7 @@ public abstract class CommunicatorServer
|
||||
* @return One of the strings "ONLINE", "OFFLINE", "STARTING" or
|
||||
* "STOPPING".
|
||||
*/
|
||||
@Override
|
||||
public String getStateString() {
|
||||
return getStringForState(state) ;
|
||||
}
|
||||
@ -616,6 +618,7 @@ public abstract class CommunicatorServer
|
||||
*
|
||||
* @return The host name used by this <CODE>CommunicatorServer</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public String getHost() {
|
||||
try {
|
||||
host = InetAddress.getLocalHost().getHostName();
|
||||
@ -630,6 +633,7 @@ public abstract class CommunicatorServer
|
||||
*
|
||||
* @return The port number used by this <CODE>CommunicatorServer</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public int getPort() {
|
||||
synchronized (stateLock) {
|
||||
return port ;
|
||||
@ -645,6 +649,7 @@ public abstract class CommunicatorServer
|
||||
* @exception java.lang.IllegalStateException This method has been invoked
|
||||
* while the communicator was ONLINE or STARTING.
|
||||
*/
|
||||
@Override
|
||||
public void setPort(int port) throws java.lang.IllegalStateException {
|
||||
synchronized (stateLock) {
|
||||
if ((state == ONLINE) || (state == STARTING))
|
||||
@ -659,7 +664,8 @@ public abstract class CommunicatorServer
|
||||
* Gets the protocol being used by this <CODE>CommunicatorServer</CODE>.
|
||||
* @return The protocol as a string.
|
||||
*/
|
||||
public abstract String getProtocol() ;
|
||||
@Override
|
||||
public abstract String getProtocol();
|
||||
|
||||
/**
|
||||
* Gets the number of clients that have been processed by this
|
||||
@ -754,6 +760,7 @@ public abstract class CommunicatorServer
|
||||
* <p>
|
||||
* The <CODE>run</CODE> method executed by this connector's main thread.
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
// Fix jaw.00667.B
|
||||
@ -851,7 +858,7 @@ public abstract class CommunicatorServer
|
||||
} finally {
|
||||
synchronized (stateLock) {
|
||||
interrupted = true;
|
||||
Thread.currentThread().interrupted();
|
||||
Thread.interrupted();
|
||||
}
|
||||
|
||||
// ----------------------
|
||||
@ -970,7 +977,7 @@ public abstract class CommunicatorServer
|
||||
"MBeanServer argument must be MBean server where this " +
|
||||
"server is registered, or an MBeanServerForwarder " +
|
||||
"leading to that server";
|
||||
Vector<MBeanServer> seenMBS = new Vector<MBeanServer>();
|
||||
Vector<MBeanServer> seenMBS = new Vector<>();
|
||||
for (MBeanServer mbs = newMBS;
|
||||
mbs != bottomMBS;
|
||||
mbs = ((MBeanServerForwarder) mbs).getMBeanServer()) {
|
||||
@ -1153,8 +1160,7 @@ public abstract class CommunicatorServer
|
||||
state = OFFLINE;
|
||||
stopRequested = false;
|
||||
servedClientCount = 0;
|
||||
clientHandlerVector = new Vector<ClientHandler>();
|
||||
fatherThread = Thread.currentThread();
|
||||
clientHandlerVector = new Vector<>();
|
||||
mainThread = null;
|
||||
notifCount = 0;
|
||||
notifInfos = null;
|
||||
@ -1184,6 +1190,7 @@ public abstract class CommunicatorServer
|
||||
*
|
||||
* @exception IllegalArgumentException Listener parameter is null.
|
||||
*/
|
||||
@Override
|
||||
public void addNotificationListener(NotificationListener listener,
|
||||
NotificationFilter filter,
|
||||
Object handback)
|
||||
@ -1207,6 +1214,7 @@ public abstract class CommunicatorServer
|
||||
*
|
||||
* @exception ListenerNotFoundException The listener is not registered.
|
||||
*/
|
||||
@Override
|
||||
public void removeNotificationListener(NotificationListener listener)
|
||||
throws ListenerNotFoundException {
|
||||
|
||||
@ -1225,6 +1233,7 @@ public abstract class CommunicatorServer
|
||||
* sent when the <tt>State</tt> attribute of this CommunicatorServer
|
||||
* changes.
|
||||
*/
|
||||
@Override
|
||||
public MBeanNotificationInfo[] getNotificationInfo() {
|
||||
|
||||
// Initialize notifInfos on first call to getNotificationInfo()
|
||||
@ -1304,6 +1313,7 @@ public abstract class CommunicatorServer
|
||||
* the <CODE>MBeanServer</CODE> and re-thrown
|
||||
* as an <CODE>MBeanRegistrationException</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public ObjectName preRegister(MBeanServer server, ObjectName name)
|
||||
throws java.lang.Exception {
|
||||
objectName = name;
|
||||
@ -1325,6 +1335,7 @@ public abstract class CommunicatorServer
|
||||
* successfully registered in the <CODE>MBeanServer</CODE>.
|
||||
* The value false means that the registration phase has failed.
|
||||
*/
|
||||
@Override
|
||||
public void postRegister(Boolean registrationDone) {
|
||||
if (!registrationDone.booleanValue()) {
|
||||
synchronized (this) {
|
||||
@ -1340,6 +1351,7 @@ public abstract class CommunicatorServer
|
||||
* the <CODE>MBeanServer</CODE> and re-thrown
|
||||
* as an <CODE>MBeanRegistrationException</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void preDeregister() throws java.lang.Exception {
|
||||
synchronized (this) {
|
||||
topMBS = bottomMBS = null;
|
||||
@ -1354,22 +1366,8 @@ public abstract class CommunicatorServer
|
||||
/**
|
||||
* Do nothing.
|
||||
*/
|
||||
@Override
|
||||
public void postDeregister(){
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a class using the default loader repository
|
||||
**/
|
||||
Class loadClass(String className)
|
||||
throws ClassNotFoundException {
|
||||
try {
|
||||
return Class.forName(className);
|
||||
} catch (ClassNotFoundException e) {
|
||||
final ClassLoaderRepository clr =
|
||||
MBeanServerFactory.getClassLoaderRepository(bottomMBS);
|
||||
if (clr == null) throw new ClassNotFoundException(className);
|
||||
return clr.loadClass(className);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, 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
|
||||
@ -47,7 +47,6 @@ import java.io.InterruptedIOException;
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.MBeanRegistration;
|
||||
import javax.management.ObjectName;
|
||||
import javax.management.InstanceAlreadyExistsException;
|
||||
import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
|
||||
import com.sun.jmx.snmp.SnmpIpAddress;
|
||||
import com.sun.jmx.snmp.SnmpMessage;
|
||||
@ -157,7 +156,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* The IP address based ACL used by this SNMP protocol adaptor.
|
||||
*/
|
||||
private Object ipacl = null;
|
||||
private InetAddressAcl ipacl = null;
|
||||
|
||||
/**
|
||||
* The factory object.
|
||||
@ -199,7 +198,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
transient DatagramSocket trapSocket = null;
|
||||
private transient SnmpSession informSession = null;
|
||||
private transient DatagramPacket packet = null;
|
||||
transient Vector<SnmpMibAgent> mibs = new Vector<SnmpMibAgent>();
|
||||
transient Vector<SnmpMibAgent> mibs = new Vector<>();
|
||||
private transient SnmpMibTree root;
|
||||
|
||||
/**
|
||||
@ -482,8 +481,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
//
|
||||
if (acl == null && forceAcl) {
|
||||
try {
|
||||
acl = (InetAddressAcl)
|
||||
new SnmpAcl("SNMP protocol adaptor IP ACL");
|
||||
acl = new SnmpAcl("SNMP protocol adaptor IP ACL");
|
||||
} catch (UnknownHostException e) {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
|
||||
@ -508,6 +506,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* since its creation. This counter is not reset by the <CODE>stop</CODE>
|
||||
* method.
|
||||
*/
|
||||
@Override
|
||||
public int getServedClientCount() {
|
||||
return super.getServedClientCount();
|
||||
}
|
||||
@ -519,6 +518,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @return The number of managers currently being processed by this
|
||||
* SNMP protocol adaptor.
|
||||
*/
|
||||
@Override
|
||||
public int getActiveClientCount() {
|
||||
return super.getActiveClientCount();
|
||||
}
|
||||
@ -530,6 +530,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @return The maximum number of managers that this SNMP protocol adaptor
|
||||
* can process concurrently.
|
||||
*/
|
||||
@Override
|
||||
public int getMaxActiveClientCount() {
|
||||
return super.getMaxActiveClientCount();
|
||||
}
|
||||
@ -543,6 +544,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception java.lang.IllegalStateException This method has been invoked
|
||||
* while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void setMaxActiveClientCount(int c)
|
||||
throws java.lang.IllegalStateException {
|
||||
super.setMaxActiveClientCount(c);
|
||||
@ -554,8 +556,9 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public InetAddressAcl getInetAddressAcl() {
|
||||
return (InetAddressAcl)ipacl;
|
||||
return ipacl;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -564,6 +567,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The port number for sending SNMP traps.
|
||||
*/
|
||||
@Override
|
||||
public Integer getTrapPort() {
|
||||
return new Integer(trapPort) ;
|
||||
}
|
||||
@ -573,6 +577,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @param port The port number for sending SNMP traps.
|
||||
*/
|
||||
@Override
|
||||
public void setTrapPort(Integer port) {
|
||||
setTrapPort(port.intValue());
|
||||
}
|
||||
@ -595,6 +600,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The port number for sending SNMP inform requests.
|
||||
*/
|
||||
@Override
|
||||
public int getInformPort() {
|
||||
return informPort;
|
||||
}
|
||||
@ -605,6 +611,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @param port The port number for sending SNMP inform requests.
|
||||
*/
|
||||
@Override
|
||||
public void setInformPort(int port) {
|
||||
if (port < 0)
|
||||
throw new IllegalArgumentException("Inform request port "+
|
||||
@ -617,6 +624,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The string "snmp".
|
||||
*/
|
||||
@Override
|
||||
public String getProtocol() {
|
||||
return "snmp";
|
||||
}
|
||||
@ -629,6 +637,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The buffer size.
|
||||
*/
|
||||
@Override
|
||||
public Integer getBufferSize() {
|
||||
return new Integer(bufferSize) ;
|
||||
}
|
||||
@ -643,6 +652,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception java.lang.IllegalStateException This method has been invoked
|
||||
* while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void setBufferSize(Integer s)
|
||||
throws java.lang.IllegalStateException {
|
||||
if ((state == ONLINE) || (state == STARTING)) {
|
||||
@ -658,6 +668,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* By default, a maximum of 3 tries is used.
|
||||
* @return The maximun number of tries.
|
||||
*/
|
||||
@Override
|
||||
final public int getMaxTries() {
|
||||
return maxTries;
|
||||
}
|
||||
@ -667,6 +678,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* request before giving up.
|
||||
* @param newMaxTries The maximun number of tries.
|
||||
*/
|
||||
@Override
|
||||
final public synchronized void setMaxTries(int newMaxTries) {
|
||||
if (newMaxTries < 0)
|
||||
throw new IllegalArgumentException();
|
||||
@ -678,6 +690,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* By default, a timeout of 3 seconds is used.
|
||||
* @return The value of the timeout property.
|
||||
*/
|
||||
@Override
|
||||
final public int getTimeout() {
|
||||
return timeout;
|
||||
}
|
||||
@ -686,6 +699,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* Changes the timeout to wait for an inform response from the manager.
|
||||
* @param newTimeout The timeout (in milliseconds).
|
||||
*/
|
||||
@Override
|
||||
final public synchronized void setTimeout(int newTimeout) {
|
||||
if (newTimeout < 0)
|
||||
throw new IllegalArgumentException();
|
||||
@ -697,6 +711,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The factory object.
|
||||
*/
|
||||
@Override
|
||||
public SnmpPduFactory getPduFactory() {
|
||||
return pduFactory ;
|
||||
}
|
||||
@ -706,6 +721,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @param factory The factory object (null means the default factory).
|
||||
*/
|
||||
@Override
|
||||
public void setPduFactory(SnmpPduFactory factory) {
|
||||
if (factory == null)
|
||||
pduFactory = new SnmpPduFactoryBER() ;
|
||||
@ -719,6 +735,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @param factory The factory object (null means no factory).
|
||||
* @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
|
||||
*/
|
||||
@Override
|
||||
public void setUserDataFactory(SnmpUserDataFactory factory) {
|
||||
userDataFactory = factory ;
|
||||
}
|
||||
@ -729,6 +746,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @return The factory object (null means no factory).
|
||||
* @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
|
||||
*/
|
||||
@Override
|
||||
public SnmpUserDataFactory getUserDataFactory() {
|
||||
return userDataFactory;
|
||||
}
|
||||
@ -745,6 +763,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @return <CODE>true</CODE> if authentication traps are enabled,
|
||||
* <CODE>false</CODE> otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean getAuthTrapEnabled() {
|
||||
return authTrapEnabled ;
|
||||
}
|
||||
@ -755,6 +774,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @param enabled Flag indicating if traps need to be sent.
|
||||
*/
|
||||
@Override
|
||||
public void setAuthTrapEnabled(boolean enabled) {
|
||||
authTrapEnabled = enabled ;
|
||||
}
|
||||
@ -772,6 +792,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return <CODE>true</CODE> if responses are sent.
|
||||
*/
|
||||
@Override
|
||||
public boolean getAuthRespEnabled() {
|
||||
return authRespEnabled ;
|
||||
}
|
||||
@ -782,6 +803,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @param enabled Flag indicating if responses need to be sent.
|
||||
*/
|
||||
@Override
|
||||
public void setAuthRespEnabled(boolean enabled) {
|
||||
authRespEnabled = enabled ;
|
||||
}
|
||||
@ -793,6 +815,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The OID in string format "x.x.x.x".
|
||||
*/
|
||||
@Override
|
||||
public String getEnterpriseOid() {
|
||||
return enterpriseOid.toString() ;
|
||||
}
|
||||
@ -804,6 +827,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @exception IllegalArgumentException The string format is incorrect
|
||||
*/
|
||||
@Override
|
||||
public void setEnterpriseOid(String oid) throws IllegalArgumentException {
|
||||
enterpriseOid = new SnmpOid(oid) ;
|
||||
}
|
||||
@ -813,11 +837,12 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return An array of MIB names.
|
||||
*/
|
||||
@Override
|
||||
public String[] getMibs() {
|
||||
String[] result = new String[mibs.size()] ;
|
||||
int i = 0 ;
|
||||
for (Enumeration e = mibs.elements() ; e.hasMoreElements() ;) {
|
||||
SnmpMibAgent mib = (SnmpMibAgent)e.nextElement() ;
|
||||
for (Enumeration<SnmpMibAgent> e = mibs.elements() ; e.hasMoreElements() ;) {
|
||||
SnmpMibAgent mib = e.nextElement() ;
|
||||
result[i++] = mib.getMibName();
|
||||
}
|
||||
return result ;
|
||||
@ -831,6 +856,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutTraps</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutTraps() {
|
||||
return new Long(snmpOutTraps);
|
||||
}
|
||||
@ -840,6 +866,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutGetResponses</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutGetResponses() {
|
||||
return new Long(snmpOutGetResponses);
|
||||
}
|
||||
@ -849,6 +876,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutGenErrs</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutGenErrs() {
|
||||
return new Long(snmpOutGenErrs);
|
||||
}
|
||||
@ -858,6 +886,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutBadValues</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutBadValues() {
|
||||
return new Long(snmpOutBadValues);
|
||||
}
|
||||
@ -867,6 +896,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutNoSuchNames</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutNoSuchNames() {
|
||||
return new Long(snmpOutNoSuchNames);
|
||||
}
|
||||
@ -876,6 +906,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutTooBigs</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutTooBigs() {
|
||||
return new Long(snmpOutTooBigs);
|
||||
}
|
||||
@ -885,6 +916,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInASNParseErrs</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInASNParseErrs() {
|
||||
return new Long(snmpInASNParseErrs);
|
||||
}
|
||||
@ -894,6 +926,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInBadCommunityUses</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInBadCommunityUses() {
|
||||
return new Long(snmpInBadCommunityUses);
|
||||
}
|
||||
@ -904,6 +937,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInBadCommunityNames</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInBadCommunityNames() {
|
||||
return new Long(snmpInBadCommunityNames);
|
||||
}
|
||||
@ -913,6 +947,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInBadVersions</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInBadVersions() {
|
||||
return new Long(snmpInBadVersions);
|
||||
}
|
||||
@ -922,6 +957,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpOutPkts</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpOutPkts() {
|
||||
return new Long(snmpOutPkts);
|
||||
}
|
||||
@ -931,6 +967,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInPkts</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInPkts() {
|
||||
return new Long(snmpInPkts);
|
||||
}
|
||||
@ -940,6 +977,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInGetRequests</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInGetRequests() {
|
||||
return new Long(snmpInGetRequests);
|
||||
}
|
||||
@ -949,6 +987,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInGetNexts</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInGetNexts() {
|
||||
return new Long(snmpInGetNexts);
|
||||
}
|
||||
@ -958,6 +997,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInSetRequests</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInSetRequests() {
|
||||
return new Long(snmpInSetRequests);
|
||||
}
|
||||
@ -967,6 +1007,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInTotalSetVars</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInTotalSetVars() {
|
||||
return new Long(snmpInTotalSetVars);
|
||||
}
|
||||
@ -976,6 +1017,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @return The <CODE>snmpInTotalReqVars</CODE> value.
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpInTotalReqVars() {
|
||||
return new Long(snmpInTotalReqVars);
|
||||
}
|
||||
@ -988,6 +1030,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpSilentDrops() {
|
||||
return new Long(snmpSilentDrops);
|
||||
}
|
||||
@ -1000,6 +1043,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public Long getSnmpProxyDrops() {
|
||||
return new Long(0);
|
||||
}
|
||||
@ -1027,6 +1071,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @exception java.lang.Exception
|
||||
*/
|
||||
@Override
|
||||
public ObjectName preRegister(MBeanServer server, ObjectName name)
|
||||
throws java.lang.Exception {
|
||||
|
||||
@ -1040,6 +1085,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void postRegister (Boolean registrationDone) {
|
||||
super.postRegister(registrationDone);
|
||||
}
|
||||
@ -1047,6 +1093,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void preDeregister() throws java.lang.Exception {
|
||||
super.preDeregister();
|
||||
}
|
||||
@ -1054,6 +1101,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
public void postDeregister() {
|
||||
super.postDeregister();
|
||||
}
|
||||
@ -1067,6 +1115,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @exception IllegalArgumentException If the parameter is null.
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler addMib(SnmpMibAgent mib)
|
||||
throws IllegalArgumentException {
|
||||
if (mib == null) {
|
||||
@ -1097,6 +1146,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler addMib(SnmpMibAgent mib, SnmpOid[] oids)
|
||||
throws IllegalArgumentException {
|
||||
if (mib == null) {
|
||||
@ -1129,6 +1179,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler addMib(SnmpMibAgent mib, String contextName)
|
||||
throws IllegalArgumentException {
|
||||
return addMib(mib);
|
||||
@ -1150,10 +1201,12 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public SnmpMibHandler addMib(SnmpMibAgent mib,
|
||||
String contextName,
|
||||
SnmpOid[] oids)
|
||||
throws IllegalArgumentException {
|
||||
|
||||
return addMib(mib, oids);
|
||||
}
|
||||
|
||||
@ -1171,6 +1224,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public boolean removeMib(SnmpMibAgent mib, String contextName) {
|
||||
return removeMib(mib);
|
||||
}
|
||||
@ -1183,6 +1237,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB
|
||||
* included in the SNMP MIB handler, <CODE>false</CODE> otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean removeMib(SnmpMibAgent mib) {
|
||||
root.unregister(mib);
|
||||
return (mibs.removeElement(mib)) ;
|
||||
@ -1199,6 +1254,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public boolean removeMib(SnmpMibAgent mib, SnmpOid[] oids) {
|
||||
root.unregister(mib, oids);
|
||||
return (mibs.removeElement(mib)) ;
|
||||
@ -1216,6 +1272,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public boolean removeMib(SnmpMibAgent mib,
|
||||
String contextName,
|
||||
SnmpOid[] oids) {
|
||||
@ -1228,6 +1285,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Creates the datagram socket.
|
||||
*/
|
||||
@Override
|
||||
protected void doBind()
|
||||
throws CommunicationException, InterruptedException {
|
||||
|
||||
@ -1255,6 +1313,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* that port number was 0.
|
||||
* @return the actual port to which the adaptor is bound.
|
||||
**/
|
||||
@Override
|
||||
public int getPort() {
|
||||
synchronized (this) {
|
||||
if (socket != null) return socket.getLocalPort();
|
||||
@ -1265,6 +1324,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Closes the datagram socket.
|
||||
*/
|
||||
@Override
|
||||
protected void doUnbind()
|
||||
throws CommunicationException, InterruptedException {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
@ -1282,12 +1342,17 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
closeInformSocketIfNeeded() ;
|
||||
}
|
||||
|
||||
void createSnmpRequestHandler(SnmpAdaptorServer server, int id,
|
||||
DatagramSocket s, DatagramPacket p,
|
||||
SnmpMibTree tree, Vector m, Object a,
|
||||
SnmpPduFactory factory,
|
||||
SnmpUserDataFactory dataFactory,
|
||||
MBeanServer f, ObjectName n) {
|
||||
private void createSnmpRequestHandler(SnmpAdaptorServer server,
|
||||
int id,
|
||||
DatagramSocket s,
|
||||
DatagramPacket p,
|
||||
SnmpMibTree tree,
|
||||
Vector<SnmpMibAgent> m,
|
||||
InetAddressAcl a,
|
||||
SnmpPduFactory factory,
|
||||
SnmpUserDataFactory dataFactory,
|
||||
MBeanServer f,
|
||||
ObjectName n) {
|
||||
final SnmpRequestHandler handler =
|
||||
new SnmpRequestHandler(this, id, s, p, tree, m, a, factory,
|
||||
dataFactory, f, n);
|
||||
@ -1298,6 +1363,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* Reads a packet from the datagram socket and creates a request
|
||||
* handler which decodes and processes the request.
|
||||
*/
|
||||
@Override
|
||||
protected void doReceive()
|
||||
throws CommunicationException, InterruptedException {
|
||||
|
||||
@ -1339,13 +1405,14 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doError(Exception e) throws CommunicationException {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Not used in this context.
|
||||
*/
|
||||
@Override
|
||||
protected void doProcess()
|
||||
throws CommunicationException, InterruptedException {
|
||||
}
|
||||
@ -1357,6 +1424,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* We attempt only once...
|
||||
* @return 1
|
||||
**/
|
||||
@Override
|
||||
protected int getBindTries() {
|
||||
return 1;
|
||||
}
|
||||
@ -1368,6 +1436,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* Has no effect if this SNMP protocol adaptor is <CODE>OFFLINE</CODE> or
|
||||
* <CODE>STOPPING</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void stop(){
|
||||
|
||||
final int port = getPort();
|
||||
@ -1424,6 +1493,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the trap exceeds the limit defined
|
||||
* by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void snmpV1Trap(int generic, int specific,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IOException, SnmpStatusException {
|
||||
@ -1499,6 +1569,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the trap exceeds the limit defined
|
||||
* by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void snmpV1Trap(InetAddress addr, String cs, int generic,
|
||||
int specific, SnmpVarBindList varBindList)
|
||||
throws IOException, SnmpStatusException {
|
||||
@ -1617,6 +1688,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void snmpV1Trap(SnmpPeer peer,
|
||||
SnmpIpAddress agentAddr,
|
||||
SnmpOid enterpOid,
|
||||
@ -1625,6 +1697,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
SnmpVarBindList varBindList,
|
||||
SnmpTimeticks time)
|
||||
throws IOException, SnmpStatusException {
|
||||
|
||||
SnmpParameters p = (SnmpParameters) peer.getParams();
|
||||
snmpV1Trap(peer.getDestAddr(),
|
||||
peer.getDestPort(),
|
||||
@ -1745,11 +1818,13 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void snmpV2Trap(SnmpPeer peer,
|
||||
SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList,
|
||||
SnmpTimeticks time)
|
||||
throws IOException, SnmpStatusException {
|
||||
|
||||
SnmpParameters p = (SnmpParameters) peer.getParams();
|
||||
snmpV2Trap(peer.getDestAddr(),
|
||||
peer.getDestPort(),
|
||||
@ -1781,6 +1856,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the trap exceeds the limit defined
|
||||
* by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void snmpV2Trap(SnmpOid trapOid, SnmpVarBindList varBindList)
|
||||
throws IOException, SnmpStatusException {
|
||||
|
||||
@ -1801,7 +1877,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
|
||||
SnmpVarBindList fullVbl ;
|
||||
if (varBindList != null)
|
||||
fullVbl = (SnmpVarBindList)varBindList.clone() ;
|
||||
fullVbl = varBindList.clone() ;
|
||||
else
|
||||
fullVbl = new SnmpVarBindList(2) ;
|
||||
SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
|
||||
@ -1840,6 +1916,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the trap exceeds the limit
|
||||
* defined by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public void snmpV2Trap(InetAddress addr, String cs, SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IOException, SnmpStatusException {
|
||||
@ -1865,7 +1942,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
|
||||
SnmpVarBindList fullVbl ;
|
||||
if (varBindList != null)
|
||||
fullVbl = (SnmpVarBindList)varBindList.clone() ;
|
||||
fullVbl = varBindList.clone() ;
|
||||
else
|
||||
fullVbl = new SnmpVarBindList(2) ;
|
||||
SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
|
||||
@ -1964,12 +2041,12 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
|
||||
SnmpVarBindList fullVbl ;
|
||||
if (varBindList != null)
|
||||
fullVbl = (SnmpVarBindList)varBindList.clone() ;
|
||||
fullVbl = varBindList.clone() ;
|
||||
else
|
||||
fullVbl = new SnmpVarBindList(2) ;
|
||||
|
||||
// Only difference with other
|
||||
SnmpTimeticks sysUpTimeValue = null;
|
||||
SnmpTimeticks sysUpTimeValue;
|
||||
if(time != null)
|
||||
sysUpTimeValue = time;
|
||||
else
|
||||
@ -2002,6 +2079,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void snmpPduTrap(InetAddress address, SnmpPduPacket pdu)
|
||||
throws IOException, SnmpStatusException {
|
||||
|
||||
@ -2021,6 +2099,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* by <CODE>bufferSize</CODE>.
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public void snmpPduTrap(SnmpPeer peer,
|
||||
SnmpPduPacket pdu)
|
||||
throws IOException, SnmpStatusException {
|
||||
@ -2066,13 +2145,12 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
int sendingCount = 0 ;
|
||||
openTrapSocketIfNeeded() ;
|
||||
if (ipacl != null) {
|
||||
Enumeration ed = ((InetAddressAcl)ipacl).getTrapDestinations() ;
|
||||
Enumeration<InetAddress> ed = ipacl.getTrapDestinations() ;
|
||||
while (ed.hasMoreElements()) {
|
||||
msg.address = (InetAddress)ed.nextElement() ;
|
||||
Enumeration ec = ((InetAddressAcl)ipacl).
|
||||
getTrapCommunities(msg.address) ;
|
||||
msg.address = ed.nextElement() ;
|
||||
Enumeration<String> ec = ipacl.getTrapCommunities(msg.address) ;
|
||||
while (ec.hasMoreElements()) {
|
||||
msg.community = ((String)ec.nextElement()).getBytes() ;
|
||||
msg.community = ec.nextElement().getBytes() ;
|
||||
try {
|
||||
sendTrapMessage(msg) ;
|
||||
sendingCount++ ;
|
||||
@ -2164,6 +2242,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*/
|
||||
private void sendTrapMessage(SnmpMessage msg)
|
||||
throws IOException, SnmpTooBigException {
|
||||
|
||||
byte[] buffer = new byte[bufferSize] ;
|
||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length) ;
|
||||
int encodingLength = msg.encodeMessage(buffer) ;
|
||||
@ -2245,8 +2324,10 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the inform request exceeds the
|
||||
* limit defined by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
public Vector snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
@Override
|
||||
public Vector<SnmpInformRequest> snmpInformRequest(SnmpInformHandler cb,
|
||||
SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IllegalStateException, IOException, SnmpStatusException {
|
||||
|
||||
if (!isActive()) {
|
||||
@ -2263,7 +2344,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
//
|
||||
SnmpVarBindList fullVbl ;
|
||||
if (varBindList != null)
|
||||
fullVbl = (SnmpVarBindList)varBindList.clone() ;
|
||||
fullVbl = varBindList.clone() ;
|
||||
else
|
||||
fullVbl = new SnmpVarBindList(2) ;
|
||||
SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
|
||||
@ -2277,17 +2358,16 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
|
||||
// Now send the SNMP message to each destination
|
||||
//
|
||||
Vector<SnmpInformRequest> informReqList = new Vector<SnmpInformRequest>();
|
||||
InetAddress addr = null;
|
||||
String cs = null;
|
||||
Vector<SnmpInformRequest> informReqList = new Vector<>();
|
||||
InetAddress addr;
|
||||
String cs;
|
||||
if (ipacl != null) {
|
||||
Enumeration ed = ((InetAddressAcl)ipacl).getInformDestinations() ;
|
||||
Enumeration<InetAddress> ed = ipacl.getInformDestinations() ;
|
||||
while (ed.hasMoreElements()) {
|
||||
addr = (InetAddress)ed.nextElement() ;
|
||||
Enumeration ec = ((InetAddressAcl)ipacl).
|
||||
getInformCommunities(addr) ;
|
||||
addr = ed.nextElement() ;
|
||||
Enumeration<String> ec = ipacl.getInformCommunities(addr) ;
|
||||
while (ec.hasMoreElements()) {
|
||||
cs = (String)ec.nextElement() ;
|
||||
cs = ec.nextElement() ;
|
||||
informReqList.addElement(
|
||||
informSession.makeAsyncRequest(addr, cs, cb,
|
||||
fullVbl,getInformPort())) ;
|
||||
@ -2330,6 +2410,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @exception SnmpStatusException If the inform request exceeds the
|
||||
* limit defined by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
@Override
|
||||
public SnmpInformRequest snmpInformRequest(InetAddress addr,
|
||||
String cs,
|
||||
SnmpInformHandler cb,
|
||||
@ -2380,11 +2461,13 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public SnmpInformRequest snmpInformRequest(SnmpPeer peer,
|
||||
SnmpInformHandler cb,
|
||||
SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IllegalStateException, IOException, SnmpStatusException {
|
||||
|
||||
SnmpParameters p = (SnmpParameters) peer.getParams();
|
||||
return snmpInformRequest(peer.getDestAddr(),
|
||||
peer.getDestPort(),
|
||||
@ -2401,9 +2484,9 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* @param protocolVersion The protocol version.
|
||||
* @param reqPduType The pdu type.
|
||||
*/
|
||||
public static final int mapErrorStatus(int errorStatus,
|
||||
int protocolVersion,
|
||||
int reqPduType) {
|
||||
public static int mapErrorStatus(int errorStatus,
|
||||
int protocolVersion,
|
||||
int reqPduType) {
|
||||
return SnmpSubRequestHandler.mapErrorStatus(errorStatus,
|
||||
protocolVersion,
|
||||
reqPduType);
|
||||
@ -2416,6 +2499,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IllegalStateException, IOException, SnmpStatusException {
|
||||
|
||||
if (!isActive()) {
|
||||
throw new IllegalStateException(
|
||||
"Start SNMP adaptor server before carrying out this operation");
|
||||
@ -2430,7 +2514,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
//
|
||||
SnmpVarBindList fullVbl ;
|
||||
if (varBindList != null)
|
||||
fullVbl = (SnmpVarBindList)varBindList.clone() ;
|
||||
fullVbl = varBindList.clone() ;
|
||||
else
|
||||
fullVbl = new SnmpVarBindList(2) ;
|
||||
SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
|
||||
@ -2489,6 +2573,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
* references to the object.
|
||||
* <P>Closes the datagram socket associated to this SNMP protocol adaptor.
|
||||
*/
|
||||
@Override
|
||||
protected void finalize() {
|
||||
try {
|
||||
if (socket != null) {
|
||||
@ -2511,6 +2596,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
/**
|
||||
* Returns the string used in debug traces.
|
||||
*/
|
||||
@Override
|
||||
String makeDebugTag() {
|
||||
return "SnmpAdaptorServer["+ getProtocol() + ":" + getPort() + "]";
|
||||
}
|
||||
@ -2615,13 +2701,13 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
// This is for transient structures to be initialized to specific
|
||||
// default values.
|
||||
//
|
||||
mibs = new Vector<SnmpMibAgent>() ;
|
||||
mibs = new Vector<>() ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Common initializations.
|
||||
*/
|
||||
private void init(Object acl, int p, InetAddress a) {
|
||||
private void init(InetAddressAcl acl, int p, InetAddress a) {
|
||||
|
||||
root= new SnmpMibTree();
|
||||
|
||||
@ -2650,6 +2736,7 @@ public class SnmpAdaptorServer extends CommunicatorServer
|
||||
return root.getAgentMib(oid);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Thread createMainThread() {
|
||||
final Thread t = super.createMainThread();
|
||||
t.setDaemon(true);
|
||||
|
||||
@ -140,6 +140,7 @@ public interface SnmpAdaptorServerMBean extends CommunicatorServerMBean {
|
||||
*
|
||||
* @return The string "snmp".
|
||||
*/
|
||||
@Override
|
||||
public String getProtocol();
|
||||
|
||||
/**
|
||||
@ -636,7 +637,8 @@ public interface SnmpAdaptorServerMBean extends CommunicatorServerMBean {
|
||||
* @exception IOException An I/O error occurred while sending the inform request.
|
||||
* @exception SnmpStatusException If the inform request exceeds the limit defined by <CODE>bufferSize</CODE>.
|
||||
*/
|
||||
public Vector snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid, SnmpVarBindList varBindList)
|
||||
public Vector<?> snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid,
|
||||
SnmpVarBindList varBindList)
|
||||
throws IllegalStateException, IOException, SnmpStatusException;
|
||||
|
||||
/**
|
||||
|
||||
@ -125,7 +125,7 @@ final class SnmpMibTree {
|
||||
TreeNode node= retrieveChild(oid, cursor);
|
||||
if (node == null)
|
||||
return this;
|
||||
if (children.size() == 0) {
|
||||
if (children.isEmpty()) {
|
||||
// In this case, the node does not have any children. So no point to
|
||||
// continue the search ...
|
||||
return node;
|
||||
@ -149,24 +149,24 @@ final class SnmpMibTree {
|
||||
|
||||
public void printTree(String ident) {
|
||||
|
||||
StringBuffer buff= new StringBuffer();
|
||||
StringBuilder buff= new StringBuilder();
|
||||
if (agents == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(Enumeration e= agents.elements(); e.hasMoreElements(); ) {
|
||||
SnmpMibAgent mib= (SnmpMibAgent) e.nextElement();
|
||||
for(Enumeration<SnmpMibAgent> e= agents.elements(); e.hasMoreElements(); ) {
|
||||
SnmpMibAgent mib= e.nextElement();
|
||||
if (mib == null)
|
||||
buff.append("empty ");
|
||||
else
|
||||
buff.append(mib.getMibName() + " ");
|
||||
buff.append(mib.getMibName()).append(" ");
|
||||
}
|
||||
ident+= " ";
|
||||
if (children == null) {
|
||||
return;
|
||||
}
|
||||
for(Enumeration e= children.elements(); e.hasMoreElements(); ) {
|
||||
TreeNode node= (TreeNode) e.nextElement();
|
||||
for(Enumeration<TreeNode> e= children.elements(); e.hasMoreElements(); ) {
|
||||
TreeNode node= e.nextElement();
|
||||
node.printTree(ident);
|
||||
}
|
||||
}
|
||||
@ -185,7 +185,7 @@ final class SnmpMibTree {
|
||||
}
|
||||
|
||||
private void removeAgentFully(SnmpMibAgent agent) {
|
||||
Vector<TreeNode> v = new Vector<TreeNode>();
|
||||
Vector<TreeNode> v = new Vector<>();
|
||||
for(Enumeration<TreeNode> e= children.elements();
|
||||
e.hasMoreElements(); ) {
|
||||
|
||||
@ -212,9 +212,9 @@ final class SnmpMibTree {
|
||||
|
||||
}
|
||||
|
||||
private void setAgent(SnmpMibAgent agent) {
|
||||
this.agent = agent;
|
||||
}
|
||||
private void setAgent(SnmpMibAgent agent) {
|
||||
this.agent = agent;
|
||||
}
|
||||
|
||||
private void registerNode(long[] oid, int cursor, SnmpMibAgent agent) {
|
||||
|
||||
@ -247,20 +247,20 @@ final class SnmpMibTree {
|
||||
private TreeNode retrieveChild(long[] oid, int current) {
|
||||
long theValue= oid[current];
|
||||
|
||||
for(Enumeration e= children.elements(); e.hasMoreElements(); ) {
|
||||
TreeNode node= (TreeNode) e.nextElement();
|
||||
for(Enumeration<TreeNode> e= children.elements(); e.hasMoreElements(); ) {
|
||||
TreeNode node= e.nextElement();
|
||||
if (node.match(theValue))
|
||||
return node;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
final private boolean match(long value) {
|
||||
private boolean match(long value) {
|
||||
return (nodeValue == value) ? true : false;
|
||||
}
|
||||
|
||||
private Vector<TreeNode> children= new Vector<TreeNode>();
|
||||
private Vector<SnmpMibAgent> agents= new Vector<SnmpMibAgent>();
|
||||
private Vector<TreeNode> children= new Vector<>();
|
||||
private Vector<SnmpMibAgent> agents= new Vector<>();
|
||||
private long nodeValue;
|
||||
private SnmpMibAgent agent;
|
||||
private TreeNode parent;
|
||||
|
||||
@ -71,9 +71,9 @@ import com.sun.jmx.snmp.InetAddressAcl;
|
||||
|
||||
class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
|
||||
private transient DatagramSocket socket = null ;
|
||||
private transient DatagramPacket packet = null ;
|
||||
private transient Vector mibs = null ;
|
||||
private transient DatagramSocket socket = null ;
|
||||
private transient DatagramPacket packet = null ;
|
||||
private transient Vector<SnmpMibAgent> mibs = null ;
|
||||
|
||||
/**
|
||||
* Contains the list of sub-requests associated to the current request.
|
||||
@ -85,7 +85,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
*/
|
||||
private transient SnmpMibTree root;
|
||||
|
||||
private transient Object ipacl = null ;
|
||||
private transient InetAddressAcl ipacl = null ;
|
||||
private transient SnmpPduFactory pduFactory = null ;
|
||||
private transient SnmpUserDataFactory userDataFactory = null ;
|
||||
private transient SnmpAdaptorServer adaptor = null;
|
||||
@ -94,7 +94,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
*/
|
||||
public SnmpRequestHandler(SnmpAdaptorServer server, int id,
|
||||
DatagramSocket s, DatagramPacket p,
|
||||
SnmpMibTree tree, Vector m, Object a,
|
||||
SnmpMibTree tree, Vector<SnmpMibAgent> m,
|
||||
InetAddressAcl a,
|
||||
SnmpPduFactory factory,
|
||||
SnmpUserDataFactory dataFactory,
|
||||
MBeanServer f, ObjectName n)
|
||||
@ -108,8 +109,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
socket = s;
|
||||
packet = p;
|
||||
root= tree;
|
||||
mibs = (Vector) m.clone();
|
||||
subs= new Hashtable<SnmpMibAgent, SnmpSubRequestHandler>(mibs.size());
|
||||
mibs = new Vector<>(m);
|
||||
subs= new Hashtable<>(mibs.size());
|
||||
ipacl = a;
|
||||
pduFactory = factory ;
|
||||
userDataFactory = dataFactory ;
|
||||
@ -121,6 +122,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
* back to the client.
|
||||
* Note: we overwrite 'packet' with the response bytes.
|
||||
*/
|
||||
@Override
|
||||
public void doRun() {
|
||||
|
||||
// Trace the input packet
|
||||
@ -243,7 +245,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
|
||||
// Transform the request message into a request pdu
|
||||
//
|
||||
SnmpPduPacket reqPdu = null ;
|
||||
SnmpPduPacket reqPdu;
|
||||
Object userData = null;
|
||||
try {
|
||||
reqPdu = (SnmpPduPacket)pduFactory.decodeSnmpPdu(reqMsg) ;
|
||||
@ -306,7 +308,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
|
||||
"makeResponseMessage", "fail on element" + pos);
|
||||
}
|
||||
int old= 0;
|
||||
int old;
|
||||
while (true) {
|
||||
try {
|
||||
respPdu = reduceResponsePdu(reqPdu, respPdu, pos) ;
|
||||
@ -580,20 +582,18 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
Object userData) {
|
||||
|
||||
int errorStatus = SnmpDefinitions.snmpRspNoError ;
|
||||
int nbSubRequest= subs.size();
|
||||
|
||||
int i=0;
|
||||
int i;
|
||||
// If it's a set request, we must first check any varBind
|
||||
//
|
||||
if (req.type == pduSetRequestPdu) {
|
||||
|
||||
i=0;
|
||||
for(Enumeration e= subs.elements(); e.hasMoreElements() ; i++) {
|
||||
for(Enumeration<SnmpSubRequestHandler> e= subs.elements(); e.hasMoreElements() ; i++) {
|
||||
// Indicate to the sub request that a check must be invoked ...
|
||||
// OK we should have defined out own tag for that !
|
||||
//
|
||||
SnmpSubRequestHandler sub= (SnmpSubRequestHandler)
|
||||
e.nextElement();
|
||||
SnmpSubRequestHandler sub= e.nextElement();
|
||||
sub.setUserData(userData);
|
||||
sub.type= pduWalkRequest;
|
||||
|
||||
@ -618,8 +618,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// Let's start the sub-requests.
|
||||
//
|
||||
i=0;
|
||||
for(Enumeration e= subs.elements(); e.hasMoreElements() ;i++) {
|
||||
SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
|
||||
for(Enumeration<SnmpSubRequestHandler> e= subs.elements(); e.hasMoreElements() ;i++) {
|
||||
SnmpSubRequestHandler sub= e.nextElement();
|
||||
/* NPCTE fix for bugId 4492741, esc 0, 16-August 2001 */
|
||||
sub.setUserData(userData);
|
||||
/* end of NPCTE fix for bugId 4492741 */
|
||||
@ -650,7 +650,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
private SnmpPduPacket turboProcessingGetSet(SnmpPduRequest req,
|
||||
Object userData) {
|
||||
|
||||
int errorStatus = SnmpDefinitions.snmpRspNoError ;
|
||||
int errorStatus;
|
||||
SnmpSubRequestHandler sub = subs.elements().nextElement();
|
||||
sub.setUserData(userData);
|
||||
|
||||
@ -707,7 +707,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
private SnmpPduPacket makeGetBulkResponsePdu(SnmpPduBulk req,
|
||||
Object userData) {
|
||||
|
||||
SnmpVarBind[] respVarBindList = null ;
|
||||
SnmpVarBind[] respVarBindList;
|
||||
|
||||
// RFC 1905, Section 4.2.3, p14
|
||||
int L = req.varBindList.length ;
|
||||
@ -761,7 +761,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
*/
|
||||
private boolean checkPduType(SnmpPduPacket pdu) {
|
||||
|
||||
boolean result = true ;
|
||||
boolean result;
|
||||
|
||||
switch(pdu.type) {
|
||||
|
||||
@ -798,8 +798,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
//
|
||||
if (ipacl != null) {
|
||||
if (pdu.type == SnmpDefinitions.pduSetRequestPdu) {
|
||||
if (!((InetAddressAcl)ipacl).
|
||||
checkWritePermission(pdu.address, community)) {
|
||||
if (!ipacl.checkWritePermission(pdu.address, community)) {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
|
||||
"checkAcl", "sender is " + pdu.address +
|
||||
@ -820,7 +819,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!((InetAddressAcl)ipacl).checkReadPermission(pdu.address, community)) {
|
||||
if (!ipacl.checkReadPermission(pdu.address, community)) {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
|
||||
"checkAcl", "sender is " + pdu.address +
|
||||
@ -854,7 +853,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
if (response != null) {
|
||||
SnmpAdaptorServer snmpServer = (SnmpAdaptorServer)adaptorServer ;
|
||||
snmpServer.incSnmpInBadCommunityUses(1) ;
|
||||
if (((InetAddressAcl)ipacl).checkCommunity(community) == false)
|
||||
if (ipacl.checkCommunity(community) == false)
|
||||
snmpServer.incSnmpInBadCommunityNames(1) ;
|
||||
}
|
||||
|
||||
@ -873,7 +872,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
result.port = reqPdu.port ;
|
||||
result.version = reqPdu.version ;
|
||||
result.community = reqPdu.community ;
|
||||
result.type = result.pduGetResponsePdu ;
|
||||
result.type = SnmpPduRequest.pduGetResponsePdu ;
|
||||
result.requestId = reqPdu.requestId ;
|
||||
result.errorStatus = SnmpDefinitions.snmpRspNoError ;
|
||||
result.errorIndex = 0 ;
|
||||
@ -904,7 +903,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
private SnmpMessage newTooBigMessage(SnmpMessage reqMsg)
|
||||
throws SnmpTooBigException {
|
||||
SnmpMessage result = null ;
|
||||
SnmpPduPacket reqPdu = null ;
|
||||
SnmpPduPacket reqPdu;
|
||||
|
||||
try {
|
||||
reqPdu = (SnmpPduPacket)pduFactory.decodeSnmpPdu(reqMsg) ;
|
||||
@ -941,7 +940,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
|
||||
// Reduction can be attempted only on bulk response
|
||||
//
|
||||
if (req.type != req.pduGetBulkRequestPdu) {
|
||||
if (req.type != SnmpPduPacket.pduGetBulkRequestPdu) {
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
|
||||
"reduceResponsePdu", "cannot remove anything");
|
||||
@ -961,7 +960,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// * when it is 0 (in fact, acceptedVbCount is not available),
|
||||
// we split the varbindlist by 2.
|
||||
//
|
||||
int vbCount = resp.varBindList.length ;
|
||||
int vbCount;
|
||||
if (acceptedVbCount >= 3)
|
||||
vbCount = Math.min(acceptedVbCount - 1, resp.varBindList.length) ;
|
||||
else if (acceptedVbCount == 1)
|
||||
@ -998,7 +997,7 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
private void splitRequest(SnmpPduRequest req) {
|
||||
|
||||
int nbAgents= mibs.size();
|
||||
SnmpMibAgent agent= (SnmpMibAgent) mibs.firstElement();
|
||||
SnmpMibAgent agent = mibs.firstElement();
|
||||
if (nbAgents == 1) {
|
||||
// Take all the oids contained in the request and
|
||||
//
|
||||
@ -1010,8 +1009,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// to all agents
|
||||
//
|
||||
if (req.type == pduGetNextRequestPdu) {
|
||||
for(Enumeration e= mibs.elements(); e.hasMoreElements(); ) {
|
||||
SnmpMibAgent ag= (SnmpMibAgent) e.nextElement();
|
||||
for(Enumeration<SnmpMibAgent> e= mibs.elements(); e.hasMoreElements(); ) {
|
||||
final SnmpMibAgent ag= e.nextElement();
|
||||
subs.put(ag, new SnmpSubNextRequestHandler(adaptor, ag, req));
|
||||
}
|
||||
return;
|
||||
@ -1047,8 +1046,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
int R) {
|
||||
// Send the getBulk to all agents
|
||||
//
|
||||
for(Enumeration e= mibs.elements(); e.hasMoreElements(); ) {
|
||||
SnmpMibAgent agent = (SnmpMibAgent) e.nextElement();
|
||||
for(Enumeration<SnmpMibAgent> e= mibs.elements(); e.hasMoreElements(); ) {
|
||||
final SnmpMibAgent agent = e.nextElement();
|
||||
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
|
||||
@ -1064,7 +1063,6 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
maxRepetitions,
|
||||
R));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
private SnmpPduPacket mergeResponses(SnmpPduRequest req) {
|
||||
@ -1078,8 +1076,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// Go through the list of subrequests and concatenate.
|
||||
// Hopefully, by now all the sub-requests should be finished
|
||||
//
|
||||
for(Enumeration e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
|
||||
for(Enumeration<SnmpSubRequestHandler> e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= e.nextElement();
|
||||
sub.updateResult(result);
|
||||
}
|
||||
return newValidResponsePdu(req,result);
|
||||
@ -1092,8 +1090,8 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// Go through the list of subrequests and concatenate.
|
||||
// Hopefully, by now all the sub-requests should be finished
|
||||
//
|
||||
for(Enumeration e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
|
||||
for(Enumeration<SnmpSubRequestHandler> e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= e.nextElement();
|
||||
sub.updateResult(result);
|
||||
}
|
||||
|
||||
@ -1127,19 +1125,21 @@ class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
|
||||
// Go through the list of subrequests and concatenate.
|
||||
// Hopefully, by now all the sub-requests should be finished
|
||||
//
|
||||
for(Enumeration e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
|
||||
for(Enumeration<SnmpSubRequestHandler> e= subs.elements(); e.hasMoreElements();) {
|
||||
SnmpSubRequestHandler sub= e.nextElement();
|
||||
sub.updateResult(result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String makeDebugTag() {
|
||||
return "SnmpRequestHandler[" + adaptorServer.getProtocol() + ":" +
|
||||
adaptorServer.getPort() + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
Thread createThread(Runnable r) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -31,7 +31,6 @@ package com.sun.jmx.snmp.daemon;
|
||||
// java import
|
||||
//
|
||||
import java.util.Enumeration;
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
// jmx imports
|
||||
//
|
||||
@ -46,9 +45,6 @@ import com.sun.jmx.snmp.SnmpEngine;
|
||||
//
|
||||
import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
|
||||
import com.sun.jmx.snmp.agent.SnmpMibAgent;
|
||||
import com.sun.jmx.snmp.agent.SnmpMibRequest;
|
||||
import com.sun.jmx.snmp.ThreadContext;
|
||||
import com.sun.jmx.snmp.daemon.SnmpAdaptorServer;
|
||||
import com.sun.jmx.snmp.internal.SnmpIncomingRequest;
|
||||
import com.sun.jmx.snmp.ThreadContext;
|
||||
|
||||
@ -85,6 +81,7 @@ class SnmpSubBulkRequestHandler extends SnmpSubRequestHandler {
|
||||
init(server, req, nonRepeat, maxRepeat, R);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
size= varBind.size();
|
||||
@ -259,11 +256,12 @@ class SnmpSubBulkRequestHandler extends SnmpSubRequestHandler {
|
||||
* successful. As such the method getErrorIndex or getErrorStatus should be
|
||||
* called.
|
||||
*/
|
||||
@Override
|
||||
protected void updateResult(SnmpVarBind[] result) {
|
||||
// we can assume that the run method is over ...
|
||||
//
|
||||
|
||||
final Enumeration e= varBind.elements();
|
||||
final Enumeration<SnmpVarBind> e= varBind.elements();
|
||||
final int max= result.length;
|
||||
|
||||
// First go through all the values once ...
|
||||
@ -284,7 +282,7 @@ class SnmpSubBulkRequestHandler extends SnmpSubRequestHandler {
|
||||
continue;
|
||||
}
|
||||
|
||||
final SnmpVarBind element= (SnmpVarBind) e.nextElement();
|
||||
final SnmpVarBind element= e.nextElement();
|
||||
|
||||
if (element == null) continue;
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
@ -309,7 +307,7 @@ class SnmpSubBulkRequestHandler extends SnmpSubRequestHandler {
|
||||
return;
|
||||
if (e.hasMoreElements() ==false)
|
||||
return;
|
||||
final SnmpVarBind element= (SnmpVarBind) e.nextElement();
|
||||
final SnmpVarBind element= e.nextElement();
|
||||
|
||||
if (element == null) continue;
|
||||
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
||||
|
||||
@ -60,7 +60,7 @@ public class SnmpProperties {
|
||||
InputStream is = new FileInputStream(file);
|
||||
props.load(is);
|
||||
is.close();
|
||||
for (final Enumeration e = props.keys(); e.hasMoreElements() ; ) {
|
||||
for (final Enumeration<?> e = props.keys(); e.hasMoreElements() ; ) {
|
||||
final String key = (String) e.nextElement();
|
||||
System.setProperty(key,props.getProperty(key));
|
||||
}
|
||||
|
||||
@ -199,7 +199,7 @@ public class ThreadService implements TaskServer {
|
||||
|
||||
// re-init
|
||||
this.setPriority(priority);
|
||||
this.interrupted();
|
||||
Thread.interrupted();
|
||||
this.setContextClassLoader(cloader);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2012, 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
|
||||
@ -46,8 +46,8 @@ import java.lang.SecurityManager;
|
||||
* convention follows the hierarchical property naming convention.
|
||||
* Also, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: "foo.*" or "*" is valid,
|
||||
* "*foo" or "a*b" is not valid.
|
||||
* signify a wildcard match. For example: "foo.*" and "*" signify a wildcard
|
||||
* match, while "*foo" and "a*b" do not.
|
||||
* <P>
|
||||
* The following table lists all the possible SSLPermission target names,
|
||||
* and for each provides a description of what the permission allows
|
||||
|
||||
@ -48,6 +48,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
import sun.misc.Unsafe;
|
||||
import sun.reflect.ConstantPool;
|
||||
import sun.reflect.Reflection;
|
||||
@ -3044,34 +3045,62 @@ public final
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.5
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
|
||||
if (annotationClass == null)
|
||||
throw new NullPointerException();
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
initAnnotationsIfNecessary();
|
||||
return (A) annotations.get(annotationClass);
|
||||
return AnnotationSupport.getOneAnnotation(annotations, annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.5
|
||||
*/
|
||||
public boolean isAnnotationPresent(
|
||||
Class<? extends Annotation> annotationClass) {
|
||||
if (annotationClass == null)
|
||||
throw new NullPointerException();
|
||||
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
return getAnnotation(annotationClass) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A[] getAnnotations(Class<A> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
initAnnotationsIfNecessary();
|
||||
return AnnotationSupport.getMultipleAnnotations(annotations, annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
*/
|
||||
public Annotation[] getAnnotations() {
|
||||
initAnnotationsIfNecessary();
|
||||
return AnnotationParser.toArray(annotations);
|
||||
return AnnotationSupport.unpackToArray(annotations);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
initAnnotationsIfNecessary();
|
||||
return AnnotationSupport.getOneAnnotation(declaredAnnotations, annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A[] getDeclaredAnnotations(Class<A> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
initAnnotationsIfNecessary();
|
||||
return AnnotationSupport.getMultipleAnnotations(declaredAnnotations, annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3079,7 +3108,17 @@ public final
|
||||
*/
|
||||
public Annotation[] getDeclaredAnnotations() {
|
||||
initAnnotationsIfNecessary();
|
||||
return AnnotationParser.toArray(declaredAnnotations);
|
||||
return AnnotationSupport.unpackToArray(declaredAnnotations);
|
||||
}
|
||||
|
||||
/** Returns one "directly" present annotation or null */
|
||||
<A extends Annotation> A getDirectDeclaredAnnotation(Class<A> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
initAnnotationsIfNecessary();
|
||||
@SuppressWarnings("unchecked") // TODO check safe
|
||||
A ret = (A)declaredAnnotations.get(annotationClass);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Annotations cache
|
||||
|
||||
@ -394,6 +394,14 @@ public class Package implements java.lang.reflect.AnnotatedElement {
|
||||
return getPackageInfo().isAnnotationPresent(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A[] getAnnotations(Class<A> annotationClass) {
|
||||
return getPackageInfo().getAnnotations(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
*/
|
||||
@ -401,6 +409,22 @@ public class Package implements java.lang.reflect.AnnotatedElement {
|
||||
return getPackageInfo().getAnnotations();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {
|
||||
return getPackageInfo().getDeclaredAnnotation(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <A extends Annotation> A[] getDeclaredAnnotations(Class<A> annotationClass) {
|
||||
return getPackageInfo().getDeclaredAnnotations(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, 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
|
||||
@ -41,8 +41,8 @@ import java.util.StringTokenizer;
|
||||
* naming convention follows the hierarchical property naming convention.
|
||||
* Also, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: "loadLibrary.*" or "*" is valid,
|
||||
* "*loadLibrary" or "a*b" is not valid.
|
||||
* signify a wildcard match. For example: "loadLibrary.*" and "*" signify a
|
||||
* wildcard match, while "*loadLibrary" and "a*b" do not.
|
||||
* <P>
|
||||
* The following table lists all the possible RuntimePermission target names,
|
||||
* and for each provides a description of what the permission allows
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
package java.lang;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.Properties;
|
||||
import java.util.PropertyPermission;
|
||||
import java.util.StringTokenizer;
|
||||
@ -1195,6 +1196,9 @@ public final class System {
|
||||
public AnnotationType getAnnotationType(Class<?> klass) {
|
||||
return klass.getAnnotationType();
|
||||
}
|
||||
public <A extends Annotation> A getDirectDeclaredAnnotation(Class<?> klass, Class<A> anno) {
|
||||
return klass.getDirectDeclaredAnnotation(anno);
|
||||
}
|
||||
public <E extends Enum<E>>
|
||||
E[] getEnumConstantsShared(Class<E> klass) {
|
||||
return klass.getEnumConstantsShared();
|
||||
|
||||
@ -26,10 +26,35 @@
|
||||
package java.lang.annotation;
|
||||
|
||||
/**
|
||||
* A meta-annotation to indicate which annotation type should be used
|
||||
* as a container for repeated values of the annotation type modified
|
||||
* by the {@code ContainedBy} annotation.
|
||||
* The annotation type {@code java.lang.annotation.ContainedBy} is
|
||||
* used to indicate that the annotation type whose declaration it
|
||||
* (meta-)annotates is <em>repeatable</em>. The value of
|
||||
* {@code @ContainedBy} indicates the <em>containing annotation
|
||||
* type</em> for the repeatable annotation type.
|
||||
*
|
||||
* <p>The pair of annotation types {@code @ContainedBy} and
|
||||
* {@link java.lang.annotation.ContainerFor @ContainerFor} are used to
|
||||
* indicate that annotation types are repeatable. Specifically:
|
||||
*
|
||||
* <ul>
|
||||
* <li>The annotation type {@code @ContainedBy} is used on the
|
||||
* declaration of a repeatable annotation type (JLS 9.6) to indicate
|
||||
* its containing annotation type.
|
||||
*
|
||||
* <li>The annotation type {@code @ContainerFor} is used on the
|
||||
* declaration of a containing annotation type (JLS 9.6) to indicate
|
||||
* the repeatable annotation type for which it serves as the
|
||||
* containing annotation type.
|
||||
* </ul>
|
||||
*
|
||||
* <p>
|
||||
* An inconsistent pair of {@code @ContainedBy} and
|
||||
* {@code @ContainerFor} annotations on a repeatable annotation type
|
||||
* and its containing annotation type (JLS 9.6) will lead to
|
||||
* compile-time errors and runtime exceptions when using reflection to
|
||||
* read annotations of a repeatable type.
|
||||
*
|
||||
* @see java.lang.annotation.ContainerFor
|
||||
* @since 1.8
|
||||
* @jls 9.6 Annotation Types
|
||||
* @jls 9.7 Annotations
|
||||
@ -39,8 +64,8 @@ package java.lang.annotation;
|
||||
@Target(ElementType.ANNOTATION_TYPE)
|
||||
public @interface ContainedBy {
|
||||
/**
|
||||
* The annotation type to use to store repeated values of another
|
||||
* annotation.
|
||||
* Indicates the <em>containing annotation type</em> for the
|
||||
* repeatable annotation type.
|
||||
*/
|
||||
Class<? extends Annotation> value();
|
||||
}
|
||||
|
||||
@ -26,10 +26,36 @@
|
||||
package java.lang.annotation;
|
||||
|
||||
/**
|
||||
* Indicates that an annotation type is a container for repeated
|
||||
* instances of annotations of the type of the value of the
|
||||
* {@code ContainerFor}'s value element.
|
||||
* The annotation type {@code java.lang.annotation.ContainerFor} is
|
||||
* used to indicate that the annotation type whose declaration it
|
||||
* (meta-)annotates is a <em>containing annotation type</em>. The
|
||||
* value of {@code @ContainerFor} indicates the <em>repeatable
|
||||
* annotation type</em> for the containing annotation type.
|
||||
*
|
||||
* <p>The pair of annotation types {@link
|
||||
* java.lang.annotation.ContainedBy @ContainedBy} and
|
||||
* {@code @ContainerFor} are used to indicate that annotation types
|
||||
* are repeatable. Specifically:
|
||||
*
|
||||
* <ul>
|
||||
* <li>The annotation type {@code @ContainedBy} is used on the
|
||||
* declaration of a repeatable annotation type (JLS 9.6) to indicate
|
||||
* its containing annotation type.
|
||||
*
|
||||
* <li>The annotation type {@code @ContainerFor} is used on the
|
||||
* declaration of a containing annotation type (JLS 9.6) to indicate
|
||||
* the repeatable annotation type for which it serves as the
|
||||
* containing annotation type.
|
||||
* </ul>
|
||||
*
|
||||
* <p>
|
||||
* An inconsistent pair of {@code @ContainedBy} and
|
||||
* {@code @ContainerFor} annotations on a repeatable annotation type
|
||||
* and its containing annotation type (JLS 9.6) will lead to
|
||||
* compile-time errors and runtime exceptions when using reflection to
|
||||
* read annotations of a repeatable type.
|
||||
*
|
||||
* @see java.lang.annotation.ContainedBy
|
||||
* @since 1.8
|
||||
* @jls 9.6 Annotation Types
|
||||
* @jls 9.7 Annotations
|
||||
@ -38,9 +64,10 @@ package java.lang.annotation;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.ANNOTATION_TYPE)
|
||||
public @interface ContainerFor {
|
||||
|
||||
/**
|
||||
* The repeating annotation type that the annotation type
|
||||
* annotated with this annotation is a container for.
|
||||
* Indicates the repeatable annotation type for the containing
|
||||
* annotation type.
|
||||
*/
|
||||
Class<? extends Annotation> value();
|
||||
}
|
||||
|
||||
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.lang.annotation;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Thrown to indicate that an annotation type whose declaration is
|
||||
* (meta-)annotated with a {@link ContainerFor} annotation is not, in
|
||||
* fact, the <em>containing annotation type of the type named by {@link
|
||||
* ContainerFor}</em>.
|
||||
*
|
||||
* @see java.lang.reflect.AnnotatedElement
|
||||
* @since 1.8
|
||||
* @jls 9.6 Annotation Types
|
||||
* @jls 9.7 Annotations
|
||||
*/
|
||||
public class InvalidContainerAnnotationError extends AnnotationFormatError {
|
||||
private static final long serialVersionUID = 5023L;
|
||||
|
||||
/**
|
||||
* The instance of the erroneous container.
|
||||
*/
|
||||
private transient Annotation container;
|
||||
|
||||
/**
|
||||
* The type of the annotation that should be contained in the
|
||||
* container.
|
||||
*/
|
||||
private transient Class<? extends Annotation> annotationType;
|
||||
|
||||
/**
|
||||
* Constructs a new InvalidContainerAnnotationError with the
|
||||
* specified detail message.
|
||||
*
|
||||
* @param message the detail message.
|
||||
*/
|
||||
public InvalidContainerAnnotationError(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new InvalidContainerAnnotationError with the specified
|
||||
* detail message and cause. Note that the detail message associated
|
||||
* with {@code cause} is <i>not</i> automatically incorporated in
|
||||
* this error's detail message.
|
||||
*
|
||||
* @param message the detail message
|
||||
* @param cause the cause, may be {@code null}
|
||||
*/
|
||||
public InvalidContainerAnnotationError(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new InvalidContainerAnnotationError with the
|
||||
* specified cause and a detail message of {@code (cause == null ?
|
||||
* null : cause.toString())} (which typically contains the class
|
||||
* and detail message of {@code cause}).
|
||||
*
|
||||
* @param cause the cause, may be {@code null}
|
||||
*/
|
||||
public InvalidContainerAnnotationError(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs InvalidContainerAnnotationError for the specified
|
||||
* container instance and contained annotation type.
|
||||
*
|
||||
* @param message the detail message
|
||||
* @param cause the cause, may be {@code null}
|
||||
* @param container the erroneous container instance, may be
|
||||
* {@code null}
|
||||
* @param annotationType the annotation type intended to be
|
||||
* contained, may be {@code null}
|
||||
*/
|
||||
public InvalidContainerAnnotationError(String message,
|
||||
Throwable cause,
|
||||
Annotation container,
|
||||
Class<? extends Annotation> annotationType) {
|
||||
super(message, cause);
|
||||
this.container = container;
|
||||
this.annotationType = annotationType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the erroneous container.
|
||||
*
|
||||
* @return the erroneous container, may return {@code null}
|
||||
*/
|
||||
public Annotation getContainer() {
|
||||
return container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the annotation type intended to be contained. Returns
|
||||
* {@code null} if the annotation type intended to be contained
|
||||
* could not be determined.
|
||||
*
|
||||
* @return the annotation type intended to be contained, or {@code
|
||||
* null} if unknown
|
||||
*/
|
||||
public Class<? extends Annotation> getAnnotationType() {
|
||||
return annotationType;
|
||||
}
|
||||
}
|
||||
@ -30,8 +30,7 @@ import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import sun.util.logging.PlatformLogger;
|
||||
import jdk.internal.org.objectweb.asm.*;
|
||||
import static jdk.internal.org.objectweb.asm.Opcodes.*;
|
||||
import sun.misc.Unsafe;
|
||||
@ -192,7 +191,7 @@ import sun.misc.Unsafe;
|
||||
try (FileOutputStream fos = new FileOutputStream(lambdaClassName.replace('/', '.') + ".class")) {
|
||||
fos.write(classBytes);
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(InnerClassLambdaMetafactory.class.getName()).log(Level.SEVERE, null, ex);
|
||||
PlatformLogger.getLogger(InnerClassLambdaMetafactory.class.getName()).severe(ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -448,7 +448,7 @@ class MethodHandleNatives {
|
||||
case "getDriver":
|
||||
case "getDrivers":
|
||||
case "deregisterDriver":
|
||||
return defc == java.sql.DriverManager.class;
|
||||
return defc == getClass("java.sql.DriverManager");
|
||||
case "newUpdater":
|
||||
if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class) return true;
|
||||
if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class) return true;
|
||||
@ -482,4 +482,14 @@ class MethodHandleNatives {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// avoid static dependency to a class in other modules
|
||||
private static Class<?> getClass(String cn) {
|
||||
try {
|
||||
return Class.forName(cn, false,
|
||||
MethodHandleNatives.class.getClassLoader());
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new InternalError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, 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
|
||||
@ -184,11 +184,18 @@ public class AccessibleObject implements AnnotatedElement {
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.5
|
||||
*/
|
||||
public boolean isAnnotationPresent(
|
||||
Class<? extends Annotation> annotationClass) {
|
||||
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
|
||||
return getAnnotation(annotationClass) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <T extends Annotation> T[] getAnnotations(Class<T> annotationClass) {
|
||||
throw new AssertionError("All subclasses should override this method");
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
*/
|
||||
@ -196,6 +203,28 @@ public class AccessibleObject implements AnnotatedElement {
|
||||
return getDeclaredAnnotations();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass) {
|
||||
// Only annotations on classes are inherited, for all other
|
||||
// objects getDeclaredAnnotation is the same as
|
||||
// getAnnotation.
|
||||
return getAnnotation(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <T extends Annotation> T[] getDeclaredAnnotations(Class<T> annotationClass) {
|
||||
// Only annotations on classes are inherited, for all other
|
||||
// objects getDeclaredAnnotations is the same as
|
||||
// getAnnotations.
|
||||
return getAnnotations(annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2012, 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
|
||||
@ -45,6 +45,11 @@ import java.lang.annotation.Annotation;
|
||||
* a {@link EnumConstantNotPresentException} if the enum constant in the
|
||||
* annotation is no longer present in the enum type.
|
||||
*
|
||||
* <p>Attempting to read annotations of a repeatable annotation type T
|
||||
* that are contained in an annotation whose type is not, in fact, the
|
||||
* containing annotation type of T will result in an
|
||||
* InvalidContainerAnnotationError.
|
||||
*
|
||||
* <p>Finally, Attempting to read a member whose definition has evolved
|
||||
* incompatibly will result in a {@link
|
||||
* java.lang.annotation.AnnotationTypeMismatchException} or an
|
||||
@ -55,6 +60,7 @@ import java.lang.annotation.Annotation;
|
||||
* @see java.lang.annotation.AnnotationFormatError
|
||||
* @see java.lang.annotation.AnnotationTypeMismatchException
|
||||
* @see java.lang.annotation.IncompleteAnnotationException
|
||||
* @see java.lang.annotation.InvalidContainerAnnotationError
|
||||
* @since 1.5
|
||||
* @author Josh Bloch
|
||||
*/
|
||||
@ -86,6 +92,23 @@ public interface AnnotatedElement {
|
||||
*/
|
||||
<T extends Annotation> T getAnnotation(Class<T> annotationClass);
|
||||
|
||||
/**
|
||||
* Returns an array of all this element's annotations for the
|
||||
* specified type if one or more of such annotation is present,
|
||||
* else an array of length zero.
|
||||
*
|
||||
* The caller of this method is free to modify the returned array;
|
||||
* it will have no effect on the arrays returned to other callers.
|
||||
*
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return all this element's annotations for the specified annotation type if
|
||||
* present on this element, else an array of length zero
|
||||
* @throws NullPointerException if the given annotation class is null
|
||||
* @since 1.8
|
||||
*/
|
||||
<T extends Annotation> T[] getAnnotations(Class<T> annotationClass);
|
||||
|
||||
/**
|
||||
* Returns all annotations present on this element. (Returns an array
|
||||
* of length zero if this element has no annotations.) The caller of
|
||||
@ -97,13 +120,49 @@ public interface AnnotatedElement {
|
||||
*/
|
||||
Annotation[] getAnnotations();
|
||||
|
||||
/**
|
||||
* Returns this element's annotation for the specified type if
|
||||
* such an annotation is present, else null.
|
||||
*
|
||||
* This method ignores inherited annotations. (Returns null if no
|
||||
* annotations are directly present on this element.)
|
||||
*
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return this element's annotation for the specified annotation type if
|
||||
* present on this element, else null
|
||||
* @throws NullPointerException if the given annotation class is null
|
||||
* @since 1.8
|
||||
*/
|
||||
<T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass);
|
||||
|
||||
/**
|
||||
* Returns an array of all this element's annotations for the
|
||||
* specified type if one or more of such annotation is directly
|
||||
* present, else an array of length zero.
|
||||
*
|
||||
* This method ignores inherited annotations. (Returns
|
||||
* an array of length zero if no annotations are directly present
|
||||
* on this element.) The caller of this method is free to modify
|
||||
* the returned array; it will have no effect on the arrays
|
||||
* returned to other callers.
|
||||
*
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return all this element's annotations for the specified annotation type if
|
||||
* present on this element, else an array of length zero
|
||||
* @throws NullPointerException if the given annotation class is null
|
||||
* @since 1.8
|
||||
*/
|
||||
<T extends Annotation> T[] getDeclaredAnnotations(Class<T> annotationClass);
|
||||
|
||||
/**
|
||||
* Returns all annotations that are directly present on this
|
||||
* element. Unlike the other methods in this interface, this method
|
||||
* ignores inherited annotations. (Returns an array of length zero if
|
||||
* no annotations are directly present on this element.) The caller of
|
||||
* this method is free to modify the returned array; it will have no
|
||||
* effect on the arrays returned to other callers.
|
||||
* element. This method ignores inherited annotations. (Returns
|
||||
* an array of length zero if no annotations are directly present
|
||||
* on this element.) The caller of this method is free to modify
|
||||
* the returned array; it will have no effect on the arrays
|
||||
* returned to other callers.
|
||||
*
|
||||
* @return All annotations directly present on this element
|
||||
* @since 1.5
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
@ -26,8 +26,11 @@
|
||||
package java.lang.reflect;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import sun.reflect.annotation.AnnotationParser;
|
||||
import sun.reflect.annotation.AnnotationSupport;
|
||||
import sun.reflect.generics.repository.ConstructorRepository;
|
||||
|
||||
/**
|
||||
@ -363,19 +366,28 @@ public abstract class Executable extends AccessibleObject
|
||||
* {@inheritDoc}
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
|
||||
if (annotationClass == null)
|
||||
throw new NullPointerException();
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
return (T) declaredAnnotations().get(annotationClass);
|
||||
return AnnotationSupport.getOneAnnotation(declaredAnnotations(), annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <T extends Annotation> T[] getAnnotations(Class<T> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
return AnnotationSupport.getMultipleAnnotations(declaredAnnotations(), annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Annotation[] getDeclaredAnnotations() {
|
||||
return AnnotationParser.toArray(declaredAnnotations());
|
||||
return AnnotationSupport.unpackToArray(declaredAnnotations());
|
||||
}
|
||||
|
||||
private transient Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2012, 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
|
||||
@ -33,7 +33,9 @@ import sun.reflect.generics.factory.GenericsFactory;
|
||||
import sun.reflect.generics.scope.ClassScope;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import sun.reflect.annotation.AnnotationParser;
|
||||
import sun.reflect.annotation.AnnotationSupport;
|
||||
|
||||
|
||||
/**
|
||||
@ -1012,19 +1014,28 @@ class Field extends AccessibleObject implements Member {
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.5
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
|
||||
if (annotationClass == null)
|
||||
throw new NullPointerException();
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
return (T) declaredAnnotations().get(annotationClass);
|
||||
return AnnotationSupport.getOneAnnotation(declaredAnnotations(), annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5
|
||||
* {@inheritDoc}
|
||||
* @throws NullPointerException {@inheritDoc}
|
||||
* @since 1.8
|
||||
*/
|
||||
public <T extends Annotation> T[] getAnnotations(Class<T> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
|
||||
return AnnotationSupport.getMultipleAnnotations(declaredAnnotations(), annotationClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Annotation[] getDeclaredAnnotations() {
|
||||
return AnnotationParser.toArray(declaredAnnotations());
|
||||
return AnnotationSupport.unpackToArray(declaredAnnotations());
|
||||
}
|
||||
|
||||
private transient Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
|
||||
|
||||
@ -411,14 +411,13 @@ abstract class AbstractPlainSocketImpl extends SocketImpl
|
||||
* Gets an InputStream for this socket.
|
||||
*/
|
||||
protected synchronized InputStream getInputStream() throws IOException {
|
||||
if (isClosedOrPending()) {
|
||||
throw new IOException("Socket Closed");
|
||||
}
|
||||
if (shut_rd) {
|
||||
throw new IOException("Socket input is shutdown");
|
||||
}
|
||||
if (socketInputStream == null) {
|
||||
socketInputStream = new SocketInputStream(this);
|
||||
synchronized (fdLock) {
|
||||
if (isClosedOrPending())
|
||||
throw new IOException("Socket Closed");
|
||||
if (shut_rd)
|
||||
throw new IOException("Socket input is shutdown");
|
||||
if (socketInputStream == null)
|
||||
socketInputStream = new SocketInputStream(this);
|
||||
}
|
||||
return socketInputStream;
|
||||
}
|
||||
@ -431,14 +430,13 @@ abstract class AbstractPlainSocketImpl extends SocketImpl
|
||||
* Gets an OutputStream for this socket.
|
||||
*/
|
||||
protected synchronized OutputStream getOutputStream() throws IOException {
|
||||
if (isClosedOrPending()) {
|
||||
throw new IOException("Socket Closed");
|
||||
}
|
||||
if (shut_wr) {
|
||||
throw new IOException("Socket output is shutdown");
|
||||
}
|
||||
if (socketOutputStream == null) {
|
||||
socketOutputStream = new SocketOutputStream(this);
|
||||
synchronized (fdLock) {
|
||||
if (isClosedOrPending())
|
||||
throw new IOException("Socket Closed");
|
||||
if (shut_wr)
|
||||
throw new IOException("Socket output is shutdown");
|
||||
if (socketOutputStream == null)
|
||||
socketOutputStream = new SocketOutputStream(this);
|
||||
}
|
||||
return socketOutputStream;
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, 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
|
||||
@ -40,8 +40,8 @@ import java.util.StringTokenizer;
|
||||
* convention follows the hierarchical property naming convention.
|
||||
* Also, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: "foo.*" or "*" is valid,
|
||||
* "*foo" or "a*b" is not valid.
|
||||
* signify a wildcard match. For example: "foo.*" and "*" signify a wildcard
|
||||
* match, while "*foo" and "a*b" do not.
|
||||
* <P>
|
||||
* The following table lists all the possible NetPermission target names,
|
||||
* and for each provides a description of what the permission allows
|
||||
|
||||
@ -46,8 +46,8 @@ import java.io.IOException;
|
||||
* convention follows the hierarchical property naming convention.
|
||||
* An asterisk may appear by itself, or if immediately preceded by a "."
|
||||
* may appear at the end of the name, to signify a wildcard match.
|
||||
* For example, "*" and "java.*" are valid, while "*java", "a*b",
|
||||
* and "java*" are not valid.
|
||||
* For example, "*" and "java.*" signify a wildcard match, while "*java", "a*b",
|
||||
* and "java*" do not.
|
||||
* <P>
|
||||
* The action string (inherited from Permission) is unused.
|
||||
* Thus, BasicPermission is commonly used as the base class for
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2012, 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
|
||||
@ -49,8 +49,8 @@ import java.security.*;
|
||||
* In addition, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: <code>loadLibrary.*</code>
|
||||
* or <code>*</code> is valid,
|
||||
* but <code>*loadLibrary</code> or <code>a*b</code> is not valid.
|
||||
* and <code>*</code> signify a wildcard match,
|
||||
* while <code>*loadLibrary</code> and <code>a*b</code> do not.
|
||||
* <P>
|
||||
* The following table lists all the possible <code>SQLPermission</code> target names.
|
||||
* The table gives a description of what the permission allows
|
||||
|
||||
1316
jdk/src/share/classes/java/util/Base64.java
Normal file
1316
jdk/src/share/classes/java/util/Base64.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -48,8 +48,8 @@ import sun.security.util.SecurityConstants;
|
||||
* convention follows the hierarchical property naming convention.
|
||||
* Also, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: "java.*" or "*" is valid,
|
||||
* "*java" or "a*b" is not valid.
|
||||
* signify a wildcard match. For example: "java.*" and "*" signify a wildcard
|
||||
* match, while "*java" and "a*b" do not.
|
||||
* <P>
|
||||
* <P>
|
||||
* The actions to be granted are passed to the constructor in a string containing
|
||||
|
||||
47
jdk/src/share/classes/java/util/function/BinaryOperator.java
Normal file
47
jdk/src/share/classes/java/util/function/BinaryOperator.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon two operands yielding a result. The operands and the result
|
||||
* are all of the same type.
|
||||
*
|
||||
* @param <T> the type of operands to {@code operate} and of the result
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface BinaryOperator<T> {
|
||||
|
||||
/**
|
||||
* Returns the result of the operation upon the operands.
|
||||
* The operands are named {@code left} and {@code right} for operations
|
||||
* where the order of operands matters.
|
||||
*
|
||||
* @param left the left operand
|
||||
* @param right the right operand
|
||||
* @return the result of the operation
|
||||
*/
|
||||
public T operate(T left, T right);
|
||||
}
|
||||
44
jdk/src/share/classes/java/util/function/Block.java
Normal file
44
jdk/src/share/classes/java/util/function/Block.java
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon an input object. The operation may modify that object or
|
||||
* external state (other objects).
|
||||
*
|
||||
* @param <T> The type of input objects to {@code accept}
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface Block<T> {
|
||||
|
||||
/**
|
||||
* Use the input object in operations which may modify that object or
|
||||
* external state (other objects).
|
||||
*
|
||||
* @param t the input object
|
||||
*/
|
||||
public void accept(T t);
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on two {@code double} operands yielding a {@code double} result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface DoubleBinaryOperator /* extends BinaryOperator<Double> */ {
|
||||
//
|
||||
// @Override
|
||||
// public default Double operate(Double left, Double right) { return operateAsDouble((double) left, (double) right); }
|
||||
|
||||
/**
|
||||
* Returns the {@code double} result of the operation upon the
|
||||
* {@code double} operands. The parameters are named {@code left} and
|
||||
* {@code right} for operations where the order of parameters matters.
|
||||
*
|
||||
* @param left the left operand value
|
||||
* @param right the right operand value
|
||||
* @return the result of the operation
|
||||
*/
|
||||
public double operateAsDouble(double left, double right);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/DoubleBlock.java
Normal file
45
jdk/src/share/classes/java/util/function/DoubleBlock.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon a {@code double} input value. The operation may modify
|
||||
* external state.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Block} for
|
||||
* {@code double} and also may be used as a {@code Block<Double>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface DoubleBlock {
|
||||
|
||||
/**
|
||||
* Use the {@code double} input value in an operation which may modify
|
||||
* external state.
|
||||
*
|
||||
* @param t the input value
|
||||
*/
|
||||
public void accept(double t);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/DoubleFunction.java
Normal file
45
jdk/src/share/classes/java/util/function/DoubleFunction.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate {@code double}
|
||||
* value; this is the {@code double}-bearing specialization for {@link Function}.
|
||||
*
|
||||
* @param <T> the type of input objects to the function
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface DoubleFunction<T> {
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate
|
||||
* {@code double} value.
|
||||
*
|
||||
* @param t the input object
|
||||
* @return the function result value
|
||||
*/
|
||||
public double applyAsDouble(T t);
|
||||
}
|
||||
43
jdk/src/share/classes/java/util/function/DoubleSupplier.java
Normal file
43
jdk/src/share/classes/java/util/function/DoubleSupplier.java
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* A supplier of {@code double} values.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Supplier} for
|
||||
* {@code double} and also may be used as a {@code Supplier<Double>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface DoubleSupplier {
|
||||
|
||||
/**
|
||||
* Returns a {@code double} value.
|
||||
*
|
||||
* @return a {@code double} value
|
||||
*/
|
||||
public double getAsDouble();
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on a single {@code double} operand yielding a {@code double}
|
||||
* result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface DoubleUnaryOperator {
|
||||
|
||||
/**
|
||||
* Returns the {@code double} result of the operation upon the
|
||||
* {@code double} operand.
|
||||
*
|
||||
* @param operand the operand value
|
||||
* @return the operation result value
|
||||
*/
|
||||
public double operateAsDouble(double operand);
|
||||
}
|
||||
47
jdk/src/share/classes/java/util/function/Function.java
Normal file
47
jdk/src/share/classes/java/util/function/Function.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate result object. A
|
||||
* function may variously provide a mapping between types, object instances or
|
||||
* keys and values or any other form of transformation upon the input.
|
||||
*
|
||||
* @param <T> the type of input objects to the {@code apply} operation
|
||||
* @param <R> the type of result objects from the {@code apply} operation. May
|
||||
* be the same type as {@code <T>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface Function<T, R> {
|
||||
|
||||
/**
|
||||
* Yield an appropriate result object for the input object.
|
||||
*
|
||||
* @param t the input object
|
||||
* @return the function result
|
||||
*/
|
||||
public R apply(T t);
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on two {@code int} operands yielding an {@code int} result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface IntBinaryOperator {
|
||||
|
||||
/**
|
||||
* Returns the {@code int} result of the operation upon the {@code int}
|
||||
* operands. The parameters are named {@code left} and {@code right} for
|
||||
* operations where the order of parameters matters.
|
||||
*
|
||||
* @param left the left operand value
|
||||
* @param right the right operand value
|
||||
* @return the result of the operation
|
||||
*/
|
||||
public int operateAsInt(int left, int right);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/IntBlock.java
Normal file
45
jdk/src/share/classes/java/util/function/IntBlock.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon an {@code int} input value. The operation may modify
|
||||
* external state.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Block} for
|
||||
* {@code int} and also may be used as a {@code Block<Integer>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface IntBlock {
|
||||
|
||||
/**
|
||||
* Use the {@code int} input value in an operation which may modify external
|
||||
* state.
|
||||
*
|
||||
* @param t the input value
|
||||
*/
|
||||
public void accept(int t);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/IntFunction.java
Normal file
45
jdk/src/share/classes/java/util/function/IntFunction.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate {@code int}
|
||||
* value; this is the {@code int}-bearing specialization for {@link Function}.
|
||||
*
|
||||
* @param <T> the type of input objects to the function
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface IntFunction<T> {
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate {@code int}
|
||||
* value.
|
||||
*
|
||||
* @param t the input object
|
||||
* @return the function result value
|
||||
*/
|
||||
public int applyAsInt(T t);
|
||||
}
|
||||
43
jdk/src/share/classes/java/util/function/IntSupplier.java
Normal file
43
jdk/src/share/classes/java/util/function/IntSupplier.java
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* A supplier of {@code int} values.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Supplier} for
|
||||
* {@code int} and also may be used as a {@code Supplier<Integer>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface IntSupplier {
|
||||
|
||||
/**
|
||||
* Returns an {@code int} value.
|
||||
*
|
||||
* @return an {@code int} value
|
||||
*/
|
||||
public int getAsInt();
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on a single {@code int} operand yielding an {@code int} result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface IntUnaryOperator {
|
||||
|
||||
/**
|
||||
* Returns the {@code int} result of the operation upon the {@code int}
|
||||
* operand.
|
||||
*
|
||||
* @param operand the operand value
|
||||
* @return the operation result value
|
||||
*/
|
||||
public int operateAsInt(int operand);
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on two {@code long} operands yielding a {@code long} result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface LongBinaryOperator {
|
||||
|
||||
/**
|
||||
* Returns the {@code long} result of the operation upon the {@code long}
|
||||
* operands. The parameters are named {@code left} and {@code right} for
|
||||
* operations where the order of parameters matters.
|
||||
*
|
||||
* @param left the left operand value
|
||||
* @param right the right operand value
|
||||
* @return the result of the operation
|
||||
*/
|
||||
public long operateAsLong(long left, long right);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/LongBlock.java
Normal file
45
jdk/src/share/classes/java/util/function/LongBlock.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon a {@code long} input value. The operation may modify
|
||||
* external state.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Block} for
|
||||
* {@code long} and also may be used as a {@code Block<Long>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface LongBlock {
|
||||
|
||||
/**
|
||||
* Use the {@code long} input value in an operation which may modify
|
||||
* external state.
|
||||
*
|
||||
* @param t the input value
|
||||
*/
|
||||
public void accept(long t);
|
||||
}
|
||||
45
jdk/src/share/classes/java/util/function/LongFunction.java
Normal file
45
jdk/src/share/classes/java/util/function/LongFunction.java
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate {@code long}
|
||||
* value; this is the {@code long}-bearing specialization for {@link Function}.
|
||||
*
|
||||
* @param <T> the type of input objects to the function
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface LongFunction<T> {
|
||||
|
||||
/**
|
||||
* Apply a function to the input object yielding an appropriate {@code long}
|
||||
* value.
|
||||
*
|
||||
* @param t the input object
|
||||
* @return the function result value
|
||||
*/
|
||||
public long applyAsLong(T t);
|
||||
}
|
||||
43
jdk/src/share/classes/java/util/function/LongSupplier.java
Normal file
43
jdk/src/share/classes/java/util/function/LongSupplier.java
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* A supplier of {@code long} values.
|
||||
*
|
||||
* <p/>This is the primitive type specialization of {@link Supplier} for
|
||||
* {@code long} and also may be used as a {@code Supplier<Long>}.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface LongSupplier {
|
||||
|
||||
/**
|
||||
* Returns a {@code long} value.
|
||||
*
|
||||
* @return a {@code long} value.
|
||||
*/
|
||||
public long getAsLong();
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation on a single {@code long} operand yielding a {@code long} result.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface LongUnaryOperator {
|
||||
|
||||
/**
|
||||
* Returns the {@code long} result of the operation upon the {@code long}
|
||||
* operand.
|
||||
*
|
||||
* @param operand the operand value
|
||||
* @return the operation result value
|
||||
*/
|
||||
public long operateAsLong(long operand);
|
||||
}
|
||||
44
jdk/src/share/classes/java/util/function/Predicate.java
Normal file
44
jdk/src/share/classes/java/util/function/Predicate.java
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2012 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 java.util.function;
|
||||
|
||||
/**
|
||||
* Determines if the input object matches some criteria.
|
||||
*
|
||||
* @param <T> the type of input objects to {@code test}
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface Predicate<T> {
|
||||
|
||||
/**
|
||||
* Returns {@code true} if the input object matches some criteria.
|
||||
*
|
||||
* @param t the input object
|
||||
* @return {@code true} if the input object matches some criteria, otherwise
|
||||
* {@code false}
|
||||
*/
|
||||
public boolean test(T t);
|
||||
}
|
||||
43
jdk/src/share/classes/java/util/function/Supplier.java
Normal file
43
jdk/src/share/classes/java/util/function/Supplier.java
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* A supplier of objects. The result objects are either created during the
|
||||
* invocation of {@link #get} or by some prior action.
|
||||
*
|
||||
* @param <T> The type of objects returned by {@code get}
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface Supplier<T> {
|
||||
|
||||
/**
|
||||
* Returns an object.
|
||||
*
|
||||
* @return an object
|
||||
*/
|
||||
public T get();
|
||||
}
|
||||
44
jdk/src/share/classes/java/util/function/UnaryOperator.java
Normal file
44
jdk/src/share/classes/java/util/function/UnaryOperator.java
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 java.util.function;
|
||||
|
||||
/**
|
||||
* An operation upon a single operand yielding a result. The operand and the
|
||||
* result are of the same type.
|
||||
*
|
||||
* @param <T> the type of operand to {@code operate} and of the result
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public interface UnaryOperator<T> {
|
||||
|
||||
/**
|
||||
* Returns the result of the operation upon the operand.
|
||||
*
|
||||
* @param operand the operand
|
||||
* @return the operation result
|
||||
*/
|
||||
public T operate(T operand);
|
||||
}
|
||||
48
jdk/src/share/classes/java/util/function/package-info.java
Normal file
48
jdk/src/share/classes/java/util/function/package-info.java
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2012, 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.
|
||||
*/
|
||||
/**
|
||||
* <em>Functional interfaces</em> provide typing for lambda expressions. Each
|
||||
* functional interface provides a single abstract method to which the lambda
|
||||
* expression's parameter and return types are matched.
|
||||
*
|
||||
* <p>The interfaces in this package are all functional interfaces used with the
|
||||
* collections and streams frameworks. The operation identified by each
|
||||
* interface is generally applied to a collection or stream of objects.
|
||||
*
|
||||
* <p>All functional interface implementations are expected to ensure that:
|
||||
* <ul>
|
||||
* <li>When used for aggregate operations upon many elements it should not be
|
||||
* assumed that the operation will be called upon elements in any specific order.
|
||||
* </li>
|
||||
* <li>{@code null} values are accepted and returned by these functional
|
||||
* interfaces according to the constraints of the specification in which the
|
||||
* functional interfaces are used. The functional interfaces themselves do not
|
||||
* constrain or mandate use of {@code null} values. Most usages of the
|
||||
* functional interfaces will define the role, if any, of {@code null} for that
|
||||
* context.
|
||||
* </li>
|
||||
* </ul>
|
||||
*/
|
||||
package java.util.function;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, 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
|
||||
@ -40,7 +40,6 @@ package javax.net.ssl;
|
||||
* verification fail.
|
||||
*
|
||||
* @author Brad R. Wetmore
|
||||
* @see HostnameVerifierFactory
|
||||
* @since 1.4
|
||||
*/
|
||||
|
||||
|
||||
@ -135,7 +135,8 @@ public final class SNIHostName extends SNIServerName {
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc3490.txt">RFC 3490</A>,
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc1122.txt">RFC 1122</A>,
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc1123.txt">RFC 1123</A>)
|
||||
* for {@code encoded} argument, or use {@link SNIHostName(String)} instead.
|
||||
* for {@code encoded} argument, or use
|
||||
* {@link SNIHostName#SNIHostName(String)} instead.
|
||||
* <P>
|
||||
* The {@code encoded} argument is illegal if it:
|
||||
* <ul>
|
||||
|
||||
@ -44,7 +44,7 @@ package javax.net.ssl;
|
||||
* @see SNIServerName
|
||||
* @see SNIHostName
|
||||
* @see SSLParameters#getSNIMatchers()
|
||||
* @see SSLParameters#setSNIMatchers(Collection<SNIMatcher>)
|
||||
* @see SSLParameters#setSNIMatchers(Collection)
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
|
||||
@ -40,7 +40,7 @@ import java.util.Arrays;
|
||||
* methods that can change the state of an instance once it has been created.
|
||||
*
|
||||
* @see SSLParameters#getServerNames()
|
||||
* @see SSLParameters#setServerNames(List<SNIServerName>)
|
||||
* @see SSLParameters#setServerNames(List)
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
|
||||
@ -343,7 +343,7 @@ public class SSLParameters {
|
||||
* @return null or an immutable list of non-null {@link SNIServerName}s
|
||||
*
|
||||
* @see List
|
||||
* @see #setServerNames(List<SNIServerName>)
|
||||
* @see #setServerNames(List)
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
@ -418,7 +418,7 @@ public class SSLParameters {
|
||||
* @return null or an immutable collection of non-null {@link SNIMatcher}s
|
||||
*
|
||||
* @see SNIMatcher
|
||||
* @see #setSNIMatchers(Collection<SNIMatcher>)
|
||||
* @see #setSNIMatchers(Collection)
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2012, 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
|
||||
@ -37,8 +37,8 @@ import java.security.*;
|
||||
* convention follows the hierarchical property naming convention.
|
||||
* Also, an asterisk
|
||||
* may appear at the end of the name, following a ".", or by itself, to
|
||||
* signify a wildcard match. For example: "foo.*" or "*" is valid,
|
||||
* "*foo" or "a*b" is not valid.
|
||||
* signify a wildcard match. For example: "foo.*" and "*" signify a wildcard
|
||||
* match, while "*foo" and "a*b" do not.
|
||||
* <P>
|
||||
* The following table lists all the possible SSLPermission target names,
|
||||
* and for each provides a description of what the permission allows
|
||||
|
||||
@ -198,8 +198,8 @@ public abstract class SSLSocketFactory extends SocketFactory
|
||||
* (RFC6066)</A>). Data that has been already removed from the
|
||||
* underlying {@link InputStream} should be loaded into the
|
||||
* {@code consumed} stream before this method is called, perhaps
|
||||
* using a {@link ByteArrayInputStream}. When this {@link Socket}
|
||||
* begins handshaking, it will read all of the data in
|
||||
* using a {@link java.io.ByteArrayInputStream}. When this
|
||||
* {@link Socket} begins handshaking, it will read all of the data in
|
||||
* {@code consumed} until it reaches {@code EOF}, then all further
|
||||
* data is read from the underlying {@link InputStream} as
|
||||
* usual.
|
||||
|
||||
@ -127,13 +127,13 @@ public final class AdaptorBootstrap {
|
||||
if (log.isDebugOn())
|
||||
log.debug("getTargetList",Agent.getText("jmxremote.AdaptorBootstrap.getTargetList.processing"));
|
||||
|
||||
final Enumeration td = acl.getTrapDestinations();
|
||||
final Enumeration<InetAddress> td = acl.getTrapDestinations();
|
||||
for (; td.hasMoreElements() ;) {
|
||||
final InetAddress targetAddr = (InetAddress)td.nextElement();
|
||||
final Enumeration tc =
|
||||
final InetAddress targetAddr = td.nextElement();
|
||||
final Enumeration<String> tc =
|
||||
acl.getTrapCommunities(targetAddr);
|
||||
for (;tc.hasMoreElements() ;) {
|
||||
final String community = (String)tc.nextElement();
|
||||
final String community = tc.nextElement();
|
||||
final NotificationTarget target =
|
||||
new NotificationTargetImpl(targetAddr,
|
||||
defaultTrapPort,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2012, 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
|
||||
@ -25,6 +25,7 @@
|
||||
|
||||
package sun.misc;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import sun.reflect.ConstantPool;
|
||||
import sun.reflect.annotation.AnnotationType;
|
||||
import sun.nio.ch.Interruptible;
|
||||
@ -83,4 +84,9 @@ public interface JavaLangAccess {
|
||||
* Returns the ith StackTraceElement for the given throwable.
|
||||
*/
|
||||
StackTraceElement getStackTraceElement(Throwable t, int i);
|
||||
|
||||
/**
|
||||
* Returns a directly present annotation.
|
||||
*/
|
||||
public <A extends Annotation> A getDirectDeclaredAnnotation(Class<?> klass, Class<A> anno);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2012, 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
|
||||
@ -806,4 +806,6 @@ public class AnnotationParser {
|
||||
public static Annotation[] toArray(Map<Class<? extends Annotation>, Annotation> annotations) {
|
||||
return annotations.values().toArray(EMPTY_ANNOTATION_ARRAY);
|
||||
}
|
||||
|
||||
static Annotation[] getEmptyAnnotationArray() { return EMPTY_ANNOTATION_ARRAY; }
|
||||
}
|
||||
|
||||
@ -0,0 +1,232 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 sun.reflect.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
import java.lang.reflect.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import sun.reflect.Reflection;
|
||||
import sun.misc.JavaLangAccess;
|
||||
|
||||
public final class AnnotationSupport {
|
||||
private static JavaLangAccess javaLangAccess = sun.misc.SharedSecrets.getJavaLangAccess();
|
||||
|
||||
/**
|
||||
* Finds and returns _one_ annotation of the type indicated by
|
||||
* {@code annotationClass} from the {@code Map} {@code
|
||||
* annotationMap}. Looks into containers of the {@code
|
||||
* annotationClass} (as specified by an the {@code
|
||||
* annotationClass} type being meta-annotated with an {@code
|
||||
* ContainedBy} annotation).
|
||||
*
|
||||
* @param annotationMap the {@code Map} used to store annotations and indexed by their type
|
||||
* @param annotationClass the type of annotation to search for
|
||||
*
|
||||
* @return in instance of {@code annotationClass} or {@code null} if none were found
|
||||
*/
|
||||
public static <A extends Annotation> A getOneAnnotation(final Map<Class<? extends Annotation>, Annotation> annotationMap,
|
||||
final Class<A> annotationClass) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final A candidate = (A)annotationMap.get(annotationClass);
|
||||
if (candidate != null) {
|
||||
return candidate;
|
||||
}
|
||||
|
||||
final Class<? extends Annotation> containerClass = getContainer(annotationClass);
|
||||
if (containerClass != null) {
|
||||
return unpackOne(annotationMap.get(containerClass), annotationClass);
|
||||
}
|
||||
|
||||
return null; // found none
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and returns all annotation of the type indicated by
|
||||
* {@code annotationClass} from the {@code Map} {@code
|
||||
* annotationMap}. Looks into containers of the {@code
|
||||
* annotationClass} (as specified by an the {@code
|
||||
* annotationClass} type being meta-annotated with an {@code
|
||||
* ContainedBy} annotation).
|
||||
*
|
||||
* @param annotationMap the {@code Map} used to store annotations indexed by their type
|
||||
* @param annotationClass the type of annotation to search for
|
||||
*
|
||||
* @return an array of instances of {@code annotationClass} or an empty array if none were found
|
||||
*/
|
||||
public static <A extends Annotation> A[] getMultipleAnnotations(final Map<Class<? extends Annotation>, Annotation> annotationMap,
|
||||
final Class<A> annotationClass) {
|
||||
final ArrayList<A> res = new ArrayList<A>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final A candidate = (A)annotationMap.get(annotationClass);
|
||||
if (candidate != null) {
|
||||
res.add(candidate);
|
||||
}
|
||||
|
||||
final Class<? extends Annotation> containerClass = getContainer(annotationClass);
|
||||
if (containerClass != null) {
|
||||
res.addAll(unpackAll(annotationMap.get(containerClass), annotationClass));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // should be safe annotationClass is a token for A
|
||||
final A[] emptyTemplateArray = (A[])Array.newInstance(annotationClass, 0);
|
||||
return res.isEmpty() ? emptyTemplateArray : res.toArray(emptyTemplateArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unpacks the {@code annotationMap} parameter into an array of
|
||||
* {@code Annotation}s. This method will unpack all repeating
|
||||
* annotaions containers (once). An annotation type is marked as a
|
||||
* container by meta-annotating it the with the {@code
|
||||
* ContainerFor} annotation.
|
||||
*
|
||||
* @param annotationMap the {@code Map} from where the annotations are unpacked
|
||||
*
|
||||
* @return an array of Annotation
|
||||
*/
|
||||
public static Annotation[] unpackToArray(Map<Class<? extends Annotation>, Annotation> annotationMap) {
|
||||
List<Annotation> res = new ArrayList<>();
|
||||
for (Map.Entry<Class<? extends Annotation>, Annotation> e : annotationMap.entrySet()) {
|
||||
Class<? extends Annotation> annotationClass = e.getKey();
|
||||
Annotation annotationInstance = e.getValue();
|
||||
Class<? extends Annotation> containee = getContainee(e.getKey());
|
||||
boolean isContainer = javaLangAccess.getDirectDeclaredAnnotation(annotationClass, ContainerFor.class) != null;
|
||||
|
||||
if (isContainer) {
|
||||
res.addAll(unpackAll(annotationInstance, containee));
|
||||
} else {
|
||||
res.add(annotationInstance);
|
||||
}
|
||||
}
|
||||
|
||||
return res.isEmpty()
|
||||
? AnnotationParser.getEmptyAnnotationArray()
|
||||
: res.toArray(AnnotationParser.getEmptyAnnotationArray());
|
||||
}
|
||||
|
||||
/** Helper to get the container, or null if none, of an annotation. */
|
||||
private static <A extends Annotation> Class<? extends Annotation> getContainer(Class<A> annotationClass) {
|
||||
ContainedBy containerAnnotation =
|
||||
javaLangAccess.getDirectDeclaredAnnotation(annotationClass, ContainedBy.class);
|
||||
return (containerAnnotation == null) ? null : containerAnnotation.value();
|
||||
}
|
||||
|
||||
/** Helper to get the containee, or null if this isn't a container, of a possible container annotation. */
|
||||
private static <A extends Annotation> Class<? extends Annotation> getContainee(Class<A> annotationClass) {
|
||||
ContainerFor containerAnnotation =
|
||||
javaLangAccess.getDirectDeclaredAnnotation(annotationClass, ContainerFor.class);
|
||||
return (containerAnnotation == null) ? null : containerAnnotation.value();
|
||||
}
|
||||
|
||||
/** Reflectively look up and get the returned array from the the
|
||||
* invocation of the value() element on an instance of an
|
||||
* Annotation.
|
||||
*/
|
||||
private static <A extends Annotation> A[] getValueArray(Annotation containerInstance) {
|
||||
try {
|
||||
// the spec tells us the container must have an array-valued
|
||||
// value element. Get the AnnotationType, get the "value" element
|
||||
// and invoke it to get the contents.
|
||||
|
||||
Class<?> containerClass = containerInstance.annotationType();
|
||||
AnnotationType annoType = javaLangAccess.getAnnotationType(containerClass);
|
||||
if (annoType == null)
|
||||
throw new InvalidContainerAnnotationError(containerInstance + " is an invalid container for repeating annotations");
|
||||
|
||||
Method m = annoType.members().get("value");
|
||||
if (m == null)
|
||||
throw new InvalidContainerAnnotationError(containerInstance + " is an invalid container for repeating annotations");
|
||||
m.setAccessible(true);
|
||||
|
||||
@SuppressWarnings("unchecked") // not provably safe, but we catch the ClassCastException
|
||||
A[] a = (A[])m.invoke(containerInstance); // this will erase to (Annotation[]) but we
|
||||
// do a runtime cast on the return-value
|
||||
// in the methods that call this method
|
||||
return a;
|
||||
} catch (IllegalAccessException | // couldnt loosen security
|
||||
IllegalArgumentException | // parameters doesn't match
|
||||
InvocationTargetException | // the value method threw an exception
|
||||
ClassCastException e) { // well, a cast failed ...
|
||||
e.getCause().printStackTrace();
|
||||
throw new InvalidContainerAnnotationError(containerInstance + " is an invalid container for repeating annotations",
|
||||
e,
|
||||
containerInstance,
|
||||
null);
|
||||
}
|
||||
}
|
||||
|
||||
/* Sanity check type of and return the first annotation instance
|
||||
* of type {@code annotationClass} from {@code
|
||||
* containerInstance}.
|
||||
*/
|
||||
private static <A extends Annotation> A unpackOne(Annotation containerInstance, Class<A> annotationClass) {
|
||||
if (containerInstance == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return annotationClass.cast(getValueArray(containerInstance)[0]);
|
||||
} catch (ArrayIndexOutOfBoundsException | // empty array
|
||||
ClassCastException | // well, a cast failed ...
|
||||
NullPointerException e) { // can this NP? for good meassure
|
||||
throw new InvalidContainerAnnotationError(String.format("%s is an invalid container for repeating annotations of type: %s",
|
||||
containerInstance, annotationClass),
|
||||
e,
|
||||
containerInstance,
|
||||
annotationClass);
|
||||
}
|
||||
}
|
||||
|
||||
/* Sanity check type of and return a list of all the annotation
|
||||
* instances of type {@code annotationClass} from {@code
|
||||
* containerInstance}.
|
||||
*/
|
||||
private static <A extends Annotation> List<A> unpackAll(Annotation containerInstance, Class<A> annotationClass) {
|
||||
if (containerInstance == null) {
|
||||
return Collections.emptyList(); // container not present
|
||||
}
|
||||
|
||||
try {
|
||||
A[] a = getValueArray(containerInstance);
|
||||
ArrayList<A> l = new ArrayList<>(a.length);
|
||||
for (int i = 0; i < a.length; i++)
|
||||
l.add(annotationClass.cast(a[i]));
|
||||
return l;
|
||||
} catch (ClassCastException |
|
||||
NullPointerException e) {
|
||||
throw new InvalidContainerAnnotationError(String.format("%s is an invalid container for repeating annotations of type: %s",
|
||||
containerInstance, annotationClass),
|
||||
e,
|
||||
containerInstance,
|
||||
annotationClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2012, 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
|
||||
@ -26,6 +26,7 @@
|
||||
package sun.reflect.generics.reflectiveObjects;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.GenericDeclaration;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
@ -192,6 +193,25 @@ public class TypeVariableImpl<D extends GenericDeclaration>
|
||||
return null;
|
||||
}
|
||||
|
||||
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Annotation> T[] getAnnotations(Class<T> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
// safe because annotationClass is the class for T
|
||||
return (T[])Array.newInstance(annotationClass, 0);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Annotation> T[] getDeclaredAnnotations(Class<T> annotationClass) {
|
||||
Objects.requireNonNull(annotationClass);
|
||||
// safe because annotationClass is the class for T
|
||||
return (T[])Array.newInstance(annotationClass, 0);
|
||||
}
|
||||
|
||||
public Annotation[] getAnnotations() {
|
||||
// Since zero-length, don't need defensive clone
|
||||
return EMPTY_ANNOTATION_ARRAY;
|
||||
|
||||
@ -55,6 +55,7 @@ class AppInputStream extends InputStream {
|
||||
* Return the minimum number of bytes that can be read without blocking.
|
||||
* Currently not synchronized.
|
||||
*/
|
||||
@Override
|
||||
public int available() throws IOException {
|
||||
if (c.checkEOF() || (r.isAppDataValid() == false)) {
|
||||
return 0;
|
||||
@ -65,6 +66,7 @@ class AppInputStream extends InputStream {
|
||||
/**
|
||||
* Read a single byte, returning -1 on non-fault EOF status.
|
||||
*/
|
||||
@Override
|
||||
public synchronized int read() throws IOException {
|
||||
int n = read(oneByte, 0, 1);
|
||||
if (n <= 0) { // EOF
|
||||
@ -79,6 +81,7 @@ class AppInputStream extends InputStream {
|
||||
* are responsible only for blocking to fill at most one buffer,
|
||||
* and returning "-1" on non-fault EOF status.
|
||||
*/
|
||||
@Override
|
||||
public synchronized int read(byte b[], int off, int len)
|
||||
throws IOException {
|
||||
if (b == null) {
|
||||
@ -124,6 +127,7 @@ class AppInputStream extends InputStream {
|
||||
* is static and may garbled by concurrent use, but we are not interested
|
||||
* in the data anyway.
|
||||
*/
|
||||
@Override
|
||||
public synchronized long skip(long n) throws IOException {
|
||||
long skipped = 0;
|
||||
while (n > 0) {
|
||||
@ -141,6 +145,7 @@ class AppInputStream extends InputStream {
|
||||
/*
|
||||
* Socket close is already synchronized, no need to block here.
|
||||
*/
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
c.close();
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ class AppOutputStream extends OutputStream {
|
||||
/**
|
||||
* Write the data out, NOW.
|
||||
*/
|
||||
@Override
|
||||
synchronized public void write(byte b[], int off, int len)
|
||||
throws IOException {
|
||||
if (b == null) {
|
||||
@ -131,6 +132,7 @@ class AppOutputStream extends OutputStream {
|
||||
/**
|
||||
* Write one byte now.
|
||||
*/
|
||||
@Override
|
||||
synchronized public void write(int i) throws IOException {
|
||||
oneByte[0] = (byte)i;
|
||||
write(oneByte, 0, 1);
|
||||
@ -139,6 +141,7 @@ class AppOutputStream extends OutputStream {
|
||||
/*
|
||||
* Socket close is already synchronized, no need to block here.
|
||||
*/
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
c.close();
|
||||
}
|
||||
|
||||
@ -102,6 +102,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* associated with this socket, if any.
|
||||
* @see java.net.Socket#getChannel
|
||||
*/
|
||||
@Override
|
||||
public final SocketChannel getChannel() {
|
||||
if (self == this) {
|
||||
return super.getChannel();
|
||||
@ -114,6 +115,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Binds the address to the socket.
|
||||
* @see java.net.Socket#bind
|
||||
*/
|
||||
@Override
|
||||
public void bind(SocketAddress bindpoint) throws IOException {
|
||||
/*
|
||||
* Bind to this socket
|
||||
@ -131,6 +133,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the address of the endpoint this socket is connected to
|
||||
* @see java.net.Socket#getLocalSocketAddress
|
||||
*/
|
||||
@Override
|
||||
public SocketAddress getLocalSocketAddress() {
|
||||
if (self == this) {
|
||||
return super.getLocalSocketAddress();
|
||||
@ -143,6 +146,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the address of the endpoint this socket is connected to
|
||||
* @see java.net.Socket#getRemoteSocketAddress
|
||||
*/
|
||||
@Override
|
||||
public SocketAddress getRemoteSocketAddress() {
|
||||
if (self == this) {
|
||||
return super.getRemoteSocketAddress();
|
||||
@ -164,6 +168,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* @param endpoint the <code>SocketAddress</code>
|
||||
* @throws IOException if an error occurs during the connection
|
||||
*/
|
||||
@Override
|
||||
public final void connect(SocketAddress endpoint) throws IOException {
|
||||
connect(endpoint, 0);
|
||||
}
|
||||
@ -172,6 +177,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the connection state of the socket.
|
||||
* @see java.net.Socket#isConnected
|
||||
*/
|
||||
@Override
|
||||
public final boolean isConnected() {
|
||||
if (self == this) {
|
||||
return super.isConnected();
|
||||
@ -184,6 +190,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the binding state of the socket.
|
||||
* @see java.net.Socket#isBound
|
||||
*/
|
||||
@Override
|
||||
public final boolean isBound() {
|
||||
if (self == this) {
|
||||
return super.isBound();
|
||||
@ -203,6 +210,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
*/
|
||||
@Override
|
||||
public final void shutdownInput() throws IOException {
|
||||
throw new UnsupportedOperationException("The method shutdownInput()" +
|
||||
" is not supported in SSLSocket");
|
||||
@ -215,6 +223,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
*/
|
||||
@Override
|
||||
public final void shutdownOutput() throws IOException {
|
||||
throw new UnsupportedOperationException("The method shutdownOutput()" +
|
||||
" is not supported in SSLSocket");
|
||||
@ -225,6 +234,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the input state of the socket
|
||||
* @see java.net.Socket#isInputShutdown
|
||||
*/
|
||||
@Override
|
||||
public final boolean isInputShutdown() {
|
||||
if (self == this) {
|
||||
return super.isInputShutdown();
|
||||
@ -237,6 +247,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the output state of the socket
|
||||
* @see java.net.Socket#isOutputShutdown
|
||||
*/
|
||||
@Override
|
||||
public final boolean isOutputShutdown() {
|
||||
if (self == this) {
|
||||
return super.isOutputShutdown();
|
||||
@ -252,6 +263,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* rather than forcing them to be explicitly reclaimed at
|
||||
* the penalty of prematurly killing SSL sessions.
|
||||
*/
|
||||
@Override
|
||||
protected final void finalize() throws Throwable {
|
||||
try {
|
||||
close();
|
||||
@ -281,6 +293,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
/**
|
||||
* Returns the address of the remote peer for this connection.
|
||||
*/
|
||||
@Override
|
||||
public final InetAddress getInetAddress() {
|
||||
if (self == this) {
|
||||
return super.getInetAddress();
|
||||
@ -295,6 +308,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* @return the local address to which the socket is bound.
|
||||
* @since JDK1.1
|
||||
*/
|
||||
@Override
|
||||
public final InetAddress getLocalAddress() {
|
||||
if (self == this) {
|
||||
return super.getLocalAddress();
|
||||
@ -306,6 +320,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
/**
|
||||
* Returns the number of the remote port that this connection uses.
|
||||
*/
|
||||
@Override
|
||||
public final int getPort() {
|
||||
if (self == this) {
|
||||
return super.getPort();
|
||||
@ -317,6 +332,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
/**
|
||||
* Returns the number of the local port that this connection uses.
|
||||
*/
|
||||
@Override
|
||||
public final int getLocalPort() {
|
||||
if (self == this) {
|
||||
return super.getLocalPort();
|
||||
@ -333,6 +349,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Enables or disables the Nagle optimization.
|
||||
* @see java.net.Socket#setTcpNoDelay
|
||||
*/
|
||||
@Override
|
||||
public final void setTcpNoDelay(boolean value) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setTcpNoDelay(value);
|
||||
@ -348,6 +365,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
*
|
||||
* @see java.net.Socket#getTcpNoDelay
|
||||
*/
|
||||
@Override
|
||||
public final boolean getTcpNoDelay() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getTcpNoDelay();
|
||||
@ -360,6 +378,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Assigns the socket's linger timeout.
|
||||
* @see java.net.Socket#setSoLinger
|
||||
*/
|
||||
@Override
|
||||
public final void setSoLinger(boolean flag, int linger)
|
||||
throws SocketException {
|
||||
if (self == this) {
|
||||
@ -373,6 +392,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the socket's linger timeout.
|
||||
* @see java.net.Socket#getSoLinger
|
||||
*/
|
||||
@Override
|
||||
public final int getSoLinger() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getSoLinger();
|
||||
@ -388,6 +408,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* this for an SSLSocket. An implementation can be provided if a need
|
||||
* arises in future.
|
||||
*/
|
||||
@Override
|
||||
public final void sendUrgentData(int data) throws SocketException {
|
||||
throw new SocketException("This method is not supported "
|
||||
+ "by SSLSockets");
|
||||
@ -401,6 +422,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Setting OOBInline does not have any effect on SSLSocket,
|
||||
* since currently we don't support sending urgent data.
|
||||
*/
|
||||
@Override
|
||||
public final void setOOBInline(boolean on) throws SocketException {
|
||||
throw new SocketException("This method is ineffective, since"
|
||||
+ " sending urgent data is not supported by SSLSockets");
|
||||
@ -410,6 +432,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Tests if OOBINLINE is enabled.
|
||||
* @see java.net.Socket#getOOBInline
|
||||
*/
|
||||
@Override
|
||||
public final boolean getOOBInline() throws SocketException {
|
||||
throw new SocketException("This method is ineffective, since"
|
||||
+ " sending urgent data is not supported by SSLSockets");
|
||||
@ -419,6 +442,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Returns the socket timeout.
|
||||
* @see java.net.Socket#getSoTimeout
|
||||
*/
|
||||
@Override
|
||||
public final int getSoTimeout() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getSoTimeout();
|
||||
@ -427,6 +451,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setSendBufferSize(int size) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setSendBufferSize(size);
|
||||
@ -435,6 +460,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getSendBufferSize() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getSendBufferSize();
|
||||
@ -443,6 +469,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setReceiveBufferSize(int size) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setReceiveBufferSize(size);
|
||||
@ -451,6 +478,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getReceiveBufferSize() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getReceiveBufferSize();
|
||||
@ -463,6 +491,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Enable/disable SO_KEEPALIVE.
|
||||
* @see java.net.Socket#setKeepAlive
|
||||
*/
|
||||
@Override
|
||||
public final void setKeepAlive(boolean on) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setKeepAlive(on);
|
||||
@ -475,6 +504,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Tests if SO_KEEPALIVE is enabled.
|
||||
* @see java.net.Socket#getKeepAlive
|
||||
*/
|
||||
@Override
|
||||
public final boolean getKeepAlive() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getKeepAlive();
|
||||
@ -488,6 +518,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* packets sent from this Socket.
|
||||
* @see java.net.Socket#setTrafficClass
|
||||
*/
|
||||
@Override
|
||||
public final void setTrafficClass(int tc) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setTrafficClass(tc);
|
||||
@ -501,6 +532,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* sent from this Socket.
|
||||
* @see java.net.Socket#getTrafficClass
|
||||
*/
|
||||
@Override
|
||||
public final int getTrafficClass() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getTrafficClass();
|
||||
@ -513,6 +545,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Enable/disable SO_REUSEADDR.
|
||||
* @see java.net.Socket#setReuseAddress
|
||||
*/
|
||||
@Override
|
||||
public final void setReuseAddress(boolean on) throws SocketException {
|
||||
if (self == this) {
|
||||
super.setReuseAddress(on);
|
||||
@ -525,6 +558,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
* Tests if SO_REUSEADDR is enabled.
|
||||
* @see java.net.Socket#getReuseAddress
|
||||
*/
|
||||
@Override
|
||||
public final boolean getReuseAddress() throws SocketException {
|
||||
if (self == this) {
|
||||
return super.getReuseAddress();
|
||||
@ -538,6 +572,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket {
|
||||
*
|
||||
* @see java.net.Socket#setPerformancePreferences(int, int, int)
|
||||
*/
|
||||
@Override
|
||||
public void setPerformancePreferences(int connectionTime,
|
||||
int latency, int bandwidth) {
|
||||
if (self == this) {
|
||||
|
||||
@ -50,6 +50,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
*
|
||||
* Increments position().
|
||||
*/
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
|
||||
if (bb == null) {
|
||||
@ -67,6 +68,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
*
|
||||
* Increments position().
|
||||
*/
|
||||
@Override
|
||||
public int read(byte b[]) throws IOException {
|
||||
|
||||
if (bb == null) {
|
||||
@ -81,6 +83,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
*
|
||||
* Increments position().
|
||||
*/
|
||||
@Override
|
||||
public int read(byte b[], int off, int len) throws IOException {
|
||||
|
||||
if (bb == null) {
|
||||
@ -108,6 +111,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
* Skips over and discards <code>n</code> bytes of data from this input
|
||||
* stream.
|
||||
*/
|
||||
@Override
|
||||
public long skip(long n) throws IOException {
|
||||
|
||||
if (bb == null) {
|
||||
@ -135,6 +139,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
* from this input stream without blocking by the next caller of a
|
||||
* method for this input stream.
|
||||
*/
|
||||
@Override
|
||||
public int available() throws IOException {
|
||||
|
||||
if (bb == null) {
|
||||
@ -150,6 +155,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
*
|
||||
* @exception IOException if an I/O error occurs.
|
||||
*/
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
bb = null;
|
||||
}
|
||||
@ -157,12 +163,14 @@ class ByteBufferInputStream extends InputStream {
|
||||
/**
|
||||
* Marks the current position in this input stream.
|
||||
*/
|
||||
@Override
|
||||
public synchronized void mark(int readlimit) {}
|
||||
|
||||
/**
|
||||
* Repositions this stream to the position at the time the
|
||||
* <code>mark</code> method was last called on this input stream.
|
||||
*/
|
||||
@Override
|
||||
public synchronized void reset() throws IOException {
|
||||
throw new IOException("mark/reset not supported");
|
||||
}
|
||||
@ -171,6 +179,7 @@ class ByteBufferInputStream extends InputStream {
|
||||
* Tests if this input stream supports the <code>mark</code> and
|
||||
* <code>reset</code> methods.
|
||||
*/
|
||||
@Override
|
||||
public boolean markSupported() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -32,7 +32,6 @@ import java.util.Hashtable;
|
||||
|
||||
import java.security.*;
|
||||
import javax.crypto.*;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
|
||||
import java.nio.*;
|
||||
|
||||
@ -37,7 +37,6 @@ import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import sun.security.ssl.CipherSuite.*;
|
||||
import static sun.security.ssl.CipherSuite.KeyExchange.*;
|
||||
import static sun.security.ssl.CipherSuite.PRF.*;
|
||||
import static sun.security.ssl.JsseJce.*;
|
||||
@ -203,6 +202,7 @@ final class CipherSuite implements Comparable<CipherSuite> {
|
||||
* Note that for unsupported CipherSuites parsed from a handshake
|
||||
* message we violate the equals() contract.
|
||||
*/
|
||||
@Override
|
||||
public int compareTo(CipherSuite o) {
|
||||
return o.priority - priority;
|
||||
}
|
||||
@ -210,6 +210,7 @@ final class CipherSuite implements Comparable<CipherSuite> {
|
||||
/**
|
||||
* Returns this.name.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
@ -378,6 +379,7 @@ final class CipherSuite implements Comparable<CipherSuite> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
@ -527,6 +529,7 @@ final class CipherSuite implements Comparable<CipherSuite> {
|
||||
return b.booleanValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return description;
|
||||
}
|
||||
@ -562,6 +565,7 @@ final class CipherSuite implements Comparable<CipherSuite> {
|
||||
return new MAC(this, protocolVersion, secret);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@ -177,6 +177,7 @@ final class CipherSuiteList {
|
||||
return suiteNames.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return cipherSuites.toString();
|
||||
}
|
||||
|
||||
@ -45,7 +45,6 @@ import javax.net.ssl.*;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import sun.security.ssl.HandshakeMessage.*;
|
||||
import sun.security.ssl.CipherSuite.*;
|
||||
import static sun.security.ssl.CipherSuite.KeyExchange.*;
|
||||
|
||||
/**
|
||||
@ -128,6 +127,7 @@ final class ClientHandshaker extends Handshaker {
|
||||
* is processed, and writes responses as needed using the connection
|
||||
* in the constructor.
|
||||
*/
|
||||
@Override
|
||||
void processMessage(byte type, int messageLen) throws IOException {
|
||||
if (state > type
|
||||
&& (type != HandshakeMessage.ht_hello_request
|
||||
@ -505,6 +505,7 @@ final class ClientHandshaker extends Handshaker {
|
||||
try {
|
||||
subject = AccessController.doPrivileged(
|
||||
new PrivilegedExceptionAction<Subject>() {
|
||||
@Override
|
||||
public Subject run() throws Exception {
|
||||
return Krb5Helper.getClientSubject(getAccSE());
|
||||
}});
|
||||
@ -556,10 +557,6 @@ final class ClientHandshaker extends Handshaker {
|
||||
}
|
||||
|
||||
if (resumingSession && session != null) {
|
||||
if (protocolVersion.v >= ProtocolVersion.TLS12.v) {
|
||||
handshakeHash.setCertificateVerifyAlg(null);
|
||||
}
|
||||
|
||||
setHandshakeSessionSE(session);
|
||||
return;
|
||||
}
|
||||
@ -974,8 +971,6 @@ final class ClientHandshaker extends Handshaker {
|
||||
throw new SSLHandshakeException(
|
||||
"No supported hash algorithm");
|
||||
}
|
||||
|
||||
handshakeHash.setCertificateVerifyAlg(hashAlg);
|
||||
}
|
||||
|
||||
m3 = new CertificateVerify(protocolVersion, handshakeHash,
|
||||
@ -993,10 +988,6 @@ final class ClientHandshaker extends Handshaker {
|
||||
}
|
||||
m3.write(output);
|
||||
output.doHashes();
|
||||
} else {
|
||||
if (protocolVersion.v >= ProtocolVersion.TLS12.v) {
|
||||
handshakeHash.setCertificateVerifyAlg(null);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1104,6 +1095,7 @@ final class ClientHandshaker extends Handshaker {
|
||||
/*
|
||||
* Returns a ClientHello message to kickstart renegotiations
|
||||
*/
|
||||
@Override
|
||||
HandshakeMessage getKickstartMessage() throws SSLException {
|
||||
// session ID of the ClientHello message
|
||||
SessionId sessionId = SSLSessionImpl.nullSession.getSessionId();
|
||||
@ -1279,6 +1271,7 @@ final class ClientHandshaker extends Handshaker {
|
||||
/*
|
||||
* Fault detected during handshake.
|
||||
*/
|
||||
@Override
|
||||
void handshakeAlert(byte description) throws SSLProtocolException {
|
||||
String message = Alerts.alertDescription(description);
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@ import java.math.BigInteger;
|
||||
*/
|
||||
final class DHClientKeyExchange extends HandshakeMessage {
|
||||
|
||||
@Override
|
||||
int messageType() {
|
||||
return ht_client_key_exchange;
|
||||
}
|
||||
@ -75,6 +76,7 @@ final class DHClientKeyExchange extends HandshakeMessage {
|
||||
dh_Yc = input.getBytes16();
|
||||
}
|
||||
|
||||
@Override
|
||||
int messageLength() {
|
||||
if (dh_Yc == null) {
|
||||
return 0;
|
||||
@ -83,10 +85,12 @@ final class DHClientKeyExchange extends HandshakeMessage {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void send(HandshakeOutStream s) throws IOException {
|
||||
s.putBytes16(dh_Yc);
|
||||
}
|
||||
|
||||
@Override
|
||||
void print(PrintStream s) throws IOException {
|
||||
s.println("*** ClientKeyExchange, DH");
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@ import java.security.spec.*;
|
||||
*/
|
||||
final class ECDHClientKeyExchange extends HandshakeMessage {
|
||||
|
||||
@Override
|
||||
int messageType() {
|
||||
return ht_client_key_exchange;
|
||||
}
|
||||
@ -63,14 +64,17 @@ final class ECDHClientKeyExchange extends HandshakeMessage {
|
||||
encodedPoint = input.getBytes8();
|
||||
}
|
||||
|
||||
@Override
|
||||
int messageLength() {
|
||||
return encodedPoint.length + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
void send(HandshakeOutStream s) throws IOException {
|
||||
s.putBytes8(encodedPoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
void print(PrintStream s) throws IOException {
|
||||
s.println("*** ECDHClientKeyExchange");
|
||||
|
||||
|
||||
@ -31,7 +31,6 @@ import java.security.spec.*;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.KeyAgreement;
|
||||
import javax.crypto.spec.*;
|
||||
|
||||
/**
|
||||
* Helper class for the ECDH key exchange. It generates the appropriate
|
||||
|
||||
@ -64,6 +64,7 @@ final class EngineInputRecord extends InputRecord {
|
||||
this.engine = engine;
|
||||
}
|
||||
|
||||
@Override
|
||||
byte contentType() {
|
||||
if (internalData) {
|
||||
return super.contentType();
|
||||
@ -271,6 +272,7 @@ final class EngineInputRecord extends InputRecord {
|
||||
* data to be generated/output before the exception is ever
|
||||
* generated.
|
||||
*/
|
||||
@Override
|
||||
void writeBuffer(OutputStream s, byte [] buf, int off, int len)
|
||||
throws IOException {
|
||||
/*
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user