Class WebSocketClientHandshaker

java.lang.Object
org.jboss.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

    • webSocketUrl

      private final URI webSocketUrl
    • version

      private final WebSocketVersion version
    • handshakeComplete

      private volatile boolean handshakeComplete
    • expectedSubprotocol

      private final String expectedSubprotocol
    • actualSubprotocol

      private volatile String actualSubprotocol
    • customHeaders

      protected final Map<String,String> customHeaders
    • maxFramePayloadLength

      private final long maxFramePayloadLength
  • Constructor Details

    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI webSocketUrl, WebSocketVersion version, String subprotocol, Map<String,String> customHeaders)
      Base constructor with default values
      Parameters:
      webSocketUrl - 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
    • WebSocketClientHandshaker

      protected WebSocketClientHandshaker(URI webSocketUrl, WebSocketVersion version, String subprotocol, Map<String,String> customHeaders, long maxFramePayloadLength)
      Base constructor
      Parameters:
      webSocketUrl - 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 - CSV of requested subprotocol(s) sent to the server.
      customHeaders - Map of custom headers to add to the client request
      maxFramePayloadLength - Maximum length of a frame's payload
  • Method Details

    • getWebSocketUrl

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

      public WebSocketVersion getVersion()
      Version of the web socket specification that is being used
    • getMaxFramePayloadLength

      public long getMaxFramePayloadLength()
      Returns the max length for any frame's payload
    • isHandshakeComplete

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

      protected void setHandshakeComplete()
    • getExpectedSubprotocol

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

      public String getActualSubprotocol()
      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

      protected void setActualSubprotocol(String actualSubprotocol)
    • handshake

      public abstract ChannelFuture handshake(Channel channel) throws Exception
      Begins the opening handshake
      Parameters:
      channel - Channel
      Throws:
      Exception
    • finishHandshake

      public abstract void finishHandshake(Channel channel, HttpResponse response)
      Validates and finishes the opening handshake initiated by handshake(org.jboss.netty.channel.Channel)}.
      Parameters:
      channel - Channel
      response - HTTP response containing the closing handshake details
    • replaceDecoder

      static void replaceDecoder(Channel channel, ChannelHandler wsDecoder)
      Replace the HTTP decoder with a new Web Socket decoder. Note that we do not use ChannelPipeline.replace(String, String, ChannelHandler), because the server might have sent the first frame immediately after the upgrade response. In such a case, the HTTP decoder might have the first frame in its cumulation buffer and the HTTP decoder will forward it to the next handler. The Web Socket decoder will not receive it if we simply replaced it. For more information, refer to HttpResponseDecoder and its unit tests.