Class WebSocketClientHandshaker

java.lang.Object
io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker
Direct Known Subclasses:
WebSocketClientHandshaker00, WebSocketClientHandshaker07, WebSocketClientHandshaker08, WebSocketClientHandshaker13

public abstract class WebSocketClientHandshaker extends Object
Base class for web socket client handshake implementations
  • Field Details

    • HTTP_SCHEME_PREFIX

      private static final String HTTP_SCHEME_PREFIX
    • HTTPS_SCHEME_PREFIX

      private static final String HTTPS_SCHEME_PREFIX
    • DEFAULT_FORCE_CLOSE_TIMEOUT_MILLIS

      protected static final int DEFAULT_FORCE_CLOSE_TIMEOUT_MILLIS
      See Also:
    • uri

      private final URI uri
    • version

      private final WebSocketVersion version
    • handshakeComplete

      private volatile boolean handshakeComplete
    • forceCloseTimeoutMillis

      private volatile long forceCloseTimeoutMillis
    • forceCloseInit

      private volatile int forceCloseInit
    • FORCE_CLOSE_INIT_UPDATER

      private static final AtomicIntegerFieldUpdater<WebSocketClientHandshaker> FORCE_CLOSE_INIT_UPDATER
    • forceCloseComplete

      private volatile boolean forceCloseComplete
    • expectedSubprotocol

      private final String expectedSubprotocol
    • actualSubprotocol

      private volatile String actualSubprotocol
    • customHeaders

      protected final HttpHeaders customHeaders
    • maxFramePayloadLength

      private final int maxFramePayloadLength
    • absoluteUpgradeUrl

      private final boolean absoluteUpgradeUrl
    • generateOriginHeader

      protected final boolean generateOriginHeader
  • Constructor Details

    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI uri, WebSocketVersion version, String subprotocol, HttpHeaders customHeaders, int maxFramePayloadLength)
      Base constructor
      Parameters:
      uri - URL for web socket communications. e.g "ws://myhost.com/mypath". Subsequent web socket frames will be sent to this URL.
      version - Version of web socket specification to use to connect to the server
      subprotocol - Sub protocol request sent to the server.
      customHeaders - Map of custom headers to add to the client request
      maxFramePayloadLength - Maximum length of a frame's payload
    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI uri, WebSocketVersion version, String subprotocol, HttpHeaders customHeaders, int maxFramePayloadLength, long forceCloseTimeoutMillis)
      Base constructor
      Parameters:
      uri - URL for web socket communications. e.g "ws://myhost.com/mypath". Subsequent web socket frames will be sent to this URL.
      version - Version of web socket specification to use to connect to the server
      subprotocol - Sub protocol request sent to the server.
      customHeaders - Map of custom headers to add to the client request
      maxFramePayloadLength - Maximum length of a frame's payload
      forceCloseTimeoutMillis - Close the connection if it was not closed by the server after timeout specified
    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI uri, WebSocketVersion version, String subprotocol, HttpHeaders customHeaders, int maxFramePayloadLength, long forceCloseTimeoutMillis, boolean absoluteUpgradeUrl)
      Base constructor
      Parameters:
      uri - URL for web socket communications. e.g "ws://myhost.com/mypath". Subsequent web socket frames will be sent to this URL.
      version - Version of web socket specification to use to connect to the server
      subprotocol - Sub protocol request sent to the server.
      customHeaders - Map of custom headers to add to the client request
      maxFramePayloadLength - Maximum length of a frame's payload
      forceCloseTimeoutMillis - Close the connection if it was not closed by the server after timeout specified
      absoluteUpgradeUrl - Use an absolute url for the Upgrade request, typically when connecting through an HTTP proxy over clear HTTP
    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI uri, WebSocketVersion version, String subprotocol, HttpHeaders customHeaders, int maxFramePayloadLength, long forceCloseTimeoutMillis, boolean absoluteUpgradeUrl, boolean generateOriginHeader)
      Base constructor
      Parameters:
      uri - URL for web socket communications. e.g "ws://myhost.com/mypath". Subsequent web socket frames will be sent to this URL.
      version - Version of web socket specification to use to connect to the server
      subprotocol - Sub protocol request sent to the server.
      customHeaders - Map of custom headers to add to the client request
      maxFramePayloadLength - Maximum length of a frame's payload
      forceCloseTimeoutMillis - Close the connection if it was not closed by the server after timeout specified
      absoluteUpgradeUrl - Use an absolute url for the Upgrade request, typically when connecting through an HTTP proxy over clear HTTP
      generateOriginHeader - Allows to generate the `Origin`|`Sec-WebSocket-Origin` header value for handshake request according to the given webSocketURL
  • Method Details

    • uri

      public URI uri()
      Returns the URI to the web socket. e.g. "ws://myhost.com/path"
    • version

      public WebSocketVersion version()
      Version of the web socket specification that is being used
    • maxFramePayloadLength

      public int maxFramePayloadLength()
      Returns the max length for any frame's payload
    • isHandshakeComplete

      public boolean isHandshakeComplete()
      Flag to indicate if the opening handshake is complete
    • setHandshakeComplete

      private void setHandshakeComplete()
    • expectedSubprotocol

      public String expectedSubprotocol()
      Returns the CSV of requested subprotocol(s) sent to the server as specified in the constructor
    • actualSubprotocol

      public String actualSubprotocol()
      Returns the subprotocol response sent by the server. Only available after end of handshake. Null if no subprotocol was requested or confirmed by the server.
    • setActualSubprotocol

      private void setActualSubprotocol(String actualSubprotocol)
    • forceCloseTimeoutMillis

      public long forceCloseTimeoutMillis()
    • isForceCloseComplete

      protected boolean isForceCloseComplete()
      Flag to indicate if the closing handshake was initiated because of timeout. For testing only.
    • setForceCloseTimeoutMillis

      public WebSocketClientHandshaker setForceCloseTimeoutMillis(long forceCloseTimeoutMillis)
      Sets timeout to close the connection if it was not closed by the server.
      Parameters:
      forceCloseTimeoutMillis - Close the connection if it was not closed by the server after timeout specified
    • handshake

      public ChannelFuture handshake(Channel channel)
      Begins the opening handshake
      Parameters:
      channel - Channel
    • handshake

      public final ChannelFuture handshake(Channel channel, ChannelPromise promise)
      Begins the opening handshake
      Parameters:
      channel - Channel
      promise - the ChannelPromise to be notified when the opening handshake is sent
    • newHandshakeRequest

      protected abstract FullHttpRequest newHandshakeRequest()
      Returns a new
      invalid @link
      {@link FullHttpRequest) which will be used for the handshake.
    • finishHandshake

      public final void finishHandshake(Channel channel, FullHttpResponse response)
      Validates and finishes the opening handshake initiated by handshake(io.netty.channel.Channel)}.
      Parameters:
      channel - Channel
      response - HTTP response containing the closing handshake details
    • processHandshake

      public final ChannelFuture processHandshake(Channel channel, HttpResponse response)
      Process the opening handshake initiated by handshake(io.netty.channel.Channel)}.
      Parameters:
      channel - Channel
      response - HTTP response containing the closing handshake details
      Returns:
      future the ChannelFuture which is notified once the handshake completes.
    • processHandshake

      public final ChannelFuture processHandshake(Channel channel, HttpResponse response, ChannelPromise promise)
      Process the opening handshake initiated by handshake(io.netty.channel.Channel)}.
      Parameters:
      channel - Channel
      response - HTTP response containing the closing handshake details
      promise - the ChannelPromise to notify once the handshake completes.
      Returns:
      future the ChannelFuture which is notified once the handshake completes.
    • verify

      protected abstract void verify(FullHttpResponse response)
      Verify the FullHttpResponse and throws a WebSocketHandshakeException if something is wrong.
    • newWebsocketDecoder

      protected abstract WebSocketFrameDecoder newWebsocketDecoder()
      Returns the decoder to use after handshake is complete.
    • newWebSocketEncoder

      protected abstract WebSocketFrameEncoder newWebSocketEncoder()
      Returns the encoder to use after the handshake is complete.
    • close

      public ChannelFuture close(Channel channel, CloseWebSocketFrame frame)
      Performs the closing handshake. When called from within a ChannelHandler you most likely want to use close(ChannelHandlerContext, CloseWebSocketFrame).
      Parameters:
      channel - Channel
      frame - Closing Frame that was received
    • close

      public ChannelFuture close(Channel channel, CloseWebSocketFrame frame, ChannelPromise promise)
      Performs the closing handshake When called from within a ChannelHandler you most likely want to use close(ChannelHandlerContext, CloseWebSocketFrame, ChannelPromise).
      Parameters:
      channel - Channel
      frame - Closing Frame that was received
      promise - the ChannelPromise to be notified when the closing handshake is done
    • close

      Performs the closing handshake
      Parameters:
      ctx - the ChannelHandlerContext to use.
      frame - Closing Frame that was received
    • close

      Performs the closing handshake
      Parameters:
      ctx - the ChannelHandlerContext to use.
      frame - Closing Frame that was received
      promise - the ChannelPromise to be notified when the closing handshake is done
    • close0

      private ChannelFuture close0(ChannelOutboundInvoker invoker, Channel channel, CloseWebSocketFrame frame, ChannelPromise promise)
    • upgradeUrl

      protected String upgradeUrl(URI wsURL)
      Return the constructed raw path for the give URI.
    • websocketHostValue

      static CharSequence websocketHostValue(URI wsURL)
    • websocketOriginValue

      static CharSequence websocketOriginValue(URI wsURL)