|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.sun.grizzly.AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
com.sun.grizzly.SSLConnectorHandler
public class SSLConnectorHandler
Non blocking SSL Connector Handler. The recommended way to use this class is by creating an external Controller and share the same SelectorHandler instance.
Recommended -----------
Controller controller = new Controller();
// new SSLSelectorHandler(true) means the Selector will be used only
// for client operation (OP_READ, OP_WRITE, OP_CONNECT).
SSLSelectorHandler sslSelectorHandler = new SSLSelectorHandler(true);
controller.setSelectorHandler(sslSelectorHandler);
SSLConnectorHandler sslConnectorHandler = new SSLConnectorHandler();
sslConnectorHandler.connect(localhost,port, new SSLCallbackHandler(){...},
sslSelectorHandler);
SSLConnectorHandler sslConnectorHandler2 = new SSLConnectorHandler();
sslConnectorHandler2.connect(localhost,port, new SSLCallbackHandler(){...},
sslSelectorHandler);
Not recommended (but still works) ---------------------------------
SSLConnectorHandler sslConnectorHandler = new SSLConnectorHandler();
sslConnectorHandler.connect(localhost,port);
Internally, an new Controller will be created everytime connect(localhost,port)
is invoked, which has an impact on performance.
As common comment: developer should be very careful if dealing directly with
SSLConnectorHandler
's underlying socket channel! In most cases
there is no need to do this, but use read, write methods provided
by SSLConnectorHandler
Field Summary |
---|
Fields inherited from class com.sun.grizzly.AbstractConnectorHandler |
---|
callbackHandler, controller, inputStream, isConnected, protocol, selectorHandler, underlyingChannel |
Constructor Summary | |
---|---|
SSLConnectorHandler()
|
|
SSLConnectorHandler(SSLConfig sslConfig)
|
|
SSLConnectorHandler(SSLContext sslContext)
|
Method Summary | |
---|---|
void |
close()
Close the underlying connection. |
void |
configure(SSLConfig sslConfig)
Configure SSLConnectorHandler's SSL settings. |
void |
connect(SocketAddress remoteAddress,
SocketAddress localAddress)
Connect to hostname:port. |
void |
connect(SocketAddress remoteAddress,
SocketAddress localAddress,
SSLCallbackHandler callbackHandler,
SSLSelectorHandler selectorHandler)
Connect to hostname:port. |
void |
finishConnect(SelectionKey key)
Finish handling the OP_CONNECT interest ops. |
void |
finishHandshake()
Changes SSLConnectorHandler state, after handshake operation is done. |
int |
getApplicationBufferSize()
Gets the size of the largest application buffer that may occur when using this session. |
boolean |
getDelegateSSLTasks()
|
ByteBuffer |
getSecuredInputBuffer()
Returns SSLConnectorHandler 's secured input buffer, it
uses for reading data from a socket channel. |
ByteBuffer |
getSecuredOutputBuffer()
Returns SSLConnectorHandler 's secured output buffer, it
uses for writing data to a socket channel. |
SSLContext |
getSSLContext()
Get SSLConnector's SSLContext |
SSLEngine |
getSSLEngine()
Returns SSLConnector's SSLEngine |
boolean |
handshake(ByteBuffer byteBuffer,
boolean blocking)
Initiate SSL handshake phase. |
boolean |
isHandshakeDone()
Is the underlying SocketChannel connected. |
Controller.Protocol |
protocol()
A token decribing the protocol supported by an implementation of this interface |
long |
read(ByteBuffer byteBuffer,
boolean blocking)
Read bytes. |
Future<AsyncQueueReadUnit> |
readFromAsyncQueue(ByteBuffer buffer,
AsyncReadCallbackHandler callbackHandler,
AsyncReadCondition condition,
AsyncQueueDataProcessor readPostProcessor)
Method reads data to the ByteBuffer using async read queue. |
void |
setDelegateSSLTasks(boolean delegateSSLTasks)
|
void |
setSSLContext(SSLContext sslContext)
Set SSLContext . |
void |
setSSLEngine(SSLEngine sslEngine)
Set SSLEngine |
long |
write(ByteBuffer byteBuffer,
boolean blocking)
Writes bytes. |
Future<AsyncQueueWriteUnit> |
writeToAsyncQueue(ByteBuffer buffer,
AsyncWriteCallbackHandler callbackHandler,
AsyncQueueDataProcessor writePreProcessor,
ByteBufferCloner cloner)
Method writes ByteBuffer using async write queue. |
Future<AsyncQueueWriteUnit> |
writeToAsyncQueue(SocketAddress dstAddress,
ByteBuffer buffer,
AsyncWriteCallbackHandler callbackHandler,
AsyncQueueDataProcessor writePreProcessor,
ByteBufferCloner cloner)
Method sends ByteBuffer using async write queue. |
Methods inherited from class com.sun.grizzly.AbstractConnectorHandler |
---|
connect, connect, connect, connect, getCallbackHandler, getController, getSelectorHandler, getUnderlyingChannel, isConnected, protocol, readFromAsyncQueue, readFromAsyncQueue, setCallbackHandler, setController, setSelectorHandler, setUnderlyingChannel, writeToAsyncQueue, writeToAsyncQueue, writeToAsyncQueue, writeToAsyncQueue, writeToAsyncQueue, writeToAsyncQueue |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public SSLConnectorHandler()
public SSLConnectorHandler(SSLConfig sslConfig)
public SSLConnectorHandler(SSLContext sslContext)
Method Detail |
---|
public boolean getDelegateSSLTasks()
public void setDelegateSSLTasks(boolean delegateSSLTasks)
public void connect(SocketAddress remoteAddress, SocketAddress localAddress, SSLCallbackHandler callbackHandler, SSLSelectorHandler selectorHandler) throws IOException
Controller
will invoke
the CallbackHandler
.
remoteAddress
- remote address to connectlocalAddress
- local address to bincallbackHandler
- the handler invoked by its associated SelectorHandler
when
a non blocking operation is ready to be handled. When null, all
read and write operation will be delegated to the default
ProtocolChain
and its list of ProtocolFilter
. When null, this ConnectorHandler
will create an instance of DefaultCallbackHandler
.selectorHandler
- an instance of SelectorHandler.
IOException
public void connect(SocketAddress remoteAddress, SocketAddress localAddress) throws IOException
remoteAddress
- remote address to connectlocalAddress
- local address to bin
IOException
public boolean handshake(ByteBuffer byteBuffer, boolean blocking) throws IOException
byteBuffer
- Application ByteBuffer
, where application data
will be storedblocking
- true, if handshake should be done in blocking mode, for non-blocking false
SSLConnectorHandler
will call callbackHandler.onHandshake() to notify
about finishing handshake phase.
IOException
- if some error occurs during processing I/O operations/public long read(ByteBuffer byteBuffer, boolean blocking) throws IOException
Selector
will be used to read bytes.
read
in interface ConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
read
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
byteBuffer
- The byteBuffer to store bytes.blocking
- true if a a pool of temporary Selector
is required to handle a blocking read.
IOException
public long write(ByteBuffer byteBuffer, boolean blocking) throws IOException
Selector
will be used to writes bytes.
write
in interface ConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
write
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
byteBuffer
- The byteBuffer to write.blocking
- true if a a pool of temporary Selector
is required to handle a blocking write.
IOException
public Future<AsyncQueueReadUnit> readFromAsyncQueue(ByteBuffer buffer, AsyncReadCallbackHandler callbackHandler, AsyncReadCondition condition, AsyncQueueDataProcessor readPostProcessor) throws IOException
ByteBuffer
using async read queue.
First, if read queue is empty - it tries to read to the
ByteBuffer
directly (without putting to the queue).
If associated read queue is not empty or after direct reading
ByteBuffer
still has remaining place for next read -
ByteBuffer
will be added to AsyncQueue
.
If an exception occurs, during direct reading - it will be propagated
to the caller directly, otherwise, if the ByteBuffer
is
added to a reading queue - exception notification will come via
AsyncReadCallbackHandler.onIOException()
readFromAsyncQueue
in interface AsyncQueueReadable
readFromAsyncQueue
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
buffer
- ByteBuffer
callbackHandler
- AsyncReadCallbackHandler
,
which will get notified, when
ByteBuffer
will get fullcondition
- AsyncReadCondition
, which will be called to
check if read data is complete, and callbackHandler could
be calledreadPostProcessor
- post processor, to be called to process read data
ByteBuffer
was read completely,
false if read operation was put to queue
IOException
public Future<AsyncQueueWriteUnit> writeToAsyncQueue(ByteBuffer buffer, AsyncWriteCallbackHandler callbackHandler, AsyncQueueDataProcessor writePreProcessor, ByteBufferCloner cloner) throws IOException
ByteBuffer
using async write queue.
First, if write queue is empty - it tries to write ByteBuffer
directly (without putting to the queue).
If associated write queue is not empty or after direct writing
ByteBuffer
still has ready data to be written -
ByteBuffer
will be added to AsyncQueue
.
If an exception occurs, during direct writing - it will be propagated
to the caller directly, otherwise, if the ByteBuffer
is
added to a writing queue - exception notification will come via
AsyncWriteCallbackHandler.onIOException()
Before data will be written on SelectableChannel
, first it
will be passed for preprocessing to AsyncQueueDataProcessor
,
and then preprocessor result data
(AsyncQueueDataProcessor.getResultByteBuffer()
) will be
written on the SelectableChannel
.
writeToAsyncQueue
in interface AsyncQueueWritable
writeToAsyncQueue
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
buffer
- ByteBuffer
callbackHandler
- AsyncWriteCallbackHandler
,
which will get notified, when
ByteBuffer
will be completely writtenwritePreProcessor
- AsyncQueueDataProcessor
, which
will perform data processing, before it will be
written on SelectableChannel
IOException
public Future<AsyncQueueWriteUnit> writeToAsyncQueue(SocketAddress dstAddress, ByteBuffer buffer, AsyncWriteCallbackHandler callbackHandler, AsyncQueueDataProcessor writePreProcessor, ByteBufferCloner cloner) throws IOException
ByteBuffer
using async write queue.
First, if write queue is empty - it tries to send ByteBuffer
to the given SocketAddress
directly
(without putting to the queue).
If associated write queue is not empty or after direct sending
ByteBuffer
still has ready data to be written -
ByteBuffer
will be added to AsyncQueue
.
If an exception occurs, during direct writing - it will be propagated
to the caller directly, otherwise, if the ByteBuffer
is
added to a writing queue - exception notification will come via
AsyncWriteCallbackHandler.onIOException()
Before data will be written on SelectableChannel
, first it
will be passed for preprocessing to AsyncQueueDataProcessor
,
and then preprocessor result data
(AsyncQueueDataProcessor.getResultByteBuffer()
) will be
written on the SelectableChannel
.
writeToAsyncQueue
in interface AsyncQueueWritable
writeToAsyncQueue
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
dstAddress
- destination SocketAddress
data will
be sent tobuffer
- ByteBuffer
callbackHandler
- AsyncWriteCallbackHandler
,
which will get notified, when
ByteBuffer
will be completely writtenwritePreProcessor
- AsyncQueueDataProcessor
, which
will perform data processing, before it will be
written on SelectableChannel
IOException
public void close() throws IOException
IOException
public void finishConnect(SelectionKey key) throws IOException
key
- - a SelectionKey
IOException
public void finishHandshake()
public Controller.Protocol protocol()
protocol
in interface ConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
protocol
in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>
ConnectorHandler
's protocolpublic boolean isHandshakeDone()
public SSLContext getSSLContext()
SSLContext
public void setSSLContext(SSLContext sslContext)
SSLContext
.
Use this method to change SSLConnectorHandler configuration.
New configuration will become active only after SSLConnector
will be closed and connected again.
public void configure(SSLConfig sslConfig)
public SSLEngine getSSLEngine()
SSLEngine
public void setSSLEngine(SSLEngine sslEngine)
SSLEngine
sslEngine{@link
- SSLEngine}public ByteBuffer getSecuredInputBuffer()
SSLConnectorHandler
's secured input buffer, it
uses for reading data from a socket channel.
ByteBuffer
public ByteBuffer getSecuredOutputBuffer()
SSLConnectorHandler
's secured output buffer, it
uses for writing data to a socket channel.
ByteBuffer
public int getApplicationBufferSize()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |