dev@grizzly.java.net

Re: [HEADS UP] OSGi support: mandatory changes

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Fri, 19 Dec 2008 11:02:47 -0500

Salut,


Oleksiy Stashok wrote:
>>
>> Oleksiy Stashok wrote:
>>> Hi,
>>> +1
>>> (though I'd prefer http-utils'es package to be renamed to
>>> com.sun.grizzly.http.utils, but we really have a lot of dependencies
>>> on it)
>>
>> One alternative would consist of moving the
>> grizzly/com.sun.grizzly.util classes under the http-util package, and
>> add that small dependencies to the grizzly modules. This way no
>> package change.
>>
>> In short:
>>
>> + move util from grizzly to http-util (we can eventually rename that
>> module)
>> + change the build order (first build http-util, then framework)
>> + The maven bundle plugs in can filter the extra classes so the
>> framework module stay small
>>
>> What do you think? That way no backward compatibility issues.
> Ok, I agree. But for sure we have to rename http-utils in that case.

I was too optimistic. We seems to have dependencies in util to "core".
Looking at it....

A+

-- jeanfrancois

>
> WBR,
> Alexey.
>
>>
>>
>> A+
>>
>> -- Jeanfrancois
>>
>>
>>> Thanks.
>>> WBR,
>>> Alexey.
>>> On Dec 19, 2008, at 5:51 , Jeanfrancois Arcand wrote:
>>>> Hi,
>>>>
>>>> we currently have a split package that prevent us supporting OSGi
>>>> properly (we know that for awhile, but thanks to Hubert, it very
>>>> simple test case helped me isolating the issue).
>>>>
>>>> Mainly, module grizzly has:
>>>>
>>>> com.sun.grizzly.util
>>>>
>>>>
>>>> module http-util has:
>>>>
>>>> com.sun.grizzly.util
>>>>
>>>> Since http-util is, IMO, more used that other, I would like to
>>>> propose we rename the package in trunk/modules/grizzly to:
>>>>
>>>> com.sun.grizzly.misc
>>>>
>>>> (or any better name)
>>>>
>>>> With that changes, OSGi works like a charm. I'm attaching the diff.
>>>>
>>>> That will breaks backward compatibility, but I guess we don't have
>>>> choice.
>>>>
>>>> A+
>>>>
>>>> -- Jeanfrancois
>>>> Index:
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EchoStreamAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EchoStreamAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EchoStreamAlgorithm.java
>>>> (working copy)
>>>> @@ -40,8 +40,8 @@
>>>>
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> import com.sun.grizzly.standalone.StaticStreamAlgorithm;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.util.logging.Level;
>>>> Index:
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EmptyHttpStreamAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EmptyHttpStreamAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/test/java/com/sun/grizzly/http/utils/EmptyHttpStreamAlgorithm.java
>>>> (working copy)
>>>> @@ -40,8 +40,8 @@
>>>>
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> import com.sun.grizzly.standalone.StaticStreamAlgorithm;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.util.concurrent.atomic.AtomicInteger;
>>>> Index: modules/http/src/test/java/com/sun/grizzly/http/ArpSSLTest.java
>>>> ===================================================================
>>>> --- modules/http/src/test/java/com/sun/grizzly/http/ArpSSLTest.java
>>>> (revision 2047)
>>>> +++ modules/http/src/test/java/com/sun/grizzly/http/ArpSSLTest.java
>>>> (working copy)
>>>> @@ -48,7 +48,7 @@
>>>> import com.sun.grizzly.tcp.OutputBuffer;
>>>> import com.sun.grizzly.tcp.Request;
>>>> import com.sun.grizzly.tcp.Response;
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> import com.sun.grizzly.util.buf.ByteChunk;
>>>> import com.sun.grizzly.util.net.jsse.JSSEImplementation;
>>>> import java.io.DataInputStream;
>>>> Index:
>>>> modules/http/src/test/java/com/sun/grizzly/http/SelectorThreadStatsTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/test/java/com/sun/grizzly/http/SelectorThreadStatsTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/test/java/com/sun/grizzly/http/SelectorThreadStatsTest.java
>>>> (working copy)
>>>> @@ -43,7 +43,7 @@
>>>> import com.sun.grizzly.tcp.OutputBuffer;
>>>> import com.sun.grizzly.tcp.Request;
>>>> import com.sun.grizzly.tcp.Response;
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> import com.sun.grizzly.util.buf.ByteChunk;
>>>> import java.io.BufferedReader;
>>>> import java.io.DataInputStream;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpWorkerThread.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpWorkerThread.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpWorkerThread.java
>>>> (working copy)
>>>> @@ -38,10 +38,10 @@
>>>>
>>>> package com.sun.grizzly.http;
>>>>
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.WorkerThreadImpl;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.WorkerThreadImpl;
>>>>
>>>> -import com.sun.grizzly.util.StreamAlgorithm;
>>>> +import com.sun.grizzly.misc.StreamAlgorithm;
>>>>
>>>> /**
>>>> * Specialized WorkerThread.
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/ProcessorTask.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/ProcessorTask.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/ProcessorTask.java
>>>> (working copy)
>>>> @@ -42,7 +42,7 @@
>>>> import java.io.OutputStream;
>>>> import java.net.Socket;
>>>>
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>>
>>>> /**
>>>> * Process HTTP request.
>>>> Index: modules/http/src/main/java/com/sun/grizzly/http/FileCache.java
>>>> ===================================================================
>>>> --- modules/http/src/main/java/com/sun/grizzly/http/FileCache.java
>>>> (revision 2047)
>>>> +++ modules/http/src/main/java/com/sun/grizzly/http/FileCache.java
>>>> (working copy)
>>>> @@ -38,8 +38,8 @@
>>>>
>>>> package com.sun.grizzly.http;
>>>>
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.WorkerThreadImpl;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.WorkerThreadImpl;
>>>> import java.io.File;
>>>> import java.io.FileInputStream;
>>>> import java.io.IOException;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpProtocolChain.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpProtocolChain.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/HttpProtocolChain.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.DefaultProtocolChain;
>>>> import com.sun.grizzly.rcm.ResourceAllocationFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.nio.ByteBuffer;
>>>>
>>>> /**
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadHandler.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>> package com.sun.grizzly.http;
>>>>
>>>> import com.sun.grizzly.TCPSelectorHandler;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> import java.io.IOException;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SocketChannel;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProcessorTask.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProcessorTask.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProcessorTask.java
>>>> (working copy)
>>>> @@ -84,10 +84,10 @@
>>>> import com.sun.grizzly.tcp.http11.filters.VoidInputFilter;
>>>> import com.sun.grizzly.tcp.http11.filters.VoidOutputFilter;
>>>> import com.sun.grizzly.tcp.http11.filters.BufferedInputFilter;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>>
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.util.buf.Ascii;
>>>> import com.sun.grizzly.util.buf.ByteChunk;
>>>> import com.sun.grizzly.util.buf.HexUtils;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThread.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThread.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThread.java
>>>> (working copy)
>>>> @@ -53,7 +53,7 @@
>>>> import com.sun.grizzly.portunif.ProtocolFinder;
>>>> import com.sun.grizzly.portunif.ProtocolHandler;
>>>> import com.sun.grizzly.rcm.ResourceAllocationFilter;
>>>> -import com.sun.grizzly.util.SelectorFactory;
>>>> +import com.sun.grizzly.misc.SelectorFactory;
>>>>
>>>> import java.io.IOException;
>>>> import java.net.InetAddress;
>>>> @@ -70,7 +70,7 @@
>>>> import com.sun.grizzly.tcp.Adapter;
>>>> import com.sun.grizzly.tcp.RequestGroupInfo;
>>>> import com.sun.grizzly.tcp.http11.GrizzlyAdapter;
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> import com.sun.grizzly.util.IntrospectionUtils;
>>>>
>>>> import com.sun.grizzly.util.LoggerUtils;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProtocolFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProtocolFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/DefaultProtocolFilter.java
>>>> (working copy)
>>>> @@ -43,9 +43,9 @@
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> import com.sun.grizzly.http.algorithms.NoParsingAlgorithm;
>>>> import com.sun.grizzly.rcm.ResourceAllocationFilter;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> -import com.sun.grizzly.util.StreamAlgorithm;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> +import com.sun.grizzly.misc.StreamAlgorithm;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadKeyHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadKeyHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadKeyHandler.java
>>>> (working copy)
>>>> @@ -41,9 +41,9 @@
>>>> import com.sun.grizzly.DefaultSelectionKeyHandler;
>>>> import com.sun.grizzly.tcp.Response;
>>>> import com.sun.grizzly.tcp.Response.ResponseAttachment;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> import java.nio.channels.SelectionKey;
>>>> import java.util.Iterator;
>>>> import java.util.concurrent.ConcurrentLinkedQueue;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/StatsThreadPool.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/StatsThreadPool.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/StatsThreadPool.java
>>>> (working copy)
>>>> @@ -37,7 +37,7 @@
>>>> */
>>>> package com.sun.grizzly.http;
>>>>
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> import java.util.concurrent.ThreadFactory;
>>>> import java.util.concurrent.TimeUnit;
>>>>
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpProtocolHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpProtocolHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpProtocolHandler.java
>>>> (working copy)
>>>> @@ -41,7 +41,7 @@
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.portunif.PUProtocolRequest;
>>>> import com.sun.grizzly.portunif.ProtocolHandler;
>>>> -import com.sun.grizzly.util.Utils;
>>>> +import com.sun.grizzly.misc.Utils;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpRedirector.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpRedirector.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/portunif/HttpRedirector.java
>>>> (working copy)
>>>> @@ -41,8 +41,8 @@
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.portunif.PUProtocolRequest;
>>>> import com.sun.grizzly.ssl.SSLSelectorThread;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import com.sun.grizzly.util.buf.Ascii;
>>>> import java.io.IOException;
>>>> import java.net.InetAddress;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/ContentLengthAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/ContentLengthAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/ContentLengthAlgorithm.java
>>>> (working copy)
>>>> @@ -54,7 +54,7 @@
>>>> package com.sun.grizzly.http.algorithms;
>>>>
>>>> import com.sun.grizzly.http.Constants;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>>
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/NoParsingAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/NoParsingAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/NoParsingAlgorithm.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>>
>>>> package com.sun.grizzly.http.algorithms;
>>>>
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import java.nio.ByteBuffer;
>>>>
>>>>
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StateMachineAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StateMachineAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StateMachineAlgorithm.java
>>>> (working copy)
>>>> @@ -37,7 +37,7 @@
>>>> */
>>>> package com.sun.grizzly.http.algorithms;
>>>>
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>>
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StreamAlgorithmBase.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StreamAlgorithmBase.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/algorithms/StreamAlgorithmBase.java
>>>> (working copy)
>>>> @@ -38,9 +38,9 @@
>>>>
>>>> package com.sun.grizzly.http.algorithms;
>>>>
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> -import com.sun.grizzly.util.StreamAlgorithm;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> +import com.sun.grizzly.misc.StreamAlgorithm;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> import java.io.IOException;
>>>>
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/ThreadPoolStatistic.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/ThreadPoolStatistic.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/ThreadPoolStatistic.java
>>>> (working copy)
>>>> @@ -38,8 +38,8 @@
>>>>
>>>> package com.sun.grizzly.http;
>>>>
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> -import com.sun.grizzly.util.WorkerThreadImpl;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.WorkerThreadImpl;
>>>> import java.util.concurrent.ConcurrentHashMap;
>>>> import java.util.concurrent.ExecutorService;
>>>> import java.util.concurrent.Future;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/SocketChannelOutputBuffer.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/SocketChannelOutputBuffer.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/SocketChannelOutputBuffer.java
>>>> (working copy)
>>>> @@ -48,10 +48,10 @@
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.FileChannel;
>>>> import java.nio.channels.SocketChannel;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> import com.sun.grizzly.tcp.Response;
>>>> import com.sun.grizzly.tcp.http11.InternalOutputBuffer;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> import java.nio.channels.Channel;
>>>> import java.nio.channels.SelectionKey;
>>>> import java.nio.channels.WritableByteChannel;
>>>> Index: modules/http/src/main/java/com/sun/grizzly/http/TaskBase.java
>>>> ===================================================================
>>>> --- modules/http/src/main/java/com/sun/grizzly/http/TaskBase.java
>>>> (revision 2047)
>>>> +++ modules/http/src/main/java/com/sun/grizzly/http/TaskBase.java
>>>> (working copy)
>>>> @@ -46,7 +46,7 @@
>>>> import java.util.logging.Level;
>>>>
>>>> import com.sun.grizzly.tcp.RequestGroupInfo;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> import java.util.concurrent.ExecutorService;
>>>>
>>>> /**
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadConfig.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadConfig.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/http/SelectorThreadConfig.java
>>>> (working copy)
>>>> @@ -39,10 +39,10 @@
>>>>
>>>> import com.sun.grizzly.arp.AsyncHandler;
>>>> import com.sun.grizzly.util.ClassLoaderUtil;
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.SelectorFactory;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.SelectorFactory;
>>>> import com.sun.grizzly.util.res.StringManager;
>>>> import java.io.IOException;
>>>> import java.util.StringTokenizer;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncProtocolFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncProtocolFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncProtocolFilter.java
>>>> (working copy)
>>>> @@ -42,9 +42,9 @@
>>>> import com.sun.grizzly.arp.AsyncProtocolFilter;
>>>> import com.sun.grizzly.http.HttpWorkerThread;
>>>> import com.sun.grizzly.http.ProcessorTask;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.util.net.SSLImplementation;
>>>> import com.sun.grizzly.util.net.SSLSupport;
>>>> import java.io.InputStream;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLSelectorThreadHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLSelectorThreadHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLSelectorThreadHandler.java
>>>> (working copy)
>>>> @@ -40,8 +40,8 @@
>>>> import com.sun.grizzly.SSLSelectorHandler;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> import java.nio.channels.SelectionKey;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> -import com.sun.grizzly.util.SelectionKeyOP;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> +import com.sun.grizzly.misc.SelectionKeyOP;
>>>> import java.nio.channels.ClosedChannelException;
>>>>
>>>> /**
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncOutputBuffer.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncOutputBuffer.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncOutputBuffer.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.http.SocketChannelOutputBuffer;
>>>> import com.sun.grizzly.tcp.Response;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SocketChannel;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncStream.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncStream.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLAsyncStream.java
>>>> (working copy)
>>>> @@ -38,8 +38,8 @@
>>>>
>>>> package com.sun.grizzly.ssl;
>>>>
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.SSLUtils;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.SSLUtils;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SocketChannel;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLOutputBuffer.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLOutputBuffer.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLOutputBuffer.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.http.SocketChannelOutputBuffer;
>>>> import com.sun.grizzly.tcp.Response;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SocketChannel;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLFileCacheFactory.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLFileCacheFactory.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLFileCacheFactory.java
>>>> (working copy)
>>>> @@ -41,7 +41,7 @@
>>>> import com.sun.grizzly.http.FileCache;
>>>> import com.sun.grizzly.http.FileCacheFactory;
>>>> import com.sun.grizzly.http.FileCache.FileCacheEntry;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SocketChannel;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLDefaultProtocolFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLDefaultProtocolFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/ssl/SSLDefaultProtocolFilter.java
>>>> (working copy)
>>>> @@ -41,7 +41,7 @@
>>>> import com.sun.grizzly.http.DefaultProtocolFilter;
>>>> import com.sun.grizzly.http.HttpWorkerThread;
>>>> import com.sun.grizzly.http.ProcessorTask;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.util.net.SSLImplementation;
>>>> import com.sun.grizzly.util.net.SSLSupport;
>>>>
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/arp/AsyncProtocolFilter.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/arp/AsyncProtocolFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/arp/AsyncProtocolFilter.java
>>>> (working copy)
>>>> @@ -44,13 +44,13 @@
>>>> import com.sun.grizzly.http.HttpWorkerThread;
>>>> import com.sun.grizzly.http.ProcessorTask;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> -import com.sun.grizzly.util.StreamAlgorithm;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> +import com.sun.grizzly.misc.StreamAlgorithm;
>>>> import com.sun.grizzly.http.TaskEvent;
>>>> import com.sun.grizzly.http.TaskListener;
>>>> import com.sun.grizzly.http.algorithms.NoParsingAlgorithm;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> import java.io.IOException;
>>>> import java.io.InputStream;
>>>> import java.nio.ByteBuffer;
>>>> Index :
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticHandler.java
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticHandler.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.http.Constants;
>>>> import com.sun.grizzly.http.FileCacheFactory;
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.http.FileCache;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> import java.io.IOException;
>>>> Index:
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticStreamAlgorithm.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticStreamAlgorithm.java
>>>> (revision 2047)
>>>> +++
>>>> modules/http/src/main/java/com/sun/grizzly/standalone/StaticStreamAlgorithm.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>>
>>>> package com.sun.grizzly.standalone;
>>>>
>>>> -import com.sun.grizzly.util.Interceptor;
>>>> +import com.sun.grizzly.misc.Interceptor;
>>>> import com.sun.grizzly.http.algorithms.StreamAlgorithmBase;
>>>> import java.nio.ByteBuffer;
>>>>
>>>> Index: modules/rcm/src/test/java/com/sun/grizzly/rcm/RCMTest.java
>>>> ===================================================================
>>>> --- modules/rcm/src/test/java/com/sun/grizzly/rcm/RCMTest.java
>>>> (revision 2047)
>>>> +++ modules/rcm/src/test/java/com/sun/grizzly/rcm/RCMTest.java
>>>> (working copy)
>>>> @@ -46,9 +46,9 @@
>>>> import com.sun.grizzly.ProtocolChain;
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> import com.sun.grizzly.TCPSelectorHandler;
>>>> -import com.sun.grizzly.util.ByteBufferInputStream;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.ByteBufferInputStream;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.BufferedReader;
>>>> import java.io.InputStream;
>>>> import java.io.InputStreamReader;
>>>> Index:
>>>> modules/rcm/src/main/java/com/sun/grizzly/rcm/ResourceAllocationFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/rcm/src/main/java/com/sun/grizzly/rcm/ResourceAllocationFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/rcm/src/main/java/com/sun/grizzly/rcm/ResourceAllocationFilter.java
>>>> (working copy)
>>>> @@ -44,12 +44,12 @@
>>>> import com.sun.grizzly.ProtocolChainContextTask;
>>>> import com.sun.grizzly.ProtocolParser;
>>>> import com.sun.grizzly.filter.ParserProtocolFilter;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> -import com.sun.grizzly.util.ByteBufferInputStream;
>>>> -import com.sun.grizzly.util.Cloner;
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> -import com.sun.grizzly.util.ExtendedThreadPool;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.ByteBufferInputStream;
>>>> +import com.sun.grizzly.misc.Cloner;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.ExtendedThreadPool;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.IOException;
>>>> import java.nio.BufferUnderflowException;
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/portunif/src/test/java/com/sun/grizzly/portunif/SimpleProtocolHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/portunif/src/test/java/com/sun/grizzly/portunif/SimpleProtocolHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/portunif/src/test/java/com/sun/grizzly/portunif/SimpleProtocolHandler.java
>>>> (working copy)
>>>> @@ -40,11 +40,11 @@
>>>>
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.Controller;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> -import com.sun.grizzly.util.Utils;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.Utils;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/PUReadFilter.java
>>>> ===================================================================
>>>> ---
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/PUReadFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/PUReadFilter.java
>>>> (working copy)
>>>> @@ -42,7 +42,7 @@
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.Utils;
>>>> +import com.sun.grizzly.misc.Utils;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/SSLFilterChainProtocolHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/SSLFilterChainProtocolHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/SSLFilterChainProtocolHandler.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>>
>>>> package com.sun.grizzly.portunif;
>>>>
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.nio.ByteBuffer;
>>>>
>>>> /**
>>>> Index:
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/ProtocolRequestWorkerThreadAdapter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/ProtocolRequestWorkerThreadAdapter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/ProtocolRequestWorkerThreadAdapter.java
>>>> (working copy)
>>>> @@ -39,7 +39,7 @@
>>>> package com.sun.grizzly.portunif;
>>>>
>>>> import com.sun.grizzly.Context;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/TLSPUPreProcessor.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/TLSPUPreProcessor.java
>>>> (revision 2047)
>>>> +++
>>>> modules/portunif/src/main/java/com/sun/grizzly/portunif/TLSPUPreProcessor.java
>>>> (working copy)
>>>> @@ -41,11 +41,11 @@
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.SSLConfig;
>>>> -import com.sun.grizzly.util.SSLUtils;
>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.SSLUtils;
>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment.Mode;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.EOFException;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometInputStream.java
>>>> ===================================================================
>>>> ---
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometInputStream.java
>>>> (revision 2047)
>>>> +++
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometInputStream.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>>
>>>> package com.sun.grizzly.comet;
>>>>
>>>> -import com.sun.grizzly.util.InputReader;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> import java.nio.ByteBuffer;
>>>>
>>>> /**
>>>> Index:
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometWriter.java
>>>> ===================================================================
>>>> ---
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometWriter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/comet/src/main/java/com/sun/grizzly/comet/CometWriter.java
>>>> (working copy)
>>>> @@ -37,7 +37,7 @@
>>>> */
>>>> package com.sun.grizzly.comet;
>>>>
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SocketChannel;
>>>> Index: modules/comet/src/main/java/com/sun/grizzly/comet/CometTask.java
>>>> ===================================================================
>>>> --- modules/comet/src/main/java/com/sun/grizzly/comet/CometTask.java
>>>> (revision 2047)
>>>> +++ modules/comet/src/main/java/com/sun/grizzly/comet/CometTask.java
>>>> (working copy)
>>>> @@ -43,9 +43,9 @@
>>>> import com.sun.grizzly.NIOContext;
>>>> import com.sun.grizzly.ProtocolChain;
>>>> import com.sun.grizzly.http.SelectorThread;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> import com.sun.grizzly.http.TaskBase;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/SSLAsyncQueueWriterTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/SSLAsyncQueueWriterTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/SSLAsyncQueueWriterTest.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.filter.SSLEchoAsyncWriteQueueFilter;
>>>> import com.sun.grizzly.filter.SSLReadFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import java.io.File;
>>>> import java.io.IOException;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueReaderTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueReaderTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueReaderTest.java
>>>> (working copy)
>>>> @@ -42,7 +42,7 @@
>>>> import com.sun.grizzly.async.AsyncQueueReadUnit;
>>>> import com.sun.grizzly.filter.EchoAsyncWriteQueueFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import java.io.IOException;
>>>> import java.net.InetSocketAddress;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/StateHolderTest.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/StateHolderTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/StateHolderTest.java
>>>> (working copy)
>>>> @@ -38,9 +38,9 @@
>>>>
>>>> package com.sun.grizzly;
>>>>
>>>> -import com.sun.grizzly.util.State;
>>>> -import com.sun.grizzly.util.StateHolder;
>>>> -import com.sun.grizzly.util.StateHolder.ConditionListener;
>>>> +import com.sun.grizzly.misc.State;
>>>> +import com.sun.grizzly.misc.StateHolder;
>>>> +import com.sun.grizzly.misc.StateHolder.ConditionListener;
>>>> import java.util.Arrays;
>>>> import java.util.List;
>>>> import java.util.Random;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueReaderTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueReaderTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueReaderTest.java
>>>> (working copy)
>>>> @@ -45,7 +45,7 @@
>>>> import com.sun.grizzly.async.AsyncQueueReadUnit;
>>>> import com.sun.grizzly.filter.EchoAsyncWriteQueueFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import java.io.IOException;
>>>> import java.net.InetSocketAddress;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/RoundRobinSelectorHandlerTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/RoundRobinSelectorHandlerTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/RoundRobinSelectorHandlerTest.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> import com.sun.grizzly.filter.EchoFilter;
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import com.sun.grizzly.utils.TCPIOClient;
>>>> import java.io.IOException;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueWriterTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueWriterTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/TCPAsyncQueueWriterTest.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.filter.EchoAsyncWriteQueueFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import java.io.IOException;
>>>> import java.net.InetSocketAddress;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/BaseSelectionKeyHandlerTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/BaseSelectionKeyHandlerTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/BaseSelectionKeyHandlerTest.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.filter.EchoFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import com.sun.grizzly.utils.TCPIOClient;
>>>> import java.io.IOException;
>>>> Index:
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueWriterTest.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueWriterTest.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/test/java/com/sun/grizzly/UDPAsyncQueueWriterTest.java
>>>> (working copy)
>>>> @@ -40,7 +40,7 @@
>>>>
>>>> import com.sun.grizzly.filter.EchoAsyncWriteQueueFilter;
>>>> import com.sun.grizzly.filter.ReadFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import com.sun.grizzly.utils.ControllerUtils;
>>>> import java.io.IOException;
>>>> import java.net.InetSocketAddress;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPConnectorHandler.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPConnectorHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPConnectorHandler.java
>>>> (working copy)
>>>> @@ -46,9 +46,9 @@
>>>> import com.sun.grizzly.async.AsyncQueueWritable;
>>>> import com.sun.grizzly.async.AsyncQueueWriteUnit;
>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.OutputWriter;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>> import java.io.IOException;
>>>> import java.net.Socket;
>>>> import java.net.SocketAddress;
>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/ContextTask.java
>>>> ===================================================================
>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/ContextTask.java
>>>> (revision 2047)
>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/ContextTask.java
>>>> (working copy)
>>>> @@ -38,7 +38,7 @@
>>>>
>>>> package com.sun.grizzly;
>>>>
>>>> -import com.sun.grizzly.util.ConcurrentLinkedQueuePool;
>>>> +import com.sun.grizzly.misc.ConcurrentLinkedQueuePool;
>>>> import java.util.concurrent.Callable;
>>>>
>>>> /**
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandlerRunner.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandlerRunner.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandlerRunner.java
>>>> (working copy)
>>>> @@ -38,9 +38,9 @@
>>>>
>>>> package com.sun.grizzly;
>>>>
>>>> -import com.sun.grizzly.util.State;
>>>> -import com.sun.grizzly.util.StateHolder;
>>>> -import com.sun.grizzly.util.StateHolder.ConditionListener;
>>>> +import com.sun.grizzly.misc.State;
>>>> +import com.sun.grizzly.misc.StateHolder;
>>>> +import com.sun.grizzly.misc.StateHolder.ConditionListener;
>>>> import java.util.concurrent.CountDownLatch;
>>>> import java.util.concurrent.TimeUnit;
>>>>
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/RoundRobinSelectorHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/RoundRobinSelectorHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/RoundRobinSelectorHandler.java
>>>> (working copy)
>>>> @@ -39,7 +39,7 @@
>>>> package com.sun.grizzly;
>>>>
>>>> import com.sun.grizzly.Controller.Protocol;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> import java.io.IOException;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableFilter.java
>>>> (working copy)
>>>> @@ -44,10 +44,10 @@
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.DefaultProtocolChain;
>>>> import com.sun.grizzly.SelectorHandler;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>> -import com.sun.grizzly.util.Utils;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment.Mode;
>>>> +import com.sun.grizzly.misc.Utils;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableContextTask.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableContextTask.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/suspendable/SuspendableContextTask.java
>>>> (working copy)
>>>> @@ -39,8 +39,8 @@
>>>>
>>>> import com.sun.grizzly.DefaultProtocolChain;
>>>> import com.sun.grizzly.SelectionKeyContextTask;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>
>>>> /**
>>>> * Simple ContextTask used to resume a {_at_link ProtocolChain} execution
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPSelectorHandler.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPSelectorHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPSelectorHandler.java
>>>> (working copy)
>>>> @@ -40,10 +40,10 @@
>>>>
>>>> import com.sun.grizzly.async.UDPAsyncQueueReader;
>>>> import com.sun.grizzly.async.UDPAsyncQueueWriter;
>>>> -import com.sun.grizzly.util.CallbackHandlerSelectionKeyAttachment;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> -import com.sun.grizzly.util.SelectionKeyOP;
>>>> -import com.sun.grizzly.util.State;
>>>> +import com.sun.grizzly.misc.CallbackHandlerSelectionKeyAttachment;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> +import com.sun.grizzly.misc.SelectionKeyOP;
>>>> +import com.sun.grizzly.misc.State;
>>>> import java.io.IOException;
>>>> import java.net.BindException;
>>>> import java.net.DatagramSocket;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectionKeyHandler.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectionKeyHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectionKeyHandler.java
>>>> (working copy)
>>>> @@ -37,7 +37,7 @@
>>>> */
>>>> package com.sun.grizzly;
>>>>
>>>> -import com.sun.grizzly.util.Copyable;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> import java.nio.channels.ClosedChannelException;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPConnectorHandler.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPConnectorHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/UDPConnectorHandler.java
>>>> (working copy)
>>>> @@ -47,8 +47,8 @@
>>>> import com.sun.grizzly.async.AsyncReadCallbackHandler;
>>>> import com.sun.grizzly.async.AsyncReadCondition;
>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> import java.io.IOException;
>>>> import java.net.SocketAddress;
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/DefaultSelectionKeyHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/DefaultSelectionKeyHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/DefaultSelectionKeyHandler.java
>>>> (working copy)
>>>> @@ -38,8 +38,8 @@
>>>>
>>>> package com.sun.grizzly;
>>>>
>>>> -import com.sun.grizzly.util.Copyable;
>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>> import java.nio.channels.ClosedChannelException;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SelectionKey;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/connectioncache/server/CacheableSelectionKeyHandler.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/connectioncache/server/CacheableSelectionKeyHandler.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/connectioncache/server/CacheableSelectionKeyHandler.java
>>>> (working copy)
>>>> @@ -41,7 +41,7 @@
>>>> import com.sun.grizzly.DefaultSelectionKeyHandler;
>>>> import
>>>> com.sun.grizzly.connectioncache.spi.transport.ConnectionCacheFactory;
>>>> import
>>>> com.sun.grizzly.connectioncache.spi.transport.InboundConnectionCache;
>>>> -import com.sun.grizzly.util.Copyable;
>>>> +import com.sun.grizzly.misc.Copyable;
>>>> import java.nio.channels.SelectableChannel;
>>>> import java.nio.channels.SelectionKey;
>>>>
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ReadFilter.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ReadFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ReadFilter.java
>>>> (working copy)
>>>> @@ -42,7 +42,7 @@
>>>> import com.sun.grizzly.Context;
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.net.SocketAddress;
>>>> import java.io.IOException;
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoAsyncWriteQueueFilter.java
>>>>
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoAsyncWriteQueueFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoAsyncWriteQueueFilter.java
>>>> (working copy)
>>>> @@ -42,8 +42,8 @@
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.IOException;
>>>> import java.net.SocketAddress;
>>>> import java.nio.ByteBuffer;
>>>> Index:
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLReadFilter.java
>>>> ===================================================================
>>>> ---
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLReadFilter.java
>>>> (revision 2047)
>>>> +++
>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLReadFilter.java
>>>> (working copy)
>>>> @@ -42,11 +42,11 @@
>>>> import com.sun.grizzly.Controller;
>>>> import com.sun.grizzly.ProtocolFilter;
>>>> import com.sun.grizzly.SSLConfig;
>>>> -import com.sun.grizzly.util.InputReader;
>>>> -import com.sun.grizzly.util.SSLUtils;
>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>> -import com.sun.grizzly.util.WorkerThread;
>>>> +import com.sun.grizzly.misc.InputReader;
>>>> +import com.sun.grizzly.misc.SSLUtils;
>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>> +import com.sun.grizzly.misc.ThreadAttachment.Mode;
>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>> import java.io.EOFException;
>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoAsyncWriteQueueFilter.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoAsyncWriteQueueFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoAsyncWriteQueueFilter.java
>>>>> (working copy)
>>>>> @@ -42,9 +42,9 @@
>>>>> import com.sun.grizzly.ProtocolFilter;
>>>>> import com.sun.grizzly.async.AsyncQueueDataProcessor;
>>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.ByteBufferFactory;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.ByteBufferFactory;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> import javax.net.ssl.SSLEngine;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ParserProtocolFilter.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ParserProtocolFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/ParserProtocolFilter.java
>>>>> (working copy)
>>>>> @@ -43,14 +43,14 @@
>>>>> import com.sun.grizzly.ProtocolChainInstruction;
>>>>> import com.sun.grizzly.ProtocolParser;
>>>>> import com.sun.grizzly.SSLConfig;
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> import java.nio.channels.SelectionKey;
>>>>>
>>>>> -import com.sun.grizzly.util.ThreadAttachment;
>>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>>> +import com.sun.grizzly.misc.ThreadAttachment;
>>>>> +import com.sun.grizzly.misc.ThreadAttachment.Mode;
>>>>>
>>>>> /**
>>>>> * Simple ProtocolFilter implementation which read the available bytes
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoFilter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/EchoFilter.java
>>>>> (working copy)
>>>>> @@ -41,8 +41,8 @@
>>>>> import com.sun.grizzly.Context;
>>>>> import com.sun.grizzly.Controller;
>>>>> import com.sun.grizzly.ProtocolFilter;
>>>>> -import com.sun.grizzly.util.OutputWriter;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoFilter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/SSLEchoFilter.java
>>>>> (working copy)
>>>>> @@ -40,8 +40,8 @@
>>>>>
>>>>> import com.sun.grizzly.Context;
>>>>> import com.sun.grizzly.ProtocolFilter;
>>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> import java.nio.channels.SelectableChannel;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/LogFilter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/LogFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/LogFilter.java
>>>>> (working copy)
>>>>> @@ -39,7 +39,7 @@
>>>>>
>>>>> import com.sun.grizzly.Context;
>>>>> import com.sun.grizzly.ProtocolFilter;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPWriteFilter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPWriteFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPWriteFilter.java
>>>>> (working copy)
>>>>> @@ -41,8 +41,8 @@
>>>>> import com.sun.grizzly.Context;
>>>>> import com.sun.grizzly.Controller;
>>>>> import com.sun.grizzly.ProtocolFilter;
>>>>> -import com.sun.grizzly.util.OutputWriter;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPReadFilter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPReadFilter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/filter/UDPReadFilter.java
>>>>> (working copy)
>>>>> @@ -39,7 +39,7 @@
>>>>> package com.sun.grizzly.filter;
>>>>>
>>>>> import com.sun.grizzly.Context;
>>>>> -import com.sun.grizzly.util.WorkerThread;
>>>>> +import com.sun.grizzly.misc.WorkerThread;
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SSLConnectorHandler.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SSLConnectorHandler.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SSLConnectorHandler.java
>>>>> (working copy)
>>>>> @@ -46,10 +46,10 @@
>>>>> import com.sun.grizzly.async.AsyncReadCondition;
>>>>> import com.sun.grizzly.async.AsyncWriteCallbackHandler;
>>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>>> -import com.sun.grizzly.util.OutputWriter;
>>>>> -import com.sun.grizzly.util.SSLOutputWriter;
>>>>> -import com.sun.grizzly.util.SSLUtils;
>>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>>> +import com.sun.grizzly.misc.OutputWriter;
>>>>> +import com.sun.grizzly.misc.SSLOutputWriter;
>>>>> +import com.sun.grizzly.misc.SSLUtils;
>>>>> import java.io.EOFException;
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ObjectPool.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ObjectPool.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ObjectPool.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> /**
>>>>> * Basic interface for object pool implementations
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/misc/Utils.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/misc/Utils.java
>>>>> (revision 0)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/misc/Utils.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThread.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThread.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThread.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.ByteBuffer;
>>>>> import javax.net.ssl.SSLEngine;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/AttributeHolder.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/AttributeHolder.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/AttributeHolder.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.util.Map;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StreamAlgorithm.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StreamAlgorithm.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StreamAlgorithm.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.ByteBuffer;
>>>>> import java.nio.channels.SocketChannel;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachment.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachment.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.channels.SelectionKey;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConcurrentLinkedQueuePool.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConcurrentLinkedQueuePool.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConcurrentLinkedQueuePool.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.util.concurrent.ConcurrentLinkedQueue;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SupportStateHolder.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SupportStateHolder.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SupportStateHolder.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> /**
>>>>> * Interface implementors support {_at_link StateHolder} for state control
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLOutputWriter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLOutputWriter.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLOutputWriter.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.IOException;
>>>>> import java.nio.ByteBuffer;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ThreadAttachment.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ThreadAttachment.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ThreadAttachment.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.ByteBuffer;
>>>>> import java.nio.channels.SelectionKey;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLUtils.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLUtils.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SSLUtils.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Controller;
>>>>> import java.io.ByteArrayInputStream;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/CallbackHandlerSelectionKeyAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/CallbackHandlerSelectionKeyAttachment.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/CallbackHandlerSelectionKeyAttachment.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.CallbackHandler;
>>>>> import java.nio.channels.SelectionKey;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ExtendedThreadPool.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ExtendedThreadPool.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ExtendedThreadPool.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.util.concurrent.BlockingQueue;
>>>>> import java.util.concurrent.TimeUnit;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConnectionCloseHandler.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConnectionCloseHandler.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ConnectionCloseHandler.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Handler;
>>>>> import java.nio.channels.SelectionKey;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferFactory.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferFactory.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferFactory.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.ByteBuffer;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyOP.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyOP.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyOP.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.CallbackHandler;
>>>>> import java.net.SocketAddress;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/misc/Copyable.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/Copyable.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/Copyable.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> /**
>>>>> * Copyable objects are able to copy their content to
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/Interceptor.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/Interceptor.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/Interceptor.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.IOException;
>>>>> import java.nio.channels.Channel;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyActionAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyActionAttachment.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyActionAttachment.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.channels.SelectionKey;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/DefaultThreadPool.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/DefaultThreadPool.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/DefaultThreadPool.java
>>>>> (working copy)
>>>>> @@ -36,10 +36,10 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Controller;
>>>>> -import com.sun.grizzly.util.ByteBufferFactory.ByteBufferType;
>>>>> +import com.sun.grizzly.misc.ByteBufferFactory.ByteBufferType;
>>>>> import java.util.concurrent.ExecutorService;
>>>>> import java.util.concurrent.LinkedBlockingQueue;
>>>>> import java.util.concurrent.ThreadFactory;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectorFactory.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectorFactory.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectorFactory.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Controller;
>>>>> import java.io.IOException;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachmentWrapper.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachmentWrapper.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/SelectionKeyAttachmentWrapper.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.nio.channels.SelectionKey;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/LoggingFormatter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/LoggingFormatter.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/LoggingFormatter.java
>>>>> (working copy)
>>>>> @@ -33,7 +33,7 @@
>>>>> * only if the new code is made subject to such option by the copyright
>>>>> * holder.
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.PrintWriter;
>>>>> import java.io.StringWriter;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StateHolder.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StateHolder.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/StateHolder.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Controller;
>>>>> import java.util.Iterator;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/misc/State.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/misc/State.java
>>>>> (revision 0)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/misc/State.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> /**
>>>>> * State enum
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/misc/Cloner.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/misc/Cloner.java
>>>>> (revision 0)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/misc/Cloner.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import com.sun.grizzly.Controller;
>>>>> import java.lang.reflect.Constructor;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/InputReader.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/InputReader.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/InputReader.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.InputStream;
>>>>> import java.io.IOException;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadImpl.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadImpl.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadImpl.java
>>>>> (working copy)
>>>>> @@ -35,11 +35,11 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.util.concurrent.Callable;
>>>>> -import com.sun.grizzly.util.ByteBufferFactory.ByteBufferType;
>>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>>> +import com.sun.grizzly.misc.ByteBufferFactory.ByteBufferType;
>>>>> +import com.sun.grizzly.misc.ThreadAttachment.Mode;
>>>>>
>>>>> /**
>>>>> * Simple worker thread used for processing HTTP requests. All
>>>>> threads are
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferInputStream.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferInputStream.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/ByteBufferInputStream.java
>>>>> (working copy)
>>>>> @@ -35,7 +35,7 @@
>>>>> * holder.
>>>>> *
>>>>> */
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> /**
>>>>> * This class implement IO stream operations on top of a {_at_link
>>>>> ByteBuffer}.
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadFactory.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadFactory.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/WorkerThreadFactory.java
>>>>> (working copy)
>>>>> @@ -21,7 +21,7 @@
>>>>> * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.util.concurrent.ThreadFactory;
>>>>>
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/OutputWriter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/OutputWriter.java
>>>>> (revision 0)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/misc/OutputWriter.java
>>>>> (working copy)
>>>>> @@ -36,7 +36,7 @@
>>>>> *
>>>>> */
>>>>>
>>>>> -package com.sun.grizzly.util;
>>>>> +package com.sun.grizzly.misc;
>>>>>
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandler.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandler.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/SelectorHandler.java
>>>>> (working copy)
>>>>> @@ -39,10 +39,10 @@
>>>>>
>>>>> import com.sun.grizzly.async.AsyncQueueReader;
>>>>> import com.sun.grizzly.async.AsyncQueueWriter;
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> -import com.sun.grizzly.util.State;
>>>>> -import com.sun.grizzly.util.SupportStateHolder;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> +import com.sun.grizzly.misc.State;
>>>>> +import com.sun.grizzly.misc.SupportStateHolder;
>>>>> import java.io.IOException;
>>>>> import java.nio.channels.SelectableChannel;
>>>>> import java.nio.channels.SelectionKey;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/Controller.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/Controller.java
>>>>> (revision 2047)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/Controller.java
>>>>> (working copy)
>>>>> @@ -38,14 +38,14 @@
>>>>>
>>>>> package com.sun.grizzly;
>>>>>
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.Cloner;
>>>>> -import com.sun.grizzly.util.ConcurrentLinkedQueuePool;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> -import com.sun.grizzly.util.DefaultThreadPool;
>>>>> -import com.sun.grizzly.util.State;
>>>>> -import com.sun.grizzly.util.StateHolder;
>>>>> -import com.sun.grizzly.util.SupportStateHolder;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.Cloner;
>>>>> +import com.sun.grizzly.misc.ConcurrentLinkedQueuePool;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> +import com.sun.grizzly.misc.DefaultThreadPool;
>>>>> +import com.sun.grizzly.misc.State;
>>>>> +import com.sun.grizzly.misc.StateHolder;
>>>>> +import com.sun.grizzly.misc.SupportStateHolder;
>>>>> import java.io.IOException;
>>>>> import java.nio.channels.ClosedChannelException;
>>>>> import java.nio.channels.ClosedSelectorException;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/Context.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/Context.java
>>>>> (revision 2047)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/Context.java
>>>>> (working copy)
>>>>> @@ -40,8 +40,8 @@
>>>>>
>>>>> import com.sun.grizzly.async.AsyncQueueReader;
>>>>> import com.sun.grizzly.async.AsyncQueueWritable;
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> import java.nio.channels.SelectionKey;
>>>>> import java.util.Map;
>>>>> import java.util.concurrent.ExecutorService;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPSelectorHandler.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPSelectorHandler.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/TCPSelectorHandler.java
>>>>> (working copy)
>>>>> @@ -44,14 +44,14 @@
>>>>> import com.sun.grizzly.async.TCPAsyncQueueWriter;
>>>>> import com.sun.grizzly.async.AsyncQueueWriterContextTask;
>>>>> import com.sun.grizzly.async.TCPAsyncQueueReader;
>>>>> -import com.sun.grizzly.util.CallbackHandlerSelectionKeyAttachment;
>>>>> -import com.sun.grizzly.util.Cloner;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>>> -import com.sun.grizzly.util.SelectionKeyOP;
>>>>> -import com.sun.grizzly.util.SelectionKeyOP.ConnectSelectionKeyOP;
>>>>> -import com.sun.grizzly.util.State;
>>>>> -import com.sun.grizzly.util.StateHolder;
>>>>> +import com.sun.grizzly.misc.CallbackHandlerSelectionKeyAttachment;
>>>>> +import com.sun.grizzly.misc.Cloner;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>>> +import com.sun.grizzly.misc.SelectionKeyOP;
>>>>> +import com.sun.grizzly.misc.SelectionKeyOP.ConnectSelectionKeyOP;
>>>>> +import com.sun.grizzly.misc.State;
>>>>> +import com.sun.grizzly.misc.StateHolder;
>>>>> import java.io.IOException;
>>>>> import java.net.BindException;
>>>>> import java.net.InetAddress;
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/BaseSelectionKeyHandler.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/BaseSelectionKeyHandler.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/BaseSelectionKeyHandler.java
>>>>> (working copy)
>>>>> @@ -38,10 +38,10 @@
>>>>>
>>>>> package com.sun.grizzly;
>>>>>
>>>>> -import com.sun.grizzly.util.ConnectionCloseHandler;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> -import com.sun.grizzly.util.SelectionKeyActionAttachment;
>>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>>> +import com.sun.grizzly.misc.ConnectionCloseHandler;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> +import com.sun.grizzly.misc.SelectionKeyActionAttachment;
>>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>>> import java.io.IOException;
>>>>> import java.net.Socket;
>>>>> import java.nio.channels.ClosedChannelException;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/NIOContext.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/NIOContext.java
>>>>> (revision 2047)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/NIOContext.java
>>>>> (working copy)
>>>>> @@ -48,9 +48,9 @@
>>>>> import com.sun.grizzly.async.AsyncWriteCallbackHandler;
>>>>> import com.sun.grizzly.async.AsyncQueueWriteUnit;
>>>>> import com.sun.grizzly.async.ByteBufferCloner;
>>>>> -import com.sun.grizzly.util.AttributeHolder;
>>>>> -import com.sun.grizzly.util.Copyable;
>>>>> -import com.sun.grizzly.util.SelectionKeyAttachment;
>>>>> +import com.sun.grizzly.misc.AttributeHolder;
>>>>> +import com.sun.grizzly.misc.Copyable;
>>>>> +import com.sun.grizzly.misc.SelectionKeyAttachment;
>>>>> import java.io.IOException;
>>>>> import java.net.SocketAddress;
>>>>> import java.nio.ByteBuffer;
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/util/Utils.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/util/Utils.java
>>>>> (revision 2047)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/util/Utils.java
>>>>> (working copy)
>>>>> @@ -1,248 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.io.IOException;
>>>>> -import java.nio.ByteBuffer;
>>>>> -import java.nio.channels.ReadableByteChannel;
>>>>> -import java.nio.channels.SelectableChannel;
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -import java.nio.channels.Selector;
>>>>> -
>>>>> -/**
>>>>> - * Class contains set of useful operations commonly used in the
>>>>> framework
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public class Utils {
>>>>> - /**
>>>>> - * Character translation tables.
>>>>> - */
>>>>> - private static final byte[] toLower = new byte[256];
>>>>> -
>>>>> - /**
>>>>> - * Initialize character translation and type tables.
>>>>> - */
>>>>> - static {
>>>>> - for (int i = 0; i < 256; i++) {
>>>>> - toLower[i] = (byte)i;
>>>>> - }
>>>>> -
>>>>> - for (int lc = 'a'; lc <= 'z'; lc++) {
>>>>> - int uc = lc + 'A' - 'a';
>>>>> - toLower[uc] = (byte)lc;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Method reads data from {_at_link SelectableChannel} to
>>>>> - * {_at_link ByteBuffer}. If data is not immediately available -
>>>>> channel
>>>>> - * will be reregistered on temporary {_at_link Selector} and
>>>>> wait maximum
>>>>> - * readTimeout milliseconds for data.
>>>>> - *
>>>>> - * @param channel {_at_link SelectableChannel} to read data from
>>>>> - * @param byteBuffer {_at_link ByteBuffer} to store read data to
>>>>> - * @param readTimeout maximum time in millis operation will
>>>>> wait for
>>>>> - * incoming data
>>>>> - *
>>>>> - * @return number of bytes were read
>>>>> - * @throws <code>IOException</code> if any error was occured
>>>>> during read
>>>>> - */
>>>>> - public static int readWithTemporarySelector(SelectableChannel
>>>>> channel,
>>>>> - ByteBuffer byteBuffer, long readTimeout) throws
>>>>> IOException {
>>>>> - int count = 1;
>>>>> - int byteRead = 0;
>>>>> - int preReadInputBBPos = byteBuffer.position();
>>>>> - Selector readSelector = null;
>>>>> - SelectionKey tmpKey = null;
>>>>> -
>>>>> - try {
>>>>> - ReadableByteChannel readableChannel =
>>>>> (ReadableByteChannel) channel;
>>>>> - while (count > 0){
>>>>> - count = readableChannel.read(byteBuffer);
>>>>> - if ( count > -1 )
>>>>> - byteRead += count;
>>>>> - else
>>>>> - byteRead = count;
>>>>> - }
>>>>> -
>>>>> - if (byteRead == 0 && byteBuffer.position() ==
>>>>> preReadInputBBPos) {
>>>>> - readSelector = SelectorFactory.getSelector();
>>>>> -
>>>>> - if ( readSelector == null ){
>>>>> - return 0;
>>>>> - }
>>>>> - count = 1;
>>>>> -
>>>>> - tmpKey = channel.register(readSelector,
>>>>> SelectionKey.OP_READ);
>>>>> - tmpKey.interestOps(tmpKey.interestOps() |
>>>>> SelectionKey.OP_READ);
>>>>> - int code = readSelector.select(readTimeout);
>>>>> - tmpKey.interestOps(
>>>>> - tmpKey.interestOps() & (~SelectionKey.OP_READ));
>>>>> -
>>>>> - if ( code == 0 ){
>>>>> - return 0; // Return on the main Selector and
>>>>> try again.
>>>>> - }
>>>>> -
>>>>> - while (count > 0){
>>>>> - count = readableChannel.read(byteBuffer);
>>>>> - if ( count > -1 )
>>>>> - byteRead += count;
>>>>> - else
>>>>> - byteRead = count;
>>>>> - }
>>>>> - } else if (byteRead == 0 && byteBuffer.position() !=
>>>>> preReadInputBBPos) {
>>>>> - byteRead += (byteBuffer.position() -
>>>>> preReadInputBBPos);
>>>>> - }
>>>>> - } finally {
>>>>> - if (tmpKey != null)
>>>>> - tmpKey.cancel();
>>>>> -
>>>>> - if ( readSelector != null) {
>>>>> - // Bug 6403933
>>>>> -
>>>>> SelectorFactory.selectNowAndReturnSelector(readSelector);
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - return byteRead;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the bytes contained between the startByte and the
>>>>> endByte. The ByteBuffer
>>>>> - * will be left in the state it was before invoking that
>>>>> method, meaning
>>>>> - * its position and limit will be the same.
>>>>> - *
>>>>> - * @param byteBuffer The bytes.
>>>>> - * @param startByte the first byte to look for
>>>>> - * @param endByte the second byte to look for
>>>>> - * @return The byte[] contained between startByte and endByte
>>>>> - */
>>>>> - public static byte[] extractBytes(ByteBuffer byteBuffer,
>>>>> - byte startByte, byte endByte) throws IOException{
>>>>> -
>>>>> - int curPosition = byteBuffer.position();
>>>>> - int curLimit = byteBuffer.limit();
>>>>> -
>>>>> - if (byteBuffer.position() == 0){
>>>>> - throw new IllegalStateException("Invalid state");
>>>>> - }
>>>>> -
>>>>> - byteBuffer.position(0);
>>>>> - byteBuffer.limit(curPosition);
>>>>> - int state =0;
>>>>> - int start =0;
>>>>> - int end = 0;
>>>>> - try {
>>>>> - byte c;
>>>>> -
>>>>> - // Rule b - try to determine the context-root
>>>>> - while(byteBuffer.hasRemaining()) {
>>>>> - c = byteBuffer.get();
>>>>> - switch(state) {
>>>>> - case 0: // Search for first ' '
>>>>> - if (c == startByte){
>>>>> - state = 1;
>>>>> - start = byteBuffer.position();
>>>>> - }
>>>>> - break;
>>>>> - case 1:
>>>>> - if (c == endByte){
>>>>> - end = byteBuffer.position();
>>>>> - byte[] bytes = new byte[end - start];
>>>>> - byteBuffer.position(start);
>>>>> - byteBuffer.limit(end);
>>>>> - byteBuffer.get(bytes);
>>>>> - return bytes;
>>>>> - }
>>>>> - break;
>>>>> - default:
>>>>> - throw new
>>>>> IllegalArgumentException("Unexpected state");
>>>>> - }
>>>>> - }
>>>>> - throw new IllegalStateException("Unexpected state");
>>>>> - } finally {
>>>>> - byteBuffer.limit(curLimit);
>>>>> - byteBuffer.position(curPosition);
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Specialized utility method: find a sequence of lower case
>>>>> bytes inside
>>>>> - * a ByteBuffer.
>>>>> - */
>>>>> - public static int findBytes(ByteBuffer byteBuffer, byte[] b) {
>>>>> - int curPosition = byteBuffer.position();
>>>>> - int curLimit = byteBuffer.limit();
>>>>> -
>>>>> - if (byteBuffer.position() == 0){
>>>>> - throw new IllegalStateException("Invalid state");
>>>>> - }
>>>>> -
>>>>> - byteBuffer.position(0);
>>>>> - byteBuffer.limit(curPosition);
>>>>> - try {
>>>>> - byte first = b[0];
>>>>> - int start = 0;
>>>>> - int end = curPosition;
>>>>> -
>>>>> - // Look for first char
>>>>> - int srcEnd = b.length;
>>>>> -
>>>>> - for (int i = start; i <= (end - srcEnd); i++) {
>>>>> - if ((toLower[byteBuffer.get(i) & 0xff] & 0xff) !=
>>>>> first) continue;
>>>>> - // found first char, now look for a match
>>>>> - int myPos = i+1;
>>>>> - for (int srcPos = 1; srcPos < srcEnd; ) {
>>>>> - if ((toLower[byteBuffer.get(myPos++) &
>>>>> 0xff] & 0xff) != b[srcPos++])
>>>>> - break;
>>>>> - if (srcPos == srcEnd) return i - start; //
>>>>> found it
>>>>> - }
>>>>> - }
>>>>> - return -1;
>>>>> - } finally {
>>>>> - byteBuffer.limit(curLimit);
>>>>> - byteBuffer.position(curPosition);
>>>>> - }
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ObjectPool.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ObjectPool.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ObjectPool.java
>>>>> (working copy)
>>>>> @@ -1,50 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -/**
>>>>> - * Basic interface for object pool implementations
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public interface ObjectPool<E> {
>>>>> - public E poll();
>>>>> -
>>>>> - public void offer(E object);
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThread.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThread.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThread.java
>>>>> (working copy)
>>>>> @@ -1,223 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, e lected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.ByteBuffer;
>>>>> -import javax.net.ssl.SSLEngine;
>>>>> -
>>>>> -/**
>>>>> - * Simple interface to allow the addition of <code>Thread</code>
>>>>> attributes.
>>>>> - *
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public abstract class WorkerThread extends Thread {
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link ByteBuffer} used when {_at_link Task} are executed.
>>>>> - */
>>>>> - protected ByteBuffer byteBuffer;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The encrypted ByteBuffer used for handshaking and reading
>>>>> request bytes.
>>>>> - */
>>>>> - protected ByteBuffer inputBB;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The encrypted ByteBuffer used for handshaking and writing
>>>>> response bytes.
>>>>> - */
>>>>> - protected ByteBuffer outputBB;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The{_at_link SSLEngine} used to manage the SSL over NIO request.
>>>>> - */
>>>>> - protected SSLEngine sslEngine;
>>>>> -
>>>>> - public WorkerThread() {
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(String name) {
>>>>> - super(name);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(Runnable target) {
>>>>> - super(target);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(Runnable target, String name) {
>>>>> - super(target, name);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(ThreadGroup group, String name) {
>>>>> - super(group, name);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(ThreadGroup group, Runnable target) {
>>>>> - super(group, target);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(ThreadGroup group, Runnable target, String
>>>>> name) {
>>>>> - super(group, target, name);
>>>>> - }
>>>>> -
>>>>> - public WorkerThread(ThreadGroup group, Runnable target, String
>>>>> name, long stackSize) {
>>>>> - super(group, target, name, stackSize);
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Set the {_at_link ByteBuffer} shared this thread
>>>>> - */
>>>>> - public void setByteBuffer(ByteBuffer byteBuffer){
>>>>> - this.byteBuffer = byteBuffer;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the {_at_link ByteBuffer} shared this thread
>>>>> - */
>>>>> - public ByteBuffer getByteBuffer(){
>>>>> - return byteBuffer;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the encrypted {_at_link ByteBuffer} used to handle request.
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer getInputBB(){
>>>>> - return inputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the encrypted {_at_link ByteBuffer} used to handle request.
>>>>> - * @param inputBB {_at_link ByteBuffer}
>>>>> - */
>>>>> - public void setInputBB(ByteBuffer inputBB){
>>>>> - this.inputBB = inputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the encrypted {_at_link ByteBuffer} used to handle
>>>>> response.
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer getOutputBB(){
>>>>> - return outputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the encrypted {_at_link ByteBuffer} used to handle response.
>>>>> - * @param outputBB {_at_link ByteBuffer}
>>>>> - */
>>>>> - public void setOutputBB(ByteBuffer outputBB){
>>>>> - this.outputBB = outputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the{_at_link SSLEngine}.
>>>>> - * @return{_at_link SSLEngine}
>>>>> - */
>>>>> - public SSLEngine getSSLEngine() {
>>>>> - return sslEngine;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Get the{_at_link SSLEngine}.
>>>>> - * @param sslEngine{_at_link SSLEngine}
>>>>> - */
>>>>> - public void setSSLEngine(SSLEngine sslEngine) {
>>>>> - this.sslEngine = sslEngine;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Updates Thread associated attachment according to the
>>>>> passed mode.
>>>>> - *
>>>>> - * @return updated ThreadAttachment
>>>>> - */
>>>>> - public abstract ThreadAttachment updateAttachment(int mode);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Get the current set of attributes (state) associated with
>>>>> this instance.
>>>>> - * Unlike detach(), this method doesn't clear the WorkerThread
>>>>> attributes.
>>>>> - *
>>>>> - * @return the Thread associated ThreadAttachment
>>>>> - */
>>>>> - public abstract ThreadAttachment getAttachment();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Detach the current set of attributes (state) associated
>>>>> with this instance.
>>>>> - * Method will re-create all the ByteBuffers associated with
>>>>> this thread.
>>>>> - *
>>>>> - * @return a new ThreadAttachment
>>>>> - */
>>>>> - public abstract ThreadAttachment detach();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Attach the ThreadAttachment to this instance. This will
>>>>> configure this
>>>>> - * Thread attributes like ByteBuffer, SSLEngine, etc.
>>>>> - * @param ThreadAttachment the attachment.
>>>>> - */
>>>>> - public abstract void attach(ThreadAttachment threadAttachment);
>>>>> -
>>>>> - protected void reset() {
>>>>> - if (byteBuffer != null) {
>>>>> - byteBuffer.clear();
>>>>> - }
>>>>> -
>>>>> - if (inputBB != null) {
>>>>> - inputBB.clear();
>>>>> - }
>>>>> -
>>>>> - if (outputBB != null) {
>>>>> - outputBB.clear();
>>>>> - }
>>>>> -
>>>>> - sslEngine = null;
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/AttributeHolder.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/AttributeHolder.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/AttributeHolder.java
>>>>> (working copy)
>>>>> @@ -1,94 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.util.Map;
>>>>> -
>>>>> -/**
>>>>> - * Interface declares common functionality for objects, which
>>>>> could have
>>>>> - * associated attributes.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public interface AttributeHolder {
>>>>> - /**
>>>>> - * Remove a name/value object.
>>>>> - * @param name - name of an attribute
>>>>> - * @return attribute which has been removed
>>>>> - */
>>>>> - public Object removeAttribute(String name);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set a name/value object.
>>>>> - * @param name - name of an attribute
>>>>> - * @param value - value of named attribute
>>>>> - */
>>>>> - public void setAttribute(String name, Object value);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set a {_at_link Map} of attribute name/value pairs.
>>>>> - * Old {_at_link AttributeHolder} values will not be available.
>>>>> - * Later changes of this {_at_link Map} will lead to changes to
>>>>> the current
>>>>> - * {_at_link AttributeHolder}.
>>>>> - *
>>>>> - * @param attributes - map of name/value pairs
>>>>> - */
>>>>> - public void setAttributes(Map<String, Object> attributes);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return an object based on a name.
>>>>> - * @param name - name of an attribute
>>>>> - * @return - attribute value for the <tt>name</tt>, null if
>>>>> <tt>name</tt>
>>>>> - * does not exist in <tt>attributes</tt>
>>>>> - */
>>>>> - public Object getAttribute(String name);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return a {_at_link Map} of attribute name/value pairs.
>>>>> - * Updates, performed on the returned {_at_link Map} will be
>>>>> reflected in
>>>>> - * this {_at_link AttributeHolder}
>>>>> - *
>>>>> - * @return - {_at_link Map} of attribute name/value pairs
>>>>> - */
>>>>> - public Map<String, Object> getAttributes();
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StreamAlgorithm.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StreamAlgorithm.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StreamAlgorithm.java
>>>>> (working copy)
>>>>> @@ -1,147 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.ByteBuffer;
>>>>> -import java.nio.channels.SocketChannel;
>>>>> -/**
>>>>> - * Generic parsing interface that can be used to implement protocol
>>>>> - * specific logic parsing.
>>>>> - *
>>>>> - * @deprecated Use the ProtocolParser instead.
>>>>> - *
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public interface StreamAlgorithm<E>{
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the stream content-length. If the content-length
>>>>> wasn't parsed,
>>>>> - * return -1.
>>>>> - * @return content length or -1 if content length was not parsed
>>>>> - */
>>>>> - public int contentLength();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the stream header length. The header length is the
>>>>> length between
>>>>> - * the start of the stream and the first occurance of
>>>>> character '\r\n' .
>>>>> - * @return header length
>>>>> - */
>>>>> - public int headerLength();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Allocate a {_at_link ByteBuffer}
>>>>> - * @param useDirect allocate a direct {_at_link ByteBuffer}.
>>>>> - * @param useView allocate a view {_at_link ByteBuffer}.
>>>>> - * @param size the size of the newly created {_at_link ByteBuffer}.
>>>>> - * @return a new {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer allocate(boolean useDirect, boolean useView,
>>>>> int size);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Before parsing the bytes, initialize and prepare the algorithm.
>>>>> - * @param byteBuffer the {_at_link ByteBuffer} used by this algorithm
>>>>> - * @return {_at_link ByteBuffer} used by this algorithm
>>>>> - */
>>>>> - public ByteBuffer preParse(ByteBuffer byteBuffer);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Parse the {_at_link ByteBuffer} and try to determine if the bytes
>>>>> - * stream has been fully read from the {_at_link SocketChannel}.
>>>>> - * @param byteBuffer the bytes read.
>>>>> - * @return true if the algorithm determines the end of the stream.
>>>>> - */
>>>>> - public boolean parse(ByteBuffer byteBuffer);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * After parsing the bytes, post process the {_at_link ByteBuffer}
>>>>> - * @param byteBuffer the {_at_link ByteBuffer} used by this algorithm
>>>>> - * @return {_at_link ByteBuffer} used by this algorithm
>>>>> - */
>>>>> - public ByteBuffer postParse(ByteBuffer byteBuffer);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Recycle the algorithm.
>>>>> - */
>>>>> - public void recycle();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Rollback the {_at_link ByteBuffer} to its previous state in case
>>>>> - * an error as occured.
>>>>> - * @param byteBuffer
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer rollbackParseState(ByteBuffer byteBuffer);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link Interceptor} associated with this algorithm.
>>>>> - * @return {_at_link Interceptor}
>>>>> - */
>>>>> - public Interceptor getHandler();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the {_at_link Channel} used by this algorithm
>>>>> - * @param channek set {_at_link Channel}
>>>>> - */
>>>>> - public void setChannel(E channel);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the <code>port</code> this algorithm is used.
>>>>> - * @param port port number
>>>>> - */
>>>>> - public void setPort(int port);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the port
>>>>> - * @return port number being used
>>>>> - */
>>>>> - public int getPort();
>>>>> -
>>>>> -}
>>>>> -
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachment.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachment.java
>>>>> (working copy)
>>>>> @@ -1,72 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -
>>>>> -/**
>>>>> - * Basic class for all SelectionKey attachments.
>>>>> - * Custom attachments should be inherited from it.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public abstract class SelectionKeyAttachment {
>>>>> - private Long timeout;
>>>>> -
>>>>> - public static Object getAttachment(SelectionKey key) {
>>>>> - Object attachment = key.attachment();
>>>>> - if (attachment instanceof SelectionKeyAttachmentWrapper) {
>>>>> - return ((SelectionKeyAttachmentWrapper)
>>>>> attachment).getAttachment();
>>>>> - }
>>>>> -
>>>>> - return attachment;
>>>>> - }
>>>>> -
>>>>> - public Long getTimeout() {
>>>>> - return timeout;
>>>>> - }
>>>>> -
>>>>> - public void setTimeout(Long timeout) {
>>>>> - this.timeout = timeout;
>>>>> - }
>>>>> -
>>>>> - public void release(SelectionKey selectionKey) {
>>>>> - timeout = null;
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConcurrentLinkedQueuePool.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConcurrentLinkedQueuePool.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConcurrentLinkedQueuePool.java
>>>>> (working copy)
>>>>> @@ -1,75 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at glassfish/bootstrap/leg
>>>>> al/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.util.concurrent.ConcurrentLinkedQueue;
>>>>> -
>>>>> -/**
>>>>> - * <code>ObjectPool</code> implementation based on {_at_link
>>>>> ConcurrentLinkedQueue}
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public abstract class ConcurrentLinkedQueuePool<E> implements
>>>>> ObjectPool<E> {
>>>>> - private volatile ConcurrentLinkedQueue<E> pool;
>>>>> -
>>>>> - public abstract E newInstance();
>>>>> -
>>>>> - public E poll() {
>>>>> - if (pool == null) {
>>>>> - synchronized(this) {
>>>>> - if (pool == null) {
>>>>> - pool = new ConcurrentLinkedQueue<E>();
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - E object = pool.poll();
>>>>> - if (object == null) {
>>>>> - object = newInstance();
>>>>> - }
>>>>> -
>>>>> - return object;
>>>>> - }
>>>>> -
>>>>> - public void offer(E object) {
>>>>> - if (pool != null) {
>>>>> - pool.offer(object);
>>>>> - }
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SupportStateHolder.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SupportStateHolder.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SupportStateHolder.java
>>>>> (working copy)
>>>>> @@ -1,52 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -/**
>>>>> - * Interface implementors support {_at_link StateHolder} for state
>>>>> control
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public interface SupportStateHolder<E> {
>>>>> - /**
>>>>> - * Gets {_at_link StateHolder} for this object
>>>>> - * @return {_at_link StateHolder}
>>>>> - */
>>>>> - public StateHolder<E> getStateHolder();
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SSLOutputWriter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SSLOutputWriter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SSLOutputWriter.java
>>>>> (working copy)
>>>>> @@ -1,106 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.io.IOException;
>>>>> -import java.nio.ByteBuffer;
>>>>> -import java.nio.channels.SelectableChannel;
>>>>> -import javax.net.ssl.SSLEngine;
>>>>> -import javax.net.ssl.SSLEngineResult;
>>>>> -import javax.net.ssl.SSLEngineResult.HandshakeStatus;
>>>>> -
>>>>> -/**
>>>>> - * SSL over NIO utility to encrypt {_at_link ByteBuffer} and flush them.
>>>>> - * All the SSLEngine operations are delegated to class {_at_link
>>>>> SSLUtils}
>>>>> - *
>>>>> - * @author Jeanfrancois Arcand
>>>>> - */
>>>>> -public final class SSLOutputWriter{
>>>>> -
>>>>> - /**
>>>>> - * Encrypt the response and flush it using {_at_link OutputWriter}
>>>>> - * @param channel {_at_link SelectableChannel} to flush
>>>>> - * @param bb {_at_link ByteBuffer}
>>>>> - * @return number of bytes written
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public static long flushChannel(SelectableChannel channel,
>>>>> ByteBuffer bb)
>>>>> - throws IOException{
>>>>> -
>>>>> - WorkerThread workerThread =
>>>>> (WorkerThread)Thread.currentThread();
>>>>> - SSLEngine sslEngine = workerThread.getSSLEngine();
>>>>> - ByteBuffer outputBB = workerThread.getOutputBB();
>>>>> - return flushChannel(channel,bb,outputBB,sslEngine);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Encrypt the response and flush it using {_at_link OutputWriter}
>>>>> - * @param channel {_at_link SelectableChannel} to flush
>>>>> - * @param bb input {_at_link ByteBuffer}
>>>>> - * @param outputBB output {_at_link ByteBuffer}
>>>>> - * @param sslEngine {_at_link SSLEngine}
>>>>> - * @return number of bytes written
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public static long flushChannel(SelectableChannel channel,
>>>>> ByteBuffer bb,
>>>>> - ByteBuffer outputBB, SSLEngine sslEngine) throws
>>>>> IOException{
>>>>> -
>>>>> - long nWrite = 0;
>>>>> - while (bb.hasRemaining()) {
>>>>> - SSLEngineResult result =
>>>>> SSLUtils.wrap(bb,outputBB,sslEngine);
>>>>> - switch (result.getStatus()) {
>>>>> - case OK:
>>>>> - if (result.getHandshakeStatus() ==
>>>>> HandshakeStatus.NEED_TASK) {
>>>>> - SSLUtils.executeDelegatedTask(sslEngine);
>>>>> - }
>>>>> - break;
>>>>> -
>>>>> - default:
>>>>> - throw new IOException("SSLOutputWriter: " +
>>>>> result.getStatus());
>>>>> - }
>>>>> -
>>>>> - if (outputBB.hasRemaining()) {
>>>>> - nWrite += OutputWriter.flushChannel(channel,outputBB);
>>>>> - }
>>>>> - }
>>>>> - outputBB.clear();
>>>>> - return nWrite;
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ThreadAttachment.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ThreadAttachment.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ThreadAttachment.java
>>>>> (working copy)
>>>>> @@ -1,286 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.ByteBuffer;
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -import java.util.HashMap;
>>>>> -import java.util.Map;
>>>>> -import java.util.concurrent.locks.ReentrantLock;
>>>>> -import javax.net.ssl.SSLEngine;
>>>>> -
>>>>> -/**
>>>>> - * This object represent the state of a {_at_link WorkerThread}. This
>>>>> include
>>>>> - * the ByteBuffer binded to the WorkerThread, application data etc.
>>>>> - *
>>>>> - * @author Jeanfrancois Arcand
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class ThreadAttachment extends SelectionKeyActionAttachment
>>>>> - implements AttributeHolder {
>>>>> -
>>>>> - public static class Mode {
>>>>> - public static int ATTRIBUTES_ONLY = 0;
>>>>> - public static int BYTE_BUFFER = 2;
>>>>> - public static int INPUT_BB = 4;
>>>>> - public static int OUTPUT_BB = 8;
>>>>> - public static int SECURE_BUFFERS = 12;
>>>>> - public static int SSL_ENGINE = 16;
>>>>> - public static int SSL_ARTIFACTS = 28;
>>>>> - public static int STORE_ALL = 31;
>>>>> - };
>>>>> -
>>>>> - private ReentrantLock threadLock = new ReentrantLock();
>>>>> -
>>>>> - private String threadId;
>>>>> -
>>>>> -
>>>>> - private Map<String, Object> attributes;
>>>>> -
>>>>> -
>>>>> - private ByteBuffer byteBuffer;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The encrypted ByteBuffer used for handshaking and reading
>>>>> request bytes.
>>>>> - */
>>>>> - private ByteBuffer inputBB;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The encrypted ByteBuffer used for handshaking and writing
>>>>> response bytes.
>>>>> - */
>>>>> - private ByteBuffer outputBB;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The{_at_link SSLEngine} used to manage the SSL over NIO request.
>>>>> - */
>>>>> - private SSLEngine sslEngine;
>>>>> -
>>>>> - /**
>>>>> - * ThreadAttachment store mode
>>>>> - */
>>>>> - private int mode;
>>>>> -
>>>>> -
>>>>> - public ThreadAttachment(){
>>>>> - attributes = new HashMap<String,Object>();
>>>>> - }
>>>>> -
>>>>> - public int getMode() {
>>>>> - return mode;
>>>>> - }
>>>>> -
>>>>> - public void setMode(int mode) {
>>>>> - this.mode = mode;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - public void setAttribute(String key, Object value){
>>>>> - attributes.put(key,value);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - public Object getAttribute(String key){
>>>>> - return attributes.get(key);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - public Object removeAttribute(String key){
>>>>> - return attributes.remove(key);
>>>>> - }
>>>>> -
>>>>> - public void setAttributes(Map<String, Object> attributes) {
>>>>> - this.attributes = attributes;
>>>>> - }
>>>>> -
>>>>> - public Map<String, Object> getAttributes() {
>>>>> - return attributes;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Set the {_at_link ByteBuffer} shared this thread
>>>>> - */
>>>>> - public void setByteBuffer(ByteBuffer byteBuffer){
>>>>> - this.byteBuffer = byteBuffer;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the {_at_link ByteBuffer} shared this thread
>>>>> - */
>>>>> - public ByteBuffer getByteBuffer(){
>>>>> - return byteBuffer;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the encrypted {_at_link ByteBuffer} used to handle request.
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer getInputBB(){
>>>>> - return inputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the encrypted {_at_link ByteBuffer} used to handle request.
>>>>> - * @param inputBB {_at_link ByteBuffer}
>>>>> - */
>>>>> - public void setInputBB(ByteBuffer inputBB){
>>>>> - this.inputBB = inputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the encrypted {_at_link ByteBuffer} used to handle
>>>>> response.
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public ByteBuffer getOutputBB(){
>>>>> - return outputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the encrypted {_at_link ByteBuffer} used to handle response.
>>>>> - * @param outputBB {_at_link ByteBuffer}
>>>>> - */
>>>>> - public void setOutputBB(ByteBuffer outputBB){
>>>>> - this.outputBB = outputBB;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the{_at_link SSLEngine}.
>>>>> - * @return{_at_link SSLEngine}
>>>>> - */
>>>>> - public SSLEngine getSSLEngine() {
>>>>> - return sslEngine;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Get the{_at_link SSLEngine}.
>>>>> - * @param sslEngine{_at_link SSLEngine}
>>>>> - */
>>>>> - public void setSSLEngine(SSLEngine sslEngine) {
>>>>> - this.sslEngine = sslEngine;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the name of the Thread on which this instance is binded.
>>>>> - */
>>>>> - public String getThreadId() {
>>>>> - return threadId;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the Thread's name on which this instance is binded.
>>>>> - */
>>>>> - public void setThreadId(String threadId) {
>>>>> - this.threadId = threadId;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Associates ThreadAttachment with the current thread
>>>>> - */
>>>>> - public void associate() {
>>>>> - if (!threadLock.isHeldByCurrentThread()) {
>>>>> - threadLock.lock();
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Releases ThreadAttachment association with the current thread
>>>>> - */
>>>>> - public void deassociate() {
>>>>> - if (threadLock.isHeldByCurrentThread()) {
>>>>> - threadLock.unlock();
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * SelectionKey attachment processing
>>>>> - * @param selectionKey
>>>>> - */
>>>>> - public void process(SelectionKey selectionKey) {
>>>>> - ((WorkerThread) Thread.currentThread()).attach(this);
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * SelectionKey attachment postProcessing
>>>>> - * @param selectionKey
>>>>> - */
>>>>> - public void postProcess(SelectionKey selectionKey) {
>>>>> - ((WorkerThread) Thread.currentThread()).detach();
>>>>> - }
>>>>> -
>>>>> - public void reset() {
>>>>> - mode = Mode.ATTRIBUTES_ONLY;
>>>>> - byteBuffer = null;
>>>>> - sslEngine = null;
>>>>> - inputBB = null;
>>>>> - outputBB = null;
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public void release(SelectionKey selectionKey) {
>>>>> - attributes.clear();
>>>>> - reset();
>>>>> -
>>>>> - deassociate();
>>>>> - super.release(selectionKey);
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public String toString() {
>>>>> - StringBuilder sb = new StringBuilder(256);
>>>>> - sb.append("ThreadAttachment[mode=").append(mode);
>>>>> - sb.append(", threadId=").append(threadId);
>>>>> - sb.append(", byteBuffer=").append(byteBuffer);
>>>>> - sb.append(", sslEngine=").append(sslEngine);
>>>>> - sb.append(", inputBB=").append(inputBB);
>>>>> - sb.append(", outputBB=").append(outputBB);
>>>>> - sb.append(", attributes=").append(attributes);
>>>>> - sb.append(']');
>>>>> - return sb.toString();
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ExtendedThreadPool.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ExtendedThreadPool.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ExtendedThreadPool.java
>>>>> (working co py)
>>>>> @@ -1,189 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.util.concurrent.BlockingQueue;
>>>>> -import java.util.concurrent.TimeUnit;
>>>>> -
>>>>> -/**
>>>>> - * Thread pool, from which it's possible to gather statistics
>>>>> information,
>>>>> - * and finer control its execution.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public interface ExtendedThreadPool {
>>>>> -
>>>>> - /**
>>>>> - * Returns the approximate number of threads that are actively
>>>>> - * executing tasks.
>>>>> - *
>>>>> - * @return the number of threads
>>>>> - */
>>>>> - public int getActiveCount();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Returns the approximate total number of tasks that have been
>>>>> - * scheduled for execution. Because the states of tasks and
>>>>> - * threads may change dynamically during computation, the returned
>>>>> - * value is only an approximation, but one that does not ever
>>>>> - * decrease across successive calls.
>>>>> - *
>>>>> - * @return the number of tasks
>>>>> - */
>>>>> - public long getTaskCount();
>>>>> -
>>>>> - /**
>>>>> - * Returns the approximate total number of tasks that have
>>>>> - * completed execution. Because the states of tasks and threads
>>>>> - * may change dynamically during computation, the returned value
>>>>> - * is only an approximation, but one that does not ever decrease
>>>>> - * across successive calls.
>>>>> - *
>>>>> - * @return the number of tasks
>>>>> - */
>>>>> - public long getCompletedTaskCount();
>>>>> -
>>>>> - /**
>>>>> - * Returns the core number of threads.
>>>>> - *
>>>>> - * @return the core number of threads
>>>>> - * @see #setCorePoolSize
>>>>> - */
>>>>> - public int getCorePoolSize();
>>>>> -
>>>>> - /**
>>>>> - * Sets the core number of threads. This overrides any value set
>>>>> - * in the constructor. If the new value is smaller than the
>>>>> - * current value, excess existing threads will be terminated when
>>>>> - * they next become idle. If larger, new threads will, if needed,
>>>>> - * be started to execute any queued tasks.
>>>>> - *
>>>>> - * @param corePoolSize the new core size
>>>>> - * @throws IllegalArgumentException if <tt>corePoolSize</tt>
>>>>> - * less than zero
>>>>> - * @see #getCorePoolSize
>>>>> - */
>>>>> - public void setCorePoolSize(int corePoolSize);
>>>>> -
>>>>> - /**
>>>>> - * Returns the largest number of threads that have ever
>>>>> - * simultaneously been in the pool.
>>>>> - *
>>>>> - * @return the number of threads
>>>>> - */
>>>>> - public int getLargestPoolSize();
>>>>> -
>>>>> - /**
>>>>> - * Returns the current number of threads in the pool.
>>>>> - *
>>>>> - * @return the number of threads
>>>>> - */
>>>>> - public int getPoolSize();
>>>>> -
>>>>> - /**
>>>>> - * Returns the task queue used by this executor. Access to the
>>>>> - * task queue is intended primarily for debugging and monitoring.
>>>>> - * This queue may be in active use. Retrieving the task queue
>>>>> - * does not prevent queued tasks from executing.
>>>>> - *
>>>>> - * @return the task queue
>>>>> - */
>>>>> - public BlockingQueue<Runnable> getQueue();
>>>>> -
>>>>> - /**
>>>>> - * Returns the number of tasks, which are currently waiting in
>>>>> the queue.
>>>>> - *
>>>>> - * @return the number of tasks, which are currently waiting in
>>>>> the queue.
>>>>> - */
>>>>> - public int getQueueSize();
>>>>> -
>>>>> - /**
>>>>> - * Returns the thread keep-alive time, which is the amount of time
>>>>> - * which threads in excess of the core pool size may remain
>>>>> - * idle before being terminated.
>>>>> - *
>>>>> - * @param unit the desired time unit of the result
>>>>> - * @return the time limit
>>>>> - * @see #setKeepAliveTime
>>>>> - */
>>>>> - public long getKeepAliveTime(TimeUnit unit);
>>>>> -
>>>>> - /**
>>>>> - * Sets the time limit for which threads may remain idle before
>>>>> - * being terminated. If there are more than the core number of
>>>>> - * threads currently in the pool, after waiting this amount of
>>>>> - * time without processing a task, excess threads will be
>>>>> - * terminated. This overrides any value set in the constructor.
>>>>> - * @param time the time to wait. A time value of zero will cause
>>>>> - * excess threads to terminate immediately after executing tasks.
>>>>> - * @param unit the time unit of the time argument
>>>>> - * @throws IllegalArgumentException if time less than zero
>>>>> - * @see #getKeepAliveTime
>>>>> - */
>>>>> - public void setKeepAliveTime(long time, TimeUnit unit);
>>>>> -
>>>>> - /**
>>>>> - * Returns the maximum allowed number of threads.
>>>>> - *
>>>>> - * @return the maximum allowed number of threads
>>>>> - * @see #setMaximumPoolSize
>>>>> - */
>>>>> - public int getMaximumPoolSize();
>>>>> -
>>>>> - /**
>>>>> - * Sets the maximum allowed number of threads. This overrides any
>>>>> - * value set in the constructor. If the new value is smaller than
>>>>> - * the current value, excess existing threads will be
>>>>> - * terminated when they next become idle.
>>>>> - *
>>>>> - * @param maximumPoolSize the new maximum
>>>>> - * @throws IllegalArgumentException if maximumPoolSize less
>>>>> than zero or
>>>>> - * the {_at_link #getCorePoolSize core pool size}
>>>>> - * @see #getMaximumPoolSize
>>>>> - */
>>>>> - public void setMaximumPoolSize(int maximumPoolSize);
>>>>> -
>>>>> - public int getMaxQueuedTasksCount();
>>>>> -
>>>>> - public void setMaxQueuedTasksCount(int maxTasksCount);
>>>>> -
>>>>> - public String getName();
>>>>> -
>>>>> - public void setName(String name);
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/CallbackHandlerSelectionKeyAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/CallbackHandlerSelectionKeyAttachment.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/CallbackHandlerSelectionKeyAttachment.java
>>>>> (working copy)
>>>>> @@ -1,101 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.CallbackHandler;
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -import java.util.concurrent.atomic.AtomicReference;
>>>>> -
>>>>> -/**
>>>>> - * {_at_link SelectionKey} attachment, which wraps {_at_link
>>>>> CallbackHandler}
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class CallbackHandlerSelectionKeyAttachment extends
>>>>> SelectionKeyAttachmentWrapper<CallbackHandler> {
>>>>> - private static
>>>>> ConcurrentLinkedQueuePool<CallbackHandlerSelectionKeyAttachment> pool =
>>>>> - new
>>>>> ConcurrentLinkedQueuePool<CallbackHandlerSelectionKeyAttachment>() {
>>>>> -
>>>>> - @Override
>>>>> - public CallbackHandlerSelectionKeyAttachment
>>>>> newInstance() {
>>>>> - return new
>>>>> CallbackHandlerSelectionKeyAttachment();
>>>>> - }
>>>>> - };
>>>>> -
>>>>> - // Is used for key pooling
>>>>> - private AtomicReference<SelectionKey> associatedKey = new
>>>>> AtomicReference<SelectionKey>();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Creates the {_at_link CallbackHandler} to the {_at_link SelectionKey}
>>>>> - * CallbackHandler will not be attached directly, but wrapped with
>>>>> - * <code>CallbackHandlerSelectionKeyAttachment</code>
>>>>> - */
>>>>> - public static CallbackHandlerSelectionKeyAttachment create(
>>>>> - CallbackHandler callbackHandler) {
>>>>> - CallbackHandlerSelectionKeyAttachment attachment =
>>>>> pool.poll();
>>>>> -
>>>>> - attachment.setAttachment(callbackHandler);
>>>>> - return attachment;
>>>>> - }
>>>>> -
>>>>> - private CallbackHandlerSelectionKeyAttachment() {
>>>>> - }
>>>>> -
>>>>> - public void associateKey(SelectionKey selectionKey) {
>>>>> - associatedKey.set(selectionKey);
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public void release(SelectionKey selectionKey) {
>>>>> - if (associatedKey.getAndSet(null) == selectionKey) {
>>>>> - super.release(selectionKey);
>>>>> - pool.offer(this);
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Callback handler never should lead to the timeout situation,
>>>>> - * as connections could use it, but perform IO operations in
>>>>> sync. mode.
>>>>> - * @return null
>>>>> - */
>>>>> - @Override
>>>>> - public Long getTimeout() {
>>>>> - return null;
>>>>> - }
>>>>> -}
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/util/SSLUtils.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SSLUtils.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SSLUtils.java
>>>>> (working copy)
>>>>> @@ -1,646 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Controller;
>>>>> -import java.io.ByteArrayInputStream;
>>>>> -import java.io.EOFException;
>>>>> -import java.io.IOException;
>>>>> -import java.nio.ByteBuffer;
>>>>> -import java.nio.channels.SelectableChannel;
>>>>> -import java.security.cert.Certificate;
>>>>> -import java.security.cert.CertificateFactory;
>>>>> -import java.security.cert.X509Certificate;
>>>>> -import java.util.logging.Level;
>>>>> -import java.util.logging.Logger;
>>>>> -import javax.net.ssl.SSLEngine;
>>>>> -import javax.net.ssl.SSLEngineResult;
>>>>> -import javax.net.ssl.SSLEngineResult.HandshakeStatus;
>>>>> -import javax.net.ssl.SSLEngineResult.Status;
>>>>> -
>>>>> -/**
>>>>> - * SSL over NIO utility class. The class handle the SSLEngine
>>>>> operations
>>>>> - * needed to support SSL over NIO.
>>>>> - *
>>>>> - * TODO: Create an object that Wrap SSLEngine and its associated
>>>>> buffers.
>>>>> - *
>>>>> - * @author Jeanfrancois Arcand
>>>>> - */
>>>>> -public class SSLUtils {
>>>>> -
>>>>> - /**
>>>>> - * The maximum size a ByteBuffer can take.
>>>>> - */
>>>>> - public final static int MAX_BB_SIZE = 48 * 4096;
>>>>> -
>>>>> -
>>>>> - /*
>>>>> - * An empty ByteBuffer used for handshaking
>>>>> - */
>>>>> - protected final static ByteBuffer hsBB = ByteBuffer.allocate(0);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The time to wait before timing out when reading bytes
>>>>> - */
>>>>> - private static int readTimeout = 30000;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read and decrypt bytes from the underlying SSL connections.
>>>>> - * @param socketChannel underlying socket channel
>>>>> - * @param sslEngine{_at_link SSLEngine}
>>>>> - * @param byteBuffer buffer for application decrypted data
>>>>> - * @param inputBB buffer for reading enrypted data from socket
>>>>> - * @return number of bytes read
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public static int doSecureRead(SelectableChannel channel,
>>>>> SSLEngine sslEngine,
>>>>> - ByteBuffer byteBuffer, ByteBuffer inputBB) throws
>>>>> IOException {
>>>>> -
>>>>> - int initialPosition = byteBuffer.position();
>>>>> - int byteRead = 0;
>>>>> -
>>>>> - // We need to make sure the unwrap worked properly and we
>>>>> have all
>>>>> - // the packets properly read. If the SSLEngine fail to
>>>>> unwrap all the
>>>>> - // bytes, the byteBuffer will be empty event if some
>>>>> encrypted bytes
>>>>> - // are available.
>>>>> - while (byteBuffer.position() == initialPosition){
>>>>> - int currentRead = SSLUtils.doRead(channel, inputBB,
>>>>> - sslEngine,readTimeout);
>>>>> -
>>>>> - if (currentRead > 0) {
>>>>> - byteRead += currentRead;
>>>>> - }
>>>>> -
>>>>> - if (currentRead > 0 || inputBB.position() > 0) {
>>>>> - try{
>>>>> - byteBuffer = SSLUtils.unwrapAll(byteBuffer,
>>>>> - inputBB, sslEngine);
>>>>> -
>>>>> - if (currentRead == -1 &&
>>>>> - byteBuffer.position() ==
>>>>> initialPosition) {
>>>>> - // if last read was -1 and unwrap decoded
>>>>> nothing then return -1
>>>>> - byteRead = -1;
>>>>> - break;
>>>>> - }
>>>>> - } catch (IOException ex){
>>>>> - Logger logger = Controller.logger();
>>>>> - if ( logger.isLoggable(Level.FINE) )
>>>>> -
>>>>> logger.log(Level.FINE,"SSLUtils.unwrapAll",ex);
>>>>> - return -1;
>>>>> - }
>>>>> - } else if (currentRead == -1) {
>>>>> - byteRead = -1;
>>>>> - break;
>>>>> - } else {
>>>>> - break;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - return byteRead;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Read encrypted bytes using an{_at_link SSLEngine}.
>>>>> - * @param channel The {_at_link SelectableChannel}
>>>>> - * @param inputBB The byteBuffer to store encrypted bytes
>>>>> - * @param sslEngine The{_at_link SSLEngine} uses to manage the
>>>>> - * SSL operations.
>>>>> - * @param timeout The Selector.select() timeout value. A value
>>>>> of 0 will
>>>>> - * be exectuted as a Selector.selectNow();
>>>>> - * @return the bytes read.
>>>>> - */
>>>>> - public static int doRead(SelectableChannel channel, ByteBuffer
>>>>> inputBB,
>>>>> - SSLEngine sslEngine, int timeout) {
>>>>> -
>>>>> - if (channel == null) return -1;
>>>>> -
>>>>> - try {
>>>>> - int bytesRead = Utils.readWithTemporarySelector(channel,
>>>>> - inputBB, timeout);
>>>>> -
>>>>> - if (bytesRead == -1) {
>>>>> - try {
>>>>> - sslEngine.closeInbound();
>>>>> - } catch (IOException ex) {
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - return bytesRead;
>>>>> - } catch (Throwable t){
>>>>> - Logger logger = Controller.logger();
>>>>> - if ( logger.isLoggable(Level.FINEST) ){
>>>>> - logger.log(Level.FINEST,"doRead",t);
>>>>> - }
>>>>> - return -1;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Unwrap all encrypted bytes from <code>inputBB</code> to
>>>>> - * {_at_link ByteBuffer} using the{_at_link SSLEngine}
>>>>> - * @param byteBuffer the decrypted ByteBuffer
>>>>> - * @param inputBB the encrypted ByteBuffer
>>>>> - * @param sslEngine The SSLEngine used to manage the SSL
>>>>> operations.
>>>>> - * @return the decrypted ByteBuffer
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public static ByteBuffer unwrapAll(ByteBuffer byteBuffer,
>>>>> - ByteBuffer inputBB, SSLEngine sslEngine) throws
>>>>> IOException{
>>>>> -
>>>> - SSLEngineResult result = null;
>>>> - do{
>>>> - try{
>>>> - result = unwrap(byteBuffer,inputBB,sslEngine);
>>>> - } catch (Throwable ex){
>>>> - Logger logger = Controller.logger();
>>>> - if ( logger.isLoggable(Level.FINE) ){
>>>> - logger.log(Level.FINE,"unwrap",ex);
>>>> - }
>>>> - inputBB.compact();
>>>> - }
>>>> -
>>>> - if (result != null){
>>>> - switch (result.getStatus()) {
>>>> -
>>>> - case BUFFER_UNDERFLOW:
>>>> - case CLOSED:
>>>> - // Closed or need more data.
>>>> - break;
>>>> - case OK:
>>>> - if (result.getHandshakeStatus()
>>>> - == HandshakeStatus.NEED_TASK) {
>>>> - executeDelegatedTask(sslEngine);
>>>> - }
>>>> - break;
>>>> - case BUFFER_OVERFLOW:
>>>> - byteBuffer = reallocate(byteBuffer);
>>>> - break;
>>>> - default:
>>>> - throw new
>>>> - IOException("Unwrap error: "+
>>>> result.getStatus());
>>>> - }
>>>> - }
>>>> - } while (inputBB.position() > 0 && result!= null &&
>>>> - result.getStatus() != Status.BUFFER_UNDERFLOW);
>>>> - return byteBuffer;
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Unwrap available encrypted bytes from <code>inputBB</code> to
>>>> - * {_at_link ByteBuffer} using the{_at_link SSLEngine}
>>>> - * @param byteBuffer the decrypted ByteBuffer
>>>> - * @param inputBB the encrypted ByteBuffer
>>>> - * @param sslEngine The SSLEngine used to manage the SSL
>>>> operations.
>>>> - * @return SSLEngineResult of the SSLEngine.unwrap operation.
>>>> - * @throws java.io.IOException
>>>> - */
>>>> - public static SSLEngineResult unwrap(ByteBuffer byteBuffer,
>>>> - ByteBuffer inputBB, SSLEngine sslEngine) throws
>>>> IOException{
>>>> -
>>>> - // Logging block
>>>> - if (Controller.logger().isLoggable(Level.FINE)) {
>>>> - Controller.logger().log(Level.FINE, "start unwrap.
>>>> engine: " +
>>>> - sslEngine + " buffer: " +
>>>> - byteBuffer + " secured: " + inputBB);
>>>> - if (Controller.logger().isLoggable(Level.FINER)) {
>>>> - StackTraceElement[] stackTraceElements =
>>>> Thread.currentThread().getStackTrace();
>>>> - StringBuilder buffer = new StringBuilder();
>>>> - for (StackTraceElement element : stackTraceElements) {
>>>> - buffer.append('\n');
>>>> - buffer.append(element);
>>>> - }
>>>> -
>>>> - Controller.logger().log(Level.FINER,
>>>> buffer.toString());
>>>> - }
>>>> - }
>>>> -
>>>> - inputBB.flip();
>>>> - SSLEngineResult result = sslEngine.unwrap(inputBB, byteBuffer);
>>>> - inputBB.compact();
>>>> -
>>>> - // Logging block
>>>> - if (Controller.logger().isLoggable(Level.FINE)) {
>>>> - int bytesProduced = result.bytesProduced();
>>>> - Controller.logger().log(Level.FINE, "after unwrap.
>>>> engine: " +
>>>> - sslEngine + " buffer: " +
>>>> - byteBuffer + " secured: " + inputBB + "
>>>> consumed: " +
>>>> - result.bytesConsumed() + " produced: " +
>>>> bytesProduced +
>>>> - " status: " + result.getStatus() +
>>>> - " handshakeStatus: " +
>>>> result.getHandshakeStatus());
>>>> - if (bytesProduced > 0 &&
>>>> Controller.logger().isLoggable(Level.FINER)) {
>>>> - byteBuffer.position(byteBuffer.position() -
>>>> bytesProduced);
>>>> - byte[] producedBytes = new byte[bytesProduced];
>>>> - byteBuffer.get(producedBytes);
>>>> - Controller.logger().log(Level.FINER, new
>>>> String(producedBytes));
>>>> - }
>>>> - }
>>>> -
>>>> - return result;
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Encrypt bytes.
>>>> - * @param byteBuffer the decrypted ByteBuffer
>>>> - * @param outputBB the encrypted ByteBuffer
>>>> - * @param sslEngine The SSLEngine used to manage the SSL
>>>> operations.
>>>> - * @return SSLEngineResult of the SSLEngine.wrap operation.
>>>> - * @throws java.io.IOException
>>>> - */
>>>> - public static SSLEngineResult wrap(ByteBuffer byteBuffer,
>>>> - ByteBuffer outputBB, SSLEngine sslEngine) throws
>>>> IOException {
>>>> -
>>>> - outputBB.clear();
>>>> - SSLEngineResult result = sslEngine.wrap(byteBuffer, outputBB);
>>>> - outputBB.flip();
>>>> - return result;
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Resize a ByteBuffer.
>>>> - * @param byteBuffer {_at_link ByteBuffer} to re-allocate
>>>> - * @return {_at_link ByteBuffer} reallocted
>>>> - * @throws java.io.IOException
>>>> - */
>>>> - private static ByteBuffer reallocate(ByteBuffer byteBuffer)
>>>> - throws IOException{
>>>> -
>>>> - if (byteBuffer.capacity() > MAX_BB_SIZE){
>>>> - throw new IOException("Unwrap error: BUFFER_OVERFLOW");
>>>> - }
>>>> - ByteBuffer tmp = ByteBuffer.allocate(byteBuffer.capacity()
>>>> * 2);
>>>> - byteBuffer.flip();
>>>> - tmp.put(byteBuffer);
>>>> - byteBuffer = tmp;
>>>> - return byteBuffer;
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Complete hanshakes operations.
>>>> - * @param sslEngine The SSLEngine used to manage the SSL
>>>> operations.
>>>> - * @return SSLEngineResult.HandshakeStatus
>>>> - */
>>>> - public static SSLEngineResult.HandshakeStatus
>>>> - executeDelegatedTask(SSLEngine sslEngine) {
>>>> -
>>>> - Runnable runnable;
>>>> - while ((runnable = sslEngine.getDelegatedTask()) != null) {
>>>> - runnable.run();
>>>> - }
>>>> - return sslEngine.getHandshakeStatus();
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Perform an SSL handshake using the SSLEngine.
>>>> - * Note: If handshake was done successfully - outputBB will be
>>>> cleared out,
>>>> - * but this is *not* ready data to be written.
>>>> - *
>>>> - * @param channel the {_at_link SelectableChannel}
>>>> - * @param byteBuffer The application {_at_link ByteBuffer}
>>>> - * @param inputBB The encrypted input {_at_link ByteBuffer}
>>>> - * @param outputBB The encrypted output {_at_link ByteBuffer}
>>>> - * @param sslEngine The SSLEngine used.
>>>> - * @param handshakeStatus The current handshake status
>>>> - * @return byteBuffer the new ByteBuffer
>>>> - * @throws java.io.IOException
>>>> - * @throw IOException if the handshake fail.
>>>> - */
>>>> - public static ByteBuffer doHandshake(SelectableChannel channel,
>>>> - ByteBuffer byteBuffer, ByteBuffer inputBB, ByteBuffer
>>>> outputBB,
>>>> - SSLEngine sslEngine, HandshakeStatus handshakeStatus)
>>>> - throws IOException {
>>>> - return doHandshake(channel, byteBuffer, inputBB, outputBB,
>>>> - sslEngine, handshakeStatus, readTimeout);
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Perform an SSL handshake using the SSLEngine.
>>>> - * Note: If handshake was done successfully - outputBB will be
>>>> cleared out,
>>>> - * but this is *not* ready data to be written.
>>>> - *
>>>> - * @param channel the {_at_link SelectableChannel}
>>>> - * @param byteBuffer The application {_at_link ByteBuffer}
>>>> - * @param inputBB The encrypted input {_at_link ByteBuffer}
>>>> - * @param outputBB The encrypted output {_at_link ByteBuffer}
>>>> - * @param sslEngine The SSLEngine used.
>>>> - * @param handshakeStatus The current handshake status
>>>> - * @param timeout
>>>> - * @return byteBuffer the new ByteBuffer
>>>> - * @throws java.io.IOException
>>>> - * @throws IOException if the handshake fail.
>>>> - */
>>>> - public static ByteBuffer doHandshake(SelectableChannel channel,
>>>> - ByteBuffer byteBuffer, ByteBuffer inputBB, ByteBuffer
>>>> outputBB,
>>>> - SSLEngine sslEngine, HandshakeStatus
>>>> handshakeStatus,int timeout)
>>>> - throws IOException {
>>>> - return doHandshake(channel, byteBuffer, inputBB, outputBB,
>>>> - sslEngine, handshakeStatus, timeout,
>>>> inputBB.position() > 0);
>>>> - }
>>>> -
>>>> - /**
>>>> - * Perform an SSL handshake using the SSLEngine.
>>>> - * Note: If handshake was done successfully - outputBB will be
>>>> cleared out,
>>>> - * but this is *not* ready data to be written.
>>>> - *
>>>> - * @param channel the {_at_link SelectableChannel}
>>>> - * @param byteBuffer The application {_at_link ByteBuffer}
>>>> - * @param inputBB The encrypted input {_at_link ByteBuffer}
>>>> - * @param outputBB The encrypted output {_at_link ByteBuffer}
>>>> - * @param sslEngine The SSLEngine used.
>>>> - * @param handshakeStatus The current handshake status
>>>> - * @param timeout
>>>> - * @param useReadyBuffer does method need to read data before
>>>> UNWRAP or use
>>>> - * a data from inputBB
>>>> - * @return byteBuffer the new ByteBuffer
>>>> - * @throws java.io.IOException
>>>> - * @throws IOException if the handshake fail.
>>>> - */
>>>> - public static ByteBuffer doHandshake(SelectableChannel channel,
>>>> - ByteBuffer byteBuffer, ByteBuffer inputBB, ByteBuffer
>>>> outputBB,
>>>> - SSLEngine sslEngine, HandshakeStatus handshakeStatus,
>>>> - int timeout,boolean useReadyBuffer)
>>>> - throws IOException {
>>>> -
>>>> - SSLEngineResult result;
>>>> - int eof = timeout > 0 ? 0 : -1;
>>>> - while (handshakeStatus != HandshakeStatus.FINISHED){
>>>> - switch (handshakeStatus) {
>>>> - case NEED_UNWRAP:
>>>> - if (!useReadyBuffer) {
>>>> - if (doRead(channel, inputBB, sslEngine,
>>>> timeout) <= eof) {
>>>> - try {
>>>> - sslEngine.closeInbound();
>>>> - } catch (IOException ex) {
>>>> - Logger logger = Controller.logger();
>>>> - if (logger.isLoggable(Level.FINE)) {
>>>> - logger.log(Level.FINE,
>>>> "closeInbound", ex);
>>>> - }
>>>> - }
>>>> - throw new EOFException("Connection
>>>> closed");
>>>> - }
>>>> - } else {
>>>> - useReadyBuffer = false;
>>>> - }
>>>> -
>>>> - while (handshakeStatus ==
>>>> HandshakeStatus.NEED_UNWRAP) {
>>>> - result = unwrap(byteBuffer,inputBB,sslEngine);
>>>> - handshakeStatus = result.getHandshakeStatus();
>>>> -
>>>> - if (result.getStatus() ==
>>>> Status.BUFFER_UNDERFLOW){
>>>> - break;
>>>> - }
>>>> -
>>>> - switch (result.getStatus()) {
>>>> - case OK:
>>>> - switch (handshakeStatus) {
>>>> - case NOT_HANDSHAKING:
>>>> - throw new IOException("No
>>>> Hanshake");
>>>> -
>>>> - case NEED_TASK:
>>>> - handshakeStatus =
>>>> -
>>>> executeDelegatedTask(sslEngine);
>>>> - break;
>>>> -
>>>> - case FINISHED:
>>>> - return byteBuffer;
>>>> - }
>>>> - break;
>>>> - case BUFFER_OVERFLOW:
>>>> - byteBuffer = reallocate(byteBuffer);
>>>> - break;
>>>> - default:
>>>> - throw new IOException("Handshake
>>>> exception: " +
>>>> - result.getStatus());
>>>> - }
>>>> - }
>>>> -
>>>> - if (handshakeStatus != HandshakeStatus.NEED_WRAP) {
>>>> - break;
>>>> - }
>>>> - case NEED_WRAP:
>>>> - result = wrap(hsBB,outputBB,sslEngine);
>>>> - handshakeStatus = result.getHandshakeStatus();
>>>> - switch (result.getStatus()) {
>>>> - case OK:
>>>> -
>>>> - if (handshakeStatus ==
>>>> HandshakeStatus.NEED_TASK) {
>>>> - handshakeStatus =
>>>> executeDelegatedTask(sslEngine);
>>>> - }
>>>> -
>>>> - // Flush all Server bytes to the client.
>>>> - if (channel != null) {
>>>> - OutputWriter.flushChannel(
>>>> - channel, outputBB);
>>>> - outputBB.clear();
>>>> - }
>>>> - break;
>>>> - default:
>>>> - throw new IOException("Handshaking error: "
>>>> - + result.getStatus());
>>>> - }
>>>> - break;
>>>> - default:
>>>> - throw new RuntimeException("Invalid Handshaking
>>>> State" +
>>>> - handshakeStatus);
>>>> - }
>>>> - }
>>>> - return byteBuffer;
>>>> - }
>>>> -
>>>> -
>>>> - /**
>>>> - * Get the peer certificate list by initiating a new handshake.
>>>> - * @param channel {_at_link SelectableChannel}
>>>> - * @param needClientAuth
>>>> - * @return Object[] An array of X509Certificate.
>>>> - * @throws java.io.IOException
>>>> - */
>>>> - public static Object[] doPeerCertificateChain(SelectableChannel
>>>> channel,
>>>> - ByteBuffer byteBuffer, ByteBuffer inputBB, ByteBuffer
>>>> outputBB,
>>>> - SSLEngine sslEngine, boolean needClientAuth, int
>>>> timeout) throws IOException {
>>>> -
>>>> - Logger logger = Controller.logger();
>>>> -
>>>> - Certificate[] certs=null;
>>>> - try {
>>>> - certs = sslEngine.getSession().getPeerCertificates();
>>>> - } catch( Throwable t ) {
>>>> - if ( logger.isLoggable(Level.FINE))
>>>> - logger.log(Level.FINE,"Error getting client certs",t);
>>>> - }
>>>> -
>>>> - if (certs == null && needClientAuth){
>>>> - sslEngine.getSession().invalidate();
>>>> - sslEngine.setNeedClientAuth(true);
>>>> - sslEngine.beginHandshake();
>>>> -
>>>> - ByteBuffer origBB = byteBuffer;
>>>> - // In case the application hasn't read all the body bytes.
>>>> - if ( origBB.position() != origBB.limit() ){
>>>> - byteBuffer = ByteBuffer.allocate(origBB.capacity());
>>>> - } else {
>>>> - byteBuffer.clear();
>>>> - }
>>>> - outputBB.position(0);
>>>> - outputBB.limit(0);
>>>> -
>>>> - // We invalidate ssl seesion, so no need for unwrap
>>>> - try{
>>>> - doHandshake(channel, byteBuffer, inputBB, outputBB,
>>>> - sslEngine, HandshakeStatus.NEED_WRAP, timeout);
>>>> - } catch (Throwable ex){
>>>> - if ( logger.isLoggable(Level.FINE))
>>>> - logger.log(Level.FINE,"Error during handshake",ex);
>>>> - return null;
>>>> - } finally {
>>>> - byteBuffer = origBB;
>>>> - byteBuffer.clear();
>>>> - }
>>>> -
>>>> - try {
>>>> - certs = sslEngine.getSession().getPeerCertificates();
>>>> - } catch( Throwable t ) {
>>>> - if ( logger.isLoggable(Level.FINE))
>>>> - logger.log(Level.FINE,"Error getting client
>>>> certs",t);
>>>> - }
>>>> - }
>>>> -
>>>> - if( certs==null ) return null;
>>>> -
>>>> - X509Certificate[] x509Certs = new
>>>> X509Certificate[certs.length];
>>>> - for(int i=0; i < certs.length; i++) {
>>>> - if( certs[i] instanceof X509Certificate ) {
>>>> - x509Certs[i] = (X509Certificate)certs[i];
>>>> - } else {
>>>> - try {
>>>> - byte [] buffer = certs[i].getEncoded();
>>>>> - CertificateFactory cf =
>>>>> - CertificateFactory.getInstance("X.509");
>>>>> - ByteArrayInputStream stream = new
>>>>> ByteArrayInputStream(buffer);
>>>>> - x509Certs[i] = (X509Certificate)
>>>>> - cf.generateCertificate(stream);
>>>>> - } catch(Exception ex) {
>>>>> - logger.log(Level.INFO,"Error translating cert
>>>>> " + certs[i],
>>>>> - ex);
>>>>> - return null;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - if(logger.isLoggable(Level.FINE))
>>>>> - logger.log(Level.FINE,"Cert #" + i + " = " +
>>>>> x509Certs[i]);
>>>>> - }
>>>>> -
>>>>> - if(x509Certs.length < 1)
>>>>> - return null;
>>>>> -
>>>>> - return x509Certs;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Allocate themandatory {_at_link ByteBuffer}s. Since the ByteBuffer
>>>>> - * are maintaned on the {_at_link WorkerThread} lazily, this method
>>>>> - * makes sure the ByteBuffers are properly allocated and
>>>>> configured.
>>>>> - */
>>>>> - public static void allocateThreadBuffers(int defaultBufferSize) {
>>>>> - final WorkerThread workerThread =
>>>>> - (WorkerThread)Thread.currentThread();
>>>>> - ByteBuffer byteBuffer = workerThread.getByteBuffer();
>>>>> - ByteBuffer outputBB = workerThread.getOutputBB();
>>>>> - ByteBuffer inputBB = workerThread.getInputBB();
>>>>> -
>>>>> - int expectedSize = workerThread.getSSLEngine().getSession()
>>>>> - .getPacketBufferSize();
>>>>> - if (defaultBufferSize < expectedSize){
>>>>> - defaultBufferSize = expectedSize;
>>>>> - }
>>>>> -
>>>>> - if (inputBB != null && inputBB.capacity() <
>>>>> defaultBufferSize) {
>>>>> - ByteBuffer newBB = ByteBuffer.allocate(defaultBufferSize);
>>>>> - inputBB.flip();
>>>>> - newBB.put(inputBB);
>>>>> - inputBB = newBB;
>>>>> - } else if (inputBB == null){
>>>>> - inputBB = ByteBuffer.allocate(defaultBufferSize);
>>>>> - }
>>>>> -
>>>>> - if (outputBB == null) {
>>>>> - outputBB = ByteBuffer.allocate(defaultBufferSize);
>>>>> - }
>>>>> -
>>>>> - if (byteBuffer == null){
>>>>> - byteBuffer = ByteBuffer.allocate(defaultBufferSize * 2);
>>>>> - }
>>>>> -
>>>>> - expectedSize = workerThread.getSSLEngine().getSession()
>>>>> - .getApplicationBufferSize();
>>>>> - if ( expectedSize > byteBuffer.capacity() ) {
>>>>> - ByteBuffer newBB = ByteBuffer.allocate(expectedSize);
>>>>> - byteBuffer.flip();
>>>>> - newBB.put(byteBuffer);
>>>>> - byteBuffer = newBB;
>>>>> - }
>>>>> -
>>>>> - workerThread.setInputBB(inputBB);
>>>>> - workerThread.setOutputBB(outputBB);
>>>>> - workerThread.setByteBuffer(byteBuffer);
>>>>> -
>>>>> - outputBB.position(0);
>>>>> - outputBB.limit(0);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - public static int getReadTimeout() {
>>>>> - return readTimeout;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - public static void setReadTimeout(int aReadTimeout) {
>>>>> - readTimeout = aReadTimeout;
>>>>> - }
>>>>> -
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConnectionCloseHandler.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConnectionCloseHandler.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ConnectionCloseHandler.java
>>>>> (working copy)
>>>>> @@ -1,73 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Handler;
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -
>>>>> -/**
>>>>> - * Simple listener to be used when an application needs to be
>>>>> notified when a
>>>>> - * a {_at_link SelectorHandler}, {_at_link ConnectionHandler} or {_at_link
>>>>> SelectionKeyHandler}
>>>>> - * close a connection ({_at_link
>>>>> ConnectionCloseHandler#locallyClosed}), or when a
>>>>> - * remote client close the connection ({_at_link
>>>>> ConnectionCloseHandler#remotlyClosed}).
>>>>> - *
>>>>> - * Note that when the connection is closed remotly, the ({_at_link
>>>>> ConnectionCloseHandler#remotlyClosed})
>>>>> - * will be invoked immediately followed by a ({_at_link
>>>>> ConnectionCloseHandler#locallyClosed}), as
>>>>> - * Grizzly will discard the server side dirty {_at_link SelectionKey}.
>>>>> - *
>>>>> - * @author Jeanfrancois Arcand
>>>>> - */
>>>>> -public interface ConnectionCloseHandler extends Handler {
>>>>> -
>>>>> - /**
>>>>> - * Invoked when the a {_at_link SelectionKey} is cancelled
>>>>> locally, e.g. by
>>>>> - * one {_at_link SelectorHandler}, {_at_link ConnectionHandler} or
>>>>> {_at_link SelectionKeyHandler}
>>>>> - *
>>>>> - * @param key a {_at_link SelectionKey}
>>>>> - */
>>>>> - void locallyClosed(SelectionKey key);
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Invoked when a remote connection is being closed.
>>>>> - *
>>>>> - * @param key a {_at_link SelectionKey}
>>>>> - */
>>>>> - void remotlyClosed(SelectionKey key);
>>>>> -
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferFactory.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferFactory.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferFactory.java
>>>>> (working copy)
>>>>> @@ -1,148 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.ByteBuffer;
>>>>> -
>>>>> -
>>>>> -/**
>>>>> - * Factory class used to create {_at_link ByteBuffer}.
>>>>> - *
>>>>> - * The ByteBuffer can by direct (ByteBufferType.DIRECT) or heap
>>>>> (ByteBufferType.HEAP)
>>>>> - * a view (ByteBufferType.DIRECT_VIEW) or ByteBufferType.HEAP_VIEW)
>>>>> - * or backed by an array (ByteBufferType.HEAP_ARRAY).
>>>>> - *
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public class ByteBufferFactory{
>>>>> -
>>>>> - /**
>>>>> - * An enumeration of all type of ByteBuffer this object can
>>>>> create.
>>>>> - */
>>>>> - public enum ByteBufferType { DIRECT, HEAP, DIRECT_VIEW,
>>>>> HEAP_VIEW, HEAP_ARRAY }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The default capacity of the default view of a {_at_link
>>>>> ByteBuffer}
>>>>> - */
>>>>> - public static int defaultCapacity = 8192;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The default capacity of the {_at_link ByteBuffer} from which views
>>>>> - * will be created.
>>>>> - */
>>>>> - public static int capacity = 4000000;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link ByteBuffer} used to create direct byteBuffer view.
>>>>> - */
>>>>> - private static ByteBuffer directByteBuffer;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link ByteBuffer} used to create direct byteBuffer view.
>>>>> - */
>>>>> - private static ByteBuffer heapByteBuffer;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Private constructor.
>>>>> - */
>>>>> - private ByteBufferFactory(){
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return a direct {_at_link ByteBuffer} view
>>>>> - * @param size the Size of the {_at_link ByteBuffer}
>>>>> - * @param direct - direct or non-direct buffer?
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public synchronized static ByteBuffer allocateView(int size,
>>>>> boolean direct){
>>>>> - if (direct && (directByteBuffer == null ||
>>>>> - (directByteBuffer.capacity() -
>>>>> directByteBuffer.limit() < size))){
>>>>> - directByteBuffer = ByteBuffer.allocateDirect(capacity);
>>>>> - } else if (heapByteBuffer == null ||
>>>>> - (heapByteBuffer.capacity() - heapByteBuffer.limit()
>>>>> < size)){
>>>>> - heapByteBuffer = ByteBuffer.allocate(capacity);
>>>>> - }
>>>>> - ByteBuffer byteBuffer = (direct ? directByteBuffer :
>>>>> heapByteBuffer);
>>>>> -
>>>>> - byteBuffer.limit(byteBuffer.position() + size);
>>>>> - ByteBuffer view = byteBuffer.slice();
>>>>> - byteBuffer.position(byteBuffer.limit());
>>>>> -
>>>>> - return view;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return a direct {_at_link ByteBuffer} view using the default size.
>>>>> - * @param direct - direct or non-direct buffer
>>>>> - * @return {_at_link ByteBuffer}
>>>>> - */
>>>>> - public synchronized static ByteBuffer allocateView(boolean
>>>>> direct){
>>>>> - return allocateView(defaultCapacity, direct);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return a new ByteBuffer based on the requested
>>>>> <code>ByteBufferType</code>
>>>>> - * @param type the requested <code>ByteBufferType</code>
>>>>> - * @param size the {_at_link ByteBuffer} size.
>>>>> - * @return a new ByteBuffer based on the requested
>>>>> <code>ByteBufferType</code>
>>>>> - */
>>>>> - public static ByteBuffer allocate(ByteBufferType type,int size){
>>>>> - if (type == ByteBufferType.HEAP){
>>>>> - return ByteBuffer.allocate(size);
>>>>> - } else if (type == ByteBufferType.HEAP_VIEW) {
>>>>> - return allocateView(size,false);
>>>>> - } else if (type == ByteBufferType.HEAP_ARRAY) {
>>>>> - return ByteBuffer.wrap(new byte[size]);
>>>>> - } else if (type == ByteBufferType.DIRECT){
>>>>> - return ByteBuffer.allocateDirect(size);
>>>>> - } else if (type == ByteBufferType.DIRECT_VIEW){
>>>>> - return allocateView(size,true);
>>>>> - } else {
>>>>> - throw new IllegalStateException("Invalid ByteBuffer
>>>>> Type");
>>>>> - }
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyOP.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyOP.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyOP.java
>>>>> (working copy)
>>>>> @@ -1,169 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.CallbackHandler;
>>>>> -import java.net.SocketAddress;
>>>>> -import java.nio.channels.SelectableChannel;
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -
>>>>> -/**
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class SelectionKeyOP {
>>>>> - private int op;
>>>>> - private SelectionKey key;
>>>>> - private SelectableChannel channel;
>>>>> -
>>>>> - private static ConcurrentLinkedQueuePool<SelectionKeyOP>
>>>>> readWritePool =
>>>>> - new ConcurrentLinkedQueuePool<SelectionKeyOP>() {
>>>>> - @Override
>>>>> - public SelectionKeyOP newInstance() {
>>>>> - return new SelectionKeyOP();
>>>>> - }
>>>>> - };
>>>>> -
>>>>> - private static ConcurrentLinkedQueuePool<SelectionKeyOP>
>>>>> connectPool =
>>>>> - new ConcurrentLinkedQueuePool<SelectionKeyOP>() {
>>>>> - @Override
>>>>> - public SelectionKeyOP newInstance() {
>>>>> - return new ConnectSelectionKeyOP();
>>>>> - }
>>>>> - };
>>>>> -
>>>>> - public static SelectionKeyOP aquireSelectionKeyOP(int op) {
>>>>> - if (op == SelectionKey.OP_READ || op ==
>>>>> SelectionKey.OP_WRITE ||
>>>>> - op == (SelectionKey.OP_WRITE |
>>>>> SelectionKey.OP_READ)) {
>>>>> - SelectionKeyOP operation = readWritePool.poll();
>>>>> - return operation;
>>>>> - } else if (op == SelectionKey.OP_CONNECT) {
>>>>> - SelectionKeyOP operation = connectPool.poll();
>>>>> - return operation;
>>>>> - }
>>>>> -
>>>>> - throw new IllegalStateException("Unknown operation or
>>>>> operation is not supported");
>>>>> - }
>>>>> -
>>>>> - public static void releaseSelectionKeyOP(SelectionKeyOP
>>>>> operation) {
>>>>> - int op = operation.op;
>>>>> - operation.recycle();
>>>>> -
>>>>> - if (op == SelectionKey.OP_READ || op ==
>>>>> SelectionKey.OP_WRITE ||
>>>>> - op == (SelectionKey.OP_WRITE |
>>>>> SelectionKey.OP_READ)) {
>>>>> - readWritePool.offer(operation);
>>>>> - return;
>>>>> - } else if (op == SelectionKey.OP_CONNECT) {
>>>>> - connectPool.offer(operation);
>>>>> - return;
>>>>> - }
>>>>> -
>>>>> - throw new IllegalStateException("Unknown operation or
>>>>> operation is not supported");
>>>>> - }
>>>>> -
>>>>> - private SelectionKeyOP() {
>>>>> - }
>>>>> -
>>>>> - public int getOp() {
>>>>> - return op;
>>>>> - }
>>>>> -
>>>>> - public void setOp(int op) {
>>>>> - this.op = op;
>>>>> - }
>>>>> -
>>>>> - public SelectionKey getSelectionKey() {
>>>>> - return key;
>>>>> - }
>>>>> -
>>>>> - public void setSelectionKey(SelectionKey key) {
>>>>> - this.key = key;
>>>>> - }
>>>>> -
>>>>> - public SelectableChannel getChannel() {
>>>>> - return channel;
>>>>> - }
>>>>> -
>>>>> - public void setChannel(SelectableChannel channel) {
>>>>> - this.channel = channel;
>>>>> - }
>>>>> -
>>>>> - protected void recycle() {
>>>>> - op = 0;
>>>>> - key = null;
>>>>> - channel = null;
>>>>> - }
>>>>> -
>>>>> - public static class ConnectSelectionKeyOP extends SelectionKeyOP {
>>>>> - private SocketAddress localAddress;
>>>>> - private SocketAddress remoteAddress;
>>>>> - private CallbackHandler callbackHandler;
>>>>> -
>>>>> - public SocketAddress getLocalAddress() {
>>>>> - return localAddress;
>>>>> - }
>>>>> -
>>>>> - public void setLocalAddress(SocketAddress localAddress) {
>>>>> - this.localAddress = localAddress;
>>>>> - }
>>>>> -
>>>>> - public SocketAddress getRemoteAddress() {
>>>>> - return remoteAddress;
>>>>> - }
>>>>> -
>>>>> - public void setRemoteAddress(SocketAddress remoteAddress) {
>>>>> - this.remoteAddress = remoteAddress;
>>>>> - }
>>>>> -
>>>>> - public CallbackHandler getCallbackHandler() {
>>>>> - return callbackHandler;
>>>>> - }
>>>>> -
>>>>> - public void setCallbackHandler(CallbackHandler
>>>>> callbackHandler) {
>>>>> - this.callbackHandler = callbackHandler;
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - protected void recycle() {
>>>>> - localAddress = null;
>>>>> - remoteAddress = null;
>>>>> - &n bsp; callbackHandler = null;
>>>>> - }
>>>>> - }
>>>>> -}
>>>>> \ No newline at end of file
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/util/Copyable.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/Copyable.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/Copyable.java
>>>>> (working copy)
>>>>> @@ -1,54 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -/**
>>>>> - * Copyable objects are able to copy their content to
>>>>> - * other objects of the same type
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public interface Copyable {
>>>>> - /**
>>>>> - * Copies current object content to copy object
>>>>> - *
>>>>> - * @param copy represents target object, where current
>>>>> object's content will be copied
>>>>> - */
>>>>> - public void copyTo(Copyable copy);
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/Interceptor.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/Interceptor.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/Interceptor.java
>>>>> (working copy)
>>>>> @@ -1,98 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.io.IOException;
>>>>> -import java.nio.channels.Channel;
>>>>> -
>>>>> -/**
>>>>> - * Simple interception hook used to trap events inside Grizzly core.
>>>>> - *
>>>>> - * @param E type of Interceptor handler
>>>>> - * @author Jeanfrancois Arcand
>>>>> - */
>>>>> -public interface Interceptor<E,F extends Channel>{
>>>>> -
>>>>> - /**
>>>>> - * Continue the processing
>>>>> - */
>>>>> - public final static int CONTINUE = 0;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Do not continue the processing.
>>>>> - */
>>>>> - public final static int BREAK = 1;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The request line has been parsed
>>>>> - */
>>>>> - public final static int REQUEST_LINE_PARSED = 0;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The response has been proceeded.
>>>>> - */
>>>>> - public final static int RESPONSE_PROCEEDED = 1;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The request has been buffered.
>>>>> - */
>>>>> - public final static int REQUEST_BUFFERED = 2;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Handle <E> and the associated handler code.
>>>>> - * @param e
>>>>> - * @param handlerCode
>>>>> - * @return
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public int handle(E e, int handlerCode) throws IOException;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link Channel} associated with this handler.
>>>>> - * @param socketChannel
>>>>> - */
>>>>> - public void attachChannel(F channel);
>>>>> -
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyActionAttachment.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyActionAttachment.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyActionAttachment.java
>>>>> (working copy)
>>>>> @@ -1,53 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -
>>>>> -/**
>>>>> - * Class represents extended version of {_at_link
>>>>> SelectionKeyAttachment},
>>>>> - * and introduces process method, which will be called by
>>>>> framework once
>>>>> - * {_at_link SelectionKey} has some ready event, before actual event
>>>>> processing.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public abstract class SelectionKeyActionAttachment extends
>>>>> SelectionKeyAttachment {
>>>>> - public abstract void process(SelectionKey selectionKey);
>>>>> - public abstract void postProcess(SelectionKey selectionKey);
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/DefaultThreadPool.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/DefaultThreadPool.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/DefaultThreadPool.java
>>>>> (working copy)
>>>>> @@ -1,208 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Controller;
>>>>> -import com.sun.grizzly.util.ByteBufferFactory.ByteBufferType;
>>>>> -import java.util.concurrent.ExecutorService;
>>>>> -import java.util.concurrent.LinkedBlockingQueue;
>>>>> -import java.util.concurrent.ThreadFactory;
>>>>> -import java.util.concurrent.ThreadPoolExecutor;
>>>>> -import java.util.concurrent.TimeUnit;
>>>>> -import java.util.concurrent.atomic.AtomicInteger;
>>>>> -import java.util.logging.Level;
>>>>> -
>>>>> -/**
>>>>> - * Thread Pool implementation, based on {_at_link ThreadPoolExecutor}
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class DefaultThreadPool extends ThreadPoolExecutor
>>>>> - implements ExecutorService, ExtendedThreadPool,
>>>>> - Thread.UncaughtExceptionHandler {
>>>>> - // Min number of worker threads in a pool
>>>>> - public static int DEFAULT_MIN_THREAD_COUNT = 5;
>>>>> -
>>>>> - // Max number of worker threads in a pool
>>>>> - public static int DEFAULT_MAX_THREAD_COUNT = 5;
>>>>> -
>>>>> - // Max number of tasks thread pool can enqueue
>>>>> - public static int DEFAULT_MAX_TASKS_QUEUED = Integer.MAX_VALUE;
>>>>> -
>>>>> - // Timeout, after which idle thread will be stopped and
>>>>> excluded from pool
>>>>> - public static int DEFAULT_IDLE_THREAD_KEEPALIVE_TIMEOUT = 30000;
>>>>> -
>>>>> - protected String name = "Grizzly";
>>>>> -
>>>>> - protected int maxTasksCount;
>>>>> -
>>>>> - protected AtomicInteger workerThreadCounter = new AtomicInteger();
>>>>> -
>>>>> - /**
>>>>> - * Threads priority
>>>>> - */
>>>>> - protected int priority = Thread.NORM_PRIORITY;
>>>>> -
>>>>> - /**
>>>>> - * The initial ByteBuffer size for newly created WorkerThread
>>>>> instances
>>>>> - */
>>>>> - protected int initialByteBufferSize = 8192;
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link ByteBufferType}
>>>>> - */
>>>>> - protected ByteBufferType byteBufferType =
>>>>> ByteBufferType.HEAP_VIEW;
>>>>> -
>>>>> - public DefaultThreadPool() {
>>>>> - this(DEFAULT_MIN_THREAD_COUNT, DEFAULT_MAX_THREAD_COUNT,
>>>>> - DEFAULT_MAX_TASKS_QUEUED,
>>>>> DEFAULT_IDLE_THREAD_KEEPALIVE_TIMEOUT,
>>>>> - TimeUnit.MILLISECONDS);
>>>>> - }
>>>>> -
>>>>> - public DefaultThreadPool(int corePoolSize, int maximumPoolSize,
>>>>> - int maxTasksCount, long keepAliveTime, TimeUnit unit) {
>>>>> - super(corePoolSize, maximumPoolSize, keepAliveTime, unit,
>>>>> - new LinkedBlockingQueue<Runnable>(maxTasksCount));
>>>>> - setThreadFactory(new DefaultWorkerThreadFactory());
>>>>> - this.maxTasksCount = maxTasksCount;
>>>>> - }
>>>>> -
>>>>> - public int getQueuedTasksCount() {
>>>>> - return getQueue().size();
>>>>> - }
>>>>> -
>>>>> - public int getMaxQueuedTasksCount() {
>>>>> - return maxTasksCount;
>>>>> - }
>>>>> -
>>>>> - public void setMaxQueuedTasksCount(int maxTasksCount) {
>>>>> - throw new UnsupportedOperationException("Value could not
>>>>> be changed!");
>>>>> - }
>>>>> -
>>>>> - public String getName() {
>>>>> - return name;
>>>>> - }
>>>>> -
>>>>> - public void setName(String name) {
>>>>> - this.name = name;
>>>>> - }
>>>>> -
>>>>> - public int getPriority() {
>>>>> - return priority;
>>>>> - }
>>>>> -
>>>>> - public void setPriority(int priority) {
>>>>> - this.priority = priority;
>>>>> - }
>>>>> -
>>>>> - public int getQueueSize() {
>>>>> - return getQueue().size();
>>>>> - }
>>>>> -
>>>>> - public ByteBufferType getByteBufferType() {
>>>>> - return byteBufferType;
>>>>> - }
>>>>> -
>>>>> - public void setByteBufferType(ByteBufferType byteBufferType) {
>>>>> - this.byteBufferType = byteBufferType;
>>>>> - }
>>>>> -
>>>>> - public int getInitialByteBufferSize() {
>>>>> - return initialByteBufferSize;
>>>>> - }
>>>>> -
>>>>> - public void setInitialByteBufferSize(int initialByteBufferSize) {
>>>>> - this.initialByteBufferSize = initialByteBufferSize;
>>>>> - }
>>>>> -
>>>>> - public void start() {
>>>>> - this.prestartCoreThread();
>>>>> - }
>>>>> -
>>>>> - public void stop() {
>>>>> - shutdownNow();
>>>>> - }
>>>>> -
>>>>> - public void uncaughtException(Thread thread, Throwable
>>>>> throwable) {
>>>>> - Controller.logger().log(Level.WARNING,
>>>>> - "Uncaught thread exception. Thread: " + thread,
>>>>> throwable);
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - protected void beforeExecute(Thread t, Runnable r) {
>>>>> - ((WorkerThreadImpl) t).createByteBuffer(false);
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - protected void afterExecute(Runnable r, Throwable t) {
>>>>> - ((WorkerThreadImpl) Thread.currentThread()).reset();
>>>>> - }
>>>>> -
>>>>> - private class DefaultWorkerThreadFactory implements
>>>>> ThreadFactory {
>>>>> - public Thread newThread(Runnable r) {
>>>>> - Thread thread = new
>>>>> WorkerThreadImpl(DefaultThreadPool.this,
>>>>> - name + "-WorkerThread(" +
>>>>> - workerThreadCounter.getAndIncrement() + ")", r,
>>>>> - initialByteBufferSize);
>>>>> -
>>>>> thread.setUncaughtExceptionHandler(DefaultThreadPool.this);
>>>>> - thread.setPriority(priority);
>>>>> - return thread;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public String toString() {
>>>>> - StringBuilder builder = new StringBuilder(512);
>>>>> - builder.append("DefaultThreadPool[");
>>>>> - injectToStringAttributes(builder);
>>>>> - builder.append(']');
>>>>> - return builder.toString();
>>>>> - }
>>>>> -
>>>>> - protected void injectToStringAttributes(StringBuilder sb) {
>>>>> - sb.append("name=").append(name);
>>>>> - sb.append(", priority=").append(priority);
>>>>> - sb.append(", min-threads=").append(getCorePoolSize());
>>>>> - sb.append(", max-threads=").append(getMaximumPoolSize());
>>>>> - sb.append(",
>>>>> max-queue-size=").append(getMaxQueuedTasksCount());
>>>>> - sb.append(",
>>>>> initial-byte-buffer-size=").append(initialByteBufferSize);
>>>>> - sb.append(", byte-buffer-type=").append(byteBufferType);
>>>>> - sb.append(", is-shutdown=").append(isShutdown());
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachmentWrapper.java
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachmentWrapper.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectionKeyAttachmentWrapper.java
>>>>> (working copy)
>>>>> @@ -1,77 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.nio.channels.SelectionKey;
>>>>> -
>>>>> -/**
>>>>> - * {_at_link SelectionKey} attachment utility class.
>>>>> - * This class could be used as wrapper for custom {_at_link SelectionKey}
>>>>> - * attachments, which are not subclasses of
>>>>> <code>SelectionKeyAttachment</code>
>>>>> - * class.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class SelectionKeyAttachmentWrapper<E> extends
>>>>> SelectionKeyActionAttachment {
>>>>> - private E attachment;
>>>>> -
>>>>> - public E getAttachment() {
>>>>> - return attachment;
>>>>> - }
>>>>> -
>>>>> - public void setAttachment(E attachment) {
>>>>> - this.attachment = attachment;
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public void process(SelectionKey selectionKey) {
>>>>> - // Do nothing by default
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public void postProcess(SelectionKey selectionKey) {
>>>>> - // Do nothing by default
>>>>> - }
>>>>> -
>>>>> - @Override
>>>>> - public void release(SelectionKey selectionKey) {
>>>>> - attachment = null;
>>>>> - super.release(selectionKey);
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectorFactory.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectorFactory.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/SelectorFactory.java
>>>>> (working copy)
>>>>> @@ -1,235 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Controller;
>>>>> -import java.io.IOException;
>>>>> -import java.nio.channels.Selector;
>>>>> -import java.util.EmptyStackException;
>>>>> -import java.util.Stack;
>>>>> -import java.util.logging.Level;
>>>>> -import java.util.logging.Logger;
>>>>> -
>>>>> -/**
>>>>> - * Factory used to dispatch/share {_at_link Selector}.
>>>>> - *
>>>>> - * @author Scott Oaks
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public class SelectorFactory{
>>>>> -
>>>>> - public static final int DEFAULT_MAX_SELECTORS = 20;
>>>>> -
>>>>> - /**
>>>>> - * The timeout before we exit.
>>>>> - */
>>>>> - public static long timeout = 5000;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The number of {_at_link Selector} to create.
>>>>> - */
>>>>> - private static int maxSelectors = DEFAULT_MAX_SELECTORS;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Cache of {_at_link Selector}
>>>>> - */
>>>>> - private final static Stack<Selector> selectors = new
>>>>> Stack<Selector>();
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * have we created the Selector instances.
>>>>> - */
>>>>> - private static boolean initialized = false;
>>>>> -
>>>>> - /**
>>>>> - * Set max selector pool size.
>>>>> - * @param size max pool size
>>>>> - */
>>>>> - public final static void setMaxSelectors(int size) throws
>>>>> IOException {
>>>>> - synchronized(selectors) {
>>>>> - if (size > maxSelectors || !initialized) {
>>>>> - // if not initialized yet - grow cache by size
>>>>> - if (!initialized) maxSelectors = 0;
>>>>> -
>>>>> - grow(size);
>>>>> - } else if (size < maxSelectors) {
>>>>> - reduce(size);
>>>>> - }
>>>>> -
>>>>> - maxSelectors = size;
>>>>> - initialized = true;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Returns max selector pool size
>>>>> - * @return max pool size
>>>>> - */
>>>>> - public final static int getMaxSelectors() {
>>>>> - return maxSelectors;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Get a exclusive {_at_link Selector}
>>>>> - * @return {_at_link Selector}
>>>>> - */
>>>>> - public final static Selector getSelector() {
>>>>> - synchronized(selectors) {
>>>>> - if (!initialized) {
>>>>> - try {
>>>>> - setMaxSelectors(maxSelectors);
>>>>> - } catch (IOException e) {
>>>>> - Logger logger = Controller.logger();
>>>>> - if (logger.isLoggable(Level.WARNING)) {
>>>>> - logger.log(Level.WARNING, "SelectorFactory
>>>>> lazy initialization", e);
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - Selector s = null;
>>>>> - try {
>>>>> - if ( selectors.size() != 0 )
>>>>> - s = selectors.pop();
>>>>> - } catch (EmptyStackException ex){}
>>>>> -
>>>>> - int attempts = 0;
>>>>> - try{
>>>>> - while (s == null && attempts < 2) {
>>>>> - selectors.wait(timeout);
>>>>> - try {
>>>>> - if ( selectors.size() != 0 )
>>>>> - s = selectors.pop();
>>>>> - } catch (EmptyStackException ex){
>>>>> - break;
>>>>> - }
>>>>> - attempts++;
>>>>> - }
>>>>> - } catch (InterruptedException ex){}
>>>>> - return s;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the {_at_link Selector} to the cache
>>>>> - * @param s {_at_link Selector}
>>>>> - */
>>>>> - public final static void returnSelector(Selector s) {
>>>>> - synchronized(selectors) {
>>>>> - selectors.push(s);
>>>>> - if (selectors.size() == 1)
>>>>> - selectors.notify();
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Executes <code>Selector.selectNow()</code> and returns
>>>>> - * the {_at_link Selector} to the cache
>>>>> - */
>>>>> - public final static void selectNowAndReturnSelector(Selector s) {
>>>>> - try {
>>>>> - s.selectNow();
>>>>> - returnSelector(s);
>>>>> - } catch(IOException e) {
>>>>> - Logger logger = Controller.logger();
>>>>> - logger.log(Level.WARNING,
>>>>> - "Unexpected problem when releasing temporary
>>>>> Selector", e);
>>>>> - try {
>>>>> - s.close();
>>>>> - } catch(IOException ee) {
>>>>> - // We are not interested
>>>>> - }
>>>>> -
>>>>> - try {
>>>>> - reimburseSelector();
>>>>> - } catch(IOException ee) {
>>>>> - logger.log(Level.WARNING,
>>>>> - "Problematic Selector could not be
>>>>> reimbursed!", ee);
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Add Selector to the cache.
>>>>> - * This method could be called to reimberse a lost or
>>>>> problematic Selector.
>>>>> - *
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public final static void reimburseSelector() throws IOException {
>>>>> - returnSelector(createSelector());
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Creeate Selector
>>>>> - * @return Selector
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - protected static Selector createSelector() throws IOException {
>>>>> - return Selector.open();
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Increase {_at_link Selector} pool size
>>>>> - */
>>>>> - private static void grow(int size) throws IOException {
>>>>> - for(int i=0; i<size - maxSelectors; i++) {
>>>>> - selectors.add(createSelector());
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Decrease {_at_link Selector} pool size
>>>>> - */
>>>>> - private static void reduce(int size) {
>>>>> - for(int i=0; i<maxSelectors - size; i++) {
>>>>> - try {
>>>>> - Selector selector = selectors.pop();
>>>>> - selector.close();
>>>>> - } catch(IOException e) {
>>>>> - Logger logger = Controller.logger();
>>>>> - if (logger.isLoggable(Level.FINE)) {
>>>>> - logger.log(Level.FINE,
>>>>> "SelectorFactory.reduce", e);
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/LoggingFormatter.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/LoggingFormatter.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/LoggingFormatter.java
>>>>> (working copy)
>>>>> @@ -1,166 +0,0 @@
>>>>> -/*
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.io.PrintWriter;
>>>>> -import java.io.StringWriter;
>>>>> -import java.util.Date;
>>>>> -import java.util.logging.Formatter;
>>>>> -import java.util.logging.Level;
>>>>> -import java.util.logging.LogRecord;
>>>>> -import java.util.logging.Logger;
>>>>> -
>>>>> -/**
>>>>> - *
>>>>> - * Format the record to include the Thread that logged the record.
>>>>> - * To change the default configuration for java.util.logging you
>>>>> will need to
>>>>> - * add this in the command line parameters :
>>>>> -Djava.util.logging.config.file=myfile
>>>>> - *
>>>>> - * Here a sample of what you need to include in myfile
>>>>> - *
>>>>> - * #the default logger is this add you can replace it with
>>>>> LoggingFormatter
>>>>> - * #java.util.logging.ConsoleHandler.formatter =
>>>>> java.util.logging.SimpleFormatter
>>>>> - * java.util.logging.ConsoleHandler.formatter =
>>>>> com.sun.grizzly.util.LoggingFormatter
>>>>> - *
>>>>> - * refer to : https://grizzly.dev.java.net/issues/show_bug.cgi?id=291
>>>>> - *
>>>>> - * @author Sebastien Dionne
>>>>> - *
>>>>> - */
>>>>> -public class LoggingFormatter extends Formatter {
>>>>> -
>>>>> - private static Logger log =
>>>>> Logger.getLogger(LoggingFormatter.class.getName());
>>>>> - - // took that from the JDK java.util.logging.SimpleFormatter
>>>>> - - // Line separator string. This is the value of the
>>>>> line.separator
>>>>> - // property at the moment that the SimpleFormatter was created.
>>>>> - private static String lineSeparator = "\n";
>>>>> - - static {
>>>>> - try {
>>>>> - String separator = System.getProperty("line.separator");
>>>>> - - if(separator!=null &&
>>>>> separator.trim().length()>0){
>>>>> - lineSeparator = separator;
>>>>> - }
>>>>> - } catch(SecurityException se){
>>>>> - // ignore the exception
>>>>> - }
>>>>> - - }
>>>>> - - public LoggingFormatter() {
>>>>> - super();
>>>>> - }
>>>>> - - /**
>>>>> - * Format the record to include the Thread that logged this
>>>>> record.
>>>>> - * the format should be
>>>>> - * [WorkerThreadImpl-1, Grizzly] 2008-10-08 18:49:59 [INFO]
>>>>> com.sun.grizzly.Controller:doSelect message
>>>>> - *
>>>>> - * @param record The record to be logged into the logger.
>>>>> - *
>>>>> - * @return the record formated to be more human readable
>>>>> - */
>>>>> - public String format(LogRecord record) {
>>>>> - - // Create a StringBuffer to contain the formatted
>>>>> record
>>>>> - StringBuffer sb = new StringBuffer();
>>>>> - -
>>>>> sb.append("[").append(Thread.currentThread().getName()).append("]
>>>>> ");
>>>>> - - // Get the date from the LogRecord and add it to
>>>>> the buffer
>>>>> - Date date = new Date(record.getMillis());
>>>>> - sb.append(date.toString()).append(" ");
>>>>> - - // Get the level name and add it to the buffer
>>>>> -
>>>>> sb.append("[").append(record.getLevel().getLocalizedName()).append("]
>>>>> ");
>>>>> - - // Get Class name
>>>>> - if (record.getSourceClassName() != null) { -
>>>>> sb.append(record.getSourceClassName());
>>>>> - } else {
>>>>> - sb.append(record.getLoggerName());
>>>>> - }
>>>>> - // Get method name
>>>>> - if (record.getSourceMethodName() != null) { -
>>>>> sb.append(" ");
>>>>> - sb.append(record.getSourceMethodName());
>>>>> - }
>>>>> - sb.append(":");
>>>>> - - // Get the formatted message (includes localization
>>>>> - // and substitution of parameters) and add it to the buffer
>>>>> - sb.append(formatMessage(record)).append(lineSeparator);
>>>>> - - //we log the stackTrace if it's a exception
>>>>> - if (record.getThrown() != null) {
>>>>> - try {
>>>>> - StringWriter sw = new StringWriter();
>>>>> - PrintWriter pw = new PrintWriter(sw);
>>>>> - record.getThrown().printStackTrace(pw);
>>>>> - pw.close();
>>>>> - sb.append(sw.toString());
>>>>> - } catch (Exception ex) {
>>>>> - }
>>>>> - }
>>>>> - sb.append(lineSeparator);
>>>>> -
>>>>> - return sb.toString();
>>>>> - }
>>>>> - - /**
>>>>> - * Example to test the com.sun.grizzly.util.LoggingFormatter
>>>>> - * You need to include this parameter in the command line
>>>>> - * -Djava.util.logging.config.file=myfile
>>>>> - * @param args main parameters
>>>>> - */
>>>>> - public static void main(String[] args) {
>>>>> - - log.info("Info Event");
>>>>> - - log.severe("Severe Event");
>>>>> - - // show the thread info in the logger.
>>>>> - Thread t = new Thread(new Runnable(){public void
>>>>> run(){log.info("Info Event in Thread");}}, "Thread into main");
>>>>> - t.start();
>>>>> - - log.log(Level.SEVERE, "exception", new Exception());
>>>>> - - - }
>>>>> -}
>>>>> \ No newline at end of file
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StateHolder.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StateHolder.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/StateHolder.java
>>>>> (working copy)
>>>>> @@ -1,369 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Controller;
>>>>> -import java.util.Iterator;
>>>>> -import java.util.Map;
>>>>> -import java.util.concurrent.Callable;
>>>>> -import java.util.concurrent.ConcurrentHashMap;
>>>>> -import java.util.concurrent.CountDownLatch;
>>>>> -import java.util.concurrent.atomic.AtomicReference;
>>>>> -import java.util.concurrent.locks.ReentrantReadWriteLock;
>>>>> -import java.util.logging.Level;
>>>>> -
>>>>> -/**
>>>>> - * Class, which holds the state.
>>>>> - * Provides API for state change notification, state read/write
>>>>> access locking.
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class StateHolder<E> {
>>>>> - private AtomicReference<E> stateRef;
>>>>> -
>>>>> - private ReentrantReadWriteLock readWriteLock;
>>>>> - private volatile boolean isLockEnabled;
>>>>> -
>>>>> - private Map<ConditionListener<E>, Object> conditionListeners;
>>>>> -
>>>>> - /**
>>>>> - * Constructs {_at_link StateHolder}.
>>>>> - * StateHolder will work in not-locking mode.
>>>>> - */
>>>>> - public StateHolder() {
>>>>> - this(false);
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Constructs {_at_link StateHolder}.
>>>>> - * @param isLockEnabled locking mode
>>>>> - */
>>>>> - public StateHolder(boolean isLockEnabled) {
>>>>> - stateRef = new AtomicReference<E>();
>>>>> - readWriteLock = new ReentrantReadWriteLock();
>>>>>> - conditionListeners = new
>>>>>> ConcurrentHashMap<ConditionListener<E>, Object>();
>>>>>> - this.isLockEnabled = isLockEnabled;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Gets current state
>>>>>> - * Current StateHolder locking mode will be used
>>>>>> - * @return state
>>>>>> - */
>>>>>> - public E getState() {
>>>>>> - return getState(isLockEnabled);
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Gets current state
>>>>>> - * @param locked if true, get will be invoked in locking
>>>>>> mode, false - non-locked
>>>>>> - * @return state
>>>>>> - */
>>>>>> - public E getState(boolean locked) {
>>>>>> - if (locked) {
>>>>>> - readWriteLock.readLock().lock();
>>>>>> - }
>>>>>> -
>>>>>> - E retState = stateRef.get();
>>>>>> -
>>>>>> - if (locked) {
>>>>>> - readWriteLock.readLock().unlock();
>>>>>> - }
>>>>>> - return retState;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Sets current state
>>>>>> - * Current StateHolder locking mode will be used
>>>>>> - * @param state
>>>>>> - */
>>>>>> - public void setState(E state) {
>>>>>> - setState(state, isLockEnabled);
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Sets current state
>>>>>> - * @param state
>>>>>> - * @param locked if true, set will be invoked in locking
>>>>>> mode, false - non-locking
>>>>>> - */
>>>>>> - public void setState(E state, boolean locked) {
>>>>>> - if (locked) {
>>>>>> - readWriteLock.writeLock().lock();
>>>>>> - }
>>>>>> -
>>>>>> - stateRef.set(state);
>>>>>> -
>>>>>> - // downgrading lock to read
>>>>>> - if (locked) {
>>>>>> - readWriteLock.readLock().lock();
>>>>>> - readWriteLock.writeLock().unlock();
>>>>>> - }
>>>>>> -
>>>>>> - checkConditionListeners(state);
>>>>>> -
>>>>>> - if (locked) {
>>>>>> - readWriteLock.readLock().unlock();
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Gets Read/Write locker, which is used by this {_at_link
>>>>>> StateHolder}
>>>>>> - * @return locker
>>>>>> - */
>>>>>> - public ReentrantReadWriteLock getStateLocker() {
>>>>>> - return readWriteLock;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Gets current locking mode
>>>>>> - * @return true, if mode is set to locking, false otherwise
>>>>>> - */
>>>>>> - public boolean isLockEnabled() {
>>>>>> - return isLockEnabled;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Setss current locking mode
>>>>>> - * @param isLockEnabled true, if mode will be set to locking,
>>>>>> false otherwise
>>>>>> - */
>>>>>> - public void setLockEnabled(boolean isLockEnabled) {
>>>>>> - this.isLockEnabled = isLockEnabled;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Register listener, which will be notified, when state will
>>>>>> be equal to passed
>>>>>> - * one. Once listener will be notified - it will be removed
>>>>>> from this
>>>>>> - * {_at_link StateHolder}'s listener set.
>>>>>> - * @param state State, listener is interested in
>>>>>> - * @param listener Object, which will be notified. This
>>>>>> {_at_link StateHolder}
>>>>>> - * implementation works with Runnable, Callable,
>>>>>> CountDownLatch, Object
>>>>>> - * listeners
>>>>>> - * @return <code>ConditionListener</code>, if current state
>>>>>> is not equal to required
>>>>>> - * and listener was registered, null if current
>>>>>> state is equal to required.
>>>>>> - * In both cases listener will be notified
>>>>>> - */
>>>>>> - public ConditionListener<E> notifyWhenStateIsEqual(E state,
>>>>>> Object listener) {
>>>>>> - boolean isLockEnabledLocal = isLockEnabled;
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().lock();
>>>>>> - }
>>>>>> -
>>>>>> - ConditionListener<E> conditionListener = null;
>>>>>> -
>>>>>> - if (stateRef.get().equals(state)) {
>>>>>> - EventListener.notifyListener(listener);
>>>>>> - } else {
>>>>>> - conditionListener = new EqualConditionListener<E>();
>>>>>> - EventListener eventListener = new EventListener();
>>>>>> - eventListener.set(listener);
>>>>>> - conditionListener.set(state, eventListener);
>>>>>> -
>>>>>> - conditionListeners.put(conditionListener, this);
>>>>>> - }
>>>>>> -
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().unlock();
>>>>>> - }
>>>>>> -
>>>>>> - return conditionListener;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Register listener, which will be notified, when state will
>>>>>> become not equal
>>>>>> - * to passed one. Once listener will be notified - it will be
>>>>>> removed from
>>>>>> - * this {_at_link StateHolder}'s listener set.
>>>>>> - * @param state State, listener is interested in
>>>>>> - * @param listener Object, which will be notified. This
>>>>>> {_at_link StateHolder}
>>>>>> - * implementation works with Runnable, Callable,
>>>>>> CountDownLatch, Object
>>>>>> - * listeners
>>>>>> - * @return <code>ConditionListener</code>, if current state
>>>>>> is equal to required
>>>>>> - * and listener was registered, null if current
>>>>>> state is not equal to required.
>>>>>> - * In both cases listener will be notified
>>>>>> - */
>>>>>> - public ConditionListener<E> notifyWhenStateIsNotEqual(E
>>>>>> state, Object listener) {
>>>>>> - boolean isLockEnabledLocal = isLockEnabled;
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().lock();
>>>>>> - }
>>>>>> -
>>>>>> - ConditionListener<E> conditionListener = null;
>>>>>> -
>>>>>> - if (!stateRef.get().equals(state)) {
>>>>>> - EventListener.notifyListener(listener);
>>>>>> - } else {
>>>>>> - conditionListener = new NotEqualConditionListener<E>();
>>>>>> - EventListener eventListener = new EventListener();
>>>>>> - eventListener.set(listener);
>>>>>> - conditionListener.set(state, eventListener);
>>>>>> -
>>>>>> - conditionListeners.put(conditionListener, this);
>>>>>> - }
>>>>>> -
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().unlock();
>>>>>> - }
>>>>>> -
>>>>>> - return conditionListener;
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Register custom condition listener, which will be
>>>>>> notified, when listener's
>>>>>> - * condition will become true. Once listener will be notified
>>>>>> - it will be
>>>>>> - * removed from this {_at_link StateHolder}'s listener set.
>>>>>> - * @param conditionListener contains both condition and
>>>>>> listener, which will be
>>>>>> - * called, when condition become true
>>>>>> - */
>>>>>> - public void
>>>>>> notifyWhenConditionMatchState(ConditionListener<E>
>>>>>> conditionListener) {
>>>>>> - boolean isLockEnabledLocal = isLockEnabled;
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().lock();
>>>>>> - }
>>>>>> -
>>>>>> - E currentState = getState();
>>>>>> -
>>>>>> - if (conditionListener.check(currentState)) {
>>>>>> - conditionListener.notifyListener();
>>>>>> - } else {
>>>>>> - conditionListeners.put(conditionListener, this);
>>>>>> - }
>>>>>> -
>>>>>> - if (isLockEnabledLocal) {
>>>>>> - getStateLocker().writeLock().unlock();
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - public void removeConditionListener(ConditionListener<E>
>>>>>> conditionListener) {
>>>>>> - if (conditionListener == null) return;
>>>>>> -
>>>>>> - conditionListeners.remove(conditionListener);
>>>>>> - }
>>>>>> -
>>>>>> - protected void checkConditionListeners(E state) {
>>>>>> - Iterator<ConditionListener<E>> it =
>>>>>> conditionListeners.keySet().iterator();
>>>>>> - while(it.hasNext()) {
>>>>>> - ConditionListener<E> listener = it.next();
>>>>>> - try {
>>>>>> - if (listener.check(state)) {
>>>>>> - it.remove();
>>>>>> - listener.notifyListener();
>>>>>> - }
>>>>>> - } catch(Exception e) {
>>>>>> - Controller.logger().log(Level.WARNING, "Error
>>>>>> calling ConditionListener", e);
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Common ConditionListener class, which could be used with
>>>>>> StateHolder, to
>>>>>> - * register custom conditions.
>>>>>> - *
>>>>>> - * On each state change - condition will be checked, if it's
>>>>>> true - Condition's
>>>>>> - * listener will be notified.
>>>>>> - */
>>>>>> - public static abstract class ConditionListener<E> {
>>>>>> - public E state;
>>>>>> - public EventListener listener;
>>>>>> -
>>>>>> - protected void set(E state, EventListener listener) {
>>>>>> - this.state = state;
>>>>>> - this.listener = listener;
>>>>>> - }
>>>>>> -
>>>>>> - public void notifyListener() {
>>>>>> - listener.notifyEvent();
>>>>>> - }
>>>>>> -
>>>>>> - public abstract boolean check(E state);
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Equal ConditionListener implementation
>>>>>> - * @param E state class
>>>>>> - */
>>>>>> - public static class EqualConditionListener<E> extends
>>>>>> ConditionListener<E> {
>>>>>> - public boolean check(E state) {
>>>>>> - return state.equals(this.state);
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * Not equal ConditionListener implementation
>>>>>> - * @param E state class
>>>>>> - */
>>>>>> - public static class NotEqualConditionListener<E> extends
>>>>>> ConditionListener<E> {
>>>>>> - public boolean check(E state) {
>>>>>> - return !state.equals(this.state);
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - /**
>>>>>> - * EventListener class, which is a part of
>>>>>> - * <codE>EventConditionListener</code>, and implements
>>>>>> notificatation logic,
>>>>>> - * when condition becomes true.
>>>>>> - */
>>>>>> - public static class EventListener {
>>>>>> - public Object notificationObject;
>>>>>> -
>>>>>> - public void set(Object notificationObject) {
>>>>>> - this.notificationObject = notificationObject;
>>>>>> - }
>>>>>> -
>>>>>> - public void notifyEvent() {
>>>>>> - notifyListener(notificationObject);
>>>>>> - }
>>>>>> -
>>>>>> - protected static void notifyListener(Object listener) {
>>>>>> - if (listener instanceof CountDownLatch) {
>>>>>> - ((CountDownLatch) listener).countDown();
>>>>>> - } else if (listener instanceof Callable) {
>>>>>> - try {
>>>>>> - ((Callable) listener).call();
>>>>>> - } catch(Exception e) {
>>>>>> - throw new RuntimeException(e);
>>>>>> - }
>>>>>> - } else if (listener instanceof Runnable) {
>>>>>> - ((Runnable) listener).run();
>>>>>> - } else {
>>>>>> - synchronized(listener) {
>>>>>> - listener.notify();
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> -}
>>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/util/State.java
>>>>>> ===================================================================
>>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/util/State.java
>>>>>> (revision 2047)
>>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/util/State.java
>>>>>> (working copy)
>>>>>> @@ -1,51 +0,0 @@
>>>>>> -/*
>>>>>> - *
>>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>>> - *
>>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>>> - *
>>>>>> - * The contents of this file are subject to the terms of either
>>>>>> the GNU
>>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>>> Development
>>>>>> - * and Distribution License("CDDL") (collectively, the
>>>>>> "License"). You
>>>>>> - * may not use this file except in compliance with the License.
>>>>>> You can obtain
>>>>>> - * a copy of the License at
>>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>>> the specific
>>>>>> - * language governing permissions and limitations under the License.
>>>>>> - *
>>>>>> - * When distributing the software, include this License Header
>>>>>> Notice in each
>>>>>> - * file and include the License file at
>>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>>> - * Sun designates this particular file as subject to the
>>>>>> "Classpath" exception
>>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>>> file that
>>>>>> - * accompanied this code. If applicable, add the following below
>>>>>> the License
>>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>>> your own
>>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>>> - * [name of copyright owner]"
>>>>>> - *
>>>>>> - * Contributor(s):
>>>>>> - *
>>>>>> - * If you wish your version of this file to be governed by only
>>>>>> the CDDL or
>>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>>> "[Contributor]
>>>>>> - * elects to include this software in this distribution under the
>>>>>> [CDDL or GPL
>>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>>> license, a
>>>>>> - * recipient has the option to distribute your version of this
>>>>>> file under
>>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>>> license to
>>>>>> - * its licensees as provided above. However, if you add GPL
>>>>>> Version 2 code
>>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>>> option applies
>>>>>> - * only if the new code is made subject to such option by the
>>>>>> copyright
>>>>>> - * holder.
>>>>>> - *
>>>>>> - */
>>>>>> -
>>>>>> -package com.sun.grizzly.util;
>>>>>> -
>>>>>> -/**
>>>>>> - * State enum
>>>>>> - * STOPPED - Process is stopped, not running state
>>>>>> - * STARTED - Process is started, running state
>>>>>> - * PAUSED - Process is paused, not processing tasks
>>>>>> - *
>>>>>> - * @author Alexey Stashok
>>>>>> - */
>>>>>> -public enum State {
>>>>>> - STOPPED, STARTED, PAUSED
>>>>>> -}
>>>>>> Index:
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/InputReader.java
>>>>>> ===================================================================
>>>>>> ---
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/InputReader.java
>>>>>> (revision 2047)
>>>>>> +++
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/InputReader.java
>>>>>> (working copy)
>>>>>> @@ -1,384 +0,0 @@
>>>>>> -/*
>>>>>> - *
>>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>>> - *
>>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>>> - *
>>>>>> - * The contents of this file are subject to the terms of either
>>>>>> the GNU
>>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>>> Development
>>>>>> - * and Distribution License("CDDL") (collectively, the
>>>>>> "License"). You
>>>>>> - * may not use this file except in compliance with the License.
>>>>>> You can obtain
>>>>>> - * a copy of the License at
>>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>>> the specific
>>>>>> - * language governing permissions and limitations under the License.
>>>>>> - *
>>>>>> - * When distributing the software, include this License Header
>>>>>> Notice in each
>>>>>> - * file and include the License file at
>>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>>> - * Sun designates this particular file as subject to the
>>>>>> "Classpath" exception
>>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>>> file that
>>>>>> - * accompanied this code. If applicable, add the following below
>>>>>> the License
>>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>>> your own
>>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>>> - * [name of copyright owner]"
>>>>>> - *
>>>>>> - * Contributor(s):
>>>>>> - *
>>>>>> - * If you wish your version of this file to be governed by only
>>>>>> the CDDL or
>>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>>> "[Contributor]
>>>>>> - * elects to include this software in this distribution under the
>>>>>> [CDDL or GPL
>>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>>> license, a
>>>>>> - * recipient has the option to distribute your version of this
>>>>>> file under
>>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>>> license to
>>>>>> - * its licensees as provided above. However, if you add GPL
>>>>>> Version 2 code
>>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>>> option applies
>>>>>> - * only if the new code is made subject to such option by the
>>>>>> copyright
>>>>>> - * holder.
>>>>>> - *
>>>>>> - */
>>>>>> -package com.sun.grizzly.util;
>>>>>> -
>>>>>> -import java.io.InputStream;
>>>>>> -import java.io.IOException;
>>>>>> -import java.nio.ByteBuffer;
>>>>>> -import java.nio.channels.SelectionKey;
>>>>>> -import java.nio.channels.SocketChannel;
>>>>>> -
>>>>>> -/**
>>>>>> - * This class implement IO stream operations on top of a {_at_link
>>>>>> ByteBuffer}.
>>>>>> - * Under the hood, this class use a temporary Selector pool for
>>>>>> reading
>>>>>> - * bytes when the client ask for more and the current Selector is
>>>>>> not yet ready.
>>>>>> - *
>>>>>> - * @author Jeanfrancois Arcand
>>>>>> - */
>>>>>> -public class InputReader extends InputStream {
>>>>>> -
>>>>>> - /**
>>>>>> - * The {_at_link Channel} type is used to avoid invoking the
>>>>>> instanceof
>>>>>> - * operation when registering the Socket|Datagram Channel to
>>>>>> the Selector.
>>>>>> - */
>>>>>> - public enum ChannelType { SocketChannel, DatagramChannel }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * By default this class will cast the Channel to a
>>>>>> SocketChannel.
>>>>>> - */
>>>>>> - private ChannelType defaultChannelType =
>>>>>> ChannelType.SocketChannel;
>>>>>> -
>>>>>> -
>>>>>> - private static int defaultReadTimeout = 30000;
>>>>>> -
>>>>>> - /**
>>>>>> - * The wrapped <code>ByteBuffer</code<
>>>>>> - */
>>>>>> - protected ByteBuffer byteBuffer;
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * The {_at_link SelectionKey} used by this stream.
>>>>>> - */
>>>>>> - protected SelectionKey key = null;
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * The time to wait before timing out when reading bytes
>>>>>> - */
>>>>>> - protected int readTimeout = defaultReadTimeout;
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Is the stream secure.
>>>>>> - */
>>>>>> - private boolean secure = false;
>>>>>> -
>>>>>> -
>>>>>> - // -------------------------------------------------
>>>>>> Constructor -------//
>>>>>> -
>>>>>> -
>>>>>> - public InputReader () {
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - public InputReader (final ByteBuffer byteBuffer) {
>>>>>> - this.byteBuffer = byteBuffer;
>>>>>> - }
>>>>>> -
>>>>>> - //
>>>>>> ---------------------------------------------------------------------//
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Set the wrapped {_at_link ByteBuffer}
>>>>>> - * @param byteBuffer The wrapped byteBuffer
>>>>>> - */
>>>>>> - public void setByteBuffer(final ByteBuffer byteBuffer) {
>>>>>> - this.byteBuffer = byteBuffer;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Get the wrapped {_at_link ByteBuffer}
>>>>>> - * @return {_at_link ByteBuffer}
>>>>>> - */
>>>>>> - public ByteBuffer getByteBuffer() {
>>>>>> - return byteBuffer;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Return the available bytes
>>>>>> - * @return the wrapped byteBuffer.remaining()
>>>>>> - */
>>>>>> - @Override
>>>>>> - public int available () {
>>>>>> - return (byteBuffer.remaining());
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Close this stream.
>>>>>> - */
>>>>>> - @Override
>>>>>> - public void close () {
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Return true if mark is supported.
>>>>>> - */
>>>>>> - @Override
>>>>> < blockquote type="cite">- public boolean markSupported() {
>>>>> - return false;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read the first byte from the wrapped {_at_link ByteBuffer}.
>>>>> - */
>>>>> - @Override
>>>>> - public int read() throws IOException {
>>>>> - if (!byteBuffer.hasRemaining()){
>>>>> - byteBuffer.clear();
>>>>> - int eof = doRead();
>>>>> -
>>>>> - if (eof <= 0){
>>>>> - return -1;
>>>>> - }
>>>>> - }
>>>>> - return (byteBuffer.hasRemaining() ? (byteBuffer.get () &
>>>>> 0xff): -1);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read the bytes from the wrapped {_at_link ByteBuffer}.
>>>>> - */
>>>>> - @Override
>>>>> - public int read(byte[] b) throws IOException {
>>>>> - return (read (b, 0, b.length));
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read the first byte of the wrapped {_at_link ByteBuffer}.
>>>>> - * @param offset
>>>>> - * @param length
>>>>> - */
>>>>> - @Override
>>>>> - public int read(byte[] b, int offset, int length) throws
>>>>> IOException {
>>>>> - if (!byteBuffer.hasRemaining()) {
>>>>> - byteBuffer.clear();
>>>>> - int eof = doRead();
>>>>> -
>>>>> - if (eof <= 0){
>>>>> - return -1;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - if (length > byteBuffer.remaining()) {
>>>>> - length = byteBuffer.remaining();
>>>>> - }
>>>>> - byteBuffer.get(b, offset, length);
>>>>> -
>>>>> - return (length);
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read the bytes of the wrapped {_at_link ByteBuffer}.
>>>>> - * @param bb {_at_link ByteBuffer}
>>>>> - * @return - number of bytes read
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - public int read(ByteBuffer bb) throws IOException {
>>>>> - //Switch Buffer
>>>>> - ByteBuffer oldBB = byteBuffer;
>>>>> - byteBuffer = bb;
>>>>> - int initialPosition = bb.position();
>>>>> - int eof = doRead();
>>>>> -
>>>>> - if (eof <= 0){
>>>>> - return -1;
>>>>> - }
>>>>> - // Back to the default one.
>>>>> - byteBuffer = oldBB;
>>>>> -
>>>>> - // Calculate the number of bytes were read
>>>>> - int bytesRead = bb.limit() - initialPosition;
>>>>> - return bytesRead;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Recycle this object.
>>>>> - */
>>>>> - public void recycle(){
>>>>> - byteBuffer = null;
>>>>> - key = null;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the {_at_link SelectionKey} used to reads bytes.
>>>>> - * @param key {_at_link SelectionKey}
>>>>> - */
>>>>> - public void setSelectionKey(SelectionKey key){
>>>>> - this.key = key;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read bytes using the read <code>ReadSelector</code>
>>>>> - * @return - number of bytes read
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - protected int doRead() throws IOException{
>>>>> - if ( key == null ) return -1;
>>>>> -
>>>>> - int nRead = -1;
>>>>> - try{
>>>>> - if (secure){
>>>>> - nRead = doSecureRead();
>>>>> - } else {
>>>>> - nRead = doClearRead();
>>>>> - }
>>>>> - } catch (IOException ex){
>>>>> - nRead = -1;
>>>>> - throw ex;
>>>>> - } finally {
>>>>> - if (nRead == -1){
>>>>> - if (Thread.currentThread() instanceof WorkerThread){
>>>>> - ConnectionCloseHandler cch =
>>>>> (ConnectionCloseHandler)
>>>>> - ((WorkerThread)Thread.currentThread())
>>>>> -
>>>>> .getAttachment().getAttribute("ConnectionCloseHandler");
>>>>> - if (cch != null){
>>>>> - cch.remotlyClosed(key);
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> - return nRead;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Read and decrypt bytes from the underlying SSL connections. All
>>>>> - * the SSLEngine operations are delegated to class {_at_link
>>>>> SSLUtils}.
>>>>> - * @return number of bytes read
>>>>> - * @throws java.io.IOException
>>>>> - */
>>>>> - protected int doSecureRead() throws IOException{
>>>>> - final WorkerThread workerThread =
>>>>> - (WorkerThread)Thread.currentThread();
>>>>> -
>>>>> - int bytesRead = SSLUtils.doSecureRead((SocketChannel)
>>>>> key.channel(),
>>>>> - workerThread.getSSLEngine(), byteBuffer,
>>>>> - workerThread.getInputBB());
>>>>> - byteBuffer.flip();
>>>>> -
>>>>> - return bytesRead;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - protected int doClearRead() throws IOException{
>>>>> - int bytesRead = Utils.readWithTemporarySelector(key.channel(),
>>>>> - byteBuffer, readTimeout);
>>>>> - byteBuffer.flip();
>>>>> -
>>>>> - return bytesRead;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the timeout between two consecutives
>>>>> Selector.select() when a
>>>>> - * temporary Selector is used.
>>>>> - * @return read timeout being used
>>>>> - */
>>>>> - public int getReadTimeout() {
>>>>> - return readTimeout;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the timeout between two consecutives Selector.select()
>>>>> when a
>>>>> - * temporary Selector is used.
>>>>> - * @param rt - read timeout
>>>>> - */
>>>>> - public void setReadTimeout(int rt) {
>>>>> - readTimeout = rt;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the Selector.select() default time out.
>>>>> - * @return default time out
>>>>> - */
>>>>> - public static int getDefaultReadTimeout() {
>>>>> - return defaultReadTimeout;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the default Selector.select() time out.
>>>>> - * @param aDefaultReadTimeout time out value
>>>>> - */
>>>>> - public static void setDefaultReadTimeout(int
>>>>> aDefaultReadTimeout) {
>>>>> - defaultReadTimeout = aDefaultReadTimeout;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Return the {_at_link Channel} type. The return value is
>>>>> SocketChannel
>>>>> - * or DatagramChannel.
>>>>> - * @return {_at_link Channel} being used
>>>>> - */
>>>>> - public ChannelType getChannelType() {
>>>>> - return defaultChannelType;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set the {_at_link Channel} type, which is ocketChannel
>>>>> - * or DatagramChannel.
>>>>> - * @param channelType {_at_link Channel} to use
>>>>> - */
>>>>> - public void setChannelType(ChannelType channelType) {
>>>>> - this.defaultChannelType = channelType;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Is this Stream secure.
>>>>> - * @return true is stream is secure, otherwise false
>>>>> - */
>>>>> - public boolean isSecure() {
>>>>> - return secure;
>>>>> - }
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Set this stream secure.
>>>>> - * @param secure true to set stream secure, otherwise false
>>>>> - */
>>>>> - public void setSecure(boolean secure) {
>>>>> - this.secure = secure;
>>>>> - }
>>>>> -}
>>>>> -
>>>>> Index: modules/grizzly/src/main/java/com/sun/grizzly/util/Cloner.java
>>>>> ===================================================================
>>>>> --- modules/grizzly/src/main/java/com/sun/grizzly/util/Cloner.java
>>>>> (revision 2047)
>>>>> +++ modules/grizzly/src/main/java/com/sun/grizzly/util/Cloner.java
>>>>> (working copy)
>>>>> @@ -1,101 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import com.sun.grizzly.Controller;
>>>>> -import java.lang.reflect.Constructor;
>>>>> -import java.util.logging.Level;
>>>>> -
>>>>> -/**
>>>>> - * Class Cloner creates a clone of given object,
>>>>> - * which should implement interface <code>Copyable</code>
>>>>> - *
>>>>> - * @author Alexey Stashok
>>>>> - */
>>>>> -public class Cloner {
>>>>> - /**
>>>>> - * Method creates a clone of given object pattern
>>>>> - * Pattern parameter should implement <class>Copyable</class>
>>>>> interface
>>>>> - *
>>>>> - * @param pattern represents object, which will be cloned.
>>>>> Should implement <code>Copyable</code>
>>>>> - * @return clone
>>>>> - */
>>>>> - public static <T extends Copyable> T clone(T pattern) {
>>>>> - try {
>>>>> - T copy = null;
>>>>> -
>>>>> - try {
>>>>> - // Try default Constructor
>>>>> - copy = (T) pattern.getClass().newInstance();
>>>>> - } catch(InstantiationException e) {
>>>>> - // If didn't succeed with default - try other
>>>>> public constructors
>>>>> - Constructor[] constructors =
>>>>> pattern.getClass().getConstructors();
>>>>> - if (constructors.length == 0) {
>>>>> - // if there are no public constructors - try
>>>>> others
>>>>> - constructors =
>>>>> pattern.getClass().getDeclaredConstructors();
>>>>> - }
>>>>> -
>>>>> - for(Constructor constructor : constructors) {
>>>>> - constructor.setAccessible(true);
>>>>> - Object[] params =
>>>>> - new
>>>>> Object[constructor.getParameterTypes().length];
>>>>> -
>>>>> - try {
>>>>> - copy = (T) constructor.newInstance(params);
>>>>> - break;
>>>>> - } catch(InstantiationException ee) {
>>>>> - }
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - if (copy == null) {
>>>>> - throw new InstantiationException("Could not create " +
>>>>> - "an instance of class: " +
>>>>> pattern.getClass().getName());
>>>>> - }
>>>>> -
>>>>> - pattern.copyTo(copy);
>>>>> - return copy;
>>>>> - } catch (Exception e) {
>>>>> - if (Controller.logger().isLoggable(Level.WARNING)) {
>>>>> - Controller.logger().log(Level.WARNING, "Error
>>>>> copying objects!", e);
>>>>> - }
>>>>> - throw new RuntimeException("Error copying objects! " +
>>>>> e.getClass().getName() + ": " + e.getMessage());
>>>>> - }
>>>>> - }
>>>>> -}
>>>>> Index:
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadImpl.java
>>>>> ===================================================================
>>>>> ---
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadImpl.java
>>>>> (revision 2047)
>>>>> +++
>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadImpl.java
>>>>> (working copy)
>>>>> @@ -1,296 +0,0 @@
>>>>> -/*
>>>>> - *
>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>> - *
>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>> - *
>>>>> - * The contents of this file are subject to the terms of either
>>>>> the GNU
>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>> Development
>>>>> - * and Distribution License("CDDL") (collectively, the "License").
>>>>> You
>>>>> - * may not use this file except in compliance with the License.
>>>>> You can obtain
>>>>> - * a copy of the License at
>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>> the specific
>>>>> - * language governing permissions and limitations under the License.
>>>>> - *
>>>>> - * When distributing the software, include this License Header
>>>>> Notice in each
>>>>> - * file and include the License file at
>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>> - * Sun designates this particular file as subject to the
>>>>> "Classpath" exception
>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>> file that
>>>>> - * accompanied this code. If applicable, add the following below
>>>>> the License
>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>> your own
>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>> - * [name of copyright owner]"
>>>>> - *
>>>>> - * Contributor(s):
>>>>> - *
>>>>> - * If you wish your version of this file to be governed by only
>>>>> the CDDL or
>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>> "[Contributor]
>>>>> - * elects to include this software in this distribution under the
>>>>> [CDDL or GPL
>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>> license, a
>>>>> - * recipient has the option to distribute your version of this
>>>>> file under
>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>> license to
>>>>> - * its licensees as provided above. However, if you add GPL
>>>>> Version 2 code
>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>> option applies
>>>>> - * only if the new code is made subject to such option by the
>>>>> copyright
>>>>> - * holder.
>>>>> - *
>>>>> - */
>>>>> -package com.sun.grizzly.util;
>>>>> -
>>>>> -import java.util.concurrent.Callable;
>>>>> -import com.sun.grizzly.util.ByteBufferFactory.ByteBufferType;
>>>>> -import com.sun.grizzly.util.ThreadAttachment.Mode;
>>>>> -
>>>>> -/**
>>>>> - * Simple worker thread used for processing HTTP requests. All
>>>>> threads are
>>>>> - * synchronized using a {_at_link DefaultThreadPool} object
>>>>> - *
>>>>> - * @author Jean-Francois Arcand
>>>>> - */
>>>>> -public class WorkerThreadImpl extends WorkerThread {
>>>>> -
>>>>> - private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;
>>>>> -
>>>>> - /**
>>>>> - * The {_at_link DefaultThreadPool} on which this thread synchronize.
>>>>> - */
>>>>> - protected DefaultThreadPool threadPool;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The <code>ThreadGroup</code> used.
>>>>> - */
>>>>> - protected final static ThreadGroup threadGroup = new
>>>>> ThreadGroup("Grizzly");
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The state/attributes on this WorkerThread.
>>>>> - */
>>>>> - private ThreadAttachment threadAttachment;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The ByteBufferType used when creating the ByteBuffer
>>>>> attached to this object.
>>>>> - */
>>>>> - private ByteBufferType byteBufferType = ByteBufferType.HEAP_VIEW;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * The size of the ByteBuffer attached to this object.
>>>>> - */
>>>>> - private int initialByteBufferSize;
>>>>> -
>>>>> -
>>>>> - /**
>>>>> - * Create a Thread that will synchronizes/block on
>>>>> - * {_at_link DefaultThreadPool} instance.
>>>>> - * @param threadGroup <code>ThreadGroup</code>
>>>>> - * @param runnable <code>Runnable</code>
>>>>> - */
>>>>> - public WorkerThreadImpl(ThreadGroup threadGroup, Runnable
>>>>> runnable){
>>>>> - this(threadGroup, runnable, DEFAULT_BYTE_BUFFER_SIZE);
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Create a Thread that will synchronizes/block on
>>>>> - * {_at_link DefaultThreadPool} instance.
>>>>> - * @param threadGroup <code>ThreadGroup</code>
>>>>> - * @param runnable <code>Runnable</code>
>>>>> - * @param initialByteBufferSize initial {_at_link ByteBuffer} size
>>>>> - */
>>>>> - public WorkerThreadImpl(ThreadGroup threadGroup, Runnable
>>>>> runnable,
>>>>> - int initialByteBufferSize){
>>>>> - super(threadGroup, runnable);
>>>>> - setDaemon(true);
>>>>> - this.initialByteBufferSize = initialByteBufferSize;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Create a Thread that will synchronizes/block on
>>>>> - * {_at_link DefaultThreadPool} instance.
>>>>> - * @param threadPool {_at_link DefaultThreadPool}
>>>>> - * @param name <code>String</code>
>>>>> - */
>>>>> - public WorkerThreadImpl(DefaultThreadPool threadPool, String
>>>>> name){
>>>>> - this(threadPool, name, DEFAULT_BYTE_BUFFER_SIZE);
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Create a Thread that will synchronizes/block on
>>>>> - * {_at_link DefaultThreadPool} instance.
>>>>> - * @param threadPool {_at_link DefaultThreadPool}
>>>>> - * @param name <code>String</code>
>>>>> - * @param initialByteBufferSize initial {_at_link ByteBuffer} size
>>>>> - */
>>>>> - public WorkerThreadImpl(DefaultThreadPool threadPool, String name,
>>>>> - int initialByteBufferSize){
>>>>> - super(threadGroup, name);
>>>>> - this.threadPool = threadPool;
>>>>> - setDaemon(true);
>>>>> - this.initialByteBufferSize = initialByteBufferSize;
>>>>> - }
>>>>> -
>>>>> - /**
>>>>> - * Create a Thread that will synchronizes/block on
>>>>> - * {_at_link DefaultThreadPool} instance.
>>>>> - * @param threadPool {_at_link DefaultThreadPool}
>>>>> - * @param name <code>String</code>
>>>>> - * @param initialByteBufferSize initial {_at_link ByteBuffer} size
>>>>> - */
>>>>> - public WorkerThreadImpl(DefaultThreadPool threadPool, String name,
>>>>> - Runnable runnable, int initialByteBufferSize){
>>>>> - super(threadGroup, runnable, name);
>>>>> - this.threadPool = threadPool;
>>>>> - setDaemon(true);
>>>>> - this.initialByteBufferSize = initialByteBufferSize;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Allocate a {_at_link ByteBuffer} if the current instance is null;
>>>>>> - */
>>>>>> - protected void createByteBuffer(boolean force){
>>>>>> - if (force || byteBuffer == null){
>>>>>> - byteBuffer = ByteBufferFactory.allocate(byteBufferType,
>>>>>> - initialByteBufferSize);
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - public ThreadAttachment updateAttachment(int mode) {
>>>>>> - ThreadAttachment currentAttachment = getAttachment();
>>>>>> - currentAttachment.reset();
>>>>>> -
>>>>>> - if ((mode & Mode.BYTE_BUFFER) != 0) {
>>>>>> - currentAttachment.setByteBuffer(byteBuffer);
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.SSL_ENGINE) != 0) {
>>>>>> - currentAttachment.setSSLEngine(sslEngine);
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.INPUT_BB) != 0) {
>>>>>> - currentAttachment.setInputBB(inputBB);
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.OUTPUT_BB) != 0) {
>>>>>> - currentAttachment.setOutputBB(outputBB);
>>>>>> - }
>>>>>> -
>>>>>> - currentAttachment.setMode(mode);
>>>>>> -
>>>>>> - return currentAttachment;
>>>>>> - }
>>>>>> -
>>>>>> - public ThreadAttachment getAttachment() {
>>>>>> - if (threadAttachment == null) {
>>>>>> - threadAttachment = new ThreadAttachment();
>>>>>> - threadAttachment.associate();
>>>>>> - }
>>>>>> -
>>>>>> - return threadAttachment;
>>>>>> - }
>>>>>> -
>>>>>> - public ThreadAttachment detach() {
>>>>>> - ThreadAttachment currentAttachment = getAttachment();
>>>>>> - int mode = currentAttachment.getMode();
>>>>>> - updateAttachment(mode);
>>>>>> -
>>>>>> - // Re-create a new ByteBuffer
>>>>>> - if ((mode & Mode.BYTE_BUFFER) != 0) {
>>>>>> - createByteBuffer(true);
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.SSL_ENGINE) != 0) {
>>>>>> - sslEngine = null;
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.INPUT_BB) != 0) {
>>>>>> - inputBB = null;
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.OUTPUT_BB) != 0) {
>>>>>> - outputBB = null;
>>>>>> - }
>>>>>> -
>>>>>> - // Switch to the new ThreadAttachment.
>>>>>> - this.threadAttachment = null;
>>>>>> -
>>>>>> - currentAttachment.deassociate();
>>>>>> - return currentAttachment;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - public void attach(ThreadAttachment threadAttachment) {
>>>>>> - threadAttachment.associate();
>>>>>> - int mode = threadAttachment.getMode();
>>>>>> -
>>>>>> - if ((mode & Mode.BYTE_BUFFER) != 0) {
>>>>>> - byteBuffer = threadAttachment.getByteBuffer();
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.SSL_ENGINE) != 0) {
>>>>>> - sslEngine = threadAttachment.getSSLEngine();
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.INPUT_BB) != 0) {
>>>>>> - inputBB = threadAttachment.getInputBB();
>>>>>> - }
>>>>>> -
>>>>>> - if ((mode & Mode.OUTPUT_BB) != 0) {
>>>>>> - outputBB = threadAttachment.getOutputBB();
>>>>>> - }
>>>>>> -
>>>>>> - this.threadAttachment = threadAttachment;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * The <code>ByteBufferType</code> used to create the {_at_link
>>>>>> ByteBuffer}
>>>>>> - * associated with this object.
>>>>>> - * @return The <code>ByteBufferType</code> used to create the
>>>>>> {_at_link ByteBuffer}
>>>>>> - * associated with this object.
>>>>>> - */
>>>>>> - public ByteBufferType getByteBufferType() {
>>>>>> - return byteBufferType;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Set the <code>ByteBufferType</code> to use when creating the
>>>>>> - * {_at_link ByteBuffer} associated with this object.
>>>>>> - * @param byteBufferType The ByteBuffer type.
>>>>>> - */
>>>>>> - public void setByteBufferType(ByteBufferType byteBufferType) {
>>>>>> - this.byteBufferType = byteBufferType;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Processes the given task.
>>>>>> - *
>>>>>> - * @param t the task to process
>>>>>> - */
>>>>>> - protected void processTask(Callable t) throws Exception {
>>>>>> - if (t != null){
>>>>>> - t.call();
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - @Override
>>>>>> - protected void reset() {
>>>>>> - if (threadAttachment != null) {
>>>>>> - /**
>>>>>> - * ThreadAttachment was created during prev.
>>>>>> processing and wasn't
>>>>>> - * detached. It could happen due to some error - we
>>>>>> need to release
>>>>>> - * the ThreadAttachment association with the current
>>>>>> thread
>>>>>> - */
>>>>>> - threadAttachment.deassociate();
>>>>>> - }
>>>>>> -
>>>>>> - threadAttachment = null;
>>>>>> - super.reset();
>>>>>> - }
>>>>>> -}
>>>>>> -
>>>>>> Index:
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadFactory.java
>>>>>>
>>>>>> ===================================================================
>>>>>> ---
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadFactory.java
>>>>>> (revision 2047)
>>>>>> +++
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/WorkerThreadFactory.java
>>>>>> (working copy)
>>>>>> @@ -1,51 +0,0 @@
>>>>>> -/*
>>>>>> - * The contents of this file are subject to the terms
>>>>>> - * of the Common Development and Distribution License
>>>>>> - * (the License). You may not use this file except in
>>>>>> - * compliance with the License.
>>>>>> - *
>>>>>> - * You can obtain a copy of the license at
>>>>>> - * https://glassfish.dev.java.net/public/CDDLv1.0.html or
>>>>>> - * glassfish/bootstrap/legal/CDDLv1.0.txt.
>>>>>> - * See the License for the specific language governing
>>>>>> - * permissions and limitations under the License.
>>>>>> - *
>>>>>> - * When distributing Covered Code, include this CDDL
>>>>>> - * Header Notice in each file and include the License file
>>>>>> - * at glassfish/bootstrap/legal/CDDLv1.0.txt.
>>>>>> - * If applicable, add the following below the CDDL Header,
>>>>>> - * with the fields enclosed by brackets [] replaced by
>>>>>> - * you own identifying information:
>>>>>> - * "Portions Copyrighted [year] [name of copyright owner]"
>>>>>> - *
>>>>>> - * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
>>>>>> - */
>>>>>> -
>>>>>> -package com.sun.grizzly.util;
>>>>>> -
>>>>>> -import java.util.concurrent.ThreadFactory;
>>>>>> -
>>>>>> -/**
>>>>>> - * Simple utility class to create {_at_link WorkerThread}
>>>>>> - * @author Jeanfrancois Arcand
>>>>>> - */
>>>>>> -public class WorkerThreadFactory implements ThreadFactory{
>>>>>> -
>>>>>> - /**
>>>>>> - * The {_at_link ThreadGroup}
>>>>>> - */
>>>>>> - private final static ThreadGroup threadGroup = new
>>>>>> ThreadGroup("Grizzly");
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Create a new {_at_link WorkerThread}.
>>>>>> - * @param r a Runabble
>>>>>> - * @return
>>>>>> - */
>>>>>> - public Thread newThread(Runnable r){
>>>>>> - WorkerThreadImpl t = new WorkerThreadImpl(threadGroup,r);
>>>>>> - t.setDaemon(true);
>>>>>> - return t;
>>>>>> - }
>>>>>> -
>>>>>> -}
>>>>>> Index:
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferInputStream.java
>>>>>>
>>>>>> ===================================================================
>>>>>> ---
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferInputStream.java
>>>>>> (revision 2047)
>>>>>> +++
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/ByteBufferInputStream.java
>>>>>> (working copy)
>>>>>> @@ -1,51 +0,0 @@
>>>>>> -/*
>>>>>> - *
>>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>>> - *
>>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>>> - *
>>>>>> - * The contents of this file are subject to the terms of either
>>>>>> the GNU
>>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>>> Development
>>>>>> - * and Distribution License("CDDL") (collectively, the
>>>>>> "License"). You
>>>>>> - * may not use this file except in compliance with the License.
>>>>>> You can obtain
>>>>>> - * a copy of the License at
>>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>>> the specific
>>>>>> - * language governing permissions and limitations under the License.
>>>>>> - *
>>>>>> - * When distributing the software, include this License Header
>>>>>> Notice in each
>>>>>> - * file and include the License file at
>>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>>> - * Sun designates this particular file as subject to the
>>>>>> "Classpath" exception
>>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>>> file that
>>>>>> - * accompanied this code. If applicable, add the following below
>>>>>> the License
>>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>>> your own
>>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>>> - * [name of copyright owner]"
>>>>>> - *
>>>>>> - * Contributor(s):
>>>>>> - *
>>>>>> - * If you wish your version of this file to be governed by only
>>>>>> the CDDL or
>>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>>> "[Contributor]
>>>>>> - * elects to include this software in this distribution under the
>>>>>> [CDDL or GPL
>>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>>> license, a
>>>>>> - * recipient has the option to distribute your version of this
>>>>>> file under
>>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>>> license to
>>>>>> - * its licensees as provided above. However, if you add GPL
>>>>>> Version 2 code
>>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>>> option applies
>>>>>> - * only if the new code is made subject to such option by the
>>>>>> copyright
>>>>>> - * holder.
>>>>>> - *
>>>>>> - */
>>>>>> -package com.sun.grizzly.util;
>>>>>> -
>>>>>> -/**
>>>>>> - * This class implement IO stream operations on top of a {_at_link
>>>>>> ByteBuffer}.
>>>>>> - * Under the hood, this class use a temporary Selector pool for
>>>>>> reading
>>>>>> - * bytes when the client ask for more and the current Selector is
>>>>>> not yet ready.
>>>>>> - *
>>>>>> - * @author Jeanfrancois Arcand
>>>>>> - * @deprecated - Use {_at_link InputReader} instead
>>>>>> - */
>>>>>> -public class ByteBufferInputStream extends InputReader {
>>>>>> -
>>>>>> -}
>>>>>> -
>>>>>> Index:
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/OutputWriter.java
>>>>>> ===================================================================
>>>>>> ---
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/OutputWriter.java
>>>>>> (revision 2047)
>>>>>> +++
>>>>>> modules/grizzly/src/main/java/com/sun/grizzly/util/OutputWriter.java
>>>>>> (working copy)
>>>>>> @@ -1,350 +0,0 @@
>>>>>> -/*
>>>>>> - *
>>>>>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
>>>>>> - *
>>>>>> - * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
>>>>>> - *
>>>>>> - * The contents of this file are subject to the terms of either
>>>>>> the GNU
>>>>>> - * General Public License Version 2 only ("GPL") or the Common
>>>>>> Development
>>>>>> - * and Distribution License("CDDL") (collectively, the
>>>>>> "License"). You
>>>>>> - * may not use this file except in compliance with the License.
>>>>>> You can obtain
>>>>>> - * a copy of the License at
>>>>>> https://glassfish.dev.java.net/public/CDDL+GPL.html
>>>>>> - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for
>>>>>> the specific
>>>>>> - * language governing permissions and limitations under the License.
>>>>>> - *
>>>>>> - * When distributing the software, include this License Header
>>>>>> Notice in each
>>>>>> - * file and include the License file at
>>>>>> glassfish/bootstrap/legal/LICENSE.txt.
>>>>>> - * Sun designates this particular file as subject to the
>>>>>> "Classpath" exception
>>>>>> - * as provided by Sun in the GPL Version 2 section of the License
>>>>>> file that
>>>>>> - * accompanied this code. If applicable, add the following below
>>>>>> the License
>>>>>> - * Header, with the fields enclosed by brackets [] replaced by
>>>>>> your own
>>>>>> - * identifying information: "Portions Copyrighted [year]
>>>>>> - * [name of copyright owner]"
>>>>>> - *
>>>>>> - * Contributor(s):
>>>>>> - *
>>>>>> - * If you wish your version of this file to be governed by only
>>>>>> the CDDL or
>>>>>> - * only the GPL Version 2, indicate your decision by adding
>>>>>> "[Contributor]
>>>>>> - * elects to include this software in this distribution under the
>>>>>> [CDDL or GPL
>>>>>> - * Version 2] license." If you don't indicate a single choice of
>>>>>> license, a
>>>>>> - * recipient has the option to distribute your version of this
>>>>>> file under
>>>>>> - * either the CDDL, the GPL Version 2 or to extend the choice of
>>>>>> license to
>>>>>> - * its licensees as provided above. However, if you add GPL
>>>>>> Version 2 code
>>>>>> - * and therefore, elected the GPL Version 2 license, then the
>>>>>> option applies
>>>>>> - * only if the new code is made subject to such option by the
>>>>>> copyright
>>>>>> - * holder.
>>>>>> - *
>>>>>> - */
>>>>>> -
>>>>>> -package com.sun.grizzly.util;
>>>>>> -
>>>>>> -import java.io.IOException;
>>>>>> -import java.net.SocketAddress;
>>>>>> -import java.nio.ByteBuffer;
>>>>>> -import java.nio.channels.DatagramChannel;
>>>>>> -import java.nio.channels.SelectableChannel;
>>>>>> -import java.nio.channels.SelectionKey;
>>>>>> -import java.nio.channels.Selector;
>>>>>> -import java.nio.channels.SocketChannel;
>>>>>> -import java.nio.channels.WritableByteChannel;
>>>>>> -
>>>>>> -/**
>>>>>> - * NIO utility to flush {_at_link ByteBuffer}
>>>>>> - *
>>>>>> - * @author Scott Oaks
>>>>>> - */
>>>>>> -public class OutputWriter {
>>>>>> -
>>>>>> - /**
>>>>>> - * The default rime out before closing the connection
>>>>>> - */
>>>>>> - private static int defaultWriteTimeout = 30000;
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param channel {_at_link SelectableChannel}
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(SelectableChannel channel,
>>>>>> ByteBuffer bb)
>>>>>> - throws IOException{
>>>>>> - return flushChannel(channel,bb,defaultWriteTimeout);
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param channel {_at_link SelectableChannel}
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @param writeTimeout
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(SelectableChannel channel,
>>>>>> - ByteBuffer bb, long writeTimeout) throws IOException{
>>>>>> -
>>>>>> - if (bb == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. ByteBuffer"
>>>>>> - + " cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - if (channel == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. " +
>>>>>> - "SocketChannel cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - SelectionKey key = null;
>>>>>> - Selector writeSelector = null;
>>>>>> - int attempts = 0;
>>>>>> - int nWrite = 0;
>>>>>> - int len = -1;
>>>>>> - try {
>>>>>> - WritableByteChannel writableChannel =
>>>>>> (WritableByteChannel) channel;
>>>>>> - while ( bb.hasRemaining() ) {
>>>>>> - len = writableChannel.write(bb);
>>>>>> - if (len > 0){
>>>>>> - attempts = 0;
>>>>>> - nWrite += len;
>>>>>> - } else {
>>>>>> - attempts++;
>>>>>> - if ( writeSelector == null ){
>>>>>> - writeSelector =
>>>>>> SelectorFactory.getSelector();
>>>>>> - if ( writeSelector == null){
>>>>>> - // Continue using the main one.
>>>>>> - continue;
>>>>>> - }
>>>>>> - key = channel.register(writeSelector,
>>>>>> - SelectionKey.OP_WRITE);
>>>>>> - }
>>>>>> -
>>>>>> - if (writeSelector.select(writeTimeout) == 0) {
>>>>>> - if (attempts > 2)
>>>>>> - throw new IOException("Client
>>>>>> disconnected");
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - } catch (IOException ex){
>>>>>> - len = -1;
>>>>>> - throw ex;
>>>>>> - } finally {
>>>>>> - if (key != null) {
>>>>>> - key.cancel();
>>>>>> - key = null;
>>>>>> - }
>>>>>> -
>>>>>> - if ( writeSelector != null ) {
>>>>>> - // Cancel the key.
>>>>>> -
>>>>>> SelectorFactory.selectNowAndReturnSelector(writeSelector);
>>>>>> - }
>>>>>> -
>>>>>> - if (len == -1){
>>>>>> - if (Thread.currentThread() instanceof WorkerThread){
>>>>>> - ConnectionCloseHandler cch =
>>>>>> (ConnectionCloseHandler)
>>>>>> - ((WorkerThread)Thread.currentThread())
>>>>>> -
>>>>>> .getAttachment().getAttribute("ConnectionCloseHandler");
>>>>>> - if (cch != null){
>>>>>> - cch.remotlyClosed(key);
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - return nWrite;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param socketChannel {_at_link SocketChannel}
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(SocketChannel socketChannel,
>>>>>> ByteBuffer[] bb)
>>>>>> - throws IOException{
>>>>>> - return flushChannel(socketChannel,bb,defaultWriteTimeout);
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param socketChannel {_at_link SocketChannel}
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @param writeTimeout
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(SocketChannel socketChannel,
>>>>>> - ByteBuffer[] bb, long writeTimeout) throws IOException{
>>>>>> -
>>>>>> - if (bb == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. ByteBuffer"
>>>>>> - + " cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - if (socketChannel == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. " +
>>>>>> - "SocketChannel cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - SelectionKey key = null;
>>>>>> - Selector writeSelector = null;
>>>>>> - int attempts = 0;
>>>>>> - long totalBytes = 0;
>>>>>> - for (ByteBuffer aBb : bb) {
>>>>>> - totalBytes += aBb.remaining();
>>>>>> - }
>>>>>> -
>>>>>> - long nWrite = 0;
>>>>>> - long len = -1;
>>>>>> - try {
>>>>>> - while (nWrite < totalBytes ) {
>>>>>> - len = socketChannel.write(bb);
>>>>>> - if (len > 0){
>>>>>> - attempts = 0;
>>>>>> - nWrite += len;
>>>>>> - } else {
>>>>>> - if ( writeSelector == null ){
>>>>>> - writeSelector =
>>>>>> SelectorFactory.getSelector();
>>>>>> - if ( writeSelector == null){
>>>>>> - ; // Continue using the main one.
>>>>>> - continue;
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - key = socketChannel.register(writeSelector,
>>>>>> -
>>>>>> SelectionKey.OP_WRITE);
>>>>>> -
>>>>>> - if (writeSelector.select(writeTimeout) == 0) {
>>>>>> - if (attempts > 2)
>>>>>> - throw new IOException("Client
>>>>>> disconnected");
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - } catch (IOException ex){
>>>>>> - len = -1;
>>>>>> - throw ex;
>>>>>> - } finally {
>>>>>> - if (key != null) {
>>>>>> - key.cancel();
>>>>>> - key = null;
>>>>>> - }
>>>>>> -
>>>>>> - if ( writeSelector != null ) {
>>>>>> - // Cancel the key.
>>>>>> -
>>>>>> SelectorFactory.selectNowAndReturnSelector(writeSelector);
>>>>>> - }
>>>>>> -
>>>>>> - if (len == -1){
>>>>>> - if (Thread.currentThread() instanceof WorkerThread){
>>>>>> - ConnectionCloseHandler cch =
>>>>>> (ConnectionCloseHandler)
>>>>>> - ((WorkerThread)Thread.currentThread())
>>>>>> -
>>>>>> .getAttachment().getAttribute("ConnectionCloseHandler");
>>>>>> - if (cch != null){
>>>>>> - cch.remotlyClosed(key);
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - return nWrite;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param datagramChannel
>>>>>> - * @param socketAddress
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(DatagramChannel datagramChannel,
>>>>>> - SocketAddress socketAddress, ByteBuffer bb)
>>>>>> - throws IOException{
>>>>>> - return
>>>>>> flushChannel(datagramChannel,socketAddress,bb,defaultWriteTimeout);
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - /**
>>>>>> - * Flush the buffer by looping until the {_at_link ByteBuffer}
>>>>>> is empty
>>>>>> - * @param datagramChannel
>>>>>> - * @param socketAddress
>>>>>> - * @param bb the ByteBuffer to write.
>>>>>> - * @param writeTimeout
>>>>>> - * @return
>>>>>> - * @throws java.io.IOException
>>>>>> - */
>>>>>> - public static long flushChannel(DatagramChannel datagramChannel,
>>>>>> - SocketAddress socketAddress, ByteBuffer bb, long
>>>>>> writeTimeout)
>>>>>> - throws IOException{
>>>>>> -
>>>>>> - if (bb == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. ByteBuffer"
>>>>>> - + " cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - if (datagramChannel == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. " +
>>>>>> - "DatagramChannel cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - if (socketAddress == null){
>>>>>> - throw new IllegalStateException("Invalid Response
>>>>>> State. " +
>>>>>> - "SocketAddress cannot be null.");
>>>>>> - }
>>>>>> -
>>>>>> - SelectionKey key = null;
>>>>>> - Selector writeSelector = null;
>>>>>> - int attempts = 0;
>>>>>> - int nWrite = 0;
>>>>>> - try {
>>>>>> - while ( bb.hasRemaining() ) {
>>>>>> - int len = datagramChannel.send(bb,socketAddress);
>>>>>> - if (len > 0){
>>>>>> - attempts = 0;
>>>>>> - nWrite += len;
>>>>>> - } else {
>>>>>> - if ( writeSelector == null ){
>>>>>> - writeSelector =
>>>>>> SelectorFactory.getSelector();
>>>>>> - if ( writeSelector == null){
>>>>>> - // Continue using the main one.
>>>>>> - continue;
>>>>>> - }
>>>>>> - }
>>>>>> -
>>>>>> - key = datagramChannel.register(writeSelector,
>>>>>> -
>>>>>> SelectionKey.OP_WRITE);
>>>>>> -
>>>>>> - if (writeSelector.select(writeTimeout) == 0) {
>>>>>> - if (attempts > 2)
>>>>>> - throw new IOException("Client
>>>>>> disconnected");
>>>>>> - } else {
>>>>>> - attempts--;
>>>>>> - }
>>>>>> - }
>>>>>> - }
>>>>>> - } finally {
>>>>>> - if (key != null) {
>>>>>> - key.cancel();
>>>>>> - key = null;
>>>>>> - }
>>>>>> -
>>>>>> - if ( writeSelector != null ) {
>>>>>> - // Cancel the key.
>>>>>> -
>>>>>> SelectorFactory.selectNowAndReturnSelector(writeSelector);
>>>>>> - }
>>>>>> - }
>>>>>> - return nWrite;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - public static int getDefaultWriteTimeout() {
>>>>>> - return defaultWriteTimeout;
>>>>>> - }
>>>>>> -
>>>>>> -
>>>>>> - public static void setDefaultWriteTimeout(int
>>>>>> aDefaultWriteTimeout) {
>>>>>> - defaultWriteTimeout = aDefaultWriteTimeout;
>>>>>> - }
>>>>>> -}
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_grizzly.dev.java.net
>>>>>> <mailto:dev-unsubscribe_at_grizzly.dev.java.net>
>>>>>> For additional commands, e-mail: dev-help_at_grizzly.dev.java.net
>>>>>> <mailto:dev-help_at_grizzly.dev.java.net>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_grizzly.dev.java.net
>>>>> <mailto:dev-unsubscribe_at_grizzly.dev.java.net>
>>>>> For additional commands, e-mail: dev-help_at_grizzly.dev.java.net
>>>>> <mailto:dev-help_at_grizzly.dev.java.net>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_grizzly.dev.java.net
>>>> <mailto:dev-unsubscribe_at_grizzly.dev.java.net>
>>>> For additional commands, e-mail: dev-help_at_grizzly.dev.java.net
>>>> <mailto:dev-help_at_grizzly.dev.java.net>
>>>>
>