Class WebSocketCoreSession

java.lang.Object
org.eclipse.jetty.websocket.core.internal.WebSocketCoreSession
All Implemented Interfaces:
Dumpable, Configuration, CoreSession, IncomingFrames, OutgoingFrames

public class WebSocketCoreSession extends Object implements IncomingFrames, CoreSession, Dumpable
The Core WebSocket Session.
  • Constructor Details

  • Method Details

    • getClassLoader

      public ClassLoader getClassLoader()
    • setClassLoader

      public void setClassLoader(ClassLoader classLoader)
    • handle

      protected void handle(Runnable runnable)
      Can be overridden to scope into the correct classloader before calling application code.
      Parameters:
      runnable - the runnable to execute.
    • isDemanding

      public boolean isDemanding()
      Returns:
      True if the sessions handling is demanding.
    • getExtensionStack

      public ExtensionStack getExtensionStack()
    • getHandler

      public FrameHandler getHandler()
    • getNegotiatedSubProtocol

      public String getNegotiatedSubProtocol()
      Description copied from interface: CoreSession
      The negotiated WebSocket Sub-Protocol for this session.
      Specified by:
      getNegotiatedSubProtocol in interface CoreSession
      Returns:
      the negotiated WebSocket Sub-Protocol for this session.
    • getIdleTimeout

      public Duration getIdleTimeout()
      Description copied from interface: Configuration
      Get the Idle Timeout
      Specified by:
      getIdleTimeout in interface Configuration
      Returns:
      the idle timeout
    • setIdleTimeout

      public void setIdleTimeout(Duration timeout)
      Description copied from interface: Configuration
      Set the Idle Timeout.
      Specified by:
      setIdleTimeout in interface Configuration
      Parameters:
      timeout - the timeout duration (timeout <= 0 implies an infinite timeout)
    • getWriteTimeout

      public Duration getWriteTimeout()
      Description copied from interface: Configuration
      Get the Write Timeout
      Specified by:
      getWriteTimeout in interface Configuration
      Returns:
      the write timeout
    • setWriteTimeout

      public void setWriteTimeout(Duration timeout)
      Description copied from interface: Configuration
      Set the Write Timeout.
      Specified by:
      setWriteTimeout in interface Configuration
      Parameters:
      timeout - the timeout duration (timeout <= 0 implies an infinite timeout)
    • getLocalAddress

      public SocketAddress getLocalAddress()
      Description copied from interface: CoreSession
      The Local Socket Address for the connection

      Do not assume that this will return a InetSocketAddress in all cases. Use of various proxies, and even UnixSockets can result a SocketAddress being returned without supporting InetSocketAddress

      Specified by:
      getLocalAddress in interface CoreSession
      Returns:
      the SocketAddress for the local connection, or null if not supported by Session
    • getRemoteAddress

      public SocketAddress getRemoteAddress()
      Description copied from interface: CoreSession
      The Remote Socket Address for the connection

      Do not assume that this will return a InetSocketAddress in all cases. Use of various proxies, and even UnixSockets can result a SocketAddress being returned without supporting InetSocketAddress

      Specified by:
      getRemoteAddress in interface CoreSession
      Returns:
      the SocketAddress for the remote connection, or null if not supported by Session
    • isInputOpen

      public boolean isInputOpen()
      Specified by:
      isInputOpen in interface CoreSession
      Returns:
      True if the websocket is open inbound
    • isOutputOpen

      public boolean isOutputOpen()
      Specified by:
      isOutputOpen in interface CoreSession
      Returns:
      True if the websocket is open outbound
    • isClosed

      public boolean isClosed()
    • setWebSocketConnection

      public void setWebSocketConnection(WebSocketConnection connection)
    • close

      public void close(Callback callback)
      Send Close Frame with no payload.
      Specified by:
      close in interface CoreSession
      Parameters:
      callback - the callback on successful send of close frame
    • close

      public void close(int statusCode, String reason, Callback callback)
      Send Close Frame with specified Status Code and optional Reason
      Specified by:
      close in interface CoreSession
      Parameters:
      statusCode - a valid WebSocket status code
      reason - an optional reason phrase
      callback - the callback on successful send of close frame
    • getByteBufferPool

      public ByteBufferPool getByteBufferPool()
      Specified by:
      getByteBufferPool in interface CoreSession
      Returns:
      The shared ByteBufferPool
    • onEof

      public void onEof()
    • processConnectionError

      public void processConnectionError(Throwable cause, Callback callback)
      Process an Error that originated from the connection. For protocol causes, send and abnormal close frame otherwise just close the connection.
      Parameters:
      cause - the cause
      callback - the callback on completion of error handling
    • processHandlerError

      public void processHandlerError(Throwable cause, Callback callback)
      Process an Error that originated from the handler. Send an abnormal close frame to ensure connection is closed.
      Parameters:
      cause - the cause
      callback - the callback on completion of error handling
    • onOpen

      public void onOpen()
      Open/Activate the session.
    • demand

      public void demand(long n)
      Description copied from interface: CoreSession
      Manage flow control by indicating demand for handling Frames. A call to FrameHandler.onFrame(Frame, Callback) will only be made if a corresponding demand has been signaled. It is an error to call this method if FrameHandler.isDemanding() returns false.
      Specified by:
      demand in interface CoreSession
      Parameters:
      n - The number of frames that can be handled (in sequential calls to FrameHandler.onFrame(Frame, Callback)). May not be negative.
    • autoDemand

      public void autoDemand()
    • isRsv1Used

      public boolean isRsv1Used()
      Specified by:
      isRsv1Used in interface CoreSession
      Returns:
      true if an extension has been negotiated which uses the RSV1 bit.
    • isRsv2Used

      public boolean isRsv2Used()
      Specified by:
      isRsv2Used in interface CoreSession
      Returns:
      true if an extension has been negotiated which uses the RSV2 bit.
    • isRsv3Used

      public boolean isRsv3Used()
      Specified by:
      isRsv3Used in interface CoreSession
      Returns:
      true if an extension has been negotiated which uses the RSV3 bit.
    • getConnection

      public WebSocketConnection getConnection()
    • getExecutor

      public Executor getExecutor()
    • onFrame

      public void onFrame(Frame frame, Callback callback)
      Description copied from interface: IncomingFrames

      Process the incoming frame.

      Note: if you need to hang onto any information from the frame, be sure to copy it, as the information contained in the Frame will be released and/or reused by the implementation.

      Failure of the callback will propagate the failure back to the CoreSession to fail the connection and attempt to send a close Frame if one has not been sent.

      Specified by:
      onFrame in interface IncomingFrames
      Parameters:
      frame - the frame to process.
      callback - the read completion.
    • sendFrame

      public void sendFrame(Frame frame, Callback callback, boolean batch)
      Description copied from interface: OutgoingFrames
      A frame, and optional callback, intended for the network layer.

      Note: the frame can undergo many transformations in the various layers and extensions present in the implementation.

      If you are implementing a mutation, you are obliged to handle the incoming WriteCallback appropriately.

      Specified by:
      sendFrame in interface OutgoingFrames
      Parameters:
      frame - the frame to eventually write to the network layer.
      callback - the callback to notify when the frame is written.
      batch - the batch mode requested by the sender.
    • flush

      public void flush(Callback callback)
      Description copied from interface: CoreSession
      If using BatchMode.ON or BatchMode.AUTO, trigger a flush of enqueued / batched frames.
      Specified by:
      flush in interface CoreSession
      Parameters:
      callback - the callback to track close frame sent (or failed)
    • abort

      public void abort()
      Description copied from interface: CoreSession
      Issue a harsh abort of the underlying connection.

      This will terminate the connection, without sending a websocket close frame. No WebSocket Protocol close handshake will be performed.

      Once called, any read/write activity on the websocket from this point will be indeterminate. This can result in the FrameHandler.onError(Throwable, Callback) event being called indicating any issue that arises.

      Once the underlying connection has been determined to be closed, the FrameHandler.onClosed(CloseStatus, Callback) event will be called.

      Specified by:
      abort in interface CoreSession
    • isAutoFragment

      public boolean isAutoFragment()
      Specified by:
      isAutoFragment in interface Configuration
    • setAutoFragment

      public void setAutoFragment(boolean autoFragment)
      Specified by:
      setAutoFragment in interface Configuration
    • getMaxFrameSize

      public long getMaxFrameSize()
      Specified by:
      getMaxFrameSize in interface Configuration
    • setMaxFrameSize

      public void setMaxFrameSize(long maxFrameSize)
      Specified by:
      setMaxFrameSize in interface Configuration
    • getOutputBufferSize

      public int getOutputBufferSize()
      Specified by:
      getOutputBufferSize in interface Configuration
    • setOutputBufferSize

      public void setOutputBufferSize(int outputBufferSize)
      Specified by:
      setOutputBufferSize in interface Configuration
    • getInputBufferSize

      public int getInputBufferSize()
      Specified by:
      getInputBufferSize in interface Configuration
    • setInputBufferSize

      public void setInputBufferSize(int inputBufferSize)
      Specified by:
      setInputBufferSize in interface Configuration
    • getMaxBinaryMessageSize

      public long getMaxBinaryMessageSize()
      Specified by:
      getMaxBinaryMessageSize in interface Configuration
    • setMaxBinaryMessageSize

      public void setMaxBinaryMessageSize(long maxSize)
      Specified by:
      setMaxBinaryMessageSize in interface Configuration
    • getMaxTextMessageSize

      public long getMaxTextMessageSize()
      Specified by:
      getMaxTextMessageSize in interface Configuration
    • setMaxTextMessageSize

      public void setMaxTextMessageSize(long maxSize)
      Specified by:
      setMaxTextMessageSize in interface Configuration
    • getMaxOutgoingFrames

      public int getMaxOutgoingFrames()
      Description copied from interface: Configuration
      Get the maximum number of data frames allowed to be waiting to be sent at any one time. The default value is -1, this indicates there is no limit on how many frames can be queued to be sent by the implementation. If the limit is exceeded, subsequent frames sent are failed with a WritePendingException but the connection is not failed and will remain open.
      Specified by:
      getMaxOutgoingFrames in interface Configuration
      Returns:
      the max number of frames.
    • setMaxOutgoingFrames

      public void setMaxOutgoingFrames(int maxOutgoingFrames)
      Description copied from interface: Configuration
      Set the maximum number of data frames allowed to be waiting to be sent at any one time. The default value is -1, this indicates there is no limit on how many frames can be queued to be sent by the implementation. If the limit is exceeded, subsequent frames sent are failed with a WritePendingException but the connection is not failed and will remain open.
      Specified by:
      setMaxOutgoingFrames in interface Configuration
      Parameters:
      maxOutgoingFrames - the max number of frames.
    • dump

      public String dump()
      Specified by:
      dump in interface Dumpable
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Description copied from interface: Dumpable
      Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
      Specified by:
      dump in interface Dumpable
      Parameters:
      out - The appendable to dump to
      indent - The indent to apply after any new lines.
      Throws:
      IOException - if unable to write to Appendable
    • getNegotiatedExtensions

      public List<ExtensionConfig> getNegotiatedExtensions()
      Description copied from interface: CoreSession
      The negotiated WebSocket Extension Configurations for this session.
      Specified by:
      getNegotiatedExtensions in interface CoreSession
      Returns:
      the list of Negotiated Extension Configurations for this session.
    • getParameterMap

      public Map<String,List<String>> getParameterMap()
      Description copied from interface: CoreSession
      The parameter map (from URI Query) for the active session.
      Specified by:
      getParameterMap in interface CoreSession
      Returns:
      the immutable map of parameters
    • getProtocolVersion

      public String getProtocolVersion()
      Description copied from interface: CoreSession
      The active Sec-WebSocket-Version (protocol version) in use.
      Specified by:
      getProtocolVersion in interface CoreSession
      Returns:
      the protocol version in use.
    • getRequestURI

      public URI getRequestURI()
      Description copied from interface: CoreSession
      The active connection's Request URI. This is the URI of the upgrade request and is typically http: or https: rather than the ws: or wss: scheme.
      Specified by:
      getRequestURI in interface CoreSession
      Returns:
      the absolute URI (including Query string)
    • isSecure

      public boolean isSecure()
      Description copied from interface: CoreSession
      The active connection's Secure status indicator.
      Specified by:
      isSecure in interface CoreSession
      Returns:
      true if connection is secure (similar in role to HttpServletRequest.isSecure())
    • getBehavior

      public Behavior getBehavior()
      Specified by:
      getBehavior in interface CoreSession
      Returns:
      Client or Server behaviour
    • getWebSocketComponents

      public WebSocketComponents getWebSocketComponents()
      Specified by:
      getWebSocketComponents in interface CoreSession
      Returns:
      the WebSocketComponents instance in use for this Connection.
    • toString

      public String toString()
      Overrides:
      toString in class Object