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 int
private static final ByteBuffer
private boolean
private final AtomicReference
<FutureCallback<SSLSession>> private final AtomicReference
<SSLIOSession.TLSHandShakeState> private final Timeout
private final SSLManagedBuffer
private final SSLSessionInitializer
private final SSLManagedBuffer
private final IOEventHandler
private final AtomicInteger
private final SSLManagedBuffer
private final IOSession
private final Callback
<SSLIOSession> private final Callback
<SSLIOSession> private Timeout
private final SSLEngine
private final SSLMode
private IOSession.Status
private final NamedEndpoint
private TlsDetails
private 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 ofSSLIOSession
class.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 ofSSLIOSession
class. -
Method Summary
Modifier and TypeMethodDescriptionvoid
beginHandshake
(IOSession protocolSession) channel()
Returns the underlying I/O channel associated with this session.void
clearEvent
(int op) Clears interest in a particular I/O event type by updating the event mask associated with the session.void
close()
Terminates the session gracefully and closes the underlying I/O channel.void
Closes this process or endpoint and releases any system resources associated with it.private SSLException
private void
decryptData
(IOSession protocolSession) private void
doHandshake
(IOSession protocolSession) private void
private SSLEngineResult
doUnwrap
(ByteBuffer src, ByteBuffer dst) private SSLEngineResult
doWrap
(ByteBuffer src, ByteBuffer dst) private void
encryptData
(IOSession protocolSession) void
enqueue
(Command command, Command.Priority priority) InsertsCommand
at the end of the command queue.private IOEventHandler
private static void
formatOps
(StringBuilder buffer, int ops) int
Returns mask of I/O evens this session declared interest in.Returns event handler associated with the session.getId()
long
Returns timestamp of the last I/O event including socket timeout reset.long
Returns timestamp of the last read event.long
Returns 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:boolean
Tests if there enqueued commands pending execution.private void
initialize
(IOSession protocolSession) boolean
isOpen()
poll()
Removes firstCommand
from the command queue if available.int
read
(ByteBuffer dst) private int
private int
void
setEvent
(int op) Declares interest in a particular I/O event type by updating the event mask associated with the session.void
setEventMask
(int ops) Declares interest in I/O event notifications by setting the event mask associated with the sessionvoid
setSocketTimeout
(Timeout timeout) Sets value of the socket timeout in milliseconds.toString()
private void
void
Updates the timestamp of the last read eventvoid
Updates the timestamp of the last write eventvoid
upgrade
(IOEventHandler handler) Upgrades event handler associated with the session.int
write
(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 ofSSLIOSession
class.- 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 ofSSLIOSession
class.- 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:IOSession
Returns event handler associated with the session.- Specified by:
getHandler
in 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:
write
in interfaceWritableByteChannel
- Throws:
IOException
-
read
- Specified by:
read
in interfaceReadableByteChannel
-
getId
- Specified by:
getId
in interfaceIdentifiable
-
getLock
Description copied from interface:IOSession
Returns session lock that should be used by I/O event handlers to synchronize access to the session. -
upgrade
Description copied from interface:IOSession
Upgrades event handler associated with the session. -
getTlsDetails
-
isOpen
public boolean isOpen() -
close
public void close()Description copied from interface:IOSession
Terminates 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:ModalCloseable
Closes 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:
close
in interfaceModalCloseable
- Parameters:
closeMode
- How to close the receiver.
-
getStatus
Description copied from interface:IOSession
Returns 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:IOSession
InsertsCommand
at the end of the command queue. -
hasCommands
public boolean hasCommands()Description copied from interface:IOSession
Tests if there enqueued commands pending execution.- Specified by:
hasCommands
in interfaceIOSession
-
poll
Description copied from interface:IOSession
Removes firstCommand
from the command queue if available. -
channel
Description copied from interface:IOSession
Returns the underlying I/O channel associated with this session. -
getLocalAddress
Description copied from interface:IOSession
Returns local address.- Specified by:
getLocalAddress
in interfaceIOSession
- Returns:
- socket address.
-
getRemoteAddress
Description copied from interface:IOSession
Returns address of the remote peer.- Specified by:
getRemoteAddress
in interfaceIOSession
- Returns:
- socket address.
-
getEventMask
public int getEventMask()Description copied from interface:IOSession
Returns mask of I/O evens this session declared interest in.- Specified by:
getEventMask
in interfaceIOSession
- Returns:
- I/O event mask.
-
setEventMask
public void setEventMask(int ops) Description copied from interface:IOSession
Declares interest in I/O event notifications by setting the event mask associated with the session- Specified by:
setEventMask
in interfaceIOSession
- Parameters:
ops
- new I/O event mask.
-
setEvent
public void setEvent(int op) Description copied from interface:IOSession
Declares 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:IOSession
Clears interest in a particular I/O event type by updating the event mask associated with the session.- Specified by:
clearEvent
in interfaceIOSession
- Parameters:
op
- I/O event type.
-
getSocketTimeout
Description copied from interface:IOSession
Returns value of the socket timeout in milliseconds. The value of0
signifies the session cannot time out.- Specified by:
getSocketTimeout
in interfaceIOSession
- Specified by:
getSocketTimeout
in interfaceSocketModalCloseable
- Returns:
- socket timeout.
-
setSocketTimeout
Description copied from interface:IOSession
Sets value of the socket timeout in milliseconds. The value of0
signifies the session cannot time out.Please note this operation may affect the last event time.
- Specified by:
setSocketTimeout
in interfaceIOSession
- Specified by:
setSocketTimeout
in interfaceSocketModalCloseable
- Parameters:
timeout
- socket timeout.- See Also:
-
updateReadTime
public void updateReadTime()Description copied from interface:IOSession
Updates the timestamp of the last read event- Specified by:
updateReadTime
in interfaceIOSession
-
updateWriteTime
public void updateWriteTime()Description copied from interface:IOSession
Updates the timestamp of the last write event- Specified by:
updateWriteTime
in interfaceIOSession
-
getLastReadTime
public long getLastReadTime()Description copied from interface:IOSession
Returns timestamp of the last read event.- Specified by:
getLastReadTime
in interfaceIOSession
- Returns:
- timestamp.
-
getLastWriteTime
public long getLastWriteTime()Description copied from interface:IOSession
Returns timestamp of the last write event.- Specified by:
getLastWriteTime
in interfaceIOSession
- Returns:
- timestamp.
-
getLastEventTime
public long getLastEventTime()Description copied from interface:IOSession
Returns timestamp of the last I/O event including socket timeout reset.- Specified by:
getLastEventTime
in interfaceIOSession
- Returns:
- timestamp.
- See Also:
-
formatOps
-
toString
-