Class AbstractWebSocketConnection

java.lang.Object
org.eclipse.jetty.io.AbstractConnection
org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
All Implemented Interfaces:
Closeable, AutoCloseable, org.eclipse.jetty.io.Connection, org.eclipse.jetty.io.Connection.UpgradeTo, org.eclipse.jetty.util.component.Dumpable, OutgoingFrames, SuspendToken, LogicalConnection
Direct Known Subclasses:
WebSocketClientConnection, WebSocketServerConnection

public abstract class AbstractWebSocketConnection extends org.eclipse.jetty.io.AbstractConnection implements LogicalConnection, org.eclipse.jetty.io.Connection.UpgradeTo, org.eclipse.jetty.util.component.Dumpable
Provides the implementation of LogicalConnection within the framework of the new Connection framework of jetty-io.
  • Field Details

    • LOG

      private static final org.eclipse.jetty.util.log.Logger LOG
    • ID_GEN

      private static final AtomicLong ID_GEN
    • MIN_BUFFER_SIZE

      private static final int MIN_BUFFER_SIZE
      Minimum size of a buffer is the determined to be what would be the maximum framing header size (not including payload)
      See Also:
    • bufferPool

      private final org.eclipse.jetty.io.ByteBufferPool bufferPool
    • scheduler

      private final org.eclipse.jetty.util.thread.Scheduler scheduler
    • generator

      private final Generator generator
    • parser

      private final Parser parser
    • policy

      private final WebSocketPolicy policy
    • readState

      private final ReadState readState
    • connectionState

      private final ConnectionState connectionState
    • flusher

      private final FrameFlusher flusher
    • id

      private final String id
    • bytesIn

      private final LongAdder bytesIn
    • session

      private WebSocketSession session
    • extensions

      private List<ExtensionConfig> extensions
    • initialBuffer

      private ByteBuffer initialBuffer
    • stats

    • fatalCloseInfo

      private CloseInfo fatalCloseInfo
  • Constructor Details

    • AbstractWebSocketConnection

      public AbstractWebSocketConnection(org.eclipse.jetty.io.EndPoint endp, Executor executor, org.eclipse.jetty.util.thread.Scheduler scheduler, WebSocketPolicy policy, org.eclipse.jetty.io.ByteBufferPool bufferPool)
  • Method Details

    • getExecutor

      public Executor getExecutor()
      Description copied from interface: LogicalConnection
      Get the Executor used by this connection.
      Specified by:
      getExecutor in interface LogicalConnection
      Overrides:
      getExecutor in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      the executor
    • close

      public void close(CloseInfo close, org.eclipse.jetty.util.Callback callback)
      Description copied from interface: LogicalConnection
      Request a local close.
      Specified by:
      close in interface LogicalConnection
    • close

      public void close(Throwable cause)
      Close the connection based on the throwable
      Specified by:
      close in interface LogicalConnection
      Parameters:
      cause - the cause
    • canWriteWebSocketFrames

      public boolean canWriteWebSocketFrames()
      Description copied from interface: LogicalConnection
      Test if Connection State allows for writing frames.
      Specified by:
      canWriteWebSocketFrames in interface LogicalConnection
      Returns:
      true if able to write, false otherwise.
    • canReadWebSocketFrames

      public boolean canReadWebSocketFrames()
      Description copied from interface: LogicalConnection
      Test if Connection State allows for reading of frames.
      Specified by:
      canReadWebSocketFrames in interface LogicalConnection
      Returns:
      true if able to read, false otherwise.
    • toStateString

      public String toStateString()
      Description copied from interface: LogicalConnection
      Get the Connection State as a String
      Specified by:
      toStateString in interface LogicalConnection
      Returns:
      the Connection State string
    • opening

      public boolean opening()
      Description copied from interface: LogicalConnection
      Set the state to upgrade/opening handshake has completed.
      Specified by:
      opening in interface LogicalConnection
      Returns:
      true if state is OPENING, false otherwise
    • opened

      public boolean opened()
      Description copied from interface: LogicalConnection
      Set the state to opened (the application onOpen() method has been called successfully).

      Reads from network begin here.

      Specified by:
      opened in interface LogicalConnection
      Returns:
      true if state is OPENED, false otherwise
    • remoteClose

      public void remoteClose(CloseInfo close)
      Description copied from interface: LogicalConnection
      Report that the Remote Endpoint CLOSE Frame has been received
      Specified by:
      remoteClose in interface LogicalConnection
      Parameters:
      close - the close frame details
    • setSession

      public void setSession(WebSocketSession session)
      Description copied from interface: LogicalConnection
      Associate the Active Session with the connection.
      Specified by:
      setSession in interface LogicalConnection
      Parameters:
      session - the session for this connection
    • onIdleExpired

      public boolean onIdleExpired()
      Specified by:
      onIdleExpired in interface org.eclipse.jetty.io.Connection
      Overrides:
      onIdleExpired in class org.eclipse.jetty.io.AbstractConnection
    • close

      public void close()
      Jetty Connection Close
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface org.eclipse.jetty.io.Connection
      Overrides:
      close in class org.eclipse.jetty.io.AbstractConnection
    • disconnect

      public void disconnect()
      Description copied from interface: LogicalConnection
      Terminate the connection (no close frame sent)
      Specified by:
      disconnect in interface LogicalConnection
    • fillInterested

      public void fillInterested()
      Overrides:
      fillInterested in class org.eclipse.jetty.io.AbstractConnection
    • getBufferPool

      public org.eclipse.jetty.io.ByteBufferPool getBufferPool()
      Description copied from interface: LogicalConnection
      Get the ByteBufferPool in use by the connection
      Specified by:
      getBufferPool in interface LogicalConnection
      Returns:
      the buffer pool
    • getExtensions

      public List<ExtensionConfig> getExtensions()
      Get the list of extensions in use.

      This list is negotiated during the WebSocket Upgrade Request/Response handshake.

      Returns:
      the list of negotiated extensions in use.
    • getGenerator

      public Generator getGenerator()
    • getId

      public String getId()
      Description copied from interface: LogicalConnection
      Get Unique ID for the Connection
      Specified by:
      getId in interface LogicalConnection
      Returns:
      the unique ID for the connection
    • getIdleTimeout

      public long getIdleTimeout()
      Description copied from interface: LogicalConnection
      Get the read/write idle timeout.
      Specified by:
      getIdleTimeout in interface LogicalConnection
      Returns:
      the idle timeout in milliseconds
    • getMaxIdleTimeout

      public long getMaxIdleTimeout()
      Description copied from interface: LogicalConnection
      Set the maximum number of milliseconds of idleness before the connection is closed/disconnected, (ie no frames are either sent or received)
      Specified by:
      getMaxIdleTimeout in interface LogicalConnection
      Returns:
      the idle timeout in milliseconds
    • getParser

      public Parser getParser()
    • getPolicy

      public WebSocketPolicy getPolicy()
      Description copied from interface: LogicalConnection
      The policy that the connection is running under.
      Specified by:
      getPolicy in interface LogicalConnection
      Returns:
      the policy for the connection
    • getLocalAddress

      public InetSocketAddress getLocalAddress()
      Description copied from interface: LogicalConnection
      Get the local InetSocketAddress in use for this connection.

      Note: Non-physical connections, like during the Mux extensions, or during unit testing can result in a InetSocketAddress on port 0 and/or on localhost.

      Specified by:
      getLocalAddress in interface LogicalConnection
      Returns:
      the local address.
    • getRemoteAddress

      public InetSocketAddress getRemoteAddress()
      Description copied from interface: LogicalConnection
      Get the remote Address in use for this connection.

      Note: Non-physical connections, like during the Mux extensions, or during unit testing can result in a InetSocketAddress on port 0 and/or on localhost.

      Specified by:
      getRemoteAddress in interface LogicalConnection
      Returns:
      the remote address.
    • getScheduler

      public org.eclipse.jetty.util.thread.Scheduler getScheduler()
    • getStats

      Deprecated.
    • isOpen

      public boolean isOpen()
      Description copied from interface: LogicalConnection
      Test if logical connection is still open
      Specified by:
      isOpen in interface LogicalConnection
      Returns:
      true if connection is open
    • isReading

      public boolean isReading()
      Description copied from interface: LogicalConnection
      Tests if the connection is actively reading.
      Specified by:
      isReading in interface LogicalConnection
      Returns:
      true if connection is actively attempting to read.
    • onFillable

      public void onFillable()
      Specified by:
      onFillable in class org.eclipse.jetty.io.AbstractConnection
    • onFillable

      private void onFillable(ByteBuffer buffer)
    • resume

      public void resume()
      Description copied from interface: SuspendToken
      Resume a previously suspended connection.
      Specified by:
      resume in interface SuspendToken
    • suspend

      public SuspendToken suspend()
      Description copied from interface: LogicalConnection
      Suspend a the incoming read events on the connection.
      Specified by:
      suspend in interface LogicalConnection
      Returns:
      the suspend token
    • onFillInterestedFailed

      protected void onFillInterestedFailed(Throwable cause)
      Overrides:
      onFillInterestedFailed in class org.eclipse.jetty.io.AbstractConnection
    • setInitialBuffer

      protected void setInitialBuffer(ByteBuffer initialBuffer)
      Extra bytes from the initial HTTP upgrade that need to be processed by the websocket parser before starting to read bytes from the connection
      Parameters:
      initialBuffer - the bytes of unconsumed content encountered during upgrade
    • onReadTimeout

      protected boolean onReadTimeout(Throwable timeout)
      Event for no activity on connection (read or write)
      Overrides:
      onReadTimeout in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      true to signal that the endpoint must be closed, false to keep the endpoint open
    • outgoingFrame

      public void outgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode)
      Frame from API, User, or Internal implementation destined for network.
      Specified by:
      outgoingFrame in interface OutgoingFrames
      Parameters:
      frame - the frame to eventually write to the network layer.
      callback - the callback to notify when the frame is written.
      batchMode - the batch mode requested by the sender.
    • setExtensions

      public void setExtensions(List<ExtensionConfig> extensions)
      Get the list of extensions in use.

      This list is negotiated during the WebSocket Upgrade Request/Response handshake.

      Parameters:
      extensions - the list of negotiated extensions in use.
    • setInputBufferSize

      public void setInputBufferSize(int inputBufferSize)
      Overrides:
      setInputBufferSize in class org.eclipse.jetty.io.AbstractConnection
    • setMaxIdleTimeout

      public void setMaxIdleTimeout(long ms)
      Description copied from interface: LogicalConnection
      Set the maximum number of milliseconds of idleness before the connection is closed/disconnected, (ie no frames are either sent or received)

      This idle timeout cannot be garunteed to take immediate effect for any active read/write actions. New read/write actions will have this new idle timeout.

      Specified by:
      setMaxIdleTimeout in interface LogicalConnection
      Parameters:
      ms - the number of milliseconds of idle timeout
    • dumpSelf

      public String dumpSelf()
      Specified by:
      dumpSelf in interface org.eclipse.jetty.util.component.Dumpable
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Specified by:
      dump in interface org.eclipse.jetty.util.component.Dumpable
      Throws:
      IOException
    • toConnectionString

      public String toConnectionString()
      Overrides:
      toConnectionString in class org.eclipse.jetty.io.AbstractConnection
    • onUpgradeTo

      public void onUpgradeTo(ByteBuffer buffer)
      Extra bytes from the initial HTTP upgrade that need to be processed by the websocket parser before starting to read bytes from the connection
      Specified by:
      onUpgradeTo in interface org.eclipse.jetty.io.Connection.UpgradeTo
    • setNextIncomingFrames

      public void setNextIncomingFrames(IncomingFrames incoming)
      Description copied from interface: LogicalConnection
      Set where the connection should send the incoming frames to.

      Often this is from the Parser to the start of the extension stack, and eventually on to the session.

      Specified by:
      setNextIncomingFrames in interface LogicalConnection
      Parameters:
      incoming - the incoming frames handler
    • getMessagesIn

      public long getMessagesIn()
      Specified by:
      getMessagesIn in interface org.eclipse.jetty.io.Connection
      Overrides:
      getMessagesIn in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      the number of WebSocket frames received over this connection
    • getMessagesOut

      public long getMessagesOut()
      Specified by:
      getMessagesOut in interface org.eclipse.jetty.io.Connection
      Overrides:
      getMessagesOut in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      the number of WebSocket frames sent over this connection
    • getBytesIn

      public long getBytesIn()
      Specified by:
      getBytesIn in interface org.eclipse.jetty.io.Connection
      Overrides:
      getBytesIn in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      the number of bytes received over this connection
    • getBytesOut

      public long getBytesOut()
      Specified by:
      getBytesOut in interface org.eclipse.jetty.io.Connection
      Overrides:
      getBytesOut in class org.eclipse.jetty.io.AbstractConnection
      Returns:
      the number of bytes frames sent over this connection