|
||||||||||
| 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(javax.net.ssl.SSLContext sslContext)
|
|
| Method Summary | |
|---|---|
void |
close()
Close the underlying connection. |
void |
configure(SSLConfig sslConfig)
Configure SSLConnectorHandler's SSL settings. |
void |
connect(java.net.SocketAddress remoteAddress,
java.net.SocketAddress localAddress)
Connect to hostname:port. |
void |
connect(java.net.SocketAddress remoteAddress,
java.net.SocketAddress localAddress,
SSLCallbackHandler callbackHandler,
SSLSelectorHandler selectorHandler)
Connect to hostname:port. |
void |
finishConnect(java.nio.channels.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()
|
java.nio.ByteBuffer |
getSecuredInputBuffer()
Returns SSLConnectorHandler's secured input buffer, it
uses for reading data from a socket channel. |
java.nio.ByteBuffer |
getSecuredOutputBuffer()
Returns SSLConnectorHandler's secured output buffer, it
uses for writing data to a socket channel. |
javax.net.ssl.SSLContext |
getSSLContext()
Get SSLConnector's SSLContext |
javax.net.ssl.SSLEngine |
getSSLEngine()
Returns SSLConnector's SSLEngine |
boolean |
handshake(java.nio.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(java.nio.ByteBuffer byteBuffer,
boolean blocking)
Read bytes. |
java.util.concurrent.Future<AsyncQueueReadUnit> |
readFromAsyncQueue(java.nio.ByteBuffer buffer,
AsyncReadCallbackHandler callbackHandler,
AsyncReadCondition condition,
AsyncQueueDataProcessor readPostProcessor)
Method reads data to the ByteBuffer using async read queue. |
void |
setDelegateSSLTasks(boolean delegateSSLTasks)
|
void |
setSSLContext(javax.net.ssl.SSLContext sslContext)
Set SSLContext. |
void |
setSSLEngine(javax.net.ssl.SSLEngine sslEngine)
Set SSLEngine |
long |
write(java.nio.ByteBuffer byteBuffer,
boolean blocking)
Writes bytes. |
java.util.concurrent.Future<AsyncQueueWriteUnit> |
writeToAsyncQueue(java.nio.ByteBuffer buffer,
AsyncWriteCallbackHandler callbackHandler,
AsyncQueueDataProcessor writePreProcessor,
ByteBufferCloner cloner)
Method writes ByteBuffer using async write queue. |
java.util.concurrent.Future<AsyncQueueWriteUnit> |
writeToAsyncQueue(java.net.SocketAddress dstAddress,
java.nio.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(javax.net.ssl.SSLContext sslContext)
| Method Detail |
|---|
public boolean getDelegateSSLTasks()
public void setDelegateSSLTasks(boolean delegateSSLTasks)
public void connect(java.net.SocketAddress remoteAddress,
java.net.SocketAddress localAddress,
SSLCallbackHandler callbackHandler,
SSLSelectorHandler selectorHandler)
throws java.io.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.
java.io.IOException
public void connect(java.net.SocketAddress remoteAddress,
java.net.SocketAddress localAddress)
throws java.io.IOException
remoteAddress - remote address to connectlocalAddress - local address to bin
java.io.IOException
public boolean handshake(java.nio.ByteBuffer byteBuffer,
boolean blocking)
throws java.io.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.
java.io.IOException - if some error occurs during processing I/O operations/
public long read(java.nio.ByteBuffer byteBuffer,
boolean blocking)
throws java.io.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.
java.io.IOException
public long write(java.nio.ByteBuffer byteBuffer,
boolean blocking)
throws java.io.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.
java.io.IOException
public java.util.concurrent.Future<AsyncQueueReadUnit> readFromAsyncQueue(java.nio.ByteBuffer buffer,
AsyncReadCallbackHandler callbackHandler,
AsyncReadCondition condition,
AsyncQueueDataProcessor readPostProcessor)
throws java.io.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 AsyncQueueReadablereadFromAsyncQueue in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>buffer - ByteBuffercallbackHandler - 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
java.io.IOException
public java.util.concurrent.Future<AsyncQueueWriteUnit> writeToAsyncQueue(java.nio.ByteBuffer buffer,
AsyncWriteCallbackHandler callbackHandler,
AsyncQueueDataProcessor writePreProcessor,
ByteBufferCloner cloner)
throws java.io.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 AsyncQueueWritablewriteToAsyncQueue in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>buffer - ByteBuffercallbackHandler - AsyncWriteCallbackHandler,
which will get notified, when
ByteBuffer will be completely writtenwritePreProcessor - AsyncQueueDataProcessor, which
will perform data processing, before it will be
written on SelectableChannel
java.io.IOException
public java.util.concurrent.Future<AsyncQueueWriteUnit> writeToAsyncQueue(java.net.SocketAddress dstAddress,
java.nio.ByteBuffer buffer,
AsyncWriteCallbackHandler callbackHandler,
AsyncQueueDataProcessor writePreProcessor,
ByteBufferCloner cloner)
throws java.io.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 AsyncQueueWritablewriteToAsyncQueue in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>dstAddress - destination SocketAddress data will
be sent tobuffer - ByteBuffercallbackHandler - AsyncWriteCallbackHandler,
which will get notified, when
ByteBuffer will be completely writtenwritePreProcessor - AsyncQueueDataProcessor, which
will perform data processing, before it will be
written on SelectableChannel
java.io.IOException
public void close()
throws java.io.IOException
java.io.IOException
public void finishConnect(java.nio.channels.SelectionKey key)
throws java.io.IOException
key - - a SelectionKey
java.io.IOExceptionpublic void finishHandshake()
public Controller.Protocol protocol()
protocol in interface ConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>protocol in class AbstractConnectorHandler<SSLSelectorHandler,SSLCallbackHandler>ConnectorHandler's protocolpublic boolean isHandshakeDone()
public javax.net.ssl.SSLContext getSSLContext()
SSLContext
public void setSSLContext(javax.net.ssl.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 javax.net.ssl.SSLEngine getSSLEngine()
SSLEngine
public void setSSLEngine(javax.net.ssl.SSLEngine sslEngine)
SSLEngine
sslEngine{@link - SSLEngine}public java.nio.ByteBuffer getSecuredInputBuffer()
SSLConnectorHandler's secured input buffer, it
uses for reading data from a socket channel.
ByteBufferpublic java.nio.ByteBuffer getSecuredOutputBuffer()
SSLConnectorHandler's secured output buffer, it
uses for writing data to a socket channel.
ByteBufferpublic int getApplicationBufferSize()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||