Package org.apache.hc.core5.reactor
Class InternalDataChannel
- java.lang.Object
-
- org.apache.hc.core5.reactor.InternalChannel
-
- org.apache.hc.core5.reactor.InternalDataChannel
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.nio.channels.ByteChannel,java.nio.channels.Channel,java.nio.channels.ReadableByteChannel,java.nio.channels.WritableByteChannel,SocketModalCloseable,ModalCloseable,IOSession,ProtocolIOSession,TransportSecurityLayer,Identifiable
final class InternalDataChannel extends InternalChannel implements ProtocolIOSession
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.hc.core5.reactor.IOSession
IOSession.Status
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.atomic.AtomicBooleanclosedprivate java.util.Queue<InternalDataChannel>closedSessionsprivate java.util.concurrent.atomic.AtomicReference<IOSession>currentSessionRefprivate java.util.concurrent.atomic.AtomicReference<IOEventHandler>eventHandlerRefprivate NamedEndpointinitialEndpointprivate IOSessionioSessionprivate Decorator<IOSession>ioSessionDecoratorprivate java.util.concurrent.ConcurrentMap<java.lang.String,ProtocolUpgradeHandler>protocolUpgradeHandlerMapprivate IOSessionListenersessionListenerprivate java.util.concurrent.atomic.AtomicReference<SSLIOSession>tlsSessionRef
-
Constructor Summary
Constructors Constructor Description InternalDataChannel(IOSession ioSession, NamedEndpoint initialEndpoint, Decorator<IOSession> ioSessionDecorator, IOSessionListener sessionListener, java.util.Queue<InternalDataChannel> closedSessions)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.nio.channels.ByteChannelchannel()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.voidclose(CloseMode closeMode)Closes this process or endpoint and releases any system resources associated with it.(package private) voiddisconnected()voidenqueue(Command command, Command.Priority priority)InsertsCommandat the end of the command queue.private IOEventHandlerensureHandler(IOSession session)intgetEventMask()Returns mask of I/O evens this session declared interest in.IOEventHandlergetHandler()Returns event handler associated with the session.java.lang.StringgetId()NamedEndpointgetInitialEndpoint()longgetLastEventTime()Returns timestamp of the last I/O event including socket timeout reset.longgetLastReadTime()Returns timestamp of the last read event.longgetLastWriteTime()Returns timestamp of the last write event.java.net.SocketAddressgetLocalAddress()Returns local address.java.util.concurrent.locks.LockgetLock()Returns session lock that should be used by I/O event handlers to synchronize access to the session.java.net.SocketAddressgetRemoteAddress()Returns address of the remote peer.TimeoutgetSocketTimeout()Returns value of the socket timeout in milliseconds.IOSession.StatusgetStatus()Returns status of the session:(package private) TimeoutgetTimeout()TlsDetailsgetTlsDetails()Returns details of a fully established TLS session.booleanhasCommands()Tests if there enqueued commands pending execution.booleanisOpen()(package private) voidonException(java.lang.Exception cause)(package private) voidonIOEvent(int readyOps)(package private) voidonTimeout(Timeout timeout)(package private) voidonTLSSessionEnd(SSLIOSession sslSession)(package private) voidonTLSSessionStart(SSLIOSession sslSession)Commandpoll()Removes firstCommandfrom the command queue if available.intread(java.nio.ByteBuffer dst)voidregisterProtocol(java.lang.String protocolId, ProtocolUpgradeHandler upgradeHandler)Registers protocol upgrade handler with the given application protocol ID.voidsetEvent(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.voidstartTls(javax.net.ssl.SSLContext sslContext, NamedEndpoint endpoint, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout)Starts TLS session over an existing network connection with the given SSL context.voidstartTls(javax.net.ssl.SSLContext sslContext, NamedEndpoint endpoint, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout, FutureCallback<TransportSecurityLayer> callback)Starts TLS session over an existing network connection with the given SSL context.voidswitchProtocol(java.lang.String protocolId, FutureCallback<ProtocolIOSession> callback)Switches this I/O session to the application protocol with the given ID.java.lang.StringtoString()voidupdateReadTime()Updates the timestamp of the last read eventvoidupdateWriteTime()Updates the timestamp of the last write eventvoidupgrade(IOEventHandler handler)Upgrades event handler associated with the session.intwrite(java.nio.ByteBuffer src)-
Methods inherited from class org.apache.hc.core5.reactor.InternalChannel
checkTimeout, handleIOEvent
-
-
-
-
Field Detail
-
ioSession
private final IOSession ioSession
-
initialEndpoint
private final NamedEndpoint initialEndpoint
-
sessionListener
private final IOSessionListener sessionListener
-
closedSessions
private final java.util.Queue<InternalDataChannel> closedSessions
-
tlsSessionRef
private final java.util.concurrent.atomic.AtomicReference<SSLIOSession> tlsSessionRef
-
currentSessionRef
private final java.util.concurrent.atomic.AtomicReference<IOSession> currentSessionRef
-
eventHandlerRef
private final java.util.concurrent.atomic.AtomicReference<IOEventHandler> eventHandlerRef
-
protocolUpgradeHandlerMap
private final java.util.concurrent.ConcurrentMap<java.lang.String,ProtocolUpgradeHandler> protocolUpgradeHandlerMap
-
closed
private final java.util.concurrent.atomic.AtomicBoolean closed
-
-
Constructor Detail
-
InternalDataChannel
InternalDataChannel(IOSession ioSession, NamedEndpoint initialEndpoint, Decorator<IOSession> ioSessionDecorator, IOSessionListener sessionListener, java.util.Queue<InternalDataChannel> closedSessions)
-
-
Method Detail
-
getId
public java.lang.String getId()
- Specified by:
getIdin interfaceIdentifiable
-
getInitialEndpoint
public NamedEndpoint getInitialEndpoint()
- Specified by:
getInitialEndpointin interfaceProtocolIOSession
-
getHandler
public IOEventHandler getHandler()
Description copied from interface:IOSessionReturns event handler associated with the session.- Specified by:
getHandlerin interfaceIOSession
-
upgrade
public void upgrade(IOEventHandler handler)
Description copied from interface:IOSessionUpgrades event handler associated with the session.
-
ensureHandler
private IOEventHandler ensureHandler(IOSession session)
-
onIOEvent
void onIOEvent(int readyOps) throws java.io.IOException- Specified by:
onIOEventin classInternalChannel- Throws:
java.io.IOException
-
getTimeout
Timeout getTimeout()
- Specified by:
getTimeoutin classInternalChannel
-
onTimeout
void onTimeout(Timeout timeout) throws java.io.IOException
- Specified by:
onTimeoutin classInternalChannel- Throws:
java.io.IOException
-
onException
void onException(java.lang.Exception cause)
- Specified by:
onExceptionin classInternalChannel
-
onTLSSessionStart
void onTLSSessionStart(SSLIOSession sslSession)
-
onTLSSessionEnd
void onTLSSessionEnd(SSLIOSession sslSession)
-
disconnected
void disconnected()
-
startTls
public void startTls(javax.net.ssl.SSLContext sslContext, NamedEndpoint endpoint, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout)Description copied from interface:TransportSecurityLayerStarts TLS session over an existing network connection with the given SSL context.NamedEndpointdetails are applicable for client side connections and are used for host name verification, when supported by the SSL engine.- Specified by:
startTlsin interfaceTransportSecurityLayer- Parameters:
sslContext- SSL context to be used for this session.endpoint- optional endpoint details for outgoing client side connections.sslBufferMode- SSL buffer management mode.initializer- SSL session initialization callback.verifier- SSL session verification callback.handshakeTimeout- the timeout to use while performing the TLS handshake; may benull.
-
startTls
public void startTls(javax.net.ssl.SSLContext sslContext, NamedEndpoint endpoint, SSLBufferMode sslBufferMode, SSLSessionInitializer initializer, SSLSessionVerifier verifier, Timeout handshakeTimeout, FutureCallback<TransportSecurityLayer> callback)Description copied from interface:TransportSecurityLayerStarts TLS session over an existing network connection with the given SSL context.NamedEndpointdetails are applicable for client side connections and are used for host name verification, when supported by the SSL engine.- Specified by:
startTlsin interfaceTransportSecurityLayer- Parameters:
sslContext- SSL context to be used for this session.endpoint- optional endpoint details for outgoing client side connections.sslBufferMode- SSL buffer management mode.initializer- SSL session initialization callback.verifier- SSL session verification callback.handshakeTimeout- the timeout to use while performing the TLS handshake; may benull.
-
getTlsDetails
public TlsDetails getTlsDetails()
Description copied from interface:TransportSecurityLayerReturns details of a fully established TLS session.- Specified by:
getTlsDetailsin interfaceTransportSecurityLayer- Returns:
- TLS session details.
-
getLock
public java.util.concurrent.locks.Lock getLock()
Description copied from interface:IOSessionReturns session lock that should be used by I/O event handlers to synchronize access to the session.
-
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
public void close(CloseMode closeMode)
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
public IOSession.Status 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.
-
isOpen
public boolean isOpen()
- Specified by:
isOpenin interfacejava.nio.channels.Channel
-
enqueue
public void enqueue(Command command, Command.Priority priority)
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
public Command poll()
Description copied from interface:IOSessionRemoves firstCommandfrom the command queue if available.
-
channel
public java.nio.channels.ByteChannel channel()
Description copied from interface:IOSessionReturns the underlying I/O channel associated with this session.
-
getRemoteAddress
public java.net.SocketAddress getRemoteAddress()
Description copied from interface:IOSessionReturns address of the remote peer.- Specified by:
getRemoteAddressin interfaceIOSession- Returns:
- socket address.
-
getLocalAddress
public java.net.SocketAddress getLocalAddress()
Description copied from interface:IOSessionReturns local address.- Specified by:
getLocalAddressin 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
public Timeout 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
public void setSocketTimeout(Timeout timeout)
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:
IOSession.getLastEventTime()
-
read
public int read(java.nio.ByteBuffer dst) throws java.io.IOException- Specified by:
readin interfacejava.nio.channels.ReadableByteChannel- Throws:
java.io.IOException
-
write
public int write(java.nio.ByteBuffer src) throws java.io.IOException- Specified by:
writein interfacejava.nio.channels.WritableByteChannel- Throws:
java.io.IOException
-
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- Specified by:
getLastEventTimein classInternalChannel- Returns:
- timestamp.
- See Also:
IOSession.getSocketTimeout()
-
switchProtocol
public void switchProtocol(java.lang.String protocolId, FutureCallback<ProtocolIOSession> callback)Description copied from interface:ProtocolIOSessionSwitches this I/O session to the application protocol with the given ID.- Specified by:
switchProtocolin interfaceProtocolIOSession- Parameters:
protocolId- the application protocol IDcallback- the result callback
-
registerProtocol
public void registerProtocol(java.lang.String protocolId, ProtocolUpgradeHandler upgradeHandler)Description copied from interface:ProtocolIOSessionRegisters protocol upgrade handler with the given application protocol ID.- Specified by:
registerProtocolin interfaceProtocolIOSession- Parameters:
protocolId- the application protocol IDupgradeHandler- the upgrade handler.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-