Package org.apache.hc.core5.reactor.ssl
Class SSLIOSession
java.lang.Object
org.apache.hc.core5.reactor.ssl.SSLIOSession
- All Implemented Interfaces:
Closeable,AutoCloseable,ByteChannel,Channel,ReadableByteChannel,WritableByteChannel,SocketModalCloseable,ModalCloseable,IOSession,Identifiable
@Contract(threading=SAFE_CONDITIONAL)
@Internal
public class SSLIOSession
extends Object
implements IOSession
SSLIOSession is a decorator class intended to transparently extend
an IOSession with transport layer security capabilities based on
the SSL/TLS protocol.- Since:
- 4.2
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.apache.hc.core5.reactor.IOSession
IOSession.Status -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intprivate static final ByteBufferprivate booleanprivate final AtomicReference<FutureCallback<SSLSession>> private final AtomicReference<SSLIOSession.TLSHandShakeState> private final Timeoutprivate final SSLManagedBufferprivate final SSLSessionInitializerprivate final SSLManagedBufferprivate final IOEventHandlerprivate final AtomicIntegerprivate final SSLManagedBufferprivate final IOSessionprivate final Callback<SSLIOSession> private final Callback<SSLIOSession> private Timeoutprivate final SSLEngineprivate final SSLModeprivate IOSession.Statusprivate final NamedEndpointprivate TlsDetailsprivate final SSLSessionVerifier -
Constructor Summary
ConstructorsConstructorDescriptionSSLIOSession(NamedEndpoint targetEndpoint, IOSession session, SSLMode sslMode, SSLContext sslContext, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Callback<SSLIOSession> sessionStartCallback, Callback<SSLIOSession> sessionEndCallback, Timeout connectTimeout) Creates new instance ofSSLIOSessionclass.SSLIOSession(NamedEndpoint targetEndpoint, IOSession session, SSLMode sslMode, SSLContext sslContext, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout, Callback<SSLIOSession> sessionStartCallback, Callback<SSLIOSession> sessionEndCallback, FutureCallback<SSLSession> resultCallback) Creates new instance ofSSLIOSessionclass. -
Method Summary
Modifier and TypeMethodDescriptionvoidbeginHandshake(IOSession protocolSession) channel()Returns the underlying I/O channel associated with this session.voidclearEvent(int op) Clears interest in a particular I/O event type by updating the event mask associated with the session.voidclose()Terminates the session gracefully and closes the underlying I/O channel.voidCloses this process or endpoint and releases any system resources associated with it.private SSLExceptionprivate voiddecryptData(IOSession protocolSession) private voiddoHandshake(IOSession protocolSession) private voidprivate SSLEngineResultdoUnwrap(ByteBuffer src, ByteBuffer dst) private SSLEngineResultdoWrap(ByteBuffer src, ByteBuffer dst) private voidencryptData(IOSession protocolSession) voidenqueue(Command command, Command.Priority priority) InsertsCommandat the end of the command queue.private IOEventHandlerprivate static voidformatOps(StringBuilder buffer, int ops) intReturns mask of I/O evens this session declared interest in.Returns event handler associated with the session.getId()longReturns timestamp of the last I/O event including socket timeout reset.longReturns timestamp of the last read event.longReturns timestamp of the last write event.Returns local address.getLock()Returns session lock that should be used by I/O event handlers to synchronize access to the session.Returns address of the remote peer.Returns value of the socket timeout in milliseconds.Returns status of the session:booleanTests if there enqueued commands pending execution.private voidinitialize(IOSession protocolSession) booleanisOpen()poll()Removes firstCommandfrom the command queue if available.intread(ByteBuffer dst) private intprivate intvoidsetEvent(int op) Declares interest in a particular I/O event type by updating the event mask associated with the session.voidsetEventMask(int ops) Declares interest in I/O event notifications by setting the event mask associated with the sessionvoidsetSocketTimeout(Timeout timeout) Sets value of the socket timeout in milliseconds.toString()private voidvoidUpdates the timestamp of the last read eventvoidUpdates the timestamp of the last write eventvoidupgrade(IOEventHandler handler) Upgrades event handler associated with the session.intwrite(ByteBuffer src)
-
Field Details
-
EMPTY_BUFFER
-
targetEndpoint
-
session
-
sslEngine
-
inEncrypted
-
outEncrypted
-
inPlain
-
initializer
-
verifier
-
sessionStartCallback
-
sessionEndCallback
-
handshakeCallbackRef
-
handshakeTimeout
-
sslMode
-
outboundClosedCount
-
handshakeStateRef
-
internalEventHandler
-
appEventMask
private int appEventMask -
endOfStream
private volatile boolean endOfStream -
status
-
socketTimeout
-
tlsDetails
-
-
Constructor Details
-
SSLIOSession
public SSLIOSession(NamedEndpoint targetEndpoint, IOSession session, SSLMode sslMode, SSLContext sslContext, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Callback<SSLIOSession> sessionStartCallback, Callback<SSLIOSession> sessionEndCallback, Timeout connectTimeout) Creates new instance ofSSLIOSessionclass.- Parameters:
targetEndpoint- target endpoint (applicable in client mode only). May benull.session- I/O session to be decorated with the TLS/SSL capabilities.sslMode- SSL mode (client or server)sslContext- SSL context to use for this I/O session.sslBufferMode- buffer management modeinitializer- optional SSL session initializer. May benull.verifier- optional SSL session verifier. May benull.connectTimeout- timeout to apply for the TLS/SSL handshake. May benull.- Since:
- 5.0
-
SSLIOSession
public SSLIOSession(NamedEndpoint targetEndpoint, IOSession session, SSLMode sslMode, SSLContext sslContext, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout, Callback<SSLIOSession> sessionStartCallback, Callback<SSLIOSession> sessionEndCallback, FutureCallback<SSLSession> resultCallback) Creates new instance ofSSLIOSessionclass.- Parameters:
targetEndpoint- target endpoint (applicable in client mode only). May benull.session- I/O session to be decorated with the TLS/SSL capabilities.sslMode- SSL mode (client or server)sslContext- SSL context to use for this I/O session.sslBufferMode- buffer management modeinitializer- optional SSL session initializer. May benull.verifier- optional SSL session verifier. May benull.handshakeTimeout- timeout to apply for the TLS/SSL handshake. May benull.resultCallback- result callback. May benull.- Since:
- 5.2
-
-
Method Details
-
ensureHandler
-
getHandler
Description copied from interface:IOSessionReturns event handler associated with the session.- Specified by:
getHandlerin interfaceIOSession
-
beginHandshake
- Throws:
IOException
-
initialize
- Throws:
IOException
-
convert
-
doWrap
- Throws:
SSLException
-
doUnwrap
- Throws:
SSLException
-
doRunTask
private void doRunTask() -
doHandshake
- Throws:
IOException
-
updateEventMask
private void updateEventMask() -
sendEncryptedData
- Throws:
IOException
-
receiveEncryptedData
- Throws:
IOException
-
decryptData
- Throws:
IOException
-
encryptData
- Throws:
IOException
-
write
- Specified by:
writein interfaceWritableByteChannel- Throws:
IOException
-
read
- Specified by:
readin interfaceReadableByteChannel
-
getId
- Specified by:
getIdin interfaceIdentifiable
-
getLock
Description copied from interface:IOSessionReturns session lock that should be used by I/O event handlers to synchronize access to the session. -
upgrade
Description copied from interface:IOSessionUpgrades event handler associated with the session. -
getTlsDetails
-
isOpen
public boolean isOpen() -
close
public void close()Description copied from interface:IOSessionTerminates the session gracefully and closes the underlying I/O channel. This method ensures that session termination handshake, such as the one used by the SSL/TLS protocol, is correctly carried out. -
close
Description copied from interface:ModalCloseableCloses this process or endpoint and releases any system resources associated with it. If the endpoint or the process is already closed then invoking this method has no effect.- Specified by:
closein interfaceModalCloseable- Parameters:
closeMode- How to close the receiver.
-
getStatus
Description copied from interface:IOSessionReturns status of the session:IOSession.Status.ACTIVE: session is active.IOSession.Status.CLOSING: session is being closed.IOSession.Status.CLOSED: session has been terminated. -
enqueue
Description copied from interface:IOSessionInsertsCommandat the end of the command queue. -
hasCommands
public boolean hasCommands()Description copied from interface:IOSessionTests if there enqueued commands pending execution.- Specified by:
hasCommandsin interfaceIOSession
-
poll
Description copied from interface:IOSessionRemoves firstCommandfrom the command queue if available. -
channel
Description copied from interface:IOSessionReturns the underlying I/O channel associated with this session. -
getLocalAddress
Description copied from interface:IOSessionReturns local address.- Specified by:
getLocalAddressin interfaceIOSession- Returns:
- socket address.
-
getRemoteAddress
Description copied from interface:IOSessionReturns address of the remote peer.- Specified by:
getRemoteAddressin interfaceIOSession- Returns:
- socket address.
-
getEventMask
public int getEventMask()Description copied from interface:IOSessionReturns mask of I/O evens this session declared interest in.- Specified by:
getEventMaskin interfaceIOSession- Returns:
- I/O event mask.
-
setEventMask
public void setEventMask(int ops) Description copied from interface:IOSessionDeclares interest in I/O event notifications by setting the event mask associated with the session- Specified by:
setEventMaskin interfaceIOSession- Parameters:
ops- new I/O event mask.
-
setEvent
public void setEvent(int op) Description copied from interface:IOSessionDeclares interest in a particular I/O event type by updating the event mask associated with the session. -
clearEvent
public void clearEvent(int op) Description copied from interface:IOSessionClears interest in a particular I/O event type by updating the event mask associated with the session.- Specified by:
clearEventin interfaceIOSession- Parameters:
op- I/O event type.
-
getSocketTimeout
Description copied from interface:IOSessionReturns value of the socket timeout in milliseconds. The value of0signifies the session cannot time out.- Specified by:
getSocketTimeoutin interfaceIOSession- Specified by:
getSocketTimeoutin interfaceSocketModalCloseable- Returns:
- socket timeout.
-
setSocketTimeout
Description copied from interface:IOSessionSets value of the socket timeout in milliseconds. The value of0signifies the session cannot time out.Please note this operation may affect the last event time.
- Specified by:
setSocketTimeoutin interfaceIOSession- Specified by:
setSocketTimeoutin interfaceSocketModalCloseable- Parameters:
timeout- socket timeout.- See Also:
-
updateReadTime
public void updateReadTime()Description copied from interface:IOSessionUpdates the timestamp of the last read event- Specified by:
updateReadTimein interfaceIOSession
-
updateWriteTime
public void updateWriteTime()Description copied from interface:IOSessionUpdates the timestamp of the last write event- Specified by:
updateWriteTimein interfaceIOSession
-
getLastReadTime
public long getLastReadTime()Description copied from interface:IOSessionReturns timestamp of the last read event.- Specified by:
getLastReadTimein interfaceIOSession- Returns:
- timestamp.
-
getLastWriteTime
public long getLastWriteTime()Description copied from interface:IOSessionReturns timestamp of the last write event.- Specified by:
getLastWriteTimein interfaceIOSession- Returns:
- timestamp.
-
getLastEventTime
public long getLastEventTime()Description copied from interface:IOSessionReturns timestamp of the last I/O event including socket timeout reset.- Specified by:
getLastEventTimein interfaceIOSession- Returns:
- timestamp.
- See Also:
-
formatOps
-
toString
-