Class AbstractWebSocketConnection

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.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 Detail

      • LOG

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

        private static final java.util.concurrent.atomic.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:
        Constant Field Values
      • 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
      • readState

        private final ReadState readState
      • id

        private final java.lang.String id
      • bytesIn

        private final java.util.concurrent.atomic.LongAdder bytesIn
      • initialBuffer

        private java.nio.ByteBuffer initialBuffer
      • fatalCloseInfo

        private CloseInfo fatalCloseInfo
    • Constructor Detail

      • AbstractWebSocketConnection

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

      • getExecutor

        public java.util.concurrent.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​(java.lang.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 java.lang.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
      • 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 java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface org.eclipse.jetty.io.Connection
        Overrides:
        close in class org.eclipse.jetty.io.AbstractConnection
      • 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 java.util.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 java.lang.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
      • 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()
      • getLocalAddress

        public java.net.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 java.net.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()
      • 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​(java.nio.ByteBuffer buffer)
      • resume

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

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

        protected void setInitialBuffer​(java.nio.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​(java.lang.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​(java.util.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 java.lang.String dumpSelf()
        Specified by:
        dumpSelf in interface org.eclipse.jetty.util.component.Dumpable
      • dump

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

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

        public void onUpgradeTo​(java.nio.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