Merge
This commit is contained in:
commit
dc44526b3f
3
.hgtags
3
.hgtags
@ -93,3 +93,6 @@ f960f117f1623629f64203e2b09a92a8f6f14ff5 jdk7-b112
|
|||||||
a4e6aa1f45ad23a6f083ed98d970b5006ea4d292 jdk7-b116
|
a4e6aa1f45ad23a6f083ed98d970b5006ea4d292 jdk7-b116
|
||||||
228e73f288c543a8c34e2a54227103ae5649e6af jdk7-b117
|
228e73f288c543a8c34e2a54227103ae5649e6af jdk7-b117
|
||||||
2e876e59938a853934aa738c811b26c452bd9fe8 jdk7-b118
|
2e876e59938a853934aa738c811b26c452bd9fe8 jdk7-b118
|
||||||
|
4951967a61b4dbbf514828879f57bd1a0d4b420b jdk7-b119
|
||||||
|
8c840d3ab24f8d0f422b991638acb44b6ab1d98c jdk7-b120
|
||||||
|
0ce0a2c3a6926677dc507839a820ab6625541e5a jdk7-b121
|
||||||
|
@ -93,3 +93,6 @@ e8ebdf41b9c01a26642848f4134f5504e8fb3233 jdk7-b115
|
|||||||
94e9a1bfba8b8d1fe0bfd43b88629b1f27b02a76 jdk7-b116
|
94e9a1bfba8b8d1fe0bfd43b88629b1f27b02a76 jdk7-b116
|
||||||
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
|
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
|
||||||
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
||||||
|
661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119
|
||||||
|
366ff0b6d2151595629806b033e2e1497e3a55d4 jdk7-b120
|
||||||
|
2c2d4f88637b488014c37e1a2eb401f68bca8838 jdk7-b121
|
||||||
|
@ -93,3 +93,6 @@ da7561d479e0ddaa4650d8023ac0fc7294e014e3 jdk7-b115
|
|||||||
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
|
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
|
||||||
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
|
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
|
||||||
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
|
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
|
||||||
|
39829414ae31a0080578a49b751899edd518cd7d jdk7-b119
|
||||||
|
cff5a173ec1e89013359e804a3e31736ef6fb462 jdk7-b120
|
||||||
|
2cc9f32992101732b23730b737740e64ebc5fa89 jdk7-b121
|
||||||
|
@ -74,6 +74,7 @@ import com.sun.corba.se.spi.ior.iiop.IIOPProfileTemplate;
|
|||||||
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
|
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
|
||||||
import com.sun.corba.se.spi.orb.ORB;
|
import com.sun.corba.se.spi.orb.ORB;
|
||||||
import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
|
import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
|
||||||
|
import com.sun.corba.se.spi.protocol.RetryType;
|
||||||
import com.sun.corba.se.spi.transport.CorbaContactInfo;
|
import com.sun.corba.se.spi.transport.CorbaContactInfo;
|
||||||
import com.sun.corba.se.spi.transport.CorbaContactInfoList;
|
import com.sun.corba.se.spi.transport.CorbaContactInfoList;
|
||||||
import com.sun.corba.se.spi.transport.CorbaContactInfoListIterator;
|
import com.sun.corba.se.spi.transport.CorbaContactInfoListIterator;
|
||||||
@ -110,7 +111,7 @@ public final class ClientRequestInfoImpl
|
|||||||
|
|
||||||
// The current retry request status. True if this request is being
|
// The current retry request status. True if this request is being
|
||||||
// retried and this info object is to be reused, or false otherwise.
|
// retried and this info object is to be reused, or false otherwise.
|
||||||
private boolean retryRequest;
|
private RetryType retryRequest;
|
||||||
|
|
||||||
// The number of times this info object has been (re)used. This is
|
// The number of times this info object has been (re)used. This is
|
||||||
// incremented every time a request is retried, and decremented every
|
// incremented every time a request is retried, and decremented every
|
||||||
@ -163,7 +164,8 @@ public final class ClientRequestInfoImpl
|
|||||||
|
|
||||||
// Please keep these in the same order that they're declared above.
|
// Please keep these in the same order that they're declared above.
|
||||||
|
|
||||||
retryRequest = false;
|
// 6763340
|
||||||
|
retryRequest = RetryType.NONE;
|
||||||
|
|
||||||
// Do not reset entryCount because we need to know when to pop this
|
// Do not reset entryCount because we need to know when to pop this
|
||||||
// from the stack.
|
// from the stack.
|
||||||
@ -824,14 +826,15 @@ public final class ClientRequestInfoImpl
|
|||||||
/**
|
/**
|
||||||
* Set or reset the retry request flag.
|
* Set or reset the retry request flag.
|
||||||
*/
|
*/
|
||||||
void setRetryRequest( boolean retryRequest ) {
|
void setRetryRequest( RetryType retryRequest ) {
|
||||||
this.retryRequest = retryRequest;
|
this.retryRequest = retryRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the current retry request status.
|
* Retrieve the current retry request status.
|
||||||
*/
|
*/
|
||||||
boolean getRetryRequest() {
|
RetryType getRetryRequest() {
|
||||||
|
// 6763340
|
||||||
return this.retryRequest;
|
return this.retryRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ import com.sun.corba.se.spi.orbutil.closure.ClosureFactory;
|
|||||||
import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
|
import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
|
||||||
import com.sun.corba.se.spi.protocol.ForwardException;
|
import com.sun.corba.se.spi.protocol.ForwardException;
|
||||||
import com.sun.corba.se.spi.protocol.PIHandler;
|
import com.sun.corba.se.spi.protocol.PIHandler;
|
||||||
|
import com.sun.corba.se.spi.protocol.RetryType;
|
||||||
import com.sun.corba.se.spi.logging.CORBALogDomains;
|
import com.sun.corba.se.spi.logging.CORBALogDomains;
|
||||||
|
|
||||||
import com.sun.corba.se.impl.logging.InterceptorsSystemException;
|
import com.sun.corba.se.impl.logging.InterceptorsSystemException;
|
||||||
@ -372,9 +373,24 @@ public class PIHandlerImpl implements PIHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Exception invokeClientPIEndingPoint(
|
// Needed when an error forces a retry AFTER initiateClientPIRequest
|
||||||
int replyStatus, Exception exception )
|
// but BEFORE invokeClientPIStartingPoint.
|
||||||
{
|
public Exception makeCompletedClientRequest( int replyStatus,
|
||||||
|
Exception exception ) {
|
||||||
|
|
||||||
|
// 6763340
|
||||||
|
return handleClientPIEndingPoint( replyStatus, exception, false ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Exception invokeClientPIEndingPoint( int replyStatus,
|
||||||
|
Exception exception ) {
|
||||||
|
|
||||||
|
// 6763340
|
||||||
|
return handleClientPIEndingPoint( replyStatus, exception, true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Exception handleClientPIEndingPoint(
|
||||||
|
int replyStatus, Exception exception, boolean invokeEndingPoint ) {
|
||||||
if( !hasClientInterceptors ) return exception;
|
if( !hasClientInterceptors ) return exception;
|
||||||
if( !isClientPIEnabledForThisThread() ) return exception;
|
if( !isClientPIEnabledForThisThread() ) return exception;
|
||||||
|
|
||||||
@ -388,24 +404,31 @@ public class PIHandlerImpl implements PIHandler
|
|||||||
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
|
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
|
||||||
info.setReplyStatus( piReplyStatus );
|
info.setReplyStatus( piReplyStatus );
|
||||||
info.setException( exception );
|
info.setException( exception );
|
||||||
interceptorInvoker.invokeClientInterceptorEndingPoint( info );
|
|
||||||
piReplyStatus = info.getReplyStatus();
|
if (invokeEndingPoint) {
|
||||||
|
// 6763340
|
||||||
|
interceptorInvoker.invokeClientInterceptorEndingPoint( info );
|
||||||
|
piReplyStatus = info.getReplyStatus();
|
||||||
|
}
|
||||||
|
|
||||||
// Check reply status:
|
// Check reply status:
|
||||||
if( (piReplyStatus == LOCATION_FORWARD.value) ||
|
if( (piReplyStatus == LOCATION_FORWARD.value) ||
|
||||||
(piReplyStatus == TRANSPORT_RETRY.value) )
|
(piReplyStatus == TRANSPORT_RETRY.value) ) {
|
||||||
{
|
|
||||||
// If this is a forward or a retry, reset and reuse
|
// If this is a forward or a retry, reset and reuse
|
||||||
// info object:
|
// info object:
|
||||||
info.reset();
|
info.reset();
|
||||||
info.setRetryRequest( true );
|
|
||||||
|
// fix for 6763340:
|
||||||
|
if (invokeEndingPoint) {
|
||||||
|
info.setRetryRequest( RetryType.AFTER_RESPONSE ) ;
|
||||||
|
} else {
|
||||||
|
info.setRetryRequest( RetryType.BEFORE_RESPONSE ) ;
|
||||||
|
}
|
||||||
|
|
||||||
// ... and return a RemarshalException so the orb internals know
|
// ... and return a RemarshalException so the orb internals know
|
||||||
exception = new RemarshalException();
|
exception = new RemarshalException();
|
||||||
}
|
} else if( (piReplyStatus == SYSTEM_EXCEPTION.value) ||
|
||||||
else if( (piReplyStatus == SYSTEM_EXCEPTION.value) ||
|
(piReplyStatus == USER_EXCEPTION.value) ) {
|
||||||
(piReplyStatus == USER_EXCEPTION.value) )
|
|
||||||
{
|
|
||||||
exception = info.getException();
|
exception = info.getException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,18 +444,21 @@ public class PIHandlerImpl implements PIHandler
|
|||||||
RequestInfoStack infoStack =
|
RequestInfoStack infoStack =
|
||||||
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
|
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
|
||||||
ClientRequestInfoImpl info = null;
|
ClientRequestInfoImpl info = null;
|
||||||
if( !infoStack.empty() ) info =
|
|
||||||
(ClientRequestInfoImpl)infoStack.peek();
|
|
||||||
|
|
||||||
if( !diiRequest && (info != null) && info.isDIIInitiate() ) {
|
if (!infoStack.empty() ) {
|
||||||
|
info = (ClientRequestInfoImpl)infoStack.peek();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!diiRequest && (info != null) && info.isDIIInitiate() ) {
|
||||||
// In RequestImpl.doInvocation we already called
|
// In RequestImpl.doInvocation we already called
|
||||||
// initiateClientPIRequest( true ), so ignore this initiate.
|
// initiateClientPIRequest( true ), so ignore this initiate.
|
||||||
info.setDIIInitiate( false );
|
info.setDIIInitiate( false );
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// If there is no info object or if we are not retrying a request,
|
// If there is no info object or if we are not retrying a request,
|
||||||
// push a new ClientRequestInfoImpl on the stack:
|
// push a new ClientRequestInfoImpl on the stack:
|
||||||
if( (info == null) || !info.getRetryRequest() ) {
|
|
||||||
|
// 6763340: don't push unless this is not a retry
|
||||||
|
if( (info == null) || !info.getRetryRequest().isRetry() ) {
|
||||||
info = new ClientRequestInfoImpl( orb );
|
info = new ClientRequestInfoImpl( orb );
|
||||||
infoStack.push( info );
|
infoStack.push( info );
|
||||||
printPush();
|
printPush();
|
||||||
@ -442,9 +468,15 @@ public class PIHandlerImpl implements PIHandler
|
|||||||
// Reset the retry request flag so that recursive calls will
|
// Reset the retry request flag so that recursive calls will
|
||||||
// push a new info object, and bump up entry count so we know
|
// push a new info object, and bump up entry count so we know
|
||||||
// when to pop this info object:
|
// when to pop this info object:
|
||||||
info.setRetryRequest( false );
|
info.setRetryRequest( RetryType.NONE );
|
||||||
info.incrementEntryCount();
|
info.incrementEntryCount();
|
||||||
|
|
||||||
|
// KMC 6763340: I don't know why this wasn't set earlier,
|
||||||
|
// but we do not want a retry to pick up the previous
|
||||||
|
// reply status, so clear it here. Most likely a new
|
||||||
|
// info was pushed before, so that this was not a problem.
|
||||||
|
info.setReplyStatus( RequestInfoImpl.UNINITIALIZED ) ;
|
||||||
|
|
||||||
// If this is a DII request, make sure we ignore the next initiate.
|
// If this is a DII request, make sure we ignore the next initiate.
|
||||||
if( diiRequest ) {
|
if( diiRequest ) {
|
||||||
info.setDIIInitiate( true );
|
info.setDIIInitiate( true );
|
||||||
@ -457,25 +489,34 @@ public class PIHandlerImpl implements PIHandler
|
|||||||
if( !isClientPIEnabledForThisThread() ) return;
|
if( !isClientPIEnabledForThisThread() ) return;
|
||||||
|
|
||||||
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
|
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
|
||||||
|
RetryType rt = info.getRetryRequest() ;
|
||||||
|
|
||||||
// If the replyStatus has not yet been set, this is an indication
|
// fix for 6763340
|
||||||
// that the ORB threw an exception before we had a chance to
|
if (!rt.equals( RetryType.BEFORE_RESPONSE )) {
|
||||||
// invoke the client interceptor ending points.
|
|
||||||
//
|
// If the replyStatus has not yet been set, this is an indication
|
||||||
// _REVISIT_ We cannot handle any exceptions or ForwardRequests
|
// that the ORB threw an exception before we had a chance to
|
||||||
// flagged by the ending points here because there is no way
|
// invoke the client interceptor ending points.
|
||||||
// to gracefully handle this in any of the calling code.
|
//
|
||||||
// This is a rare corner case, so we will ignore this for now.
|
// _REVISIT_ We cannot handle any exceptions or ForwardRequests
|
||||||
short replyStatus = info.getReplyStatus();
|
// flagged by the ending points here because there is no way
|
||||||
if( replyStatus == info.UNINITIALIZED ) {
|
// to gracefully handle this in any of the calling code.
|
||||||
invokeClientPIEndingPoint( ReplyMessage.SYSTEM_EXCEPTION,
|
// This is a rare corner case, so we will ignore this for now.
|
||||||
wrapper.unknownRequestInvoke(
|
short replyStatus = info.getReplyStatus();
|
||||||
CompletionStatus.COMPLETED_MAYBE ) ) ;
|
if (replyStatus == info.UNINITIALIZED ) {
|
||||||
|
invokeClientPIEndingPoint( ReplyMessage.SYSTEM_EXCEPTION,
|
||||||
|
wrapper.unknownRequestInvoke(
|
||||||
|
CompletionStatus.COMPLETED_MAYBE ) ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decrement entry count, and if it is zero, pop it from the stack.
|
// Decrement entry count, and if it is zero, pop it from the stack.
|
||||||
info.decrementEntryCount();
|
info.decrementEntryCount();
|
||||||
if( info.getEntryCount() == 0 ) {
|
|
||||||
|
// fix for 6763340, and probably other cases (non-recursive retry)
|
||||||
|
if (info.getEntryCount() == 0 && !info.getRetryRequest().isRetry()) {
|
||||||
|
// RequestInfoStack<ClientRequestInfoImpl> infoStack =
|
||||||
|
// threadLocalClientRequestInfoStack.get();
|
||||||
RequestInfoStack infoStack =
|
RequestInfoStack infoStack =
|
||||||
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
|
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
|
||||||
infoStack.pop();
|
infoStack.pop();
|
||||||
|
@ -107,6 +107,11 @@ public class PINoOpHandlerImpl implements PIHandler
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Exception makeCompletedClientRequest(
|
||||||
|
int replyStatus, Exception exception ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void initiateClientPIRequest( boolean diiRequest ) {
|
public void initiateClientPIRequest( boolean diiRequest ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,8 @@ public abstract class RequestInfoImpl
|
|||||||
startingPointCall = 0;
|
startingPointCall = 0;
|
||||||
intermediatePointCall = 0;
|
intermediatePointCall = 0;
|
||||||
endingPointCall = 0;
|
endingPointCall = 0;
|
||||||
replyStatus = UNINITIALIZED;
|
// 6763340
|
||||||
|
setReplyStatus( UNINITIALIZED ) ;
|
||||||
currentExecutionPoint = EXECUTION_POINT_STARTING;
|
currentExecutionPoint = EXECUTION_POINT_STARTING;
|
||||||
alreadyExecuted = false;
|
alreadyExecuted = false;
|
||||||
connection = null;
|
connection = null;
|
||||||
|
@ -1012,7 +1012,11 @@ public class IIOPInputStream
|
|||||||
* else,
|
* else,
|
||||||
* Handle it as a serializable class.
|
* Handle it as a serializable class.
|
||||||
*/
|
*/
|
||||||
if (currentClassDesc.isExternalizable()) {
|
if (Enum.class.isAssignableFrom( clz )) {
|
||||||
|
int ordinal = orbStream.read_long() ;
|
||||||
|
String value = (String)orbStream.read_value( String.class ) ;
|
||||||
|
return Enum.valueOf( clz, value ) ;
|
||||||
|
} else if (currentClassDesc.isExternalizable()) {
|
||||||
try {
|
try {
|
||||||
currentObject = (currentClass == null) ?
|
currentObject = (currentClass == null) ?
|
||||||
null : currentClassDesc.newInstance();
|
null : currentClassDesc.newInstance();
|
||||||
|
@ -1672,6 +1672,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
|
|||||||
{
|
{
|
||||||
StackImpl invocationInfoStack =
|
StackImpl invocationInfoStack =
|
||||||
(StackImpl)clientInvocationInfoStack.get();
|
(StackImpl)clientInvocationInfoStack.get();
|
||||||
|
int entryCount = -1;
|
||||||
ClientInvocationInfo clientInvocationInfo = null;
|
ClientInvocationInfo clientInvocationInfo = null;
|
||||||
if (!invocationInfoStack.empty()) {
|
if (!invocationInfoStack.empty()) {
|
||||||
clientInvocationInfo =
|
clientInvocationInfo =
|
||||||
@ -1680,8 +1681,12 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
|
|||||||
throw wrapper.invocationInfoStackEmpty() ;
|
throw wrapper.invocationInfoStackEmpty() ;
|
||||||
}
|
}
|
||||||
clientInvocationInfo.decrementEntryCount();
|
clientInvocationInfo.decrementEntryCount();
|
||||||
|
entryCount = clientInvocationInfo.getEntryCount();
|
||||||
if (clientInvocationInfo.getEntryCount() == 0) {
|
if (clientInvocationInfo.getEntryCount() == 0) {
|
||||||
invocationInfoStack.pop();
|
// 6763340: don't pop if this is a retry!
|
||||||
|
if (!clientInvocationInfo.isRetryInvocation()) {
|
||||||
|
invocationInfoStack.pop();
|
||||||
|
}
|
||||||
finishedDispatch();
|
finishedDispatch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,7 @@ public class CorbaClientRequestDispatcherImpl
|
|||||||
if(getContactInfoListIterator(orb).hasNext()) {
|
if(getContactInfoListIterator(orb).hasNext()) {
|
||||||
contactInfo = (ContactInfo)
|
contactInfo = (ContactInfo)
|
||||||
getContactInfoListIterator(orb).next();
|
getContactInfoListIterator(orb).next();
|
||||||
|
unregisterWaiter(orb);
|
||||||
return beginRequest(self, opName,
|
return beginRequest(self, opName,
|
||||||
isOneWay, contactInfo);
|
isOneWay, contactInfo);
|
||||||
} else {
|
} else {
|
||||||
@ -292,10 +293,22 @@ public class CorbaClientRequestDispatcherImpl
|
|||||||
// ContactInfoList outside of subcontract.
|
// ContactInfoList outside of subcontract.
|
||||||
// Want to move that update to here.
|
// Want to move that update to here.
|
||||||
if (getContactInfoListIterator(orb).hasNext()) {
|
if (getContactInfoListIterator(orb).hasNext()) {
|
||||||
contactInfo = (ContactInfo)
|
contactInfo = (ContactInfo)getContactInfoListIterator(orb).next();
|
||||||
getContactInfoListIterator(orb).next();
|
if (orb.subcontractDebugFlag) {
|
||||||
|
dprint( "RemarshalException: hasNext true\ncontact info " + contactInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix for 6763340: Complete the first attempt before starting another.
|
||||||
|
orb.getPIHandler().makeCompletedClientRequest(
|
||||||
|
ReplyMessage.LOCATION_FORWARD, null ) ;
|
||||||
|
unregisterWaiter(orb);
|
||||||
|
orb.getPIHandler().cleanupClientPIRequest() ;
|
||||||
|
|
||||||
return beginRequest(self, opName, isOneWay, contactInfo);
|
return beginRequest(self, opName, isOneWay, contactInfo);
|
||||||
} else {
|
} else {
|
||||||
|
if (orb.subcontractDebugFlag) {
|
||||||
|
dprint( "RemarshalException: hasNext false" );
|
||||||
|
}
|
||||||
ORBUtilSystemException wrapper =
|
ORBUtilSystemException wrapper =
|
||||||
ORBUtilSystemException.get(orb,
|
ORBUtilSystemException.get(orb,
|
||||||
CORBALogDomains.RPC_PROTOCOL);
|
CORBALogDomains.RPC_PROTOCOL);
|
||||||
|
@ -141,6 +141,27 @@ public interface PIHandler {
|
|||||||
Exception invokeClientPIEndingPoint(
|
Exception invokeClientPIEndingPoint(
|
||||||
int replyStatus, Exception exception ) ;
|
int replyStatus, Exception exception ) ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a retry is needed after initiateClientPIRequest but
|
||||||
|
* before invokeClientPIRequest. In this case, we need to properly
|
||||||
|
* balance initiateClientPIRequest/cleanupClientPIRequest calls,
|
||||||
|
* but WITHOUT extraneous calls to invokeClientPIEndingPoint
|
||||||
|
* (see bug 6763340).
|
||||||
|
*
|
||||||
|
* @param replyStatus One of the constants in iiop.messages.ReplyMessage
|
||||||
|
* indicating which reply status to set.
|
||||||
|
* @param exception The exception before ending interception points have
|
||||||
|
* been invoked, or null if no exception at the moment.
|
||||||
|
* @return The exception to be thrown, after having gone through
|
||||||
|
* all ending points, or null if there is no exception to be
|
||||||
|
* thrown. Note that this exception can be either the same or
|
||||||
|
* different from the exception set using setClientPIException.
|
||||||
|
* There are four possible return types: null (no exception),
|
||||||
|
* SystemException, UserException, or RemarshalException.
|
||||||
|
*/
|
||||||
|
Exception makeCompletedClientRequest(
|
||||||
|
int replyStatus, Exception exception ) ;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoked when a request is about to be created. Must be called before
|
* Invoked when a request is about to be created. Must be called before
|
||||||
* any of the setClientPI* methods so that a new info object can be
|
* any of the setClientPI* methods so that a new info object can be
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.corba.se.spi.protocol ;
|
||||||
|
|
||||||
|
// Introduce more information about WHY we are re-trying a request
|
||||||
|
// so we can properly handle the two cases:
|
||||||
|
// - BEFORE_RESPONSE means that the retry is caused by
|
||||||
|
// something that happened BEFORE the message was sent: either
|
||||||
|
// an exception from the SocketFactory, or one from the
|
||||||
|
// Client side send_request interceptor point.
|
||||||
|
// - AFTER_RESPONSE means that the retry is a result either of the
|
||||||
|
// request sent to the server (from the response), or from the
|
||||||
|
// Client side receive_xxx interceptor point.
|
||||||
|
public enum RetryType {
|
||||||
|
NONE( false ),
|
||||||
|
BEFORE_RESPONSE( true ),
|
||||||
|
AFTER_RESPONSE( true ) ;
|
||||||
|
|
||||||
|
private final boolean isRetry ;
|
||||||
|
|
||||||
|
RetryType( boolean isRetry ) {
|
||||||
|
this.isRetry = isRetry ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRetry() {
|
||||||
|
return this.isRetry ;
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
@ -131,3 +131,6 @@ bdbc48857210a509b3c50a3291ecb9dd6a72e016 jdk7-b115
|
|||||||
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
|
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
|
||||||
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
|
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
|
||||||
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
|
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
|
||||||
|
5484e7c53fa7da5e869902437ee08a9ae10c1c69 jdk7-b119
|
||||||
|
f5603a6e50422046ebc0d2f1671d55cb8f1bf1e9 jdk7-b120
|
||||||
|
3f3653ab7af8dc1ddb9fa75dad56bf94f89e81a8 jdk7-b121
|
||||||
|
@ -93,3 +93,6 @@ dc1612e1d3ac08eb8fcad764daff21c9247d33c9 jdk7-b115
|
|||||||
f8d4e6c6cfce1cda23fcbd144628a9791a9e1a63 jdk7-b116
|
f8d4e6c6cfce1cda23fcbd144628a9791a9e1a63 jdk7-b116
|
||||||
9ee4d96e893436a48607924227dadd2d93b9b00d jdk7-b117
|
9ee4d96e893436a48607924227dadd2d93b9b00d jdk7-b117
|
||||||
b2f6d9c4f12ffd307a5de40455b2b61b31a5cb79 jdk7-b118
|
b2f6d9c4f12ffd307a5de40455b2b61b31a5cb79 jdk7-b118
|
||||||
|
9ee900f01c5872551c06f33ae909662ffd8463ac jdk7-b119
|
||||||
|
4821de0908defe647fcdaab4485f98873e24dea0 jdk7-b120
|
||||||
|
63dae40fa19fd3bf4689ea2f3c1d9d690e1abcee jdk7-b121
|
||||||
|
@ -28,10 +28,10 @@ drops.master.copy.base=${drops.dir}
|
|||||||
jaxp_src.bundle.name=jaxp-1_4_4.zip
|
jaxp_src.bundle.name=jaxp-1_4_4.zip
|
||||||
jaxp_src.bundle.md5.checksum=2c40a758392c4abf2d59f355240df46a
|
jaxp_src.bundle.md5.checksum=2c40a758392c4abf2d59f355240df46a
|
||||||
jaxp_src.master.bundle.dir=${drops.master.copy.base}
|
jaxp_src.master.bundle.dir=${drops.master.copy.base}
|
||||||
jaxp_src.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/152561
|
jaxp_src.master.bundle.url.base=https://java.net/downloads/jaxp/jdk7
|
||||||
|
|
||||||
#jaxp_tests.bundle.name=jaxp-unittests-1_4_4.zip
|
#jaxp_tests.bundle.name=jaxp-unittests-1_4_4.zip
|
||||||
#jaxp_tests.bundle.md5.checksum=51845e38b02920cf5374d0331ab3a4ee
|
#jaxp_tests.bundle.md5.checksum=51845e38b02920cf5374d0331ab3a4ee
|
||||||
#jaxp_tests.master.bundle.dir=${drops.master.copy.base}
|
#jaxp_tests.master.bundle.dir=${drops.master.copy.base}
|
||||||
#jaxp_tests.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/152562
|
#jaxp_tests.master.bundle.url.base=https://java.net/downloads/jaxp/jdk7
|
||||||
|
|
||||||
|
@ -93,3 +93,6 @@ d35c94fd22362f478f75b4bfcd2bef6a83cb9b3f jdk7-b113
|
|||||||
376ac153078dd3b5f6d4a0981feee092c1492c96 jdk7-b116
|
376ac153078dd3b5f6d4a0981feee092c1492c96 jdk7-b116
|
||||||
1320fb3bb588298c79716bd2d10b5b4afacb9370 jdk7-b117
|
1320fb3bb588298c79716bd2d10b5b4afacb9370 jdk7-b117
|
||||||
19a2fab3f91a275f90791c15d1c21a24e820ff2d jdk7-b118
|
19a2fab3f91a275f90791c15d1c21a24e820ff2d jdk7-b118
|
||||||
|
41fa02b3663795ddf529690df7aa6714210093ec jdk7-b119
|
||||||
|
a4f2e1ca67163ef79555082809d7cd719893c338 jdk7-b120
|
||||||
|
0fa950117faac7bdbc94e6c46b88f6f892031c17 jdk7-b121
|
||||||
|
@ -28,14 +28,14 @@ drops.master.copy.base=${drops.dir}
|
|||||||
jaxws_src.bundle.name= jdk7-jaxws2_2-2010_08_19.zip
|
jaxws_src.bundle.name= jdk7-jaxws2_2-2010_08_19.zip
|
||||||
jaxws_src.bundle.md5.checksum=8775ccefd3b4fa2dde5155ec4b7e4ceb
|
jaxws_src.bundle.md5.checksum=8775ccefd3b4fa2dde5155ec4b7e4ceb
|
||||||
jaxws_src.master.bundle.dir=${drops.master.copy.base}
|
jaxws_src.master.bundle.dir=${drops.master.copy.base}
|
||||||
jaxws_src.master.bundle.url.base=https://jax-ws.dev.java.net/files/documents/4202/152532
|
jaxws_src.master.bundle.url.base=https://java.net/downloads/jax-ws/JDK7
|
||||||
|
|
||||||
jaf_src.bundle.name=jdk7-jaf-2010_08_19.zip
|
jaf_src.bundle.name=jdk7-jaf-2010_08_19.zip
|
||||||
jaf_src.bundle.md5.checksum=18d15dfd71117daadb332af003d08212
|
jaf_src.bundle.md5.checksum=18d15dfd71117daadb332af003d08212
|
||||||
jaf_src.master.bundle.dir=${drops.master.copy.base}
|
jaf_src.master.bundle.dir=${drops.master.copy.base}
|
||||||
jaf_src.master.bundle.url.base=https://jax-ws.dev.java.net/files/documents/4202/152336
|
jaf_src.master.bundle.url.base=https://java.net/downloads/jax-ws/JDK7
|
||||||
|
|
||||||
#jaxws_tests.bundle.name=jdk7-jaxws-tests-2009_08_28.zip
|
#jaxws_tests.bundle.name=jdk7-jaxws-tests-2009_08_28.zip
|
||||||
#jaxws_tests.master.bundle.dir=${drops.master.copy.base}
|
#jaxws_tests.master.bundle.dir=${drops.master.copy.base}
|
||||||
#jaxws_tests.master.bundle.url.base=http://kenai.com/projects/jdk7-drops/downloads/download
|
#jaxws_tests.master.bundle.url.base=https://java.net/downloads/jax-ws/JDK7
|
||||||
|
|
||||||
|
@ -93,3 +93,6 @@ e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
|
|||||||
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
|
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
|
||||||
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
|
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
|
||||||
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
|
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
|
||||||
|
ecab7eefb8f2326fd90fb632f47f1b6f81e928f8 jdk7-b119
|
||||||
|
37d74e29687cf07c2bf9411af58c7e42440855c3 jdk7-b120
|
||||||
|
a661d8587b5d8986aacae086f5df66af9e1a96b1 jdk7-b121
|
||||||
|
@ -83,14 +83,19 @@ ifndef CLOSED_SRC
|
|||||||
CLOSED_SRC = $(BUILDDIR)/../src/closed
|
CLOSED_SRC = $(BUILDDIR)/../src/closed
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# If we have no closed directory, force it to an openjdk build
|
# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any
|
||||||
CLOSED_SRC_DIR_EXISTS := $(shell \
|
# closed directory.
|
||||||
if [ -d $(CLOSED_SRC) ] ; then \
|
ifneq ($(CLOSED_SRC_INCLUDED), true)
|
||||||
echo true; \
|
CLOSED_SRC_INCLUDED := $(shell \
|
||||||
else \
|
if [ -d $(CLOSED_SRC) ] ; then \
|
||||||
echo false; \
|
echo true; \
|
||||||
fi)
|
else \
|
||||||
ifeq ($(CLOSED_SRC_DIR_EXISTS), false)
|
echo false; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Set OPENJDK based on CLOSED_SRC_INCLUDED
|
||||||
|
ifeq ($(CLOSED_SRC_INCLUDED), false)
|
||||||
OPENJDK = true
|
OPENJDK = true
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -85,6 +85,7 @@ FILES_src = \
|
|||||||
sun/io/ByteToCharCp500.java \
|
sun/io/ByteToCharCp500.java \
|
||||||
sun/io/ByteToCharCp737.java \
|
sun/io/ByteToCharCp737.java \
|
||||||
sun/io/ByteToCharCp775.java \
|
sun/io/ByteToCharCp775.java \
|
||||||
|
sun/io/ByteToCharCp833.java \
|
||||||
sun/io/ByteToCharCp834.java \
|
sun/io/ByteToCharCp834.java \
|
||||||
sun/io/ByteToCharCp838.java \
|
sun/io/ByteToCharCp838.java \
|
||||||
sun/io/ByteToCharCp850.java \
|
sun/io/ByteToCharCp850.java \
|
||||||
@ -214,6 +215,7 @@ FILES_src = \
|
|||||||
sun/io/CharToByteCp500.java \
|
sun/io/CharToByteCp500.java \
|
||||||
sun/io/CharToByteCp737.java \
|
sun/io/CharToByteCp737.java \
|
||||||
sun/io/CharToByteCp775.java \
|
sun/io/CharToByteCp775.java \
|
||||||
|
sun/io/CharToByteCp833.java \
|
||||||
sun/io/CharToByteCp834.java \
|
sun/io/CharToByteCp834.java \
|
||||||
sun/io/CharToByteCp838.java \
|
sun/io/CharToByteCp838.java \
|
||||||
sun/io/CharToByteCp850.java \
|
sun/io/CharToByteCp850.java \
|
||||||
@ -331,6 +333,7 @@ FILES_gen_extcs = \
|
|||||||
sun/nio/cs/ext/IBM420.java \
|
sun/nio/cs/ext/IBM420.java \
|
||||||
sun/nio/cs/ext/IBM424.java \
|
sun/nio/cs/ext/IBM424.java \
|
||||||
sun/nio/cs/ext/IBM500.java \
|
sun/nio/cs/ext/IBM500.java \
|
||||||
|
sun/nio/cs/ext/IBM833.java \
|
||||||
sun/nio/cs/ext/IBM838.java \
|
sun/nio/cs/ext/IBM838.java \
|
||||||
sun/nio/cs/ext/IBM856.java \
|
sun/nio/cs/ext/IBM856.java \
|
||||||
sun/nio/cs/ext/IBM860.java \
|
sun/nio/cs/ext/IBM860.java \
|
||||||
|
@ -432,6 +432,7 @@ SUNWprivate_1.1 {
|
|||||||
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
|
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
|
||||||
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
||||||
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
||||||
|
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
|
||||||
|
|
||||||
Java_sun_print_CUPSPrinter_initIDs;
|
Java_sun_print_CUPSPrinter_initIDs;
|
||||||
Java_sun_print_CUPSPrinter_getCupsServer;
|
Java_sun_print_CUPSPrinter_getCupsServer;
|
||||||
|
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal file
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
0x5A U+FF01
|
||||||
|
0x7F U+FF02
|
||||||
|
0x7B U+FF03
|
||||||
|
0x5B U+FF04
|
||||||
|
0x6C U+FF05
|
||||||
|
0x50 U+FF06
|
||||||
|
0x7D U+FF07
|
||||||
|
0x4D U+FF08
|
||||||
|
0x5D U+FF09
|
||||||
|
0x5C U+FF0A
|
||||||
|
0x4E U+FF0B
|
||||||
|
0x6B U+FF0C
|
||||||
|
0x60 U+FF0D
|
||||||
|
0x4B U+FF0E
|
||||||
|
0x61 U+FF0F
|
||||||
|
0xF0 U+FF10
|
||||||
|
0xF1 U+FF11
|
||||||
|
0xF2 U+FF12
|
||||||
|
0xF3 U+FF13
|
||||||
|
0xF4 U+FF14
|
||||||
|
0xF5 U+FF15
|
||||||
|
0xF6 U+FF16
|
||||||
|
0xF7 U+FF17
|
||||||
|
0xF8 U+FF18
|
||||||
|
0xF9 U+FF19
|
||||||
|
0x7A U+FF1A
|
||||||
|
0x5E U+FF1B
|
||||||
|
0x4C U+FF1C
|
||||||
|
0x7E U+FF1D
|
||||||
|
0x6E U+FF1E
|
||||||
|
0x6F U+FF1F
|
||||||
|
0x7C U+FF20
|
||||||
|
0xC1 U+FF21
|
||||||
|
0xC2 U+FF22
|
||||||
|
0xC3 U+FF23
|
||||||
|
0xC4 U+FF24
|
||||||
|
0xC5 U+FF25
|
||||||
|
0xC6 U+FF26
|
||||||
|
0xC7 U+FF27
|
||||||
|
0xC8 U+FF28
|
||||||
|
0xC9 U+FF29
|
||||||
|
0xD1 U+FF2A
|
||||||
|
0xD2 U+FF2B
|
||||||
|
0xD3 U+FF2C
|
||||||
|
0xD4 U+FF2D
|
||||||
|
0xD5 U+FF2E
|
||||||
|
0xD6 U+FF2F
|
||||||
|
0xD7 U+FF30
|
||||||
|
0xD8 U+FF31
|
||||||
|
0xD9 U+FF32
|
||||||
|
0xE2 U+FF33
|
||||||
|
0xE3 U+FF34
|
||||||
|
0xE4 U+FF35
|
||||||
|
0xE5 U+FF36
|
||||||
|
0xE6 U+FF37
|
||||||
|
0xE7 U+FF38
|
||||||
|
0xE8 U+FF39
|
||||||
|
0xE9 U+FF3A
|
||||||
|
0x70 U+FF3B
|
||||||
|
0xB2 U+FF3C
|
||||||
|
0x80 U+FF3D
|
||||||
|
0xB0 U+FF3E
|
||||||
|
0x6D U+FF3F
|
||||||
|
0x79 U+FF40
|
||||||
|
0x81 U+FF41
|
||||||
|
0x82 U+FF42
|
||||||
|
0x83 U+FF43
|
||||||
|
0x84 U+FF44
|
||||||
|
0x85 U+FF45
|
||||||
|
0x86 U+FF46
|
||||||
|
0x87 U+FF47
|
||||||
|
0x88 U+FF48
|
||||||
|
0x89 U+FF49
|
||||||
|
0x91 U+FF4A
|
||||||
|
0x92 U+FF4B
|
||||||
|
0x93 U+FF4C
|
||||||
|
0x94 U+FF4D
|
||||||
|
0x95 U+FF4E
|
||||||
|
0x96 U+FF4F
|
||||||
|
0x97 U+FF50
|
||||||
|
0x98 U+FF51
|
||||||
|
0x99 U+FF52
|
||||||
|
0xA2 U+FF53
|
||||||
|
0xA3 U+FF54
|
||||||
|
0xA4 U+FF55
|
||||||
|
0xA5 U+FF56
|
||||||
|
0xA6 U+FF57
|
||||||
|
0xA7 U+FF58
|
||||||
|
0xA8 U+FF59
|
||||||
|
0xA9 U+FF5A
|
||||||
|
0xC0 U+FF5B
|
||||||
|
0x4F U+FF5C
|
||||||
|
0xD0 U+FF5D
|
||||||
|
0xA1 U+FF5E
|
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal file
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
0x00 U+0000
|
||||||
|
0x01 U+0001
|
||||||
|
0x02 U+0002
|
||||||
|
0x03 U+0003
|
||||||
|
0x37 U+0004
|
||||||
|
0x2D U+0005
|
||||||
|
0x2E U+0006
|
||||||
|
0x2F U+0007
|
||||||
|
0x16 U+0008
|
||||||
|
0x05 U+0009
|
||||||
|
0x25 U+000A
|
||||||
|
0x0B U+000B
|
||||||
|
0x0C U+000C
|
||||||
|
0x0D U+000D
|
||||||
|
0x0E U+000E
|
||||||
|
0x0F U+000F
|
||||||
|
0x10 U+0010
|
||||||
|
0x11 U+0011
|
||||||
|
0x12 U+0012
|
||||||
|
0x13 U+0013
|
||||||
|
0x3C U+0014
|
||||||
|
0x3D U+0015
|
||||||
|
0x32 U+0016
|
||||||
|
0x26 U+0017
|
||||||
|
0x18 U+0018
|
||||||
|
0x19 U+0019
|
||||||
|
0x3F U+001A
|
||||||
|
0x27 U+001B
|
||||||
|
0x1C U+001C
|
||||||
|
0x1D U+001D
|
||||||
|
0x1E U+001E
|
||||||
|
0x1F U+001F
|
||||||
|
0x40 U+0020
|
||||||
|
0x5A U+0021
|
||||||
|
0x7F U+0022
|
||||||
|
0x7B U+0023
|
||||||
|
0x5B U+0024
|
||||||
|
0x6C U+0025
|
||||||
|
0x50 U+0026
|
||||||
|
0x7D U+0027
|
||||||
|
0x4D U+0028
|
||||||
|
0x5D U+0029
|
||||||
|
0x5C U+002A
|
||||||
|
0x4E U+002B
|
||||||
|
0x6B U+002C
|
||||||
|
0x60 U+002D
|
||||||
|
0x4B U+002E
|
||||||
|
0x61 U+002F
|
||||||
|
0xF0 U+0030
|
||||||
|
0xF1 U+0031
|
||||||
|
0xF2 U+0032
|
||||||
|
0xF3 U+0033
|
||||||
|
0xF4 U+0034
|
||||||
|
0xF5 U+0035
|
||||||
|
0xF6 U+0036
|
||||||
|
0xF7 U+0037
|
||||||
|
0xF8 U+0038
|
||||||
|
0xF9 U+0039
|
||||||
|
0x7A U+003A
|
||||||
|
0x5E U+003B
|
||||||
|
0x4C U+003C
|
||||||
|
0x7E U+003D
|
||||||
|
0x6E U+003E
|
||||||
|
0x6F U+003F
|
||||||
|
0x7C U+0040
|
||||||
|
0xC1 U+0041
|
||||||
|
0xC2 U+0042
|
||||||
|
0xC3 U+0043
|
||||||
|
0xC4 U+0044
|
||||||
|
0xC5 U+0045
|
||||||
|
0xC6 U+0046
|
||||||
|
0xC7 U+0047
|
||||||
|
0xC8 U+0048
|
||||||
|
0xC9 U+0049
|
||||||
|
0xD1 U+004A
|
||||||
|
0xD2 U+004B
|
||||||
|
0xD3 U+004C
|
||||||
|
0xD4 U+004D
|
||||||
|
0xD5 U+004E
|
||||||
|
0xD6 U+004F
|
||||||
|
0xD7 U+0050
|
||||||
|
0xD8 U+0051
|
||||||
|
0xD9 U+0052
|
||||||
|
0xE2 U+0053
|
||||||
|
0xE3 U+0054
|
||||||
|
0xE4 U+0055
|
||||||
|
0xE5 U+0056
|
||||||
|
0xE6 U+0057
|
||||||
|
0xE7 U+0058
|
||||||
|
0xE8 U+0059
|
||||||
|
0xE9 U+005A
|
||||||
|
0x70 U+005B
|
||||||
|
0xB2 U+005C
|
||||||
|
0x80 U+005D
|
||||||
|
0xB0 U+005E
|
||||||
|
0x6D U+005F
|
||||||
|
0x79 U+0060
|
||||||
|
0x81 U+0061
|
||||||
|
0x82 U+0062
|
||||||
|
0x83 U+0063
|
||||||
|
0x84 U+0064
|
||||||
|
0x85 U+0065
|
||||||
|
0x86 U+0066
|
||||||
|
0x87 U+0067
|
||||||
|
0x88 U+0068
|
||||||
|
0x89 U+0069
|
||||||
|
0x91 U+006A
|
||||||
|
0x92 U+006B
|
||||||
|
0x93 U+006C
|
||||||
|
0x94 U+006D
|
||||||
|
0x95 U+006E
|
||||||
|
0x96 U+006F
|
||||||
|
0x97 U+0070
|
||||||
|
0x98 U+0071
|
||||||
|
0x99 U+0072
|
||||||
|
0xA2 U+0073
|
||||||
|
0xA3 U+0074
|
||||||
|
0xA4 U+0075
|
||||||
|
0xA5 U+0076
|
||||||
|
0xA6 U+0077
|
||||||
|
0xA7 U+0078
|
||||||
|
0xA8 U+0079
|
||||||
|
0xA9 U+007A
|
||||||
|
0xC0 U+007B
|
||||||
|
0x4F U+007C
|
||||||
|
0xD0 U+007D
|
||||||
|
0xA1 U+007E
|
||||||
|
0x07 U+007F
|
||||||
|
0x20 U+0080
|
||||||
|
0x21 U+0081
|
||||||
|
0x22 U+0082
|
||||||
|
0x23 U+0083
|
||||||
|
0x24 U+0084
|
||||||
|
0x15 U+0085
|
||||||
|
0x06 U+0086
|
||||||
|
0x17 U+0087
|
||||||
|
0x28 U+0088
|
||||||
|
0x29 U+0089
|
||||||
|
0x2A U+008A
|
||||||
|
0x2B U+008B
|
||||||
|
0x2C U+008C
|
||||||
|
0x09 U+008D
|
||||||
|
0x0A U+008E
|
||||||
|
0x1B U+008F
|
||||||
|
0x30 U+0090
|
||||||
|
0x31 U+0091
|
||||||
|
0x1A U+0092
|
||||||
|
0x33 U+0093
|
||||||
|
0x34 U+0094
|
||||||
|
0x35 U+0095
|
||||||
|
0x36 U+0096
|
||||||
|
0x08 U+0097
|
||||||
|
0x38 U+0098
|
||||||
|
0x39 U+0099
|
||||||
|
0x3A U+009A
|
||||||
|
0x3B U+009B
|
||||||
|
0x04 U+009C
|
||||||
|
0x14 U+009D
|
||||||
|
0x3E U+009E
|
||||||
|
0xFF U+009F
|
||||||
|
0x4A U+00A2
|
||||||
|
0x6A U+00A6
|
||||||
|
0x5F U+00AC
|
||||||
|
0xA0 U+203E
|
||||||
|
0xE0 U+20A9
|
||||||
|
0x42 U+FFA0
|
||||||
|
0x43 U+FFA1
|
||||||
|
0x44 U+FFA2
|
||||||
|
0x45 U+FFA3
|
||||||
|
0x46 U+FFA4
|
||||||
|
0x47 U+FFA5
|
||||||
|
0x48 U+FFA6
|
||||||
|
0x49 U+FFA7
|
||||||
|
0x52 U+FFA8
|
||||||
|
0x53 U+FFA9
|
||||||
|
0x54 U+FFAA
|
||||||
|
0x55 U+FFAB
|
||||||
|
0x56 U+FFAC
|
||||||
|
0x57 U+FFAD
|
||||||
|
0x58 U+FFAE
|
||||||
|
0x59 U+FFAF
|
||||||
|
0x62 U+FFB0
|
||||||
|
0x63 U+FFB1
|
||||||
|
0x64 U+FFB2
|
||||||
|
0x65 U+FFB3
|
||||||
|
0x66 U+FFB4
|
||||||
|
0x67 U+FFB5
|
||||||
|
0x68 U+FFB6
|
||||||
|
0x69 U+FFB7
|
||||||
|
0x72 U+FFB8
|
||||||
|
0x73 U+FFB9
|
||||||
|
0x74 U+FFBA
|
||||||
|
0x75 U+FFBB
|
||||||
|
0x76 U+FFBC
|
||||||
|
0x77 U+FFBD
|
||||||
|
0x78 U+FFBE
|
||||||
|
0x8A U+FFC2
|
||||||
|
0x8B U+FFC3
|
||||||
|
0x8C U+FFC4
|
||||||
|
0x8D U+FFC5
|
||||||
|
0x8E U+FFC6
|
||||||
|
0x8F U+FFC7
|
||||||
|
0x9A U+FFCA
|
||||||
|
0x9B U+FFCB
|
||||||
|
0x9C U+FFCC
|
||||||
|
0x9D U+FFCD
|
||||||
|
0x9E U+FFCE
|
||||||
|
0x9F U+FFCF
|
||||||
|
0xAA U+FFD2
|
||||||
|
0xAB U+FFD3
|
||||||
|
0xAC U+FFD4
|
||||||
|
0xAD U+FFD5
|
||||||
|
0xAE U+FFD6
|
||||||
|
0xAF U+FFD7
|
||||||
|
0xBA U+FFDA
|
||||||
|
0xBB U+FFDB
|
||||||
|
0xBC U+FFDC
|
@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
|
|||||||
IBM420 IBM420 Cp420 false sun.nio.cs.ext
|
IBM420 IBM420 Cp420 false sun.nio.cs.ext
|
||||||
IBM424 IBM424 Cp424 false sun.nio.cs.ext
|
IBM424 IBM424 Cp424 false sun.nio.cs.ext
|
||||||
IBM500 IBM500 Cp500 false sun.nio.cs.ext
|
IBM500 IBM500 Cp500 false sun.nio.cs.ext
|
||||||
|
IBM833 x-IBM833 Cp833 false sun.nio.cs.ext
|
||||||
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
|
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
|
||||||
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
|
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
|
||||||
IBM860 IBM860 Cp860 false sun.nio.cs.ext
|
IBM860 IBM860 Cp860 false sun.nio.cs.ext
|
||||||
|
@ -65,6 +65,7 @@ static jboolean printVersion = JNI_FALSE; /* print and exit */
|
|||||||
static jboolean showVersion = JNI_FALSE; /* print but continue */
|
static jboolean showVersion = JNI_FALSE; /* print but continue */
|
||||||
static jboolean printUsage = JNI_FALSE; /* print and exit*/
|
static jboolean printUsage = JNI_FALSE; /* print and exit*/
|
||||||
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
|
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
|
||||||
|
static char *showSettings = NULL; /* print but continue */
|
||||||
|
|
||||||
static const char *_program_name;
|
static const char *_program_name;
|
||||||
static const char *_launcher_name;
|
static const char *_launcher_name;
|
||||||
@ -109,6 +110,7 @@ static void SetApplicationClassPath(const char**);
|
|||||||
|
|
||||||
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
|
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
|
||||||
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
|
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
|
||||||
|
static void ShowSettings(JNIEnv* env, char *optString);
|
||||||
|
|
||||||
static void SetPaths(int argc, char **argv);
|
static void SetPaths(int argc, char **argv);
|
||||||
|
|
||||||
@ -157,6 +159,7 @@ static jboolean IsWildCardEnabled();
|
|||||||
* create a new thread to invoke JVM. See 6316197 for more information.
|
* create a new thread to invoke JVM. See 6316197 for more information.
|
||||||
*/
|
*/
|
||||||
static jlong threadStackSize = 0; /* stack size of the new thread */
|
static jlong threadStackSize = 0; /* stack size of the new thread */
|
||||||
|
static jlong heapSize = 0; /* heap size */
|
||||||
|
|
||||||
int JNICALL JavaMain(void * args); /* entry point */
|
int JNICALL JavaMain(void * args); /* entry point */
|
||||||
|
|
||||||
@ -376,6 +379,10 @@ JavaMain(void * _args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showSettings != NULL) {
|
||||||
|
ShowSettings(env, showSettings);
|
||||||
|
CHECK_EXCEPTION_LEAVE(0);
|
||||||
|
}
|
||||||
/* If the user specified neither a class name nor a JAR file */
|
/* If the user specified neither a class name nor a JAR file */
|
||||||
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
|
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
|
||||||
PrintUsage(env, printXUsage);
|
PrintUsage(env, printXUsage);
|
||||||
@ -611,7 +618,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
|
|||||||
|
|
||||||
/* copied from HotSpot function "atomll()" */
|
/* copied from HotSpot function "atomll()" */
|
||||||
static int
|
static int
|
||||||
parse_stack_size(const char *s, jlong *result) {
|
parse_size(const char *s, jlong *result) {
|
||||||
jlong n = 0;
|
jlong n = 0;
|
||||||
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
||||||
if (args_read != 1) {
|
if (args_read != 1) {
|
||||||
@ -673,10 +680,17 @@ AddOption(char *str, void *info)
|
|||||||
options[numOptions++].extraInfo = info;
|
options[numOptions++].extraInfo = info;
|
||||||
|
|
||||||
if (JLI_StrCCmp(str, "-Xss") == 0) {
|
if (JLI_StrCCmp(str, "-Xss") == 0) {
|
||||||
jlong tmp;
|
jlong tmp;
|
||||||
if (parse_stack_size(str + 4, &tmp)) {
|
if (parse_size(str + 4, &tmp)) {
|
||||||
threadStackSize = tmp;
|
threadStackSize = tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JLI_StrCCmp(str, "-Xmx") == 0) {
|
||||||
|
jlong tmp;
|
||||||
|
if (parse_size(str + 4, &tmp)) {
|
||||||
|
heapSize = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1014,6 +1028,13 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
|
|||||||
} else if (JLI_StrCmp(arg, "-X") == 0) {
|
} else if (JLI_StrCmp(arg, "-X") == 0) {
|
||||||
printXUsage = JNI_TRUE;
|
printXUsage = JNI_TRUE;
|
||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
|
/*
|
||||||
|
* The following case checks for -XshowSettings OR -XshowSetting:SUBOPT.
|
||||||
|
* In the latter case, any SUBOPT value not recognized will default to "all"
|
||||||
|
*/
|
||||||
|
} else if (JLI_StrCmp(arg, "-XshowSettings") == 0 ||
|
||||||
|
JLI_StrCCmp(arg, "-XshowSettings:") == 0) {
|
||||||
|
showSettings = arg;
|
||||||
/*
|
/*
|
||||||
* The following case provide backward compatibility with old-style
|
* The following case provide backward compatibility with old-style
|
||||||
* command line options.
|
* command line options.
|
||||||
@ -1474,6 +1495,27 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
|
|||||||
(*env)->CallStaticVoidMethod(env, ver, print);
|
(*env)->CallStaticVoidMethod(env, ver, print);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prints all the Java settings, see the java implementation for more details.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
ShowSettings(JNIEnv *env, char *optString)
|
||||||
|
{
|
||||||
|
jclass cls;
|
||||||
|
jmethodID showSettingsID;
|
||||||
|
jstring joptString;
|
||||||
|
NULL_CHECK(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
|
||||||
|
NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
|
||||||
|
"showSettings", "(ZLjava/lang/String;JJZ)V"));
|
||||||
|
joptString = (*env)->NewStringUTF(env, optString);
|
||||||
|
(*env)->CallStaticVoidMethod(env, cls, showSettingsID,
|
||||||
|
JNI_TRUE,
|
||||||
|
joptString,
|
||||||
|
(jlong)heapSize,
|
||||||
|
(jlong)threadStackSize,
|
||||||
|
ServerClassMachine());
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
|
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
|
||||||
*/
|
*/
|
||||||
|
@ -25,8 +25,10 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.*;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adaptive coding.
|
* Adaptive coding.
|
||||||
|
@ -25,9 +25,17 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
import java.util.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an attribute in a class-file.
|
* Represents an attribute in a class-file.
|
||||||
|
@ -25,12 +25,28 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
import java.util.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
import java.util.jar.*;
|
import com.sun.java.util.jar.pack.Package.Class.Field;
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import java.io.BufferedOutputStream;
|
||||||
import com.sun.java.util.jar.pack.Package.InnerClass;
|
import java.io.ByteArrayInputStream;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.EOFException;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.FilterInputStream;
|
||||||
|
import java.io.FilterOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the structure and ordering of "bands" in a packed file.
|
* Define the structure and ordering of "bands" in a packed file.
|
||||||
@ -1629,7 +1645,7 @@ class BandStructure implements Constants {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setConstantValueIndex(Class.Field f) {
|
protected void setConstantValueIndex(com.sun.java.util.jar.pack.Package.Class.Field f) {
|
||||||
Index ix = null;
|
Index ix = null;
|
||||||
if (f != null) {
|
if (f != null) {
|
||||||
byte tag = f.getLiteralTag();
|
byte tag = f.getLiteralTag();
|
||||||
|
@ -25,11 +25,19 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
||||||
import java.util.*;
|
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import com.sun.java.util.jar.pack.Package.Class;
|
||||||
import com.sun.java.util.jar.pack.Package.InnerClass;
|
import com.sun.java.util.jar.pack.Package.InnerClass;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.io.DataInputStream;
|
||||||
|
import java.io.FilterInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reader for a class file that is being incorporated into a package.
|
* Reader for a class file that is being incorporated into a package.
|
||||||
|
@ -25,11 +25,19 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.NumberEntry;
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import com.sun.java.util.jar.pack.Package.Class;
|
||||||
import com.sun.java.util.jar.pack.Package.InnerClass;
|
import com.sun.java.util.jar.pack.Package.InnerClass;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writer for a class file that is incorporated into a package.
|
* Writer for a class file that is incorporated into a package.
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import com.sun.java.util.jar.pack.Package.Class;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a chunk of bytecodes.
|
* Represents a chunk of bytecodes.
|
||||||
|
@ -25,8 +25,10 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the conversions between sequences of small integers and raw bytes.
|
* Define the conversions between sequences of small integers and raw bytes.
|
||||||
|
@ -25,9 +25,17 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.util.*;
|
import java.io.IOException;
|
||||||
import java.util.zip.*;
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
import java.util.zip.DeflaterOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Heuristic chooser of basic encodings.
|
* Heuristic chooser of basic encodings.
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for encoding and decoding int arrays using bytewise codes.
|
* Interface for encoding and decoding int arrays using bytewise codes.
|
||||||
|
@ -25,7 +25,14 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.AbstractList;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Representation of constant pool entries and indexes.
|
* Representation of constant pool entries and indexes.
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shared constants
|
* Shared constants
|
||||||
|
@ -25,11 +25,32 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
import java.util.jar.*;
|
import java.util.Arrays;
|
||||||
import java.util.zip.*;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.jar.JarOutputStream;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
/** Command line interface for Pack200.
|
/** Command line interface for Pack200.
|
||||||
*/
|
*/
|
||||||
|
@ -25,9 +25,11 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
import java.util.*;
|
import java.util.AbstractCollection;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collection of relocatable constant pool references.
|
* Collection of relocatable constant pool references.
|
||||||
|
@ -25,8 +25,10 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.io.IOException;
|
||||||
import java.io.*;
|
import java.io.InputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Histogram derived from an integer array of events (int[]).
|
* Histogram derived from an integer array of events (int[]).
|
||||||
|
@ -26,10 +26,18 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.nio.*;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.*;
|
import java.io.File;
|
||||||
import java.util.jar.*;
|
import java.io.FileInputStream;
|
||||||
import java.util.zip.*;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.jar.JarOutputStream;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
import java.util.zip.CRC32;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
class NativeUnpack {
|
class NativeUnpack {
|
||||||
// Pointer to the native unpacker obj
|
// Pointer to the native unpacker obj
|
||||||
|
@ -26,11 +26,32 @@
|
|||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import com.sun.java.util.jar.pack.Attribute.Layout;
|
import com.sun.java.util.jar.pack.Attribute.Layout;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.LiteralEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.SequenceInputStream;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
import java.util.jar.*;
|
import java.util.Arrays;
|
||||||
import java.io.*;
|
import java.util.Collection;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the main data structure transmitted by pack/unpack.
|
* Define the main data structure transmitted by pack/unpack.
|
||||||
|
@ -25,12 +25,18 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.MemberEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import com.sun.java.util.jar.pack.Package.Class;
|
||||||
import com.sun.java.util.jar.pack.Package.File;
|
import com.sun.java.util.jar.pack.Package.File;
|
||||||
import com.sun.java.util.jar.pack.Package.InnerClass;
|
import com.sun.java.util.jar.pack.Package.InnerClass;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reader for a package file.
|
* Reader for a package file.
|
||||||
|
@ -25,12 +25,30 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.io.*;
|
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
||||||
import java.util.*;
|
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Entry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.Index;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.IndexGroup;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.MemberEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.NumberEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
|
||||||
|
import com.sun.java.util.jar.pack.ConstantPool.StringEntry;
|
||||||
import com.sun.java.util.jar.pack.Package.Class;
|
import com.sun.java.util.jar.pack.Package.Class;
|
||||||
import com.sun.java.util.jar.pack.Package.File;
|
import com.sun.java.util.jar.pack.Package.File;
|
||||||
import com.sun.java.util.jar.pack.Package.InnerClass;
|
import com.sun.java.util.jar.pack.Package.InnerClass;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.*;
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writer for a package file.
|
* Writer for a package file.
|
||||||
|
@ -26,10 +26,27 @@
|
|||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import com.sun.java.util.jar.pack.Attribute.Layout;
|
import com.sun.java.util.jar.pack.Attribute.Layout;
|
||||||
import java.util.*;
|
|
||||||
import java.util.jar.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.jar.JarInputStream;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -25,8 +25,12 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.*;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Population-based coding.
|
* Population-based coding.
|
||||||
|
@ -25,13 +25,24 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.jar.*;
|
|
||||||
import java.util.jar.Pack200;
|
|
||||||
import java.util.zip.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
/**
|
/**
|
||||||
* Control block for publishing Pack200 options to the other classes.
|
* Control block for publishing Pack200 options to the other classes.
|
||||||
*/
|
*/
|
||||||
|
@ -25,11 +25,25 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.jar.*;
|
|
||||||
import java.util.zip.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarInputStream;
|
||||||
|
import java.util.jar.JarOutputStream;
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
import java.util.zip.CRC32;
|
||||||
|
import java.util.zip.CheckedOutputStream;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Implementation of the Pack provider.
|
* Implementation of the Pack provider.
|
||||||
|
@ -25,18 +25,27 @@
|
|||||||
|
|
||||||
package com.sun.java.util.jar.pack;
|
package com.sun.java.util.jar.pack;
|
||||||
|
|
||||||
import com.sun.java.util.jar.pack.Attribute.Layout;
|
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
import com.sun.java.util.jar.pack.ConstantPool.ClassEntry;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.LiteralEntry;
|
import com.sun.java.util.jar.pack.ConstantPool.LiteralEntry;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.MemberEntry;
|
import com.sun.java.util.jar.pack.ConstantPool.MemberEntry;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
|
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
|
||||||
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
|
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
|
||||||
import java.util.*;
|
import java.io.BufferedInputStream;
|
||||||
import java.util.jar.*;
|
import java.io.BufferedOutputStream;
|
||||||
import java.util.zip.*;
|
import java.io.File;
|
||||||
import java.io.*;
|
import java.io.FilterOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.jar.JarInputStream;
|
||||||
|
import java.util.jar.JarOutputStream;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
import sun.util.logging.PlatformLogger;
|
import sun.util.logging.PlatformLogger;
|
||||||
|
|
||||||
class Utils {
|
class Utils {
|
||||||
|
@ -91,6 +91,7 @@ public class HttpsConfigurator {
|
|||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
/**
|
/**
|
||||||
* Called by the HttpsServer to configure the parameters
|
* Called by the HttpsServer to configure the parameters
|
||||||
* for a https connection currently being established.
|
* for a https connection currently being established.
|
||||||
@ -111,4 +112,5 @@ public class HttpsConfigurator {
|
|||||||
public void configure (HttpsParameters params) {
|
public void configure (HttpsParameters params) {
|
||||||
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
|
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
|
||||||
}
|
}
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
package com.sun.net.httpserver;
|
package com.sun.net.httpserver;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
import javax.net.ssl.SSLParameters;
|
import javax.net.ssl.SSLParameters;
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the set of parameters for each https
|
* Represents the set of parameters for each https
|
||||||
@ -67,6 +69,7 @@ public abstract class HttpsParameters {
|
|||||||
*/
|
*/
|
||||||
public abstract InetSocketAddress getClientAddress();
|
public abstract InetSocketAddress getClientAddress();
|
||||||
|
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
/**
|
/**
|
||||||
* Sets the SSLParameters to use for this HttpsParameters.
|
* Sets the SSLParameters to use for this HttpsParameters.
|
||||||
* The parameters must be supported by the SSLContext contained
|
* The parameters must be supported by the SSLContext contained
|
||||||
@ -79,6 +82,7 @@ public abstract class HttpsParameters {
|
|||||||
* invalid or unsupported.
|
* invalid or unsupported.
|
||||||
*/
|
*/
|
||||||
public abstract void setSSLParameters (SSLParameters params);
|
public abstract void setSSLParameters (SSLParameters params);
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a copy of the array of ciphersuites or null if none
|
* Returns a copy of the array of ciphersuites or null if none
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -140,7 +140,7 @@ syncrsimpl.valtores = Value to be resolved can either be in the database or in c
|
|||||||
#WebRowSetXmlReader exception
|
#WebRowSetXmlReader exception
|
||||||
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
|
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
|
||||||
wrsxmlreader.readxml = readXML : {0}
|
wrsxmlreader.readxml = readXML : {0}
|
||||||
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {0} , uri : {0}
|
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
|
||||||
|
|
||||||
#WebRowSetXmlWriter exceptions
|
#WebRowSetXmlWriter exceptions
|
||||||
wrsxmlwriter.ioex = IOException : {0}
|
wrsxmlwriter.ioex = IOException : {0}
|
||||||
@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
|
|||||||
#XmlReaderContentHandler exceptions
|
#XmlReaderContentHandler exceptions
|
||||||
xmlrch.errmap = Error setting Map : {0}
|
xmlrch.errmap = Error setting Map : {0}
|
||||||
xmlrch.errmetadata = Error setting metadata : {0}
|
xmlrch.errmetadata = Error setting metadata : {0}
|
||||||
xmlrch.errinsert = Error inserting values : {0}
|
xmlrch.errinsertval = Error inserting values : {0}
|
||||||
xmlrch.errconstr = Error constructing row : {0}
|
xmlrch.errconstr = Error constructing row : {0}
|
||||||
xmlrch.errdel = Error deleting row : {0}
|
xmlrch.errdel = Error deleting row : {0}
|
||||||
xmlrch.errinsert = Error constructing insert row : {0}
|
xmlrch.errinsert = Error constructing insert row : {0}
|
||||||
@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
|
|||||||
xmlrch.chars = characters :
|
xmlrch.chars = characters :
|
||||||
xmlrch.badvalue = Bad value ; non-nullable property
|
xmlrch.badvalue = Bad value ; non-nullable property
|
||||||
xmlrch.badvalue1 = Bad value ; non-nullable metadata
|
xmlrch.badvalue1 = Bad value ; non-nullable metadata
|
||||||
xmlrch.warning = ** Warning : {0} , line : {0} , uri : {0}
|
xmlrch.warning = ** Warning : {0} , line : {1} , uri : {2}
|
||||||
|
|
||||||
#RIOptimisticProvider Exceptions
|
#RIOptimisticProvider Exceptions
|
||||||
riop.locking = Locking classification is not supported
|
riop.locking = Locking classification is not supported
|
||||||
|
@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
|
|||||||
// columnValue now need to be reset to the empty string
|
// columnValue now need to be reset to the empty string
|
||||||
columnValue = "";
|
columnValue = "";
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage()));
|
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsertval").toString(), ex.getMessage()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RowTag:
|
case RowTag:
|
||||||
|
@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a brighter version
|
* components of this <code>Color</code> to create a brighter version
|
||||||
* of this <code>Color</code>. Although <code>brighter</code> and
|
* of this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a
|
* <code>darker</code> are inverse operations, the results of a
|
||||||
* series of invocations of these two methods might be inconsistent
|
* series of invocations of these two methods might be inconsistent
|
||||||
* because of rounding errors.
|
* because of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a brighter version of this <code>Color</code>.
|
* a brighter version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#darker
|
* @see java.awt.Color#darker
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
int r = getRed();
|
int r = getRed();
|
||||||
int g = getGreen();
|
int g = getGreen();
|
||||||
int b = getBlue();
|
int b = getBlue();
|
||||||
|
int alpha = getAlpha();
|
||||||
|
|
||||||
/* From 2D group:
|
/* From 2D group:
|
||||||
* 1. black.brighter() should return grey
|
* 1. black.brighter() should return grey
|
||||||
@ -632,7 +636,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
*/
|
*/
|
||||||
int i = (int)(1.0/(1.0-FACTOR));
|
int i = (int)(1.0/(1.0-FACTOR));
|
||||||
if ( r == 0 && g == 0 && b == 0) {
|
if ( r == 0 && g == 0 && b == 0) {
|
||||||
return new Color(i, i, i);
|
return new Color(i, i, i, alpha);
|
||||||
}
|
}
|
||||||
if ( r > 0 && r < i ) r = i;
|
if ( r > 0 && r < i ) r = i;
|
||||||
if ( g > 0 && g < i ) g = i;
|
if ( g > 0 && g < i ) g = i;
|
||||||
@ -640,7 +644,8 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
|
|
||||||
return new Color(Math.min((int)(r/FACTOR), 255),
|
return new Color(Math.min((int)(r/FACTOR), 255),
|
||||||
Math.min((int)(g/FACTOR), 255),
|
Math.min((int)(g/FACTOR), 255),
|
||||||
Math.min((int)(b/FACTOR), 255));
|
Math.min((int)(b/FACTOR), 255),
|
||||||
|
alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -649,19 +654,23 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a darker version of
|
* components of this <code>Color</code> to create a darker version of
|
||||||
* this <code>Color</code>. Although <code>brighter</code> and
|
* this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a series
|
* <code>darker</code> are inverse operations, the results of a series
|
||||||
* of invocations of these two methods might be inconsistent because
|
* of invocations of these two methods might be inconsistent because
|
||||||
* of rounding errors.
|
* of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a darker version of this <code>Color</code>.
|
* a darker version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#brighter
|
* @see java.awt.Color#brighter
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
public Color darker() {
|
public Color darker() {
|
||||||
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
||||||
Math.max((int)(getGreen()*FACTOR), 0),
|
Math.max((int)(getGreen()*FACTOR), 0),
|
||||||
Math.max((int)(getBlue() *FACTOR), 0));
|
Math.max((int)(getBlue() *FACTOR), 0),
|
||||||
|
getAlpha());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,6 +51,7 @@ import javax.accessibility.*;
|
|||||||
import sun.util.logging.PlatformLogger;
|
import sun.util.logging.PlatformLogger;
|
||||||
|
|
||||||
import sun.awt.AppContext;
|
import sun.awt.AppContext;
|
||||||
|
import sun.awt.AWTAccessor;
|
||||||
import sun.awt.CausedFocusEvent;
|
import sun.awt.CausedFocusEvent;
|
||||||
import sun.awt.PeerEvent;
|
import sun.awt.PeerEvent;
|
||||||
import sun.awt.SunToolkit;
|
import sun.awt.SunToolkit;
|
||||||
@ -247,6 +248,13 @@ public class Container extends Component {
|
|||||||
if (!GraphicsEnvironment.isHeadless()) {
|
if (!GraphicsEnvironment.isHeadless()) {
|
||||||
initIDs();
|
initIDs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AWTAccessor.setContainerAccessor(new AWTAccessor.ContainerAccessor() {
|
||||||
|
@Override
|
||||||
|
public void validateUnconditionally(Container cont) {
|
||||||
|
cont.validateUnconditionally();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1248,14 +1248,31 @@ public class Dialog extends Window {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Disables or enables decorations for this dialog.
|
* Disables or enables decorations for this dialog.
|
||||||
* This method can only be called while the dialog is not displayable.
|
* <p>
|
||||||
* @param undecorated <code>true</code> if no dialog decorations are
|
* This method can only be called while the dialog is not displayable. To
|
||||||
* to be enabled;
|
* make this dialog decorated, it must be opaque and have the default shape,
|
||||||
* <code>false</code> if dialog decorations are to be enabled.
|
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||||
* @throws <code>IllegalComponentStateException</code> if the dialog
|
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||||
* is displayable.
|
* Window#setBackground} for details
|
||||||
|
*
|
||||||
|
* @param undecorated {@code true} if no dialog decorations are to be
|
||||||
|
* enabled; {@code false} if dialog decorations are to be enabled
|
||||||
|
*
|
||||||
|
* @throws IllegalComponentStateException if the dialog is displayable
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this dialog does not have the default shape
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this dialog opacity is less than {@code 1.0f}
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and the alpha value of this dialog background
|
||||||
|
* color is less than {@code 1.0f}
|
||||||
|
*
|
||||||
* @see #isUndecorated
|
* @see #isUndecorated
|
||||||
* @see Component#isDisplayable
|
* @see Component#isDisplayable
|
||||||
|
* @see Window#getShape
|
||||||
|
* @see Window#getOpacity
|
||||||
|
* @see Window#getBackground
|
||||||
|
*
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public void setUndecorated(boolean undecorated) {
|
public void setUndecorated(boolean undecorated) {
|
||||||
@ -1264,6 +1281,18 @@ public class Dialog extends Window {
|
|||||||
if (isDisplayable()) {
|
if (isDisplayable()) {
|
||||||
throw new IllegalComponentStateException("The dialog is displayable.");
|
throw new IllegalComponentStateException("The dialog is displayable.");
|
||||||
}
|
}
|
||||||
|
if (!undecorated) {
|
||||||
|
if (getOpacity() < 1.0f) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is not opaque");
|
||||||
|
}
|
||||||
|
if (getShape() != null) {
|
||||||
|
throw new IllegalComponentStateException("The dialog does not have a default shape");
|
||||||
|
}
|
||||||
|
Color bg = getBackground();
|
||||||
|
if ((bg != null) && (bg.getAlpha() < 255)) {
|
||||||
|
throw new IllegalComponentStateException("The dialog background color is not opaque");
|
||||||
|
}
|
||||||
|
}
|
||||||
this.undecorated = undecorated;
|
this.undecorated = undecorated;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1280,6 +1309,45 @@ public class Dialog extends Window {
|
|||||||
return undecorated;
|
return undecorated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setOpacity(float opacity) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((opacity < 1.0f) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setOpacity(opacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setShape(Shape shape) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((shape != null) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setShape(shape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setBackground(Color bgColor) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setBackground(bgColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string representing the state of this dialog. This
|
* Returns a string representing the state of this dialog. This
|
||||||
* method is intended to be used only for debugging purposes, and the
|
* method is intended to be used only for debugging purposes, and the
|
||||||
|
@ -99,7 +99,7 @@ public class FileDialog extends Dialog {
|
|||||||
* Contains the File instances for all the files that the user selects.
|
* Contains the File instances for all the files that the user selects.
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
* @see getFiles
|
* @see #getFiles
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
private File[] files;
|
private File[] files;
|
||||||
|
@ -828,6 +828,11 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
return frame.state;
|
return frame.state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public Rectangle getMaximizedBounds(Frame frame) {
|
||||||
|
synchronized(frame.getObjectLock()) {
|
||||||
|
return frame.maximizedBounds;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -855,8 +860,10 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
* @see #getMaximizedBounds()
|
* @see #getMaximizedBounds()
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public synchronized void setMaximizedBounds(Rectangle bounds) {
|
public void setMaximizedBounds(Rectangle bounds) {
|
||||||
this.maximizedBounds = bounds;
|
synchronized(getObjectLock()) {
|
||||||
|
this.maximizedBounds = bounds;
|
||||||
|
}
|
||||||
FramePeer peer = (FramePeer)this.peer;
|
FramePeer peer = (FramePeer)this.peer;
|
||||||
if (peer != null) {
|
if (peer != null) {
|
||||||
peer.setMaximizedBounds(bounds);
|
peer.setMaximizedBounds(bounds);
|
||||||
@ -873,21 +880,40 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public Rectangle getMaximizedBounds() {
|
public Rectangle getMaximizedBounds() {
|
||||||
return maximizedBounds;
|
synchronized(getObjectLock()) {
|
||||||
|
return maximizedBounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disables or enables decorations for this frame.
|
* Disables or enables decorations for this frame.
|
||||||
* This method can only be called while the frame is not displayable.
|
* <p>
|
||||||
* @param undecorated <code>true</code> if no frame decorations are
|
* This method can only be called while the frame is not displayable. To
|
||||||
* to be enabled;
|
* make this frame decorated, it must be opaque and have the default shape,
|
||||||
* <code>false</code> if frame decorations are to be enabled.
|
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||||
* @throws <code>IllegalComponentStateException</code> if the frame
|
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||||
* is displayable.
|
* Window#setBackground} for details
|
||||||
|
*
|
||||||
|
* @param undecorated {@code true} if no frame decorations are to be
|
||||||
|
* enabled; {@code false} if frame decorations are to be enabled
|
||||||
|
*
|
||||||
|
* @throws IllegalComponentStateException if the frame is displayable
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this frame does not have the default shape
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this frame opacity is less than {@code 1.0f}
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and the alpha value of this frame background
|
||||||
|
* color is less than {@code 1.0f}
|
||||||
|
*
|
||||||
* @see #isUndecorated
|
* @see #isUndecorated
|
||||||
* @see Component#isDisplayable
|
* @see Component#isDisplayable
|
||||||
|
* @see Window#getShape
|
||||||
|
* @see Window#getOpacity
|
||||||
|
* @see Window#getBackground
|
||||||
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
|
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
|
||||||
|
*
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public void setUndecorated(boolean undecorated) {
|
public void setUndecorated(boolean undecorated) {
|
||||||
@ -896,6 +922,18 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
if (isDisplayable()) {
|
if (isDisplayable()) {
|
||||||
throw new IllegalComponentStateException("The frame is displayable.");
|
throw new IllegalComponentStateException("The frame is displayable.");
|
||||||
}
|
}
|
||||||
|
if (!undecorated) {
|
||||||
|
if (getOpacity() < 1.0f) {
|
||||||
|
throw new IllegalComponentStateException("The frame is not opaque");
|
||||||
|
}
|
||||||
|
if (getShape() != null) {
|
||||||
|
throw new IllegalComponentStateException("The frame does not have a default shape");
|
||||||
|
}
|
||||||
|
Color bg = getBackground();
|
||||||
|
if ((bg != null) && (bg.getAlpha() < 255)) {
|
||||||
|
throw new IllegalComponentStateException("The frame background color is not opaque");
|
||||||
|
}
|
||||||
|
}
|
||||||
this.undecorated = undecorated;
|
this.undecorated = undecorated;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -912,6 +950,45 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
return undecorated;
|
return undecorated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setOpacity(float opacity) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((opacity < 1.0f) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setOpacity(opacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setShape(Shape shape) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((shape != null) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setShape(shape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setBackground(Color bgColor) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setBackground(bgColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the specified menu bar from this frame.
|
* Removes the specified menu bar from this frame.
|
||||||
* @param m the menu component to remove.
|
* @param m the menu component to remove.
|
||||||
|
@ -3474,14 +3474,20 @@ public class Window extends Container implements Accessible {
|
|||||||
* level of 0 may or may not disable the mouse event handling on this
|
* level of 0 may or may not disable the mouse event handling on this
|
||||||
* window. This is a platform-dependent behavior.
|
* window. This is a platform-dependent behavior.
|
||||||
* <p>
|
* <p>
|
||||||
* In order for this method to enable the translucency effect, the {@link
|
* The following conditions must be met in order to set the opacity value
|
||||||
* GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)} method must indicate that
|
* less than {@code 1.0f}:
|
||||||
* the {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
* <ul>
|
||||||
* translucency is supported.
|
* <li>The {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
||||||
|
* translucency must be supported by the underlying system
|
||||||
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
|
* and {@link Dialog#setUndecorated})
|
||||||
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
|
* </ul>
|
||||||
* <p>
|
* <p>
|
||||||
* Also note that the window must not be in the full-screen mode when
|
* If the requested opacity value is less than {@code 1.0f}, and any of the
|
||||||
* setting the opacity value < 1.0f. Otherwise the {@code
|
* above conditions are not met, the window opacity will not change,
|
||||||
* IllegalComponentStateException} is thrown.
|
* and the {@code IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* The translucency levels of individual pixels may also be effected by the
|
* The translucency levels of individual pixels may also be effected by the
|
||||||
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
||||||
@ -3491,15 +3497,20 @@ public class Window extends Container implements Accessible {
|
|||||||
*
|
*
|
||||||
* @throws IllegalArgumentException if the opacity is out of the range
|
* @throws IllegalArgumentException if the opacity is out of the range
|
||||||
* [0..1]
|
* [0..1]
|
||||||
|
* @throws IllegalComponentStateException if the window is decorated and
|
||||||
|
* the opacity is less than {@code 1.0f}
|
||||||
* @throws IllegalComponentStateException if the window is in full screen
|
* @throws IllegalComponentStateException if the window is in full screen
|
||||||
* mode, and the opacity is less than 1.0f
|
* mode, and the opacity is less than {@code 1.0f}
|
||||||
* @throws UnsupportedOperationException if the {@code
|
* @throws UnsupportedOperationException if the {@code
|
||||||
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
||||||
* translucency kind is not supported and the opacity is less than 1.0f
|
* translucency is not supported and the opacity is less than
|
||||||
|
* {@code 1.0f}
|
||||||
*
|
*
|
||||||
* @see Window#getOpacity
|
* @see Window#getOpacity
|
||||||
* @see Window#setBackground(Color)
|
* @see Window#setBackground(Color)
|
||||||
* @see Window#setShape(Shape)
|
* @see Window#setShape(Shape)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
*
|
*
|
||||||
@ -3557,24 +3568,26 @@ public class Window extends Container implements Accessible {
|
|||||||
/**
|
/**
|
||||||
* Sets the shape of the window.
|
* Sets the shape of the window.
|
||||||
* <p>
|
* <p>
|
||||||
* Setting a shape enables cutting off some parts of the window, leaving
|
* Setting a shape cuts off some parts of the window. Only the parts that
|
||||||
* visible and clickable only those parts belonging to the given shape
|
* belong to the given {@link Shape} remain visible and clickable. If
|
||||||
* (see {@link Shape}). If the shape argument is null, this methods
|
* the shape argument is {@code null}, this method restores the default
|
||||||
* restores the default shape (making the window rectangular on most
|
* shape, making the window rectangular on most platforms.
|
||||||
* platforms.)
|
|
||||||
* <p>
|
* <p>
|
||||||
* The following conditions must be met in order to set a non-null shape:
|
* The following conditions must be met to set a non-null shape:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
||||||
* PERPIXEL_TRANSPARENT} translucency kind must be supported by the
|
* PERPIXEL_TRANSPARENT} translucency must be supported by the
|
||||||
* underlying system
|
* underlying system
|
||||||
* <i>and</i>
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
* <li>The window must not be in the full-screen mode (see
|
* and {@link Dialog#setUndecorated})
|
||||||
* {@link GraphicsDevice#setFullScreenWindow(Window)})
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
* </ul>
|
* </ul>
|
||||||
* If a certain condition is not met, either the {@code
|
* <p>
|
||||||
* UnsupportedOperationException} or {@code IllegalComponentStateException}
|
* If the requested shape is not {@code null}, and any of the above
|
||||||
* is thrown.
|
* conditions are not met, the shape of this window will not change,
|
||||||
|
* and either the {@code UnsupportedOperationException} or {@code
|
||||||
|
* IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* The tranlucency levels of individual pixels may also be effected by the
|
* The tranlucency levels of individual pixels may also be effected by the
|
||||||
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
||||||
@ -3584,6 +3597,8 @@ public class Window extends Container implements Accessible {
|
|||||||
* @param shape the shape to set to the window
|
* @param shape the shape to set to the window
|
||||||
*
|
*
|
||||||
* @throws IllegalComponentStateException if the shape is not {@code
|
* @throws IllegalComponentStateException if the shape is not {@code
|
||||||
|
* null} and the window is decorated
|
||||||
|
* @throws IllegalComponentStateException if the shape is not {@code
|
||||||
* null} and the window is in full-screen mode
|
* null} and the window is in full-screen mode
|
||||||
* @throws UnsupportedOperationException if the shape is not {@code
|
* @throws UnsupportedOperationException if the shape is not {@code
|
||||||
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
||||||
@ -3592,6 +3607,8 @@ public class Window extends Container implements Accessible {
|
|||||||
* @see Window#getShape()
|
* @see Window#getShape()
|
||||||
* @see Window#setBackground(Color)
|
* @see Window#setBackground(Color)
|
||||||
* @see Window#setOpacity(float)
|
* @see Window#setOpacity(float)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
*
|
*
|
||||||
@ -3645,37 +3662,46 @@ public class Window extends Container implements Accessible {
|
|||||||
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
|
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
|
||||||
* tranclucency, the alpha component of the given background color
|
* tranclucency, the alpha component of the given background color
|
||||||
* may effect the mode of operation for this window: it indicates whether
|
* may effect the mode of operation for this window: it indicates whether
|
||||||
* this window must be opaque (alpha == 1.0f) or per-pixel translucent
|
* this window must be opaque (alpha equals {@code 1.0f}) or per-pixel translucent
|
||||||
* (alpha < 1.0f). All the following conditions must be met in order
|
* (alpha is less than {@code 1.0f}). If the given background color is
|
||||||
* to be able to enable the per-pixel transparency mode for this window:
|
* {@code null}, the window is considered completely opaque.
|
||||||
|
* <p>
|
||||||
|
* All the following conditions must be met to enable the per-pixel
|
||||||
|
* transparency mode for this window:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||||
* PERPIXEL_TRANSLUCENT} translucency must be supported
|
* PERPIXEL_TRANSLUCENT} translucency must be supported by the graphics
|
||||||
* by the graphics device where this window is located <i>and</i>
|
* device where this window is located
|
||||||
* <li>The window must not be in the full-screen mode (see {@link
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
|
* and {@link Dialog#setUndecorated})
|
||||||
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
* GraphicsDevice#setFullScreenWindow(Window)})
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
* </ul>
|
* </ul>
|
||||||
* If a certain condition is not met at the time of calling this method,
|
* <p>
|
||||||
* the alpha component of the given background color will not effect the
|
* If the alpha component of the requested background color is less than
|
||||||
* mode of operation for this window.
|
* {@code 1.0f}, and any of the above conditions are not met, the background
|
||||||
|
* color of this window will not change, the alpha component of the given
|
||||||
|
* background color will not affect the mode of operation for this window,
|
||||||
|
* and either the {@code UnsupportedOperationException} or {@code
|
||||||
|
* IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* When the window is per-pixel translucent, the drawing sub-system
|
* When the window is per-pixel translucent, the drawing sub-system
|
||||||
* respects the alpha value of each individual pixel. If a pixel gets
|
* respects the alpha value of each individual pixel. If a pixel gets
|
||||||
* painted with the alpha color component equal to zero, it becomes
|
* painted with the alpha color component equal to zero, it becomes
|
||||||
* visually transparent, if the alpha of the pixel is equal to 1.0f, the
|
* visually transparent. If the alpha of the pixel is equal to 1.0f, the
|
||||||
* pixel is fully opaque. Interim values of the alpha color component make
|
* pixel is fully opaque. Interim values of the alpha color component make
|
||||||
* the pixel semi-transparent. In this mode the background of the window
|
* the pixel semi-transparent. In this mode, the background of the window
|
||||||
* gets painted with the alpha value of the given background color (meaning
|
* gets painted with the alpha value of the given background color. If the
|
||||||
* that it is not painted at all if the alpha value of the argument of this
|
* alpha value of the argument of this method is equal to {@code 0}, the
|
||||||
* method is equal to zero.)
|
* background is not painted at all.
|
||||||
* <p>
|
* <p>
|
||||||
* The actual level of translucency of a given pixel also depends on window
|
* The actual level of translucency of a given pixel also depends on window
|
||||||
* opacity (see {@link #setOpacity(float)}), as well as the current shape of
|
* opacity (see {@link #setOpacity(float)}), as well as the current shape of
|
||||||
* this window (see {@link #setShape(Shape)}).
|
* this window (see {@link #setShape(Shape)}).
|
||||||
* <p>
|
* <p>
|
||||||
* Note that painting a pixel with the alpha value of 0 may or may not
|
* Note that painting a pixel with the alpha value of {@code 0} may or may
|
||||||
* disable the mouse event handling on this pixel. This is a
|
* not disable the mouse event handling on this pixel. This is a
|
||||||
* platform-dependent behavior. To make sure the mouse clicks do not get
|
* platform-dependent behavior. To make sure the mouse events do not get
|
||||||
* dispatched to a particular pixel, the pixel must be excluded from the
|
* dispatched to a particular pixel, the pixel must be excluded from the
|
||||||
* shape of the window.
|
* shape of the window.
|
||||||
* <p>
|
* <p>
|
||||||
@ -3685,17 +3711,21 @@ public class Window extends Container implements Accessible {
|
|||||||
* @param bgColor the color to become this window's background color.
|
* @param bgColor the color to become this window's background color.
|
||||||
*
|
*
|
||||||
* @throws IllegalComponentStateException if the alpha value of the given
|
* @throws IllegalComponentStateException if the alpha value of the given
|
||||||
* background color is less than 1.0f and the window is in
|
* background color is less than {@code 1.0f} and the window is decorated
|
||||||
|
* @throws IllegalComponentStateException if the alpha value of the given
|
||||||
|
* background color is less than {@code 1.0f} and the window is in
|
||||||
* full-screen mode
|
* full-screen mode
|
||||||
* @throws UnsupportedOperationException if the alpha value of the given
|
* @throws UnsupportedOperationException if the alpha value of the given
|
||||||
* background color is less than 1.0f and
|
* background color is less than {@code 1.0f} and {@link
|
||||||
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||||
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
||||||
*
|
*
|
||||||
* @see Window#getBackground
|
* @see Window#getBackground
|
||||||
* @see Window#isOpaque
|
* @see Window#isOpaque
|
||||||
* @see Window#setOpacity(float)
|
* @see Window#setOpacity(float)
|
||||||
* @see Window#setShape(Shape)
|
* @see Window#setShape(Shape)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
* @see GraphicsConfiguration#isTranslucencyCapable()
|
* @see GraphicsConfiguration#isTranslucencyCapable()
|
||||||
@ -3739,7 +3769,7 @@ public class Window extends Container implements Accessible {
|
|||||||
* <p>
|
* <p>
|
||||||
* The method returns {@code false} if the background color of the window
|
* The method returns {@code false} if the background color of the window
|
||||||
* is not {@code null} and the alpha component of the color is less than
|
* is not {@code null} and the alpha component of the color is less than
|
||||||
* 1.0f. The method returns {@code true} otherwise.
|
* {@code 1.0f}. The method returns {@code true} otherwise.
|
||||||
*
|
*
|
||||||
* @return {@code true} if the window is opaque, {@code false} otherwise
|
* @return {@code true} if the window is opaque, {@code false} otherwise
|
||||||
*
|
*
|
||||||
|
@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
|
|||||||
* or an I/O error occurs.
|
* or an I/O error occurs.
|
||||||
*/
|
*/
|
||||||
public synchronized int available() throws IOException {
|
public synchronized int available() throws IOException {
|
||||||
return getInIfOpen().available() + (count - pos);
|
int n = count - pos;
|
||||||
|
int avail = getInIfOpen().available();
|
||||||
|
return n > (Integer.MAX_VALUE - avail)
|
||||||
|
? Integer.MAX_VALUE
|
||||||
|
: n + avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
|
|||||||
*/
|
*/
|
||||||
public int available() throws IOException {
|
public int available() throws IOException {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
return (buf.length - pos) + super.available();
|
int n = buf.length - pos;
|
||||||
|
int avail = super.available();
|
||||||
|
return n > (Integer.MAX_VALUE - avail)
|
||||||
|
? Integer.MAX_VALUE
|
||||||
|
: n + avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,11 +44,11 @@ public interface Readable {
|
|||||||
* rewinding of the buffer is performed.
|
* rewinding of the buffer is performed.
|
||||||
*
|
*
|
||||||
* @param cb the buffer to read characters into
|
* @param cb the buffer to read characters into
|
||||||
* @return @return The number of <tt>char</tt> values added to the buffer,
|
* @return The number of {@code char} values added to the buffer,
|
||||||
* or -1 if this source of characters is at its end
|
* or -1 if this source of characters is at its end
|
||||||
* @throws IOException if an I/O error occurs
|
* @throws IOException if an I/O error occurs
|
||||||
* @throws NullPointerException if cb is null
|
* @throws NullPointerException if cb is null
|
||||||
* @throws ReadOnlyBufferException if cb is a read only buffer
|
* @throws java.nio.ReadOnlyBufferException if cb is a read only buffer
|
||||||
*/
|
*/
|
||||||
public int read(java.nio.CharBuffer cb) throws IOException;
|
public int read(java.nio.CharBuffer cb) throws IOException;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class StringCharBuffer // package-private
|
|||||||
0,
|
0,
|
||||||
this.remaining(),
|
this.remaining(),
|
||||||
this.remaining(),
|
this.remaining(),
|
||||||
this.position());
|
offset + this.position());
|
||||||
}
|
}
|
||||||
|
|
||||||
private StringCharBuffer(CharSequence s,
|
private StringCharBuffer(CharSequence s,
|
||||||
|
@ -110,7 +110,8 @@ import java.nio.ByteBuffer;
|
|||||||
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
|
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
|
||||||
* operation is not defined. Buffers should be discarded or at least care must
|
* operation is not defined. Buffers should be discarded or at least care must
|
||||||
* be taken to ensure that the buffers are not accessed while the channel remains
|
* be taken to ensure that the buffers are not accessed while the channel remains
|
||||||
* open.
|
* open. All methods that accept timeout parameters treat values less than or
|
||||||
|
* equal to zero to mean that the I/O operation does not timeout.
|
||||||
*
|
*
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
@ -367,7 +368,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param dst
|
* @param dst
|
||||||
* The buffer into which bytes are to be transferred
|
* The buffer into which bytes are to be transferred
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -376,8 +377,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The handler for consuming the result
|
* The handler for consuming the result
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
* If the {@code timeout} parameter is negative or the buffer is
|
* If the buffer is read-only
|
||||||
* read-only
|
|
||||||
* @throws ReadPendingException
|
* @throws ReadPendingException
|
||||||
* If a read operation is already in progress on this channel
|
* If a read operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -471,7 +471,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The maximum number of buffers to be accessed; must be non-negative
|
* The maximum number of buffers to be accessed; must be non-negative
|
||||||
* and no larger than {@code dsts.length - offset}
|
* and no larger than {@code dsts.length - offset}
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -483,8 +483,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* If the pre-conditions for the {@code offset} and {@code length}
|
* If the pre-conditions for the {@code offset} and {@code length}
|
||||||
* parameter aren't met
|
* parameter aren't met
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
* If the {@code timeout} parameter is negative, or a buffer is
|
* If the buffer is read-only
|
||||||
* read-only
|
|
||||||
* @throws ReadPendingException
|
* @throws ReadPendingException
|
||||||
* If a read operation is already in progress on this channel
|
* If a read operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -524,7 +523,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param src
|
* @param src
|
||||||
* The buffer from which bytes are to be retrieved
|
* The buffer from which bytes are to be retrieved
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -532,8 +531,6 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param handler
|
* @param handler
|
||||||
* The handler for consuming the result
|
* The handler for consuming the result
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* If the {@code timeout} parameter is negative
|
|
||||||
* @throws WritePendingException
|
* @throws WritePendingException
|
||||||
* If a write operation is already in progress on this channel
|
* If a write operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -623,7 +620,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The maximum number of buffers to be accessed; must be non-negative
|
* The maximum number of buffers to be accessed; must be non-negative
|
||||||
* and no larger than {@code srcs.length - offset}
|
* and no larger than {@code srcs.length - offset}
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -634,8 +631,6 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @throws IndexOutOfBoundsException
|
* @throws IndexOutOfBoundsException
|
||||||
* If the pre-conditions for the {@code offset} and {@code length}
|
* If the pre-conditions for the {@code offset} and {@code length}
|
||||||
* parameter aren't met
|
* parameter aren't met
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* If the {@code timeout} parameter is negative
|
|
||||||
* @throws WritePendingException
|
* @throws WritePendingException
|
||||||
* If a write operation is already in progress on this channel
|
* If a write operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
|
@ -84,7 +84,7 @@ import java.security.*;
|
|||||||
* {@code setJNDIContext} and {@code setLogger}</td>
|
* {@code setJNDIContext} and {@code setLogger}</td>
|
||||||
* <td>Permits an application to specify the JNDI context from which the
|
* <td>Permits an application to specify the JNDI context from which the
|
||||||
* {@code SyncProvider} implementations can be retrieved from and the logging
|
* {@code SyncProvider} implementations can be retrieved from and the logging
|
||||||
* object to be used by the{@codeSyncProvider} implementation.</td>
|
* object to be used by the {@code SyncProvider} implementation.</td>
|
||||||
* </tr>
|
* </tr>
|
||||||
*
|
*
|
||||||
* <tr>
|
* <tr>
|
||||||
|
@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
|
|||||||
* instance of the Java virtual machine.
|
* instance of the Java virtual machine.
|
||||||
*
|
*
|
||||||
* <tr><td valign="top">{@code 'Z'}
|
* <tr><td valign="top">{@code 'Z'}
|
||||||
|
* <td valign="top"> <tt>'\u005a'</tt>
|
||||||
* <td> A string representing the abbreviation for the time zone. This
|
* <td> A string representing the abbreviation for the time zone. This
|
||||||
* value will be adjusted as necessary for Daylight Saving Time. For
|
* value will be adjusted as necessary for Daylight Saving Time. For
|
||||||
* {@code long}, {@link Long}, and {@link Date} the time zone used is
|
* {@code long}, {@link Long}, and {@link Date} the time zone used is
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
package javax.security.auth;
|
package javax.security.auth;
|
||||||
|
|
||||||
|
import java.security.Security;
|
||||||
|
import sun.security.util.Debug;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p> This is an abstract class for representing the system policy for
|
* <p> This is an abstract class for representing the system policy for
|
||||||
* Subject-based authorization. A subclass implementation
|
* Subject-based authorization. A subclass implementation
|
||||||
@ -159,6 +162,10 @@ public abstract class Policy {
|
|||||||
private static Policy policy;
|
private static Policy policy;
|
||||||
private static ClassLoader contextClassLoader;
|
private static ClassLoader contextClassLoader;
|
||||||
|
|
||||||
|
// true if a custom (not com.sun.security.auth.PolicyFile) system-wide
|
||||||
|
// policy object is set
|
||||||
|
private static boolean isCustomPolicy;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
contextClassLoader = java.security.AccessController.doPrivileged
|
contextClassLoader = java.security.AccessController.doPrivileged
|
||||||
(new java.security.PrivilegedAction<ClassLoader>() {
|
(new java.security.PrivilegedAction<ClassLoader>() {
|
||||||
@ -234,6 +241,8 @@ public abstract class Policy {
|
|||||||
contextClassLoader).newInstance();
|
contextClassLoader).newInstance();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
isCustomPolicy =
|
||||||
|
!finalClass.equals("com.sun.security.auth.PolicyFile");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new SecurityException
|
throw new SecurityException
|
||||||
(sun.security.util.ResourcesMgr.getString
|
(sun.security.util.ResourcesMgr.getString
|
||||||
@ -265,6 +274,46 @@ public abstract class Policy {
|
|||||||
java.lang.SecurityManager sm = System.getSecurityManager();
|
java.lang.SecurityManager sm = System.getSecurityManager();
|
||||||
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
|
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
|
||||||
Policy.policy = policy;
|
Policy.policy = policy;
|
||||||
|
// all non-null policy objects are assumed to be custom
|
||||||
|
isCustomPolicy = policy != null ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if a custom (not com.sun.security.auth.PolicyFile)
|
||||||
|
* system-wide policy object has been set or installed. This method is
|
||||||
|
* called by SubjectDomainCombiner to provide backwards compatibility for
|
||||||
|
* developers that provide their own javax.security.auth.Policy
|
||||||
|
* implementations.
|
||||||
|
*
|
||||||
|
* @return true if a custom (not com.sun.security.auth.PolicyFile)
|
||||||
|
* system-wide policy object has been set; false otherwise
|
||||||
|
*/
|
||||||
|
static boolean isCustomPolicySet(Debug debug) {
|
||||||
|
if (policy != null) {
|
||||||
|
if (debug != null && isCustomPolicy) {
|
||||||
|
debug.println("Providing backwards compatibility for " +
|
||||||
|
"javax.security.auth.policy implementation: " +
|
||||||
|
policy.toString());
|
||||||
|
}
|
||||||
|
return isCustomPolicy;
|
||||||
|
}
|
||||||
|
// check if custom policy has been set using auth.policy.provider prop
|
||||||
|
String policyClass = java.security.AccessController.doPrivileged
|
||||||
|
(new java.security.PrivilegedAction<String>() {
|
||||||
|
public String run() {
|
||||||
|
return Security.getProperty("auth.policy.provider");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (policyClass != null
|
||||||
|
&& !policyClass.equals("com.sun.security.auth.PolicyFile")) {
|
||||||
|
if (debug != null) {
|
||||||
|
debug.println("Providing backwards compatibility for " +
|
||||||
|
"javax.security.auth.policy implementation: " +
|
||||||
|
policyClass);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -26,8 +26,6 @@
|
|||||||
package javax.security.auth;
|
package javax.security.auth;
|
||||||
|
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.AccessControlContext;
|
|
||||||
import java.security.AllPermission;
|
|
||||||
import java.security.Permission;
|
import java.security.Permission;
|
||||||
import java.security.Permissions;
|
import java.security.Permissions;
|
||||||
import java.security.PermissionCollection;
|
import java.security.PermissionCollection;
|
||||||
@ -35,10 +33,8 @@ import java.security.Policy;
|
|||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
import java.security.ProtectionDomain;
|
import java.security.ProtectionDomain;
|
||||||
import java.lang.ClassLoader;
|
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
@ -61,7 +57,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
"\t[SubjectDomainCombiner]");
|
"\t[SubjectDomainCombiner]");
|
||||||
|
|
||||||
// Note: check only at classloading time, not dynamically during combine()
|
// Note: check only at classloading time, not dynamically during combine()
|
||||||
private static final boolean useJavaxPolicy = compatPolicy();
|
private static final boolean useJavaxPolicy =
|
||||||
|
javax.security.auth.Policy.isCustomPolicySet(debug);
|
||||||
|
|
||||||
// Relevant only when useJavaxPolicy is true
|
// Relevant only when useJavaxPolicy is true
|
||||||
private static final boolean allowCaching =
|
private static final boolean allowCaching =
|
||||||
@ -202,8 +199,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maintain backwards compatibility for people who provide
|
// maintain backwards compatibility for developers who provide
|
||||||
// their own javax.security.auth.Policy implementations
|
// their own custom javax.security.auth.Policy implementations
|
||||||
if (useJavaxPolicy) {
|
if (useJavaxPolicy) {
|
||||||
return combineJavaxPolicy(currentDomains, assignedDomains);
|
return combineJavaxPolicy(currentDomains, assignedDomains);
|
||||||
}
|
}
|
||||||
@ -476,8 +473,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
String s = AccessController.doPrivileged
|
String s = AccessController.doPrivileged
|
||||||
(new PrivilegedAction<String>() {
|
(new PrivilegedAction<String>() {
|
||||||
public String run() {
|
public String run() {
|
||||||
return java.security.Security.getProperty
|
return Security.getProperty("cache.auth.policy");
|
||||||
("cache.auth.policy");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
@ -488,29 +484,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maintain backwards compatibility for people who provide
|
|
||||||
// their own javax.security.auth.Policy implementations
|
|
||||||
private static boolean compatPolicy() {
|
|
||||||
javax.security.auth.Policy javaxPolicy = AccessController.doPrivileged
|
|
||||||
(new PrivilegedAction<javax.security.auth.Policy>() {
|
|
||||||
public javax.security.auth.Policy run() {
|
|
||||||
return javax.security.auth.Policy.getPolicy();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!(javaxPolicy instanceof com.sun.security.auth.PolicyFile)) {
|
|
||||||
if (debug != null) {
|
|
||||||
debug.println("Providing backwards compatibility for " +
|
|
||||||
"javax.security.auth.policy implementation: " +
|
|
||||||
javaxPolicy.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void printInputDomains(ProtectionDomain[] currentDomains,
|
private static void printInputDomains(ProtectionDomain[] currentDomains,
|
||||||
ProtectionDomain[] assignedDomains) {
|
ProtectionDomain[] assignedDomains) {
|
||||||
if (currentDomains == null || currentDomains.length == 0) {
|
if (currentDomains == null || currentDomains.length == 0) {
|
||||||
|
@ -223,6 +223,16 @@ public final class AWTAccessor {
|
|||||||
void processEvent(Component comp, AWTEvent e);
|
void processEvent(Component comp, AWTEvent e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An interface of accessor for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public interface ContainerAccessor {
|
||||||
|
/**
|
||||||
|
* Validates the container unconditionally.
|
||||||
|
*/
|
||||||
|
void validateUnconditionally(Container cont);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An interface of accessor for java.awt.Window class.
|
* An interface of accessor for java.awt.Window class.
|
||||||
*/
|
*/
|
||||||
@ -334,6 +344,10 @@ public final class AWTAccessor {
|
|||||||
* Gets the state of this frame.
|
* Gets the state of this frame.
|
||||||
*/
|
*/
|
||||||
int getExtendedState(Frame frame);
|
int getExtendedState(Frame frame);
|
||||||
|
/*
|
||||||
|
* Gets the maximized bounds of this frame.
|
||||||
|
*/
|
||||||
|
Rectangle getMaximizedBounds(Frame frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -440,53 +454,19 @@ public final class AWTAccessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The java.awt.Component class accessor object.
|
* Accessor instances are initialized in the static initializers of
|
||||||
|
* corresponding AWT classes by using setters defined below.
|
||||||
*/
|
*/
|
||||||
private static ComponentAccessor componentAccessor;
|
private static ComponentAccessor componentAccessor;
|
||||||
|
private static ContainerAccessor containerAccessor;
|
||||||
/*
|
|
||||||
* The java.awt.Window class accessor object.
|
|
||||||
*/
|
|
||||||
private static WindowAccessor windowAccessor;
|
private static WindowAccessor windowAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.AWTEvent class accessor object.
|
|
||||||
*/
|
|
||||||
private static AWTEventAccessor awtEventAccessor;
|
private static AWTEventAccessor awtEventAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.event.InputEvent class accessor object.
|
|
||||||
*/
|
|
||||||
private static InputEventAccessor inputEventAccessor;
|
private static InputEventAccessor inputEventAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.Frame class accessor object.
|
|
||||||
*/
|
|
||||||
private static FrameAccessor frameAccessor;
|
private static FrameAccessor frameAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.KeyboardFocusManager class accessor object.
|
|
||||||
*/
|
|
||||||
private static KeyboardFocusManagerAccessor kfmAccessor;
|
private static KeyboardFocusManagerAccessor kfmAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.MenuComponent class accessor object.
|
|
||||||
*/
|
|
||||||
private static MenuComponentAccessor menuComponentAccessor;
|
private static MenuComponentAccessor menuComponentAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.EventQueue class accessor object.
|
|
||||||
*/
|
|
||||||
private static EventQueueAccessor eventQueueAccessor;
|
private static EventQueueAccessor eventQueueAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.PopupMenu class accessor object.
|
|
||||||
*/
|
|
||||||
private static PopupMenuAccessor popupMenuAccessor;
|
private static PopupMenuAccessor popupMenuAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.FileDialog class accessor object.
|
|
||||||
*/
|
|
||||||
private static FileDialogAccessor fileDialogAccessor;
|
private static FileDialogAccessor fileDialogAccessor;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -497,7 +477,7 @@ public final class AWTAccessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Retrieve the accessor object for the java.awt.Window class.
|
* Retrieve the accessor object for the java.awt.Component class.
|
||||||
*/
|
*/
|
||||||
public static ComponentAccessor getComponentAccessor() {
|
public static ComponentAccessor getComponentAccessor() {
|
||||||
if (componentAccessor == null) {
|
if (componentAccessor == null) {
|
||||||
@ -507,6 +487,24 @@ public final class AWTAccessor {
|
|||||||
return componentAccessor;
|
return componentAccessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set an accessor object for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public static void setContainerAccessor(ContainerAccessor ca) {
|
||||||
|
containerAccessor = ca;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve the accessor object for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public static ContainerAccessor getContainerAccessor() {
|
||||||
|
if (containerAccessor == null) {
|
||||||
|
unsafe.ensureClassInitialized(Container.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
return containerAccessor;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set an accessor object for the java.awt.Window class.
|
* Set an accessor object for the java.awt.Window class.
|
||||||
*/
|
*/
|
||||||
|
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal file
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 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.io;
|
||||||
|
|
||||||
|
import sun.nio.cs.ext.IBM833;
|
||||||
|
|
||||||
|
public class ByteToCharCp833 extends ByteToCharSingleByte {
|
||||||
|
|
||||||
|
private final static IBM833 nioCoder = new IBM833();
|
||||||
|
|
||||||
|
public String getCharacterEncoding() {
|
||||||
|
return "Cp833";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ByteToCharCp833() {
|
||||||
|
super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal file
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 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.io;
|
||||||
|
|
||||||
|
import sun.nio.cs.ext.IBM833;
|
||||||
|
|
||||||
|
public class CharToByteCp833 extends CharToByteSingleByte {
|
||||||
|
|
||||||
|
private final static IBM833 nioCoder = new IBM833();
|
||||||
|
|
||||||
|
public String getCharacterEncoding() {
|
||||||
|
return "Cp833";
|
||||||
|
}
|
||||||
|
|
||||||
|
public CharToByteCp833() {
|
||||||
|
super.mask1 = 0xFF00;
|
||||||
|
super.mask2 = 0x00FF;
|
||||||
|
super.shift = 8;
|
||||||
|
super.index1 = nioCoder.getEncoderIndex1();
|
||||||
|
super.index2 = nioCoder.getEncoderIndex2();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -406,6 +406,11 @@ public class CharacterEncoding {
|
|||||||
aliasTable.put("cp775", "Cp775");
|
aliasTable.put("cp775", "Cp775");
|
||||||
aliasTable.put("775", "Cp775");
|
aliasTable.put("775", "Cp775");
|
||||||
|
|
||||||
|
aliasTable.put("ibm833", "Cp833");
|
||||||
|
aliasTable.put("ibm-833", "Cp833");
|
||||||
|
aliasTable.put("cp833", "Cp833");
|
||||||
|
aliasTable.put("833", "Cp833");
|
||||||
|
|
||||||
aliasTable.put("ibm834", "Cp834");
|
aliasTable.put("ibm834", "Cp834");
|
||||||
aliasTable.put("ibm-834", "Cp834");
|
aliasTable.put("ibm-834", "Cp834");
|
||||||
aliasTable.put("cp834", "Cp834");
|
aliasTable.put("cp834", "Cp834");
|
||||||
|
@ -44,8 +44,16 @@ import java.io.IOException;
|
|||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.MathContext;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.jar.Attributes;
|
import java.util.jar.Attributes;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.jar.Manifest;
|
import java.util.jar.Manifest;
|
||||||
@ -59,6 +67,17 @@ public enum LauncherHelper {
|
|||||||
private static StringBuilder outBuf = new StringBuilder();
|
private static StringBuilder outBuf = new StringBuilder();
|
||||||
|
|
||||||
private static ResourceBundle javarb = null;
|
private static ResourceBundle javarb = null;
|
||||||
|
|
||||||
|
private static final String INDENT = " ";
|
||||||
|
private static final String VM_SETTINGS = "VM settings:";
|
||||||
|
private static final String PROP_SETTINGS = "Property settings:";
|
||||||
|
private static final String LOCALE_SETTINGS = "Locale settings:";
|
||||||
|
|
||||||
|
private static final long K = 1024;
|
||||||
|
private static final long M = K * K;
|
||||||
|
private static final long G = M * K;
|
||||||
|
private static final long T = G * K;
|
||||||
|
|
||||||
private static synchronized ResourceBundle getLauncherResourceBundle() {
|
private static synchronized ResourceBundle getLauncherResourceBundle() {
|
||||||
if (javarb == null) {
|
if (javarb == null) {
|
||||||
javarb = ResourceBundle.getBundle(defaultBundleName);
|
javarb = ResourceBundle.getBundle(defaultBundleName);
|
||||||
@ -66,6 +85,184 @@ public enum LauncherHelper {
|
|||||||
return javarb;
|
return javarb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A method called by the launcher to print out the standard settings,
|
||||||
|
* by default -XshowSettings is equivalent to -XshowSettings:all,
|
||||||
|
* Specific information may be gotten by using suboptions with possible
|
||||||
|
* values vm, properties and locale.
|
||||||
|
*
|
||||||
|
* printToStderr: choose between stdout and stderr
|
||||||
|
*
|
||||||
|
* optionFlag: specifies which options to print default is all other
|
||||||
|
* possible values are vm, properties, locale.
|
||||||
|
*
|
||||||
|
* maxHeapSize: in bytes, as set by the launcher, a zero-value indicates
|
||||||
|
* this code should determine this value, using a suitable method.
|
||||||
|
*
|
||||||
|
* stackSize: in bytes, as set by the launcher, a zero-value indicates
|
||||||
|
* this code determine this value, using a suitable method.
|
||||||
|
*/
|
||||||
|
static void showSettings(boolean printToStderr, String optionFlag,
|
||||||
|
long maxHeapSize, long stackSize, boolean isServer) {
|
||||||
|
|
||||||
|
PrintStream ostream = (printToStderr) ? System.err : System.out;
|
||||||
|
String opts[] = optionFlag.split(":");
|
||||||
|
String optStr = (opts.length > 1 && opts[1] != null)
|
||||||
|
? opts[1].trim()
|
||||||
|
: "all";
|
||||||
|
switch (optStr) {
|
||||||
|
case "vm":
|
||||||
|
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
|
||||||
|
break;
|
||||||
|
case "properties":
|
||||||
|
printProperties(ostream);
|
||||||
|
break;
|
||||||
|
case "locale":
|
||||||
|
printLocale(ostream);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
|
||||||
|
printProperties(ostream);
|
||||||
|
printLocale(ostream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the main vm settings subopt/section
|
||||||
|
*/
|
||||||
|
private static void printVmSettings(PrintStream ostream, long maxHeapSize,
|
||||||
|
long stackSize, boolean isServer) {
|
||||||
|
|
||||||
|
ostream.println(VM_SETTINGS);
|
||||||
|
if (stackSize != 0L) {
|
||||||
|
ostream.println(INDENT + "Stack Size: " + scaleValue(stackSize));
|
||||||
|
}
|
||||||
|
if (maxHeapSize != 0L) {
|
||||||
|
ostream.println(INDENT + "Max. Heap Size: " + scaleValue(maxHeapSize));
|
||||||
|
} else {
|
||||||
|
ostream.println(INDENT + "Max. Heap Size (Estimated): "
|
||||||
|
+ scaleValue(Runtime.getRuntime().maxMemory()));
|
||||||
|
}
|
||||||
|
ostream.println(INDENT + "Ergonomics Machine Class: "
|
||||||
|
+ ((isServer) ? "server" : "client"));
|
||||||
|
ostream.println(INDENT + "Using VM: "
|
||||||
|
+ System.getProperty("java.vm.name"));
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* scale the incoming values to a human readable form, represented as
|
||||||
|
* K, M, G and T, see java.c parse_size for the scaled values and
|
||||||
|
* suffixes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static String scaleValue(double v) {
|
||||||
|
MathContext mc2 = new MathContext(3, RoundingMode.HALF_EVEN);
|
||||||
|
|
||||||
|
if (v >= K && v < M) {
|
||||||
|
return (new BigDecimal(v / K, mc2)).toPlainString() + "K";
|
||||||
|
} else if (v >= M && v < G) {
|
||||||
|
return (new BigDecimal(v / M, mc2)).toPlainString() + "M";
|
||||||
|
} else if (v >= G && v < T) {
|
||||||
|
return (new BigDecimal(v / G, mc2)).toPlainString() + "G";
|
||||||
|
} else if (v >= T) {
|
||||||
|
return (new BigDecimal(v / T, mc2)).toPlainString() + "T";
|
||||||
|
} else {
|
||||||
|
return String.format("%.0f", v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the properties subopt/section
|
||||||
|
*/
|
||||||
|
private static void printProperties(PrintStream ostream) {
|
||||||
|
Properties p = System.getProperties();
|
||||||
|
ostream.println(PROP_SETTINGS);
|
||||||
|
List<String> sortedPropertyKeys = new ArrayList<>();
|
||||||
|
sortedPropertyKeys.addAll(p.stringPropertyNames());
|
||||||
|
Collections.sort(sortedPropertyKeys);
|
||||||
|
for (String x : sortedPropertyKeys) {
|
||||||
|
printPropertyValue(ostream, x, p.getProperty(x));
|
||||||
|
}
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isPath(String key) {
|
||||||
|
return key.endsWith(".dirs") || key.endsWith(".path");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printPropertyValue(PrintStream ostream,
|
||||||
|
String key, String value) {
|
||||||
|
ostream.print(INDENT + key + " = ");
|
||||||
|
if (key.equals("line.separator")) {
|
||||||
|
byte[] bytes = value.getBytes();
|
||||||
|
for (byte b : bytes) {
|
||||||
|
switch (b) {
|
||||||
|
case 0xd:
|
||||||
|
ostream.print("CR ");
|
||||||
|
break;
|
||||||
|
case 0xa:
|
||||||
|
ostream.print("LF ");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ostream.printf("0x%02X", b & 0xff);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ostream.println();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!isPath(key)) {
|
||||||
|
ostream.println(value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// pretty print the path values as a list
|
||||||
|
String[] values = value.split(System.getProperty("path.separator"));
|
||||||
|
int len = values.length;
|
||||||
|
for (int i = 0 ; i < len ; i++) {
|
||||||
|
if (i == 0) { // first line treated specially
|
||||||
|
ostream.println(values[i]);
|
||||||
|
} else { // following lines prefix with indents
|
||||||
|
ostream.print(INDENT + INDENT);
|
||||||
|
ostream.println(values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the locale subopt/section
|
||||||
|
*/
|
||||||
|
private static void printLocale(PrintStream ostream) {
|
||||||
|
Locale locale = Locale.getDefault();
|
||||||
|
ostream.println(LOCALE_SETTINGS);
|
||||||
|
ostream.println(INDENT + "default locale = " + locale.getDisplayLanguage());
|
||||||
|
printLocales(ostream);
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printLocales(PrintStream ostream) {
|
||||||
|
Locale[] locales = Locale.getAvailableLocales();
|
||||||
|
final int len = locales == null ? 0 : locales.length;
|
||||||
|
if (len < 1 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ostream.print(INDENT + "available locales = ");
|
||||||
|
final int last = len - 1 ;
|
||||||
|
for (int i = 0; i < last ; i++) {
|
||||||
|
ostream.print(locales[i]);
|
||||||
|
if (i != last) {
|
||||||
|
ostream.print(", ");
|
||||||
|
}
|
||||||
|
// print columns of 8
|
||||||
|
if ((i + 1) % 8 == 0) {
|
||||||
|
ostream.println();
|
||||||
|
ostream.print(INDENT + INDENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ostream.println(locales[last]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A private helper method to get a localized message and also
|
* A private helper method to get a localized message and also
|
||||||
* apply any arguments that we might pass.
|
* apply any arguments that we might pass.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -97,7 +97,15 @@ java.launcher.X.usage=\
|
|||||||
\ -Xcheck:jni perform additional checks for JNI functions\n\
|
\ -Xcheck:jni perform additional checks for JNI functions\n\
|
||||||
\ -Xshare:off do not attempt to use shared class data\n\
|
\ -Xshare:off do not attempt to use shared class data\n\
|
||||||
\ -Xshare:auto use shared class data if possible (default)\n\
|
\ -Xshare:auto use shared class data if possible (default)\n\
|
||||||
\ -Xshare:on require using shared class data, otherwise fail.\n\n\
|
\ -Xshare:on require using shared class data, otherwise fail.\n\
|
||||||
|
\ -XshowSettings show all settings and continue\n\
|
||||||
|
\ -XshowSettings:all\n\
|
||||||
|
\ show all settings and continue\n\
|
||||||
|
\ -XshowSettings:vm show all vm related settings and continue\n\
|
||||||
|
\ -XshowSettings:properties\n\
|
||||||
|
\ show all property settings and continue\n\
|
||||||
|
\ -XshowSettings:locale\n\
|
||||||
|
\ show all locale related settings and continue\n\n\
|
||||||
The -X options are non-standard and subject to change without notice.\n
|
The -X options are non-standard and subject to change without notice.\n
|
||||||
|
|
||||||
java.launcher.cls.error1=\
|
java.launcher.cls.error1=\
|
||||||
|
@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
|
|||||||
if (remaining == 0) {
|
if (remaining == 0) {
|
||||||
eof = true;
|
eof = true;
|
||||||
consumeCRLF();
|
consumeCRLF();
|
||||||
|
t.getServerImpl().requestCompleted (t.getConnection());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
needToReadHeader = false;
|
needToReadHeader = false;
|
||||||
|
@ -40,5 +40,7 @@ class Event {
|
|||||||
class WriteFinishedEvent extends Event {
|
class WriteFinishedEvent extends Event {
|
||||||
WriteFinishedEvent (ExchangeImpl t) {
|
WriteFinishedEvent (ExchangeImpl t) {
|
||||||
super (t);
|
super (t);
|
||||||
|
assert !t.writefinished;
|
||||||
|
t.writefinished = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ class ExchangeImpl {
|
|||||||
Headers reqHdrs, rspHdrs;
|
Headers reqHdrs, rspHdrs;
|
||||||
Request req;
|
Request req;
|
||||||
String method;
|
String method;
|
||||||
|
boolean writefinished;
|
||||||
URI uri;
|
URI uri;
|
||||||
HttpConnection connection;
|
HttpConnection connection;
|
||||||
long reqContentLen;
|
long reqContentLen;
|
||||||
|
@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
|
|||||||
int n = in.read(b, off, len);
|
int n = in.read(b, off, len);
|
||||||
if (n > -1) {
|
if (n > -1) {
|
||||||
remaining -= n;
|
remaining -= n;
|
||||||
|
if (remaining == 0) {
|
||||||
|
t.getServerImpl().requestCompleted (t.getConnection());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
@ -55,10 +55,15 @@ class HttpConnection {
|
|||||||
SelectionKey selectionKey;
|
SelectionKey selectionKey;
|
||||||
String protocol;
|
String protocol;
|
||||||
long time;
|
long time;
|
||||||
|
volatile long creationTime; // time this connection was created
|
||||||
|
volatile long rspStartedTime; // time we started writing the response
|
||||||
int remaining;
|
int remaining;
|
||||||
boolean closed = false;
|
boolean closed = false;
|
||||||
Logger logger;
|
Logger logger;
|
||||||
|
|
||||||
|
public enum State {IDLE, REQUEST, RESPONSE};
|
||||||
|
volatile State state;
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String s = null;
|
String s = null;
|
||||||
if (chan != null) {
|
if (chan != null) {
|
||||||
@ -78,6 +83,14 @@ class HttpConnection {
|
|||||||
context = ctx;
|
context = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setState (State s) {
|
||||||
|
state = s;
|
||||||
|
}
|
||||||
|
|
||||||
void setParameters (
|
void setParameters (
|
||||||
InputStream in, OutputStream rawout, SocketChannel chan,
|
InputStream in, OutputStream rawout, SocketChannel chan,
|
||||||
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
|
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
|
||||||
|
@ -201,32 +201,22 @@ class Request {
|
|||||||
|
|
||||||
static class ReadStream extends InputStream {
|
static class ReadStream extends InputStream {
|
||||||
SocketChannel channel;
|
SocketChannel channel;
|
||||||
SelectorCache sc;
|
|
||||||
Selector selector;
|
|
||||||
ByteBuffer chanbuf;
|
ByteBuffer chanbuf;
|
||||||
SelectionKey key;
|
|
||||||
int available;
|
|
||||||
byte[] one;
|
byte[] one;
|
||||||
boolean closed = false, eof = false;
|
private boolean closed = false, eof = false;
|
||||||
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
|
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
|
||||||
boolean marked;
|
boolean marked;
|
||||||
boolean reset;
|
boolean reset;
|
||||||
int readlimit;
|
int readlimit;
|
||||||
static long readTimeout;
|
static long readTimeout;
|
||||||
ServerImpl server;
|
ServerImpl server;
|
||||||
|
final static int BUFSIZE = 8 * 1024;
|
||||||
static {
|
|
||||||
readTimeout = ServerConfig.getReadTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
|
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
|
||||||
this.channel = chan;
|
this.channel = chan;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
sc = SelectorCache.getSelectorCache();
|
chanbuf = ByteBuffer.allocate (BUFSIZE);
|
||||||
selector = sc.getSelector();
|
chanbuf.clear();
|
||||||
chanbuf = ByteBuffer.allocate (8* 1024);
|
|
||||||
key = chan.register (selector, SelectionKey.OP_READ);
|
|
||||||
available = 0;
|
|
||||||
one = new byte[1];
|
one = new byte[1];
|
||||||
closed = marked = reset = false;
|
closed = marked = reset = false;
|
||||||
}
|
}
|
||||||
@ -255,6 +245,12 @@ class Request {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert channel.isBlocking();
|
||||||
|
|
||||||
|
if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
|
||||||
|
throw new IndexOutOfBoundsException ();
|
||||||
|
}
|
||||||
|
|
||||||
if (reset) { /* satisfy from markBuf */
|
if (reset) { /* satisfy from markBuf */
|
||||||
canreturn = markBuf.remaining ();
|
canreturn = markBuf.remaining ();
|
||||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
willreturn = canreturn>srclen ? srclen : canreturn;
|
||||||
@ -263,17 +259,19 @@ class Request {
|
|||||||
reset = false;
|
reset = false;
|
||||||
}
|
}
|
||||||
} else { /* satisfy from channel */
|
} else { /* satisfy from channel */
|
||||||
canreturn = available();
|
chanbuf.clear ();
|
||||||
while (canreturn == 0 && !eof) {
|
if (srclen < BUFSIZE) {
|
||||||
block ();
|
chanbuf.limit (srclen);
|
||||||
canreturn = available();
|
|
||||||
}
|
}
|
||||||
if (eof) {
|
do {
|
||||||
|
willreturn = channel.read (chanbuf);
|
||||||
|
} while (willreturn == 0);
|
||||||
|
if (willreturn == -1) {
|
||||||
|
eof = true;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
chanbuf.flip ();
|
||||||
chanbuf.get(b, off, willreturn);
|
chanbuf.get(b, off, willreturn);
|
||||||
available -= willreturn;
|
|
||||||
|
|
||||||
if (marked) { /* copy into markBuf */
|
if (marked) { /* copy into markBuf */
|
||||||
try {
|
try {
|
||||||
@ -286,6 +284,11 @@ class Request {
|
|||||||
return willreturn;
|
return willreturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean markSupported () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does not query the OS socket */
|
||||||
public synchronized int available () throws IOException {
|
public synchronized int available () throws IOException {
|
||||||
if (closed)
|
if (closed)
|
||||||
throw new IOException ("Stream is closed");
|
throw new IOException ("Stream is closed");
|
||||||
@ -296,36 +299,7 @@ class Request {
|
|||||||
if (reset)
|
if (reset)
|
||||||
return markBuf.remaining();
|
return markBuf.remaining();
|
||||||
|
|
||||||
if (available > 0)
|
return chanbuf.remaining();
|
||||||
return available;
|
|
||||||
|
|
||||||
chanbuf.clear ();
|
|
||||||
available = channel.read (chanbuf);
|
|
||||||
if (available > 0) {
|
|
||||||
chanbuf.flip();
|
|
||||||
} else if (available == -1) {
|
|
||||||
eof = true;
|
|
||||||
available = 0;
|
|
||||||
}
|
|
||||||
return available;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* block() only called when available==0 and buf is empty
|
|
||||||
*/
|
|
||||||
private synchronized void block () throws IOException {
|
|
||||||
long currtime = server.getTime();
|
|
||||||
long maxtime = currtime + readTimeout;
|
|
||||||
|
|
||||||
while (currtime < maxtime) {
|
|
||||||
if (selector.select (readTimeout) == 1) {
|
|
||||||
selector.selectedKeys().clear();
|
|
||||||
available ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currtime = server.getTime();
|
|
||||||
}
|
|
||||||
throw new SocketTimeoutException ("no data received");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close () throws IOException {
|
public void close () throws IOException {
|
||||||
@ -333,8 +307,6 @@ class Request {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
channel.close ();
|
channel.close ();
|
||||||
selector.selectNow();
|
|
||||||
sc.freeSelector(selector);
|
|
||||||
closed = true;
|
closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,23 +334,14 @@ class Request {
|
|||||||
SocketChannel channel;
|
SocketChannel channel;
|
||||||
ByteBuffer buf;
|
ByteBuffer buf;
|
||||||
SelectionKey key;
|
SelectionKey key;
|
||||||
SelectorCache sc;
|
|
||||||
Selector selector;
|
|
||||||
boolean closed;
|
boolean closed;
|
||||||
byte[] one;
|
byte[] one;
|
||||||
ServerImpl server;
|
ServerImpl server;
|
||||||
static long writeTimeout;
|
|
||||||
|
|
||||||
static {
|
|
||||||
writeTimeout = ServerConfig.getWriteTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
|
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
sc = SelectorCache.getSelectorCache();
|
assert channel.isBlocking();
|
||||||
selector = sc.getSelector();
|
|
||||||
key = channel.register (selector, SelectionKey.OP_WRITE);
|
|
||||||
closed = false;
|
closed = false;
|
||||||
one = new byte [1];
|
one = new byte [1];
|
||||||
buf = ByteBuffer.allocate (4096);
|
buf = ByteBuffer.allocate (4096);
|
||||||
@ -411,31 +374,14 @@ class Request {
|
|||||||
l -= n;
|
l -= n;
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
return;
|
return;
|
||||||
block();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void block () throws IOException {
|
|
||||||
long currtime = server.getTime();
|
|
||||||
long maxtime = currtime + writeTimeout;
|
|
||||||
|
|
||||||
while (currtime < maxtime) {
|
|
||||||
if (selector.select (writeTimeout) == 1) {
|
|
||||||
selector.selectedKeys().clear ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currtime = server.getTime();
|
|
||||||
}
|
|
||||||
throw new SocketTimeoutException ("write blocked too long");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void close () throws IOException {
|
public void close () throws IOException {
|
||||||
if (closed)
|
if (closed)
|
||||||
return;
|
return;
|
||||||
|
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
|
||||||
channel.close ();
|
channel.close ();
|
||||||
selector.selectNow();
|
|
||||||
sc.freeSelector(selector);
|
|
||||||
closed = true;
|
closed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,6 @@ class SSLStreams {
|
|||||||
EngineWrapper wrapper;
|
EngineWrapper wrapper;
|
||||||
OutputStream os;
|
OutputStream os;
|
||||||
InputStream is;
|
InputStream is;
|
||||||
static long readTimeout = ServerConfig.getReadTimeout();
|
|
||||||
static long writeTimeout = ServerConfig.getWriteTimeout();
|
|
||||||
|
|
||||||
/* held by thread doing the hand-shake on this connection */
|
/* held by thread doing the hand-shake on this connection */
|
||||||
Lock handshaking = new ReentrantLock();
|
Lock handshaking = new ReentrantLock();
|
||||||
@ -77,10 +75,13 @@ class SSLStreams {
|
|||||||
if (cfg != null) {
|
if (cfg != null) {
|
||||||
Parameters params = new Parameters (cfg, addr);
|
Parameters params = new Parameters (cfg, addr);
|
||||||
cfg.configure (params);
|
cfg.configure (params);
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
SSLParameters sslParams = params.getSSLParameters();
|
SSLParameters sslParams = params.getSSLParameters();
|
||||||
if (sslParams != null) {
|
if (sslParams != null) {
|
||||||
engine.setSSLParameters (sslParams);
|
engine.setSSLParameters (sslParams);
|
||||||
} else {
|
} else
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
{
|
||||||
/* tiger compatibility */
|
/* tiger compatibility */
|
||||||
if (params.getCipherSuites() != null) {
|
if (params.getCipherSuites() != null) {
|
||||||
try {
|
try {
|
||||||
@ -104,7 +105,6 @@ class SSLStreams {
|
|||||||
|
|
||||||
class Parameters extends HttpsParameters {
|
class Parameters extends HttpsParameters {
|
||||||
InetSocketAddress addr;
|
InetSocketAddress addr;
|
||||||
SSLParameters params;
|
|
||||||
HttpsConfigurator cfg;
|
HttpsConfigurator cfg;
|
||||||
|
|
||||||
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
|
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
|
||||||
@ -117,12 +117,15 @@ class SSLStreams {
|
|||||||
public HttpsConfigurator getHttpsConfigurator() {
|
public HttpsConfigurator getHttpsConfigurator() {
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
|
SSLParameters params;
|
||||||
public void setSSLParameters (SSLParameters p) {
|
public void setSSLParameters (SSLParameters p) {
|
||||||
params = p;
|
params = p;
|
||||||
}
|
}
|
||||||
SSLParameters getSSLParameters () {
|
SSLParameters getSSLParameters () {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -245,9 +248,6 @@ class SSLStreams {
|
|||||||
|
|
||||||
SocketChannel chan;
|
SocketChannel chan;
|
||||||
SSLEngine engine;
|
SSLEngine engine;
|
||||||
SelectorCache sc;
|
|
||||||
Selector write_selector, read_selector;
|
|
||||||
SelectionKey wkey, rkey;
|
|
||||||
Object wrapLock, unwrapLock;
|
Object wrapLock, unwrapLock;
|
||||||
ByteBuffer unwrap_src, wrap_dst;
|
ByteBuffer unwrap_src, wrap_dst;
|
||||||
boolean closed = false;
|
boolean closed = false;
|
||||||
@ -260,16 +260,9 @@ class SSLStreams {
|
|||||||
unwrapLock = new Object();
|
unwrapLock = new Object();
|
||||||
unwrap_src = allocate(BufType.PACKET);
|
unwrap_src = allocate(BufType.PACKET);
|
||||||
wrap_dst = allocate(BufType.PACKET);
|
wrap_dst = allocate(BufType.PACKET);
|
||||||
sc = SelectorCache.getSelectorCache();
|
|
||||||
write_selector = sc.getSelector();
|
|
||||||
wkey = chan.register (write_selector, SelectionKey.OP_WRITE);
|
|
||||||
read_selector = sc.getSelector();
|
|
||||||
wkey = chan.register (read_selector, SelectionKey.OP_READ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void close () throws IOException {
|
void close () throws IOException {
|
||||||
sc.freeSelector (write_selector);
|
|
||||||
sc.freeSelector (read_selector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to wrap and send the data in src. Handles OVERFLOW.
|
/* try to wrap and send the data in src. Handles OVERFLOW.
|
||||||
@ -304,15 +297,7 @@ class SSLStreams {
|
|||||||
wrap_dst.flip();
|
wrap_dst.flip();
|
||||||
int l = wrap_dst.remaining();
|
int l = wrap_dst.remaining();
|
||||||
assert l == r.result.bytesProduced();
|
assert l == r.result.bytesProduced();
|
||||||
long currtime = time.getTime();
|
|
||||||
long maxtime = currtime + writeTimeout;
|
|
||||||
while (l>0) {
|
while (l>0) {
|
||||||
write_selector.select(writeTimeout); // timeout
|
|
||||||
currtime = time.getTime();
|
|
||||||
if (currtime > maxtime) {
|
|
||||||
throw new SocketTimeoutException ("write timed out");
|
|
||||||
}
|
|
||||||
write_selector.selectedKeys().clear();
|
|
||||||
l -= chan.write (wrap_dst);
|
l -= chan.write (wrap_dst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -342,20 +327,12 @@ class SSLStreams {
|
|||||||
needData = true;
|
needData = true;
|
||||||
}
|
}
|
||||||
synchronized (unwrapLock) {
|
synchronized (unwrapLock) {
|
||||||
int x,y;
|
int x;
|
||||||
do {
|
do {
|
||||||
if (needData) {
|
if (needData) {
|
||||||
long currTime = time.getTime();
|
|
||||||
long maxtime = currTime + readTimeout;
|
|
||||||
do {
|
do {
|
||||||
if (currTime > maxtime) {
|
|
||||||
throw new SocketTimeoutException ("read timedout");
|
|
||||||
}
|
|
||||||
y = read_selector.select (readTimeout);
|
|
||||||
currTime = time.getTime();
|
|
||||||
} while (y != 1);
|
|
||||||
read_selector.selectedKeys().clear();
|
|
||||||
x = chan.read (unwrap_src);
|
x = chan.read (unwrap_src);
|
||||||
|
} while (x == 0);
|
||||||
if (x == -1) {
|
if (x == -1) {
|
||||||
throw new IOException ("connection closed for reading");
|
throw new IOException ("connection closed for reading");
|
||||||
}
|
}
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2006, 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.net.httpserver;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.nio.*;
|
|
||||||
import java.net.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.security.*;
|
|
||||||
import java.nio.channels.*;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Implements a cache of java.nio.channels.Selector
|
|
||||||
* where Selectors are allocated on demand and placed
|
|
||||||
* in a temporary cache for a period of time, so they
|
|
||||||
* can be reused. If a period of between 2 and 4 minutes
|
|
||||||
* elapses without being used, then they are closed.
|
|
||||||
*/
|
|
||||||
public class SelectorCache {
|
|
||||||
|
|
||||||
static SelectorCache cache = null;
|
|
||||||
|
|
||||||
private SelectorCache () {
|
|
||||||
freeSelectors = new LinkedList<SelectorWrapper>();
|
|
||||||
CacheCleaner c = AccessController.doPrivileged(
|
|
||||||
new PrivilegedAction<CacheCleaner>() {
|
|
||||||
public CacheCleaner run() {
|
|
||||||
CacheCleaner cleaner = new CacheCleaner();
|
|
||||||
cleaner.setDaemon (true);
|
|
||||||
return cleaner;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
c.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* factory method for creating single instance
|
|
||||||
*/
|
|
||||||
public static SelectorCache getSelectorCache () {
|
|
||||||
synchronized (SelectorCache.class) {
|
|
||||||
if (cache == null) {
|
|
||||||
cache = new SelectorCache ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SelectorWrapper {
|
|
||||||
private Selector sel;
|
|
||||||
private boolean deleteFlag;
|
|
||||||
private SelectorWrapper (Selector sel) {
|
|
||||||
this.sel = sel;
|
|
||||||
this.deleteFlag = false;
|
|
||||||
}
|
|
||||||
public Selector getSelector() { return sel;}
|
|
||||||
public boolean getDeleteFlag () {return deleteFlag;}
|
|
||||||
public void setDeleteFlag (boolean b) {deleteFlag = b;}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* list of free selectors. Can be re-allocated for a period
|
|
||||||
* of time, after which if not allocated will be closed
|
|
||||||
* and removed from the list (by CacheCleaner thread)
|
|
||||||
*/
|
|
||||||
LinkedList<SelectorWrapper> freeSelectors;
|
|
||||||
|
|
||||||
synchronized Selector getSelector () throws IOException {
|
|
||||||
SelectorWrapper wrapper = null;
|
|
||||||
Selector selector;
|
|
||||||
|
|
||||||
if (freeSelectors.size() > 0) {
|
|
||||||
wrapper = freeSelectors.remove();
|
|
||||||
selector = wrapper.getSelector();
|
|
||||||
} else {
|
|
||||||
selector = Selector.open();
|
|
||||||
}
|
|
||||||
return selector;
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void freeSelector (Selector selector) {
|
|
||||||
freeSelectors.add (new SelectorWrapper (selector));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thread ensures that entries on freeSelector list
|
|
||||||
* remain there for at least 2 minutes and no longer
|
|
||||||
* than 4 minutes.
|
|
||||||
*/
|
|
||||||
class CacheCleaner extends Thread {
|
|
||||||
public void run () {
|
|
||||||
long timeout = ServerConfig.getSelCacheTimeout() * 1000;
|
|
||||||
while (true) {
|
|
||||||
try {Thread.sleep (timeout); } catch (Exception e) {}
|
|
||||||
synchronized (freeSelectors) {
|
|
||||||
ListIterator<SelectorWrapper> l = freeSelectors.listIterator();
|
|
||||||
while (l.hasNext()) {
|
|
||||||
SelectorWrapper w = l.next();
|
|
||||||
if (w.getDeleteFlag()) {
|
|
||||||
/* 2nd pass. Close the selector */
|
|
||||||
try {
|
|
||||||
w.getSelector().close();
|
|
||||||
} catch (IOException e) {}
|
|
||||||
l.remove();
|
|
||||||
} else {
|
|
||||||
/* 1st pass. Set the flag */
|
|
||||||
w.setDeleteFlag (true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,6 +27,8 @@ package sun.net.httpserver;
|
|||||||
|
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
import com.sun.net.httpserver.spi.*;
|
import com.sun.net.httpserver.spi.*;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.security.PrivilegedAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters that users will not likely need to set
|
* Parameters that users will not likely need to set
|
||||||
@ -37,23 +39,26 @@ class ServerConfig {
|
|||||||
|
|
||||||
static int clockTick;
|
static int clockTick;
|
||||||
|
|
||||||
static int defaultClockTick = 10000 ; // 10 sec.
|
static final int DEFAULT_CLOCK_TICK = 10000 ; // 10 sec.
|
||||||
|
|
||||||
/* These values must be a reasonable multiple of clockTick */
|
/* These values must be a reasonable multiple of clockTick */
|
||||||
static long defaultReadTimeout = 20 ; // 20 sec.
|
static final long DEFAULT_IDLE_INTERVAL = 300 ; // 5 min
|
||||||
static long defaultWriteTimeout = 60 ; // 60 sec.
|
static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200 ;
|
||||||
static long defaultIdleInterval = 300 ; // 5 min
|
|
||||||
static long defaultSelCacheTimeout = 120 ; // seconds
|
|
||||||
static int defaultMaxIdleConnections = 200 ;
|
|
||||||
|
|
||||||
static long defaultDrainAmount = 64 * 1024;
|
static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
|
||||||
|
static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
|
||||||
|
static final long DEFAULT_TIMER_MILLIS = 1000;
|
||||||
|
|
||||||
|
static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
|
||||||
|
|
||||||
static long readTimeout;
|
|
||||||
static long writeTimeout;
|
|
||||||
static long idleInterval;
|
static long idleInterval;
|
||||||
static long selCacheTimeout;
|
|
||||||
static long drainAmount; // max # of bytes to drain from an inputstream
|
static long drainAmount; // max # of bytes to drain from an inputstream
|
||||||
static int maxIdleConnections;
|
static int maxIdleConnections;
|
||||||
|
|
||||||
|
// max time a request or response is allowed to take
|
||||||
|
static long maxReqTime;
|
||||||
|
static long maxRspTime;
|
||||||
|
static long timerMillis;
|
||||||
static boolean debug = false;
|
static boolean debug = false;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -61,49 +66,79 @@ class ServerConfig {
|
|||||||
idleInterval = ((Long)java.security.AccessController.doPrivileged(
|
idleInterval = ((Long)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetLongAction(
|
new sun.security.action.GetLongAction(
|
||||||
"sun.net.httpserver.idleInterval",
|
"sun.net.httpserver.idleInterval",
|
||||||
defaultIdleInterval))).longValue() * 1000;
|
DEFAULT_IDLE_INTERVAL))).longValue() * 1000;
|
||||||
|
|
||||||
clockTick = ((Integer)java.security.AccessController.doPrivileged(
|
clockTick = ((Integer)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetIntegerAction(
|
new sun.security.action.GetIntegerAction(
|
||||||
"sun.net.httpserver.clockTick",
|
"sun.net.httpserver.clockTick",
|
||||||
defaultClockTick))).intValue();
|
DEFAULT_CLOCK_TICK))).intValue();
|
||||||
|
|
||||||
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
|
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetIntegerAction(
|
new sun.security.action.GetIntegerAction(
|
||||||
"sun.net.httpserver.maxIdleConnections",
|
"sun.net.httpserver.maxIdleConnections",
|
||||||
defaultMaxIdleConnections))).intValue();
|
DEFAULT_MAX_IDLE_CONNECTIONS))).intValue();
|
||||||
|
|
||||||
readTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.readTimeout",
|
|
||||||
defaultReadTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
selCacheTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.selCacheTimeout",
|
|
||||||
defaultSelCacheTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
writeTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.writeTimeout",
|
|
||||||
defaultWriteTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
drainAmount = ((Long)java.security.AccessController.doPrivileged(
|
drainAmount = ((Long)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetLongAction(
|
new sun.security.action.GetLongAction(
|
||||||
"sun.net.httpserver.drainAmount",
|
"sun.net.httpserver.drainAmount",
|
||||||
defaultDrainAmount))).longValue();
|
DEFAULT_DRAIN_AMOUNT))).longValue();
|
||||||
|
|
||||||
|
maxReqTime = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.maxReqTime",
|
||||||
|
DEFAULT_MAX_REQ_TIME))).longValue();
|
||||||
|
|
||||||
|
maxRspTime = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.maxRspTime",
|
||||||
|
DEFAULT_MAX_RSP_TIME))).longValue();
|
||||||
|
|
||||||
|
timerMillis = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.timerMillis",
|
||||||
|
DEFAULT_TIMER_MILLIS))).longValue();
|
||||||
|
|
||||||
debug = ((Boolean)java.security.AccessController.doPrivileged(
|
debug = ((Boolean)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetBooleanAction(
|
new sun.security.action.GetBooleanAction(
|
||||||
"sun.net.httpserver.debug"))).booleanValue();
|
"sun.net.httpserver.debug"))).booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
static long getReadTimeout () {
|
|
||||||
return readTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long getSelCacheTimeout () {
|
static void checkLegacyProperties (final Logger logger) {
|
||||||
return selCacheTimeout;
|
|
||||||
|
// legacy properties that are no longer used
|
||||||
|
// print a warning to logger if they are set.
|
||||||
|
|
||||||
|
java.security.AccessController.doPrivileged(
|
||||||
|
new PrivilegedAction<Void>() {
|
||||||
|
public Void run () {
|
||||||
|
if (System.getProperty("sun.net.httpserver.readTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.readTimeout "+
|
||||||
|
"property is no longer used. "+
|
||||||
|
"Use sun.net.httpserver.maxReqTime instead."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (System.getProperty("sun.net.httpserver.writeTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.writeTimeout "+
|
||||||
|
"property is no longer used. Use "+
|
||||||
|
"sun.net.httpserver.maxRspTime instead."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (System.getProperty("sun.net.httpserver.selCacheTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.selCacheTimeout "+
|
||||||
|
"property is no longer used."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean debugEnabled () {
|
static boolean debugEnabled () {
|
||||||
@ -122,11 +157,19 @@ class ServerConfig {
|
|||||||
return maxIdleConnections;
|
return maxIdleConnections;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long getWriteTimeout () {
|
|
||||||
return writeTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long getDrainAmount () {
|
static long getDrainAmount () {
|
||||||
return drainAmount;
|
return drainAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long getMaxReqTime () {
|
||||||
|
return maxReqTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getMaxRspTime () {
|
||||||
|
return maxRspTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getTimerMillis () {
|
||||||
|
return timerMillis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ import java.util.logging.Level;
|
|||||||
import javax.net.ssl.*;
|
import javax.net.ssl.*;
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
import com.sun.net.httpserver.spi.*;
|
import com.sun.net.httpserver.spi.*;
|
||||||
|
import sun.net.httpserver.HttpConnection.State;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides implementation for both HTTP and HTTPS
|
* Provides implementation for both HTTP and HTTPS
|
||||||
@ -55,6 +56,12 @@ class ServerImpl implements TimeSource {
|
|||||||
private SelectionKey listenerKey;
|
private SelectionKey listenerKey;
|
||||||
private Set<HttpConnection> idleConnections;
|
private Set<HttpConnection> idleConnections;
|
||||||
private Set<HttpConnection> allConnections;
|
private Set<HttpConnection> allConnections;
|
||||||
|
/* following two are used to keep track of the times
|
||||||
|
* when a connection/request is first received
|
||||||
|
* and when we start to send the response
|
||||||
|
*/
|
||||||
|
private Set<HttpConnection> reqConnections;
|
||||||
|
private Set<HttpConnection> rspConnections;
|
||||||
private List<Event> events;
|
private List<Event> events;
|
||||||
private Object lolock = new Object();
|
private Object lolock = new Object();
|
||||||
private volatile boolean finished = false;
|
private volatile boolean finished = false;
|
||||||
@ -62,14 +69,19 @@ class ServerImpl implements TimeSource {
|
|||||||
private boolean bound = false;
|
private boolean bound = false;
|
||||||
private boolean started = false;
|
private boolean started = false;
|
||||||
private volatile long time; /* current time */
|
private volatile long time; /* current time */
|
||||||
|
private volatile long subticks = 0;
|
||||||
private volatile long ticks; /* number of clock ticks since server started */
|
private volatile long ticks; /* number of clock ticks since server started */
|
||||||
private HttpServer wrapper;
|
private HttpServer wrapper;
|
||||||
|
|
||||||
final static int CLOCK_TICK = ServerConfig.getClockTick();
|
final static int CLOCK_TICK = ServerConfig.getClockTick();
|
||||||
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
|
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
|
||||||
final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
|
final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
|
||||||
|
final static long TIMER_MILLIS = ServerConfig.getTimerMillis ();
|
||||||
|
final static long MAX_REQ_TIME=getTimeMillis(ServerConfig.getMaxReqTime());
|
||||||
|
final static long MAX_RSP_TIME=getTimeMillis(ServerConfig.getMaxRspTime());
|
||||||
|
final static boolean timer1Enabled = MAX_REQ_TIME != -1 || MAX_RSP_TIME != -1;
|
||||||
|
|
||||||
private Timer timer;
|
private Timer timer, timer1;
|
||||||
private Logger logger;
|
private Logger logger;
|
||||||
|
|
||||||
ServerImpl (
|
ServerImpl (
|
||||||
@ -79,6 +91,7 @@ class ServerImpl implements TimeSource {
|
|||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
this.wrapper = wrapper;
|
this.wrapper = wrapper;
|
||||||
this.logger = Logger.getLogger ("com.sun.net.httpserver");
|
this.logger = Logger.getLogger ("com.sun.net.httpserver");
|
||||||
|
ServerConfig.checkLegacyProperties (logger);
|
||||||
https = protocol.equalsIgnoreCase ("https");
|
https = protocol.equalsIgnoreCase ("https");
|
||||||
this.address = addr;
|
this.address = addr;
|
||||||
contexts = new ContextList();
|
contexts = new ContextList();
|
||||||
@ -94,9 +107,18 @@ class ServerImpl implements TimeSource {
|
|||||||
dispatcher = new Dispatcher();
|
dispatcher = new Dispatcher();
|
||||||
idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
|
reqConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
|
rspConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
time = System.currentTimeMillis();
|
time = System.currentTimeMillis();
|
||||||
timer = new Timer ("server-timer", true);
|
timer = new Timer ("server-timer", true);
|
||||||
timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
|
timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
|
||||||
|
if (timer1Enabled) {
|
||||||
|
timer1 = new Timer ("server-timer1", true);
|
||||||
|
timer1.schedule (new ServerTimerTask1(),TIMER_MILLIS,TIMER_MILLIS);
|
||||||
|
logger.config ("HttpServer timer1 enabled period in ms: "+TIMER_MILLIS);
|
||||||
|
logger.config ("MAX_REQ_TIME: "+MAX_REQ_TIME);
|
||||||
|
logger.config ("MAX_RSP_TIME: "+MAX_RSP_TIME);
|
||||||
|
}
|
||||||
events = new LinkedList<Event>();
|
events = new LinkedList<Event>();
|
||||||
logger.config ("HttpServer created "+protocol+" "+ addr);
|
logger.config ("HttpServer created "+protocol+" "+ addr);
|
||||||
}
|
}
|
||||||
@ -181,6 +203,9 @@ class ServerImpl implements TimeSource {
|
|||||||
allConnections.clear();
|
allConnections.clear();
|
||||||
idleConnections.clear();
|
idleConnections.clear();
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
|
if (timer1Enabled) {
|
||||||
|
timer1.cancel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dispatcher dispatcher;
|
Dispatcher dispatcher;
|
||||||
@ -236,13 +261,6 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int resultSize () {
|
|
||||||
synchronized (lolock) {
|
|
||||||
return events.size ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* main server listener task */
|
/* main server listener task */
|
||||||
|
|
||||||
class Dispatcher implements Runnable {
|
class Dispatcher implements Runnable {
|
||||||
@ -257,7 +275,7 @@ class ServerImpl implements TimeSource {
|
|||||||
if (terminating && exchanges == 0) {
|
if (terminating && exchanges == 0) {
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
SocketChannel chan = c.getChannel();
|
responseCompleted (c);
|
||||||
LeftOverInputStream is = t.getOriginalInputStream();
|
LeftOverInputStream is = t.getOriginalInputStream();
|
||||||
if (!is.isEOF()) {
|
if (!is.isEOF()) {
|
||||||
t.close = true;
|
t.close = true;
|
||||||
@ -268,17 +286,10 @@ class ServerImpl implements TimeSource {
|
|||||||
} else {
|
} else {
|
||||||
if (is.isDataBuffered()) {
|
if (is.isDataBuffered()) {
|
||||||
/* don't re-enable the interestops, just handle it */
|
/* don't re-enable the interestops, just handle it */
|
||||||
|
requestStarted (c);
|
||||||
handle (c.getChannel(), c);
|
handle (c.getChannel(), c);
|
||||||
} else {
|
} else {
|
||||||
/* re-enable interestops */
|
connsToRegister.add (c);
|
||||||
SelectionKey key = c.getSelectionKey();
|
|
||||||
if (key.isValid()) {
|
|
||||||
key.interestOps (
|
|
||||||
key.interestOps()|SelectionKey.OP_READ
|
|
||||||
);
|
|
||||||
}
|
|
||||||
c.time = getTime() + IDLE_INTERVAL;
|
|
||||||
idleConnections.add (c);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,21 +301,50 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final LinkedList<HttpConnection> connsToRegister =
|
||||||
|
new LinkedList<HttpConnection>();
|
||||||
|
|
||||||
|
void reRegister (HttpConnection c) {
|
||||||
|
/* re-register with selector */
|
||||||
|
try {
|
||||||
|
SocketChannel chan = c.getChannel();
|
||||||
|
chan.configureBlocking (false);
|
||||||
|
SelectionKey key = chan.register (selector, SelectionKey.OP_READ);
|
||||||
|
key.attach (c);
|
||||||
|
c.selectionKey = key;
|
||||||
|
c.time = getTime() + IDLE_INTERVAL;
|
||||||
|
idleConnections.add (c);
|
||||||
|
} catch (IOException e) {
|
||||||
|
dprint(e);
|
||||||
|
logger.log(Level.FINER, "Dispatcher(8)", e);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
while (!finished) {
|
while (!finished) {
|
||||||
try {
|
try {
|
||||||
|
ListIterator<HttpConnection> li =
|
||||||
|
connsToRegister.listIterator();
|
||||||
|
for (HttpConnection c : connsToRegister) {
|
||||||
|
reRegister(c);
|
||||||
|
}
|
||||||
|
connsToRegister.clear();
|
||||||
|
|
||||||
/* process the events list first */
|
List<Event> list = null;
|
||||||
|
selector.select(1000);
|
||||||
while (resultSize() > 0) {
|
synchronized (lolock) {
|
||||||
Event r;
|
if (events.size() > 0) {
|
||||||
synchronized (lolock) {
|
list = events;
|
||||||
r = events.remove(0);
|
events = new LinkedList<Event>();
|
||||||
handleEvent (r);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selector.select(1000);
|
if (list != null) {
|
||||||
|
for (Event r: list) {
|
||||||
|
handleEvent (r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* process the selected list now */
|
/* process the selected list now */
|
||||||
|
|
||||||
@ -327,6 +367,7 @@ class ServerImpl implements TimeSource {
|
|||||||
c.selectionKey = newkey;
|
c.selectionKey = newkey;
|
||||||
c.setChannel (chan);
|
c.setChannel (chan);
|
||||||
newkey.attach (c);
|
newkey.attach (c);
|
||||||
|
requestStarted (c);
|
||||||
allConnections.add (c);
|
allConnections.add (c);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
@ -334,27 +375,44 @@ class ServerImpl implements TimeSource {
|
|||||||
boolean closed;
|
boolean closed;
|
||||||
SocketChannel chan = (SocketChannel)key.channel();
|
SocketChannel chan = (SocketChannel)key.channel();
|
||||||
HttpConnection conn = (HttpConnection)key.attachment();
|
HttpConnection conn = (HttpConnection)key.attachment();
|
||||||
// interestOps will be restored at end of read
|
|
||||||
key.interestOps (0);
|
key.cancel();
|
||||||
|
chan.configureBlocking (true);
|
||||||
|
if (idleConnections.remove(conn)) {
|
||||||
|
// was an idle connection so add it
|
||||||
|
// to reqConnections set.
|
||||||
|
requestStarted (conn);
|
||||||
|
}
|
||||||
handle (chan, conn);
|
handle (chan, conn);
|
||||||
} else {
|
} else {
|
||||||
assert false;
|
assert false;
|
||||||
}
|
}
|
||||||
|
} catch (CancelledKeyException e) {
|
||||||
|
handleException(key, null);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
HttpConnection conn = (HttpConnection)key.attachment();
|
handleException(key, e);
|
||||||
logger.log (
|
|
||||||
Level.FINER, "Dispatcher (2)", e
|
|
||||||
);
|
|
||||||
conn.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// call the selector just to process the cancelled keys
|
||||||
|
selector.selectNow();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log (Level.FINER, "Dispatcher (4)", e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log (Level.FINER, "Dispatcher (3)", e);
|
e.printStackTrace();
|
||||||
|
logger.log (Level.FINER, "Dispatcher (7)", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleException (SelectionKey key, Exception e) {
|
||||||
|
HttpConnection conn = (HttpConnection)key.attachment();
|
||||||
|
if (e != null) {
|
||||||
|
logger.log (Level.FINER, "Dispatcher (2)", e);
|
||||||
|
}
|
||||||
|
closeConnection(conn);
|
||||||
|
}
|
||||||
|
|
||||||
public void handle (SocketChannel chan, HttpConnection conn)
|
public void handle (SocketChannel chan, HttpConnection conn)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
@ -363,10 +421,10 @@ class ServerImpl implements TimeSource {
|
|||||||
executor.execute (t);
|
executor.execute (t);
|
||||||
} catch (HttpError e1) {
|
} catch (HttpError e1) {
|
||||||
logger.log (Level.FINER, "Dispatcher (4)", e1);
|
logger.log (Level.FINER, "Dispatcher (4)", e1);
|
||||||
conn.close();
|
closeConnection(conn);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log (Level.FINER, "Dispatcher (5)", e);
|
logger.log (Level.FINER, "Dispatcher (5)", e);
|
||||||
conn.close();
|
closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,7 +448,26 @@ class ServerImpl implements TimeSource {
|
|||||||
return logger;
|
return logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* per exchange task */
|
private void closeConnection(HttpConnection conn) {
|
||||||
|
conn.close();
|
||||||
|
allConnections.remove(conn);
|
||||||
|
switch (conn.getState()) {
|
||||||
|
case REQUEST:
|
||||||
|
reqConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
case RESPONSE:
|
||||||
|
rspConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
case IDLE:
|
||||||
|
idleConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert !reqConnections.remove(conn);
|
||||||
|
assert !rspConnections.remove(conn);
|
||||||
|
assert !idleConnections.remove(conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* per exchange task */
|
||||||
|
|
||||||
class Exchange implements Runnable {
|
class Exchange implements Runnable {
|
||||||
SocketChannel chan;
|
SocketChannel chan;
|
||||||
@ -450,8 +527,7 @@ class ServerImpl implements TimeSource {
|
|||||||
requestLine = req.requestLine();
|
requestLine = req.requestLine();
|
||||||
if (requestLine == null) {
|
if (requestLine == null) {
|
||||||
/* connection closed */
|
/* connection closed */
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
allConnections.remove(connection);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int space = requestLine.indexOf (' ');
|
int space = requestLine.indexOf (' ');
|
||||||
@ -482,6 +558,9 @@ class ServerImpl implements TimeSource {
|
|||||||
if (s != null) {
|
if (s != null) {
|
||||||
clen = Long.parseLong(s);
|
clen = Long.parseLong(s);
|
||||||
}
|
}
|
||||||
|
if (clen == 0) {
|
||||||
|
requestCompleted (connection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx = contexts.findContext (protocol, uri.getPath());
|
ctx = contexts.findContext (protocol, uri.getPath());
|
||||||
if (ctx == null) {
|
if (ctx == null) {
|
||||||
@ -560,7 +639,7 @@ class ServerImpl implements TimeSource {
|
|||||||
|
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
|
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
} catch (NumberFormatException e3) {
|
} catch (NumberFormatException e3) {
|
||||||
reject (Code.HTTP_BAD_REQUEST,
|
reject (Code.HTTP_BAD_REQUEST,
|
||||||
requestLine, "NumberFormatException thrown");
|
requestLine, "NumberFormatException thrown");
|
||||||
@ -569,7 +648,7 @@ class ServerImpl implements TimeSource {
|
|||||||
requestLine, "URISyntaxException thrown");
|
requestLine, "URISyntaxException thrown");
|
||||||
} catch (Exception e4) {
|
} catch (Exception e4) {
|
||||||
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
|
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,47 +670,60 @@ class ServerImpl implements TimeSource {
|
|||||||
rejected = true;
|
rejected = true;
|
||||||
logReply (code, requestStr, message);
|
logReply (code, requestStr, message);
|
||||||
sendReply (
|
sendReply (
|
||||||
code, true, "<h1>"+code+Code.msg(code)+"</h1>"+message
|
code, false, "<h1>"+code+Code.msg(code)+"</h1>"+message
|
||||||
);
|
);
|
||||||
/* connection is already closed by sendReply, now remove it */
|
closeConnection(connection);
|
||||||
allConnections.remove(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendReply (
|
void sendReply (
|
||||||
int code, boolean closeNow, String text)
|
int code, boolean closeNow, String text)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
String s = "HTTP/1.1 " + code + Code.msg(code) + "\r\n";
|
StringBuilder builder = new StringBuilder (512);
|
||||||
|
builder.append ("HTTP/1.1 ")
|
||||||
|
.append (code).append (Code.msg(code)).append ("\r\n");
|
||||||
|
|
||||||
if (text != null && text.length() != 0) {
|
if (text != null && text.length() != 0) {
|
||||||
s = s + "Content-Length: "+text.length()+"\r\n";
|
builder.append ("Content-Length: ")
|
||||||
s = s + "Content-Type: text/html\r\n";
|
.append (text.length()).append ("\r\n")
|
||||||
|
.append ("Content-Type: text/html\r\n");
|
||||||
} else {
|
} else {
|
||||||
s = s + "Content-Length: 0\r\n";
|
builder.append ("Content-Length: 0\r\n");
|
||||||
text = "";
|
text = "";
|
||||||
}
|
}
|
||||||
if (closeNow) {
|
if (closeNow) {
|
||||||
s = s + "Connection: close\r\n";
|
builder.append ("Connection: close\r\n");
|
||||||
}
|
}
|
||||||
s = s + "\r\n" + text;
|
builder.append ("\r\n").append (text);
|
||||||
|
String s = builder.toString();
|
||||||
byte[] b = s.getBytes("ISO8859_1");
|
byte[] b = s.getBytes("ISO8859_1");
|
||||||
rawout.write (b);
|
rawout.write (b);
|
||||||
rawout.flush();
|
rawout.flush();
|
||||||
if (closeNow) {
|
if (closeNow) {
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log (Level.FINER, "ServerImpl.sendReply", e);
|
logger.log (Level.FINER, "ServerImpl.sendReply", e);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void logReply (int code, String requestStr, String text) {
|
void logReply (int code, String requestStr, String text) {
|
||||||
|
if (!logger.isLoggable(Level.FINE)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
text = "";
|
text = "";
|
||||||
}
|
}
|
||||||
String message = requestStr + " [" + code + " " +
|
String r;
|
||||||
|
if (requestStr.length() > 80) {
|
||||||
|
r = requestStr.substring (0, 80) + "<TRUNCATED>";
|
||||||
|
} else {
|
||||||
|
r = requestStr;
|
||||||
|
}
|
||||||
|
String message = r + " [" + code + " " +
|
||||||
Code.msg(code) + "] ("+text+")";
|
Code.msg(code) + "] ("+text+")";
|
||||||
logger.fine (message);
|
logger.fine (message);
|
||||||
}
|
}
|
||||||
@ -667,6 +759,34 @@ class ServerImpl implements TimeSource {
|
|||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void requestStarted (HttpConnection c) {
|
||||||
|
c.creationTime = getTime();
|
||||||
|
c.setState (State.REQUEST);
|
||||||
|
reqConnections.add (c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// called after a request has been completely read
|
||||||
|
// by the server. This stops the timer which would
|
||||||
|
// close the connection if the request doesn't arrive
|
||||||
|
// quickly enough. It then starts the timer
|
||||||
|
// that ensures the client reads the response in a timely
|
||||||
|
// fashion.
|
||||||
|
|
||||||
|
void requestCompleted (HttpConnection c) {
|
||||||
|
assert c.getState() == State.REQUEST;
|
||||||
|
reqConnections.remove (c);
|
||||||
|
c.rspStartedTime = getTime();
|
||||||
|
rspConnections.add (c);
|
||||||
|
c.setState (State.RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// called after response has been sent
|
||||||
|
void responseCompleted (HttpConnection c) {
|
||||||
|
assert c.getState() == State.RESPONSE;
|
||||||
|
rspConnections.remove (c);
|
||||||
|
c.setState (State.IDLE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TimerTask run every CLOCK_TICK ms
|
* TimerTask run every CLOCK_TICK ms
|
||||||
*/
|
*/
|
||||||
@ -689,4 +809,62 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ServerTimerTask1 extends TimerTask {
|
||||||
|
|
||||||
|
// runs every TIMER_MILLIS
|
||||||
|
public void run () {
|
||||||
|
LinkedList<HttpConnection> toClose = new LinkedList<HttpConnection>();
|
||||||
|
time = System.currentTimeMillis();
|
||||||
|
synchronized (reqConnections) {
|
||||||
|
if (MAX_REQ_TIME != -1) {
|
||||||
|
for (HttpConnection c : reqConnections) {
|
||||||
|
if (c.creationTime + TIMER_MILLIS + MAX_REQ_TIME <= time) {
|
||||||
|
toClose.add (c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (HttpConnection c : toClose) {
|
||||||
|
logger.log (Level.FINE, "closing: no request: " + c);
|
||||||
|
reqConnections.remove (c);
|
||||||
|
allConnections.remove (c);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toClose = new LinkedList<HttpConnection>();
|
||||||
|
synchronized (rspConnections) {
|
||||||
|
if (MAX_RSP_TIME != -1) {
|
||||||
|
for (HttpConnection c : rspConnections) {
|
||||||
|
if (c.rspStartedTime + TIMER_MILLIS +MAX_RSP_TIME <= time) {
|
||||||
|
toClose.add (c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (HttpConnection c : toClose) {
|
||||||
|
logger.log (Level.FINE, "closing: no response: " + c);
|
||||||
|
rspConnections.remove (c);
|
||||||
|
allConnections.remove (c);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void logStackTrace (String s) {
|
||||||
|
logger.finest (s);
|
||||||
|
StringBuilder b = new StringBuilder ();
|
||||||
|
StackTraceElement[] e = Thread.currentThread().getStackTrace();
|
||||||
|
for (int i=0; i<e.length; i++) {
|
||||||
|
b.append (e[i].toString()).append("\n");
|
||||||
|
}
|
||||||
|
logger.finest (b.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getTimeMillis(long secs) {
|
||||||
|
if (secs == -1) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return secs * 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,8 +235,6 @@ abstract class AsynchronousSocketChannelImpl
|
|||||||
|
|
||||||
if (remoteAddress == null)
|
if (remoteAddress == null)
|
||||||
throw new NotYetConnectedException();
|
throw new NotYetConnectedException();
|
||||||
if (timeout < 0L)
|
|
||||||
throw new IllegalArgumentException("Negative timeout");
|
|
||||||
|
|
||||||
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
|
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
|
||||||
boolean shutdown = false;
|
boolean shutdown = false;
|
||||||
@ -342,8 +340,6 @@ abstract class AsynchronousSocketChannelImpl
|
|||||||
if (isOpen()) {
|
if (isOpen()) {
|
||||||
if (remoteAddress == null)
|
if (remoteAddress == null)
|
||||||
throw new NotYetConnectedException();
|
throw new NotYetConnectedException();
|
||||||
if (timeout < 0L)
|
|
||||||
throw new IllegalArgumentException("Negative timeout");
|
|
||||||
// check and update state
|
// check and update state
|
||||||
synchronized (writeLock) {
|
synchronized (writeLock) {
|
||||||
if (writeKilled)
|
if (writeKilled)
|
||||||
|
@ -358,7 +358,7 @@ class UTF_8 extends Unicode
|
|||||||
private static class Encoder extends CharsetEncoder {
|
private static class Encoder extends CharsetEncoder {
|
||||||
|
|
||||||
private Encoder(Charset cs) {
|
private Encoder(Charset cs) {
|
||||||
super(cs, 1.1f, 4.0f);
|
super(cs, 1.1f, 3.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canEncode(char c) {
|
public boolean canEncode(char c) {
|
||||||
|
@ -778,6 +778,13 @@ public class ExtendedCharsets
|
|||||||
"csIBM500"
|
"csIBM500"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
charset("x-IBM833", "IBM833",
|
||||||
|
new String[] {
|
||||||
|
"cp833",
|
||||||
|
"ibm833",
|
||||||
|
"ibm-833"
|
||||||
|
});
|
||||||
|
|
||||||
//EBCDIC DBCS-only Korean
|
//EBCDIC DBCS-only Korean
|
||||||
charset("x-IBM834", "IBM834",
|
charset("x-IBM834", "IBM834",
|
||||||
new String[] {
|
new String[] {
|
||||||
|
@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ticket readData() throws IOException, RealmException, KrbApErrException, Asn1Exception {
|
byte[] readData() throws IOException {
|
||||||
int length;
|
int length;
|
||||||
length = read(4);
|
length = read(4);
|
||||||
if (length > 0) {
|
if (length == 0) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
byte[] bytes = new byte[length];
|
byte[] bytes = new byte[length];
|
||||||
read(bytes, 0, length);
|
read(bytes, 0, length);
|
||||||
Ticket ticket = new Ticket(bytes);
|
return bytes;
|
||||||
return ticket;
|
|
||||||
}
|
}
|
||||||
else return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean[] readFlags() throws IOException {
|
boolean[] readFlags() throws IOException {
|
||||||
@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
}
|
}
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the next cred in stream.
|
||||||
|
* @return the next cred, null if ticket or second_ticket unparseable.
|
||||||
|
*
|
||||||
|
* Note: MIT krb5 1.8.1 might generate a config entry with server principal
|
||||||
|
* X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/REALM@REALM. The
|
||||||
|
* entry is used by KDC to inform the client that it support certain
|
||||||
|
* features. Its ticket is not a valid krb5 ticket and thus this method
|
||||||
|
* returns null.
|
||||||
|
*/
|
||||||
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
|
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
|
||||||
PrincipalName cpname = readPrincipal(version);
|
PrincipalName cpname = readPrincipal(version);
|
||||||
if (DEBUG)
|
if (DEBUG)
|
||||||
@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
if (auData != null) {
|
if (auData != null) {
|
||||||
auData = new AuthorizationData(auDataEntry);
|
auData = new AuthorizationData(auDataEntry);
|
||||||
}
|
}
|
||||||
Ticket ticket = readData();
|
byte[] ticketData = readData();
|
||||||
if (DEBUG) {
|
byte[] ticketData2 = readData();
|
||||||
System.out.println(">>>DEBUG <CCacheInputStream>");
|
|
||||||
if (ticket == null) {
|
try {
|
||||||
System.out.println("///ticket is null");
|
return new Credentials(cpname, spname, key, authtime, starttime,
|
||||||
}
|
endtime, renewTill, skey, tFlags,
|
||||||
|
addrs, auData,
|
||||||
|
ticketData != null ? new Ticket(ticketData) : null,
|
||||||
|
ticketData2 != null ? new Ticket(ticketData2) : null);
|
||||||
|
} catch (Exception e) { // If any of new Ticket(*) fails.
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
Ticket secTicket = readData();
|
|
||||||
Credentials cred = new Credentials(cpname, spname, key, authtime, starttime,
|
|
||||||
endtime, renewTill, skey, tFlags,
|
|
||||||
addrs, auData, ticket, secTicket);
|
|
||||||
return cred;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -186,7 +186,10 @@ public class FileCredentialsCache extends CredentialsCache
|
|||||||
primaryRealm = primaryPrincipal.getRealm();
|
primaryRealm = primaryPrincipal.getRealm();
|
||||||
credentialsList = new Vector<Credentials> ();
|
credentialsList = new Vector<Credentials> ();
|
||||||
while (cis.available() > 0) {
|
while (cis.available() > 0) {
|
||||||
credentialsList.addElement(cis.readCred(version));
|
Credentials cred = cis.readCred(version);
|
||||||
|
if (cred != null) {
|
||||||
|
credentialsList.addElement(cred);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cis.close();
|
cis.close();
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ final class P11Cipher extends CipherSpi {
|
|||||||
// DEC: return the length of trailing padding bytes given the specified
|
// DEC: return the length of trailing padding bytes given the specified
|
||||||
// padded data
|
// padded data
|
||||||
int unpad(byte[] paddedData, int len)
|
int unpad(byte[] paddedData, int len)
|
||||||
throws BadPaddingException;
|
throws BadPaddingException, IllegalBlockSizeException;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class PKCS5Padding implements Padding {
|
private static class PKCS5Padding implements Padding {
|
||||||
@ -96,9 +96,10 @@ final class P11Cipher extends CipherSpi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int unpad(byte[] paddedData, int len)
|
public int unpad(byte[] paddedData, int len)
|
||||||
throws BadPaddingException {
|
throws BadPaddingException, IllegalBlockSizeException {
|
||||||
if (len < 1 || len > paddedData.length) {
|
if ((len < 1) || (len % blockSize != 0)) {
|
||||||
throw new BadPaddingException("Invalid pad array length!");
|
throw new IllegalBlockSizeException
|
||||||
|
("Input length must be multiples of " + blockSize);
|
||||||
}
|
}
|
||||||
byte padValue = paddedData[len - 1];
|
byte padValue = paddedData[len - 1];
|
||||||
if (padValue < 1 || padValue > blockSize) {
|
if (padValue < 1 || padValue > blockSize) {
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<title>Nervous Text 1.1</title>
|
<title>Nervous Text 1.1</title>
|
||||||
<hr>
|
<hr>
|
||||||
<applet code="NervousText.class" width=534 height=50>
|
<applet code="NervousText.class" width=534 height=50>
|
||||||
<param name=text value="Java^T^M 2 SDK, Standard Edition 6.0">
|
<param name=text value="Java SE Development Kit (JDK) 7.0">
|
||||||
</applet>
|
</applet>
|
||||||
<hr>
|
<hr>
|
||||||
<a href="NervousText.java">The source.</a>
|
<a href="NervousText.java">The source.</a>
|
||||||
|
@ -75,7 +75,8 @@ public class J2DBench {
|
|||||||
|
|
||||||
static JFrame guiFrame;
|
static JFrame guiFrame;
|
||||||
|
|
||||||
static final SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z");
|
static final SimpleDateFormat sdf =
|
||||||
|
new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z");
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
progoptroot = new Group("prog", "Program Options");
|
progoptroot = new Group("prog", "Program Options");
|
||||||
@ -176,6 +177,8 @@ public class J2DBench {
|
|||||||
public static void main(String argv[]) {
|
public static void main(String argv[]) {
|
||||||
init();
|
init();
|
||||||
TestEnvironment.init();
|
TestEnvironment.init();
|
||||||
|
Result.init();
|
||||||
|
|
||||||
Destinations.init();
|
Destinations.init();
|
||||||
GraphicsTests.init();
|
GraphicsTests.init();
|
||||||
RenderTests.init();
|
RenderTests.init();
|
||||||
@ -323,7 +326,7 @@ public class J2DBench {
|
|||||||
} else if (type.equalsIgnoreCase("m")) {
|
} else if (type.equalsIgnoreCase("m")) {
|
||||||
multiplyWith = 60;
|
multiplyWith = 60;
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Invalid \"-loop\" option specified.");
|
System.err.println("Invalid \"-loop\" option specified.");
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,32 +334,20 @@ public class J2DBench {
|
|||||||
try {
|
try {
|
||||||
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
|
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
System.out.println("Invalid \"-loop\" option specified.");
|
System.err.println("Invalid \"-loop\" option specified.");
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
requiredLoopTime = val * multiplyWith * 1000;
|
requiredLoopTime = val * multiplyWith * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (arg.length() > 7 &&
|
} else if (arg.length() > 8 &&
|
||||||
arg.substring(0, 7).equalsIgnoreCase("-report"))
|
arg.substring(0, 8).equalsIgnoreCase("-report:"))
|
||||||
{
|
{
|
||||||
for (int j = 7; j < arg.length(); j++) {
|
String error = Result.parseRateOpt(arg.substring(8));
|
||||||
char c = arg.charAt(j);
|
if (error != null) {
|
||||||
switch (c) {
|
System.err.println("Invalid rate: "+error);
|
||||||
case 'N': Result.unitScale = Result.UNITS_WHOLE; break;
|
usage(1);
|
||||||
case 'M': Result.unitScale = Result.UNITS_MILLIONS; break;
|
|
||||||
case 'K': Result.unitScale = Result.UNITS_THOUSANDS; break;
|
|
||||||
case 'A': Result.unitScale = Result.UNITS_AUTO; break;
|
|
||||||
case 'U': Result.useUnits = true; break;
|
|
||||||
case 'O': Result.useUnits = false; break;
|
|
||||||
case 's': Result.timeScale = Result.SECONDS_WHOLE; break;
|
|
||||||
case 'm': Result.timeScale = Result.SECONDS_MILLIS; break;
|
|
||||||
case 'u': Result.timeScale = Result.SECONDS_MICROS; break;
|
|
||||||
case 'n': Result.timeScale = Result.SECONDS_NANOS; break;
|
|
||||||
case 'a': Result.timeScale = Result.SECONDS_AUTO; break;
|
|
||||||
case '/': Result.invertRate = !Result.invertRate; break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String reason = Group.root.setOption(arg);
|
String reason = Group.root.setOption(arg);
|
||||||
@ -411,7 +402,7 @@ public class J2DBench {
|
|||||||
writer.flush();
|
writer.flush();
|
||||||
} catch(IOException ioe) {
|
} catch(IOException ioe) {
|
||||||
ioe.printStackTrace();
|
ioe.printStackTrace();
|
||||||
System.out.println("\nERROR : Could not create Loop-Report. Exit");
|
System.err.println("\nERROR : Could not create Loop-Report. Exit");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -466,7 +457,7 @@ public class J2DBench {
|
|||||||
|
|
||||||
} while(J2DBench.looping);
|
} while(J2DBench.looping);
|
||||||
|
|
||||||
if(J2DBench.looping) {
|
if (J2DBench.looping) {
|
||||||
writer.println("</html>");
|
writer.println("</html>");
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
@ -170,7 +170,7 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
updateGUI();
|
updateGUI();
|
||||||
jcb.addItemListener(new ItemListener() {
|
jcb.addItemListener(new ItemListener() {
|
||||||
public void itemStateChanged(ItemEvent e) {
|
public void itemStateChanged(ItemEvent e) {
|
||||||
if (e.getStateChange() == e.SELECTED) {
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||||
JComboBox jcb = (JComboBox) e.getItemSelectable();
|
JComboBox jcb = (JComboBox) e.getItemSelectable();
|
||||||
value = jcb.getSelectedIndex();
|
value = jcb.getSelectedIndex();
|
||||||
if (J2DBench.verbose.isEnabled()) {
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
@ -261,7 +261,7 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
updateGUI();
|
updateGUI();
|
||||||
jcb.addItemListener(new ItemListener() {
|
jcb.addItemListener(new ItemListener() {
|
||||||
public void itemStateChanged(ItemEvent e) {
|
public void itemStateChanged(ItemEvent e) {
|
||||||
value = (e.getStateChange() == e.SELECTED);
|
value = (e.getStateChange() == ItemEvent.SELECTED);
|
||||||
if (J2DBench.verbose.isEnabled()) {
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
System.out.println(getOptionString());
|
System.out.println(getOptionString());
|
||||||
}
|
}
|
||||||
@ -569,8 +569,6 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String setValueFromString(String value) {
|
public String setValueFromString(String value) {
|
||||||
int prev = 0;
|
|
||||||
int next = 0;
|
|
||||||
int enabled = 0;
|
int enabled = 0;
|
||||||
StringTokenizer st = new StringTokenizer(value, ",");
|
StringTokenizer st = new StringTokenizer(value, ",");
|
||||||
while (st.hasMoreTokens()) {
|
while (st.hasMoreTokens()) {
|
||||||
@ -588,7 +586,6 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
if (s != null) {
|
if (s != null) {
|
||||||
return "Bad value in list ("+s+")";
|
return "Bad value in list ("+s+")";
|
||||||
}
|
}
|
||||||
prev = next+1;
|
|
||||||
}
|
}
|
||||||
this.enabled = enabled;
|
this.enabled = enabled;
|
||||||
updateGUI();
|
updateGUI();
|
||||||
@ -623,6 +620,175 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ObjectChoice extends Option {
|
||||||
|
int size;
|
||||||
|
String optionnames[];
|
||||||
|
Object optionvalues[];
|
||||||
|
String abbrevnames[];
|
||||||
|
String descnames[];
|
||||||
|
int defaultselected;
|
||||||
|
int selected;
|
||||||
|
JPanel jp;
|
||||||
|
JComboBox jcombo;
|
||||||
|
|
||||||
|
public ObjectChoice(Group parent, String nodeName, String description,
|
||||||
|
String optionnames[],
|
||||||
|
Object optionvalues[],
|
||||||
|
String abbrevnames[],
|
||||||
|
String descnames[],
|
||||||
|
int defaultselected)
|
||||||
|
{
|
||||||
|
this(parent, nodeName, description,
|
||||||
|
Math.min(Math.min(optionnames.length,
|
||||||
|
optionvalues.length),
|
||||||
|
Math.min(abbrevnames.length,
|
||||||
|
descnames.length)),
|
||||||
|
optionnames, optionvalues,
|
||||||
|
abbrevnames, descnames, defaultselected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectChoice(Group parent, String nodeName, String description,
|
||||||
|
int size,
|
||||||
|
String optionnames[],
|
||||||
|
Object optionvalues[],
|
||||||
|
String abbrevnames[],
|
||||||
|
String descnames[],
|
||||||
|
int defaultselected)
|
||||||
|
{
|
||||||
|
super(parent, nodeName, description);
|
||||||
|
this.size = size;
|
||||||
|
this.optionnames = trim(optionnames, size);
|
||||||
|
this.optionvalues = trim(optionvalues, size);
|
||||||
|
this.abbrevnames = trim(abbrevnames, size);
|
||||||
|
this.descnames = trim(descnames, size);
|
||||||
|
this.selected = this.defaultselected = defaultselected;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] trim(String list[], int size) {
|
||||||
|
if (list.length == size) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
String newlist[] = new String[size];
|
||||||
|
System.arraycopy(list, 0, newlist, 0, size);
|
||||||
|
return newlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Object[] trim(Object list[], int size) {
|
||||||
|
if (list.length == size) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
Object newlist[] = new Object[size];
|
||||||
|
System.arraycopy(list, 0, newlist, 0, size);
|
||||||
|
return newlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void restoreDefault() {
|
||||||
|
if (selected != defaultselected) {
|
||||||
|
selected = defaultselected;
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateGUI() {
|
||||||
|
if (jcombo != null) {
|
||||||
|
jcombo.setSelectedIndex(this.selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDefault() {
|
||||||
|
return (selected == defaultselected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Modifier.Iterator getIterator(TestEnvironment env) {
|
||||||
|
return new SwitchIterator(optionvalues, 1 << selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JComponent getJComponent() {
|
||||||
|
if (jp == null) {
|
||||||
|
jp = new JPanel();
|
||||||
|
jp.setLayout(new BorderLayout());
|
||||||
|
jp.add(new JLabel(getDescription()), BorderLayout.WEST);
|
||||||
|
jcombo = new JComboBox(descnames);
|
||||||
|
updateGUI();
|
||||||
|
jcombo.addItemListener(new ItemListener() {
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||||
|
selected = jcombo.getSelectedIndex();
|
||||||
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
|
System.out.println(getOptionString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jp.add(jcombo, BorderLayout.EAST);
|
||||||
|
}
|
||||||
|
return jp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return optionvalues[selected];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIntValue() {
|
||||||
|
return ((Integer) optionvalues[selected]).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBooleanValue() {
|
||||||
|
return ((Boolean) optionvalues[selected]).booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValString() {
|
||||||
|
return optionnames[selected];
|
||||||
|
}
|
||||||
|
|
||||||
|
int findValueIndex(Object value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionvalues[i] == value) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValString(Object value) {
|
||||||
|
return optionnames[findValueIndex(value)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAbbreviatedModifierDescription(Object value) {
|
||||||
|
return abbrevnames[findValueIndex(value)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(int v) {
|
||||||
|
return setValue(new Integer(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(boolean v) {
|
||||||
|
return setValue(new Boolean(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(Object value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionvalues[i].equals(value)) {
|
||||||
|
this.selected = i;
|
||||||
|
updateGUI();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Bad value";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValueFromString(String value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionnames[i].equals(value)) {
|
||||||
|
this.selected = i;
|
||||||
|
updateGUI();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Bad value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class BooleanIterator implements Modifier.Iterator {
|
public static class BooleanIterator implements Modifier.Iterator {
|
||||||
private Boolean list[];
|
private Boolean list[];
|
||||||
private int index;
|
private int index;
|
||||||
|
@ -35,23 +35,199 @@ import java.util.Vector;
|
|||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class Result {
|
public class Result {
|
||||||
public static final int UNITS_WHOLE = 0;
|
public static final int RATE_UNKNOWN = 0;
|
||||||
public static final int UNITS_THOUSANDS = 1;
|
|
||||||
public static final int UNITS_MILLIONS = 2;
|
|
||||||
public static final int UNITS_AUTO = 3;
|
|
||||||
|
|
||||||
public static final int SECONDS_WHOLE = 0;
|
public static final int WORK_OPS = 1;
|
||||||
public static final int SECONDS_MILLIS = 1;
|
public static final int WORK_UNITS = 2;
|
||||||
public static final int SECONDS_MICROS = 2;
|
public static final int WORK_THOUSANDS = 4;
|
||||||
public static final int SECONDS_NANOS = 3;
|
public static final int WORK_MILLIONS = 6;
|
||||||
public static final int SECONDS_AUTO = 4;
|
public static final int WORK_AUTO = 8;
|
||||||
|
|
||||||
public static int unitScale = UNITS_WHOLE;
|
public static final int TIME_SECONDS = 10;
|
||||||
public static int timeScale = SECONDS_WHOLE;
|
public static final int TIME_MILLIS = 11;
|
||||||
public static boolean useUnits = true;
|
public static final int TIME_MICROS = 12;
|
||||||
public static boolean invertRate = false;
|
public static final int TIME_NANOS = 13;
|
||||||
|
public static final int TIME_AUTO = 14;
|
||||||
|
|
||||||
|
static Group resultoptroot;
|
||||||
|
static Option.ObjectChoice timeOpt;
|
||||||
|
static Option.ObjectChoice workOpt;
|
||||||
|
static Option.ObjectChoice rateOpt;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
resultoptroot = new Group(TestEnvironment.globaloptroot,
|
||||||
|
"results", "Result Options");
|
||||||
|
|
||||||
|
String workStrings[] = {
|
||||||
|
"units",
|
||||||
|
"kilounits",
|
||||||
|
"megaunits",
|
||||||
|
"autounits",
|
||||||
|
"ops",
|
||||||
|
"kiloops",
|
||||||
|
"megaops",
|
||||||
|
"autoops",
|
||||||
|
};
|
||||||
|
String workDescriptions[] = {
|
||||||
|
"Test Units",
|
||||||
|
"Thousands of Test Units",
|
||||||
|
"Millions of Test Units",
|
||||||
|
"Auto-scaled Test Units",
|
||||||
|
"Operations",
|
||||||
|
"Thousands of Operations",
|
||||||
|
"Millions of Operations",
|
||||||
|
"Auto-scaled Operations",
|
||||||
|
};
|
||||||
|
Integer workObjects[] = {
|
||||||
|
new Integer(WORK_UNITS),
|
||||||
|
new Integer(WORK_THOUSANDS),
|
||||||
|
new Integer(WORK_MILLIONS),
|
||||||
|
new Integer(WORK_AUTO),
|
||||||
|
new Integer(WORK_OPS | WORK_UNITS),
|
||||||
|
new Integer(WORK_OPS | WORK_THOUSANDS),
|
||||||
|
new Integer(WORK_OPS | WORK_MILLIONS),
|
||||||
|
new Integer(WORK_OPS | WORK_AUTO),
|
||||||
|
};
|
||||||
|
workOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"workunits", "Work Units",
|
||||||
|
workStrings, workObjects,
|
||||||
|
workStrings, workDescriptions,
|
||||||
|
0);
|
||||||
|
String timeStrings[] = {
|
||||||
|
"sec",
|
||||||
|
"msec",
|
||||||
|
"usec",
|
||||||
|
"nsec",
|
||||||
|
"autosec",
|
||||||
|
};
|
||||||
|
String timeDescriptions[] = {
|
||||||
|
"Seconds",
|
||||||
|
"Milliseconds",
|
||||||
|
"Microseconds",
|
||||||
|
"Nanoseconds",
|
||||||
|
"Auto-scaled seconds",
|
||||||
|
};
|
||||||
|
Integer timeObjects[] = {
|
||||||
|
new Integer(TIME_SECONDS),
|
||||||
|
new Integer(TIME_MILLIS),
|
||||||
|
new Integer(TIME_MICROS),
|
||||||
|
new Integer(TIME_NANOS),
|
||||||
|
new Integer(TIME_AUTO),
|
||||||
|
};
|
||||||
|
timeOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"timeunits", "Time Units",
|
||||||
|
timeStrings, timeObjects,
|
||||||
|
timeStrings, timeDescriptions,
|
||||||
|
0);
|
||||||
|
String rateStrings[] = {
|
||||||
|
"unitspersec",
|
||||||
|
"secsperunit",
|
||||||
|
};
|
||||||
|
String rateDescriptions[] = {
|
||||||
|
"Work units per Time",
|
||||||
|
"Time units per Work",
|
||||||
|
};
|
||||||
|
Boolean rateObjects[] = {
|
||||||
|
Boolean.FALSE,
|
||||||
|
Boolean.TRUE,
|
||||||
|
};
|
||||||
|
rateOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"ratio", "Rate Ratio",
|
||||||
|
rateStrings, rateObjects,
|
||||||
|
rateStrings, rateDescriptions,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTimeUnit(int unit) {
|
||||||
|
return (unit >= TIME_SECONDS && unit <= TIME_AUTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isWorkUnit(int unit) {
|
||||||
|
return (unit >= WORK_OPS && unit <= (WORK_AUTO | WORK_OPS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String parseRateOpt(String opt) {
|
||||||
|
int timeScale = timeOpt.getIntValue();
|
||||||
|
int workScale = workOpt.getIntValue();
|
||||||
|
boolean invertRate = rateOpt.getBooleanValue();
|
||||||
|
int divindex = opt.indexOf('/');
|
||||||
|
if (divindex < 0) {
|
||||||
|
int unit = parseUnit(opt);
|
||||||
|
if (isTimeUnit(unit)) {
|
||||||
|
timeScale = unit;
|
||||||
|
} else if (isWorkUnit(unit)) {
|
||||||
|
workScale = unit;
|
||||||
|
} else {
|
||||||
|
return "Bad unit: "+opt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int unit1 = parseUnit(opt.substring(0,divindex));
|
||||||
|
int unit2 = parseUnit(opt.substring(divindex+1));
|
||||||
|
if (isTimeUnit(unit1)) {
|
||||||
|
if (isWorkUnit(unit2)) {
|
||||||
|
timeScale = unit1;
|
||||||
|
workScale = unit2;
|
||||||
|
invertRate = true;
|
||||||
|
} else if (isTimeUnit(unit2)) {
|
||||||
|
return "Both time units: "+opt;
|
||||||
|
} else {
|
||||||
|
return "Bad denominator: "+opt;
|
||||||
|
}
|
||||||
|
} else if (isWorkUnit(unit1)) {
|
||||||
|
if (isWorkUnit(unit2)) {
|
||||||
|
return "Both work units: "+opt;
|
||||||
|
} else if (isTimeUnit(unit2)) {
|
||||||
|
timeScale = unit2;
|
||||||
|
workScale = unit1;
|
||||||
|
invertRate = false;
|
||||||
|
} else {
|
||||||
|
return "Bad denominator: "+opt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "Bad numerator: "+opt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
timeOpt.setValue(timeScale);
|
||||||
|
workOpt.setValue(workScale);
|
||||||
|
rateOpt.setValue(invertRate);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HashMap unitMap;
|
||||||
|
|
||||||
|
static {
|
||||||
|
unitMap = new HashMap();
|
||||||
|
unitMap.put("U", new Integer(WORK_UNITS));
|
||||||
|
unitMap.put("M", new Integer(WORK_MILLIONS));
|
||||||
|
unitMap.put("K", new Integer(WORK_THOUSANDS));
|
||||||
|
unitMap.put("A", new Integer(WORK_AUTO));
|
||||||
|
unitMap.put("MU", new Integer(WORK_MILLIONS));
|
||||||
|
unitMap.put("KU", new Integer(WORK_THOUSANDS));
|
||||||
|
unitMap.put("AU", new Integer(WORK_AUTO));
|
||||||
|
|
||||||
|
unitMap.put("O", new Integer(WORK_UNITS | WORK_OPS));
|
||||||
|
unitMap.put("NO", new Integer(WORK_UNITS | WORK_OPS));
|
||||||
|
unitMap.put("MO", new Integer(WORK_MILLIONS | WORK_OPS));
|
||||||
|
unitMap.put("KO", new Integer(WORK_THOUSANDS | WORK_OPS));
|
||||||
|
unitMap.put("AO", new Integer(WORK_AUTO | WORK_OPS));
|
||||||
|
|
||||||
|
unitMap.put("s", new Integer(TIME_SECONDS));
|
||||||
|
unitMap.put("m", new Integer(TIME_MILLIS));
|
||||||
|
unitMap.put("u", new Integer(TIME_MICROS));
|
||||||
|
unitMap.put("n", new Integer(TIME_NANOS));
|
||||||
|
unitMap.put("a", new Integer(TIME_AUTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int parseUnit(String c) {
|
||||||
|
Integer u = (Integer) unitMap.get(c);
|
||||||
|
if (u != null) {
|
||||||
|
return u.intValue();
|
||||||
|
}
|
||||||
|
return RATE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
String unitname = "unit";
|
String unitname = "unit";
|
||||||
Test test;
|
Test test;
|
||||||
@ -157,69 +333,76 @@ public class Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getAverageString() {
|
public String getAverageString() {
|
||||||
double units = (useUnits ? getTotalUnits() : getTotalReps());
|
int timeScale = timeOpt.getIntValue();
|
||||||
|
int workScale = workOpt.getIntValue();
|
||||||
|
boolean invertRate = rateOpt.getBooleanValue();
|
||||||
double time = getTotalTime();
|
double time = getTotalTime();
|
||||||
|
String timeprefix = "";
|
||||||
|
switch (timeScale) {
|
||||||
|
case TIME_AUTO:
|
||||||
|
case TIME_SECONDS:
|
||||||
|
time /= 1000;
|
||||||
|
break;
|
||||||
|
case TIME_MILLIS:
|
||||||
|
timeprefix = "m";
|
||||||
|
break;
|
||||||
|
case TIME_MICROS:
|
||||||
|
time *= 1000.0;
|
||||||
|
timeprefix = "u";
|
||||||
|
break;
|
||||||
|
case TIME_NANOS:
|
||||||
|
time *= 1000000.0;
|
||||||
|
timeprefix = "n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
String workprefix = "";
|
||||||
|
boolean isOps = (workScale & WORK_OPS) != 0;
|
||||||
|
String workname = isOps ? "op" : unitname;
|
||||||
|
double work = isOps ? getTotalReps() : getTotalUnits();
|
||||||
|
switch (workScale & (~WORK_OPS)) {
|
||||||
|
case WORK_AUTO:
|
||||||
|
case WORK_UNITS:
|
||||||
|
break;
|
||||||
|
case WORK_THOUSANDS:
|
||||||
|
work /= 1000.0;
|
||||||
|
workprefix = "K";
|
||||||
|
break;
|
||||||
|
case WORK_MILLIONS:
|
||||||
|
work /= 1000000.0;
|
||||||
|
workprefix = "M";
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (invertRate) {
|
if (invertRate) {
|
||||||
double rate = time / units;
|
double rate = time / work;
|
||||||
String prefix = "";
|
if (timeScale == TIME_AUTO) {
|
||||||
switch (timeScale) {
|
|
||||||
case SECONDS_WHOLE:
|
|
||||||
rate /= 1000;
|
|
||||||
break;
|
|
||||||
case SECONDS_MILLIS:
|
|
||||||
prefix = "m";
|
|
||||||
break;
|
|
||||||
case SECONDS_MICROS:
|
|
||||||
rate *= 1000.0;
|
|
||||||
prefix = "u";
|
|
||||||
break;
|
|
||||||
case SECONDS_NANOS:
|
|
||||||
rate *= 1000000.0;
|
|
||||||
prefix = "n";
|
|
||||||
break;
|
|
||||||
case SECONDS_AUTO:
|
|
||||||
rate /= 1000.0;
|
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "m";
|
timeprefix = "m";
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "u";
|
timeprefix = "u";
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "n";
|
timeprefix = "n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return rate+" "+prefix+"secs/"+(useUnits ? unitname : "op");
|
return rate+" "+timeprefix+"secs/"+workprefix+workname;
|
||||||
} else {
|
} else {
|
||||||
double rate = units / (time / 1000.0);
|
double rate = work / time;
|
||||||
String prefix = "";
|
if (workScale == WORK_AUTO) {
|
||||||
switch (unitScale) {
|
|
||||||
case UNITS_WHOLE:
|
|
||||||
break;
|
|
||||||
case UNITS_THOUSANDS:
|
|
||||||
rate /= 1000.0;
|
|
||||||
prefix = "K";
|
|
||||||
break;
|
|
||||||
case UNITS_MILLIONS:
|
|
||||||
rate /= 1000000.0;
|
|
||||||
prefix = "M";
|
|
||||||
break;
|
|
||||||
case UNITS_AUTO:
|
|
||||||
if (rate > 1000.0) {
|
if (rate > 1000.0) {
|
||||||
rate /= 1000.0;
|
rate /= 1000.0;
|
||||||
prefix = "K";
|
workprefix = "K";
|
||||||
if (rate > 1000.0) {
|
if (rate > 1000.0) {
|
||||||
rate /= 1000.0;
|
rate /= 1000.0;
|
||||||
prefix = "M";
|
workprefix = "M";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return rate+" "+prefix+(useUnits ? unitname : "op")+"s/sec";
|
return rate+" "+workprefix+workname+"s/"+timeprefix+"sec";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ public class J2DAnalyzer {
|
|||||||
"the following result sets are combined into a group");
|
"the following result sets are combined into a group");
|
||||||
out.println(" -NoGroup "+
|
out.println(" -NoGroup "+
|
||||||
"the following result sets stand on their own");
|
"the following result sets stand on their own");
|
||||||
|
out.println(" -ShowUncontested "+
|
||||||
|
"show results even when only result set has a result");
|
||||||
out.println(" -Graph "+
|
out.println(" -Graph "+
|
||||||
"graph the results visually (using lines of *'s)");
|
"graph the results visually (using lines of *'s)");
|
||||||
out.println(" -Best "+
|
out.println(" -Best "+
|
||||||
@ -83,6 +85,7 @@ public class J2DAnalyzer {
|
|||||||
public static void main(String argv[]) {
|
public static void main(String argv[]) {
|
||||||
boolean gavehelp = false;
|
boolean gavehelp = false;
|
||||||
boolean graph = false;
|
boolean graph = false;
|
||||||
|
boolean ignoreuncontested = true;
|
||||||
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
|
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
|
||||||
String newargs[] = new String[argv.length-1];
|
String newargs[] = new String[argv.length-1];
|
||||||
System.arraycopy(argv, 1, newargs, 0, newargs.length);
|
System.arraycopy(argv, 1, newargs, 0, newargs.length);
|
||||||
@ -97,6 +100,8 @@ public class J2DAnalyzer {
|
|||||||
results.add(groupHolder);
|
results.add(groupHolder);
|
||||||
} else if (arg.equalsIgnoreCase("-NoGroup")) {
|
} else if (arg.equalsIgnoreCase("-NoGroup")) {
|
||||||
groupHolder = null;
|
groupHolder = null;
|
||||||
|
} else if (arg.equalsIgnoreCase("-ShowUncontested")) {
|
||||||
|
ignoreuncontested = false;
|
||||||
} else if (arg.equalsIgnoreCase("-Graph")) {
|
} else if (arg.equalsIgnoreCase("-Graph")) {
|
||||||
graph = true;
|
graph = true;
|
||||||
} else if (arg.equalsIgnoreCase("-Best")) {
|
} else if (arg.equalsIgnoreCase("-Best")) {
|
||||||
@ -171,18 +176,23 @@ public class J2DAnalyzer {
|
|||||||
String key = keys[k];
|
String key = keys[k];
|
||||||
ResultHolder rh = base.getResultByKey(key);
|
ResultHolder rh = base.getResultByKey(key);
|
||||||
double score = rh.getScore();
|
double score = rh.getScore();
|
||||||
System.out.println(rh.getShortKey()+":");
|
|
||||||
double maxscore = score;
|
double maxscore = score;
|
||||||
if (graph) {
|
int numcontesting = 0;
|
||||||
for (int i = 0; i < numsets; i++) {
|
for (int i = 0; i < numsets; i++) {
|
||||||
ResultSetHolder rsh =
|
ResultSetHolder rsh =
|
||||||
(ResultSetHolder) results.elementAt(i);
|
(ResultSetHolder) results.elementAt(i);
|
||||||
ResultHolder rh2 = rsh.getResultByKey(key);
|
ResultHolder rh2 = rsh.getResultByKey(key);
|
||||||
if (rh2 != null) {
|
if (rh2 != null) {
|
||||||
|
if (graph) {
|
||||||
maxscore = Math.max(maxscore, rh2.getBestScore());
|
maxscore = Math.max(maxscore, rh2.getBestScore());
|
||||||
}
|
}
|
||||||
|
numcontesting++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ignoreuncontested && numcontesting < 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
System.out.println(rh.getShortKey()+":");
|
||||||
for (int i = 0; i < numsets; i++) {
|
for (int i = 0; i < numsets; i++) {
|
||||||
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
|
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
|
||||||
System.out.print(rsh.getTitle()+": ");
|
System.out.print(rsh.getTitle()+": ");
|
||||||
|
@ -38,6 +38,8 @@ import java.awt.RenderingHints;
|
|||||||
import java.awt.Polygon;
|
import java.awt.Polygon;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.geom.Point2D;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
import j2dbench.Destinations;
|
import j2dbench.Destinations;
|
||||||
@ -74,6 +76,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
static Option animList;
|
static Option animList;
|
||||||
static Option sizeList;
|
static Option sizeList;
|
||||||
static Option compRules;
|
static Option compRules;
|
||||||
|
static Option transforms;
|
||||||
static Option doExtraAlpha;
|
static Option doExtraAlpha;
|
||||||
static Option doXor;
|
static Option doXor;
|
||||||
static Option doClipping;
|
static Option doClipping;
|
||||||
@ -167,6 +170,29 @@ public abstract class GraphicsTests extends Test {
|
|||||||
j, rulenames, rules, rulenames,
|
j, rulenames, rules, rulenames,
|
||||||
ruledescs, (1 << defrule));
|
ruledescs, (1 << defrule));
|
||||||
((Option.ObjectList) compRules).setNumRows(4);
|
((Option.ObjectList) compRules).setNumRows(4);
|
||||||
|
|
||||||
|
Transform xforms[] = {
|
||||||
|
Identity.instance,
|
||||||
|
FTranslate.instance,
|
||||||
|
Scale2x2.instance,
|
||||||
|
Rotate15.instance,
|
||||||
|
ShearX.instance,
|
||||||
|
ShearY.instance,
|
||||||
|
};
|
||||||
|
String xformnames[] = new String[xforms.length];
|
||||||
|
String xformdescs[] = new String[xforms.length];
|
||||||
|
for (int i = 0; i < xforms.length; i++) {
|
||||||
|
xformnames[i] = xforms[i].getShortName();
|
||||||
|
xformdescs[i] = xforms[i].getDescription();
|
||||||
|
}
|
||||||
|
transforms =
|
||||||
|
new Option.ObjectList(groptroot, "transform",
|
||||||
|
"Affine Transform",
|
||||||
|
xforms.length,
|
||||||
|
xformnames, xforms, xformnames,
|
||||||
|
xformdescs, 0x1);
|
||||||
|
((Option.ObjectList) transforms).setNumRows(3);
|
||||||
|
|
||||||
doExtraAlpha =
|
doExtraAlpha =
|
||||||
new Option.Toggle(groptroot, "extraalpha",
|
new Option.Toggle(groptroot, "extraalpha",
|
||||||
"Render with an \"extra alpha\" of 0.125",
|
"Render with an \"extra alpha\" of 0.125",
|
||||||
@ -200,6 +226,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
int orgX, orgY;
|
int orgX, orgY;
|
||||||
int initX, initY;
|
int initX, initY;
|
||||||
int maxX, maxY;
|
int maxX, maxY;
|
||||||
|
double pixscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GraphicsTests(Group parent, String nodeName, String description) {
|
public GraphicsTests(Group parent, String nodeName, String description) {
|
||||||
@ -211,7 +238,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
public Object initTest(TestEnvironment env, Result result) {
|
public Object initTest(TestEnvironment env, Result result) {
|
||||||
Context ctx = createContext();
|
Context ctx = createContext();
|
||||||
initContext(env, ctx);
|
initContext(env, ctx);
|
||||||
result.setUnits(pixelsTouched(ctx));
|
result.setUnits((int) (ctx.pixscale * pixelsTouched(ctx)));
|
||||||
result.setUnitName("pixel");
|
result.setUnitName("pixel");
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
@ -232,6 +259,9 @@ public abstract class GraphicsTests extends Test {
|
|||||||
ctx.graphics = env.getGraphics();
|
ctx.graphics = env.getGraphics();
|
||||||
int w = env.getWidth();
|
int w = env.getWidth();
|
||||||
int h = env.getHeight();
|
int h = env.getHeight();
|
||||||
|
ctx.size = env.getIntValue(sizeList);
|
||||||
|
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
||||||
|
ctx.pixscale = 1.0;
|
||||||
if (hasGraphics2D) {
|
if (hasGraphics2D) {
|
||||||
Graphics2D g2d = (Graphics2D) ctx.graphics;
|
Graphics2D g2d = (Graphics2D) ctx.graphics;
|
||||||
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
|
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
|
||||||
@ -251,11 +281,14 @@ public abstract class GraphicsTests extends Test {
|
|||||||
p.addPoint(0, 0);
|
p.addPoint(0, 0);
|
||||||
g2d.clip(p);
|
g2d.clip(p);
|
||||||
}
|
}
|
||||||
|
Transform tx = (Transform) env.getModifier(transforms);
|
||||||
|
Dimension envdim = new Dimension(w, h);
|
||||||
|
tx.init(g2d, ctx, envdim);
|
||||||
|
w = envdim.width;
|
||||||
|
h = envdim.height;
|
||||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
|
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
|
||||||
env.getModifier(renderHint));
|
env.getModifier(renderHint));
|
||||||
}
|
}
|
||||||
ctx.size = env.getIntValue(sizeList);
|
|
||||||
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
|
||||||
switch (env.getIntValue(animList)) {
|
switch (env.getIntValue(animList)) {
|
||||||
case 0:
|
case 0:
|
||||||
ctx.animate = false;
|
ctx.animate = false;
|
||||||
@ -290,4 +323,201 @@ public abstract class GraphicsTests extends Test {
|
|||||||
graphics.dispose();
|
graphics.dispose();
|
||||||
((Context) ctx).graphics = null;
|
((Context) ctx).graphics = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract static class Transform {
|
||||||
|
public abstract String getShortName();
|
||||||
|
public abstract String getDescription();
|
||||||
|
public abstract void init(Graphics2D g2d, Context ctx, Dimension dim);
|
||||||
|
|
||||||
|
public static double scaleForPoint(AffineTransform at,
|
||||||
|
double xorig, double yorig,
|
||||||
|
double x, double y,
|
||||||
|
int w, int h)
|
||||||
|
{
|
||||||
|
Point2D.Double ptd = new Point2D.Double(x, y);
|
||||||
|
at.transform(ptd, ptd);
|
||||||
|
x = ptd.getX();
|
||||||
|
y = ptd.getY();
|
||||||
|
double scale = 1.0;
|
||||||
|
if (x < 0) {
|
||||||
|
scale = Math.min(scale, xorig / (xorig - x));
|
||||||
|
} else if (x > w) {
|
||||||
|
scale = Math.min(scale, (w - xorig) / (x - xorig));
|
||||||
|
}
|
||||||
|
if (y < 0) {
|
||||||
|
scale = Math.min(scale, yorig / (yorig - y));
|
||||||
|
} else if (y > h) {
|
||||||
|
scale = Math.min(scale, (h - yorig) / (y - yorig));
|
||||||
|
}
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Dimension scaleForTransform(AffineTransform at,
|
||||||
|
Dimension dim)
|
||||||
|
{
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
Point2D.Double ptd = new Point2D.Double(0, 0);
|
||||||
|
at.transform(ptd, ptd);
|
||||||
|
double ox = ptd.getX();
|
||||||
|
double oy = ptd.getY();
|
||||||
|
if (ox < 0 || ox > w || oy < 0 || oy > h) {
|
||||||
|
throw new InternalError("origin outside destination");
|
||||||
|
}
|
||||||
|
double scalex = scaleForPoint(at, ox, oy, w, h, w, h);
|
||||||
|
double scaley = scalex;
|
||||||
|
scalex = Math.min(scaleForPoint(at, ox, oy, w, 0, w, h), scalex);
|
||||||
|
scaley = Math.min(scaleForPoint(at, ox, oy, 0, h, w, h), scaley);
|
||||||
|
if (scalex < 0 || scaley < 0) {
|
||||||
|
throw new InternalError("could not fit dims to transform");
|
||||||
|
}
|
||||||
|
return new Dimension((int) Math.floor(w * scalex),
|
||||||
|
(int) Math.floor(h * scaley));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Identity extends Transform {
|
||||||
|
public static final Identity instance = new Identity();
|
||||||
|
|
||||||
|
private Identity() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "ident";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Identity";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class FTranslate extends Transform {
|
||||||
|
public static final FTranslate instance = new FTranslate();
|
||||||
|
|
||||||
|
private FTranslate() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "ftrans";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "FTranslate 1.5";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate(1.5, 1.5);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(w-3, h-3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Scale2x2 extends Transform {
|
||||||
|
public static final Scale2x2 instance = new Scale2x2();
|
||||||
|
|
||||||
|
private Scale2x2() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "scale2x2";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Scale 2x by 2x";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.scale(2.0, 2.0);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(w/2, h/2);
|
||||||
|
ctx.pixscale = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Rotate15 extends Transform {
|
||||||
|
public static final Rotate15 instance = new Rotate15();
|
||||||
|
|
||||||
|
private Rotate15() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "rot15";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Rotate 15 degrees";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
double theta = Math.toRadians(15);
|
||||||
|
double cos = Math.cos(theta);
|
||||||
|
double sin = Math.sin(theta);
|
||||||
|
double xsize = sin * h + cos * w;
|
||||||
|
double ysize = sin * w + cos * h;
|
||||||
|
double scale = Math.min(w / xsize, h / ysize);
|
||||||
|
xsize *= scale;
|
||||||
|
ysize *= scale;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate((w - xsize) / 2.0, (h - ysize) / 2.0);
|
||||||
|
at.translate(sin * h * scale, 0.0);
|
||||||
|
at.rotate(theta);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ShearX extends Transform {
|
||||||
|
public static final ShearX instance = new ShearX();
|
||||||
|
|
||||||
|
private ShearX() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "shearx";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Shear X to the right";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate(0.0, (h - (w*h)/(w + h*0.1)) / 2);
|
||||||
|
at.shear(0.1, 0.0);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ShearY extends Transform {
|
||||||
|
public static final ShearY instance = new ShearY();
|
||||||
|
|
||||||
|
private ShearY() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "sheary";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Shear Y down";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate((w - (w*h)/(h + w*0.1)) / 2, 0.0);
|
||||||
|
at.shear(0.0, 0.1);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ public abstract class TextTests extends Test {
|
|||||||
taaNames, taaHints,
|
taaNames, taaHints,
|
||||||
taaNames, taaNames,
|
taaNames, taaNames,
|
||||||
0x1);
|
0x1);
|
||||||
((Option.ObjectList) taaList).setNumRows(2);
|
((Option.ObjectList) taaList).setNumRows(6);
|
||||||
// add special TextAAOpt for backwards compatibility with
|
// add special TextAAOpt for backwards compatibility with
|
||||||
// older options files
|
// older options files
|
||||||
new TextAAOpt();
|
new TextAAOpt();
|
||||||
@ -707,3 +707,4 @@ public abstract class TextTests extends Test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,5 +31,9 @@ disabledMechanisms = {
|
|||||||
CKM_SHA256_RSA_PKCS
|
CKM_SHA256_RSA_PKCS
|
||||||
CKM_SHA384_RSA_PKCS
|
CKM_SHA384_RSA_PKCS
|
||||||
CKM_SHA512_RSA_PKCS
|
CKM_SHA512_RSA_PKCS
|
||||||
|
# the following mechanisms are disabled to ensure backward compatibility (Solaris bug 6545046)
|
||||||
|
CKM_DES_CBC_PAD
|
||||||
|
CKM_DES3_CBC_PAD
|
||||||
|
CKM_AES_CBC_PAD
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user