Package tigase.server.websocket

## Interface WebSocketProtocolIfc

- All Known Implementing Classes:
    `WebSocketHixie76`, `WebSocketHybi`

      public interface WebSocketProtocolIfc

  Interface which needs to be implemented by any implemention of version of WebSocket protocol.
  Currently we have stable version but there were older not compatible with current so it may be that new will come in future - also not compatible.
  Author:
    andrzej

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `WS_PROTOCOL_KEY` | HTTP header which contains name of subprotocol which should be used over established WebSocket connection
    `static java.lang.String` | `WS_VERSION_KEY` | HTTP header used by WebSocket to pass used version of WebSocket protocol from client to server

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `closeConnection​(WebSocketXMPPIOService service)` | Method closes connection by sending close frame
    `java.nio.ByteBuffer` | `decodeFrame​(WebSocketXMPPIOService service, java.nio.ByteBuffer buf)` | Method responsible for decoding data received from socket and returning data after extracting it from WebSocket frame.
    `void` | `encodeFrameAndWrite​(WebSocketXMPPIOService service, java.nio.ByteBuffer buf)` | Method encodes data into WebSocket frame and writes it to passed service
    `java.lang.String` | `getId()` | Method to retrieve string identifier of implementation of protcol version
    `boolean` | `handshake​(WebSocketXMPPIOService service, java.util.Map<java.lang.String,​java.lang.String> headers, byte[] buf)` | Method responsible for handshaking of WebSocket using proper version of protocol.

- - ### Field Detail

    - #### WS_VERSION_KEY

          static final java.lang.String WS_VERSION_KEY

      HTTP header used by WebSocket to pass used version of WebSocket protocol from client to server
      See Also:
        Constant Field Values

    - #### WS_PROTOCOL_KEY

          static final java.lang.String WS_PROTOCOL_KEY

      HTTP header which contains name of subprotocol which should be used over established WebSocket connection
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### getId

          java.lang.String getId()

      Method to retrieve string identifier of implementation of protcol version

    - #### handshake

          boolean handshake​(WebSocketXMPPIOService service,
                            java.util.Map<java.lang.String,​java.lang.String> headers,
                            byte[] buf)
                     throws java.security.NoSuchAlgorithmException,
                            java.io.IOException

      Method responsible for handshaking of WebSocket using proper version of protocol.
      Returns:
        false - if implementation is not able to handshake using this version of protocol, in other case return true
      Throws:
        `java.security.NoSuchAlgorithmException`
        `java.io.IOException`

    - #### decodeFrame

          java.nio.ByteBuffer decodeFrame​(WebSocketXMPPIOService service,
                                          java.nio.ByteBuffer buf)

      Method responsible for decoding data received from socket and returning data after extracting it from WebSocket frame.
      Returns:
        decoded data or null if not full frame is available in input buffer

    - #### encodeFrameAndWrite

          void encodeFrameAndWrite​(WebSocketXMPPIOService service,
                                   java.nio.ByteBuffer buf)
                            throws java.io.IOException

      Method encodes data into WebSocket frame and writes it to passed service
      Throws:
        `java.io.IOException`

    - #### closeConnection

          void closeConnection​(WebSocketXMPPIOService service)

      Method closes connection by sending close frame