public interface ExtendedExtension
extends javax.websocket.Extension
Extension
.
Capable of parameters negotiation, incoming and outgoing frames processing.
Extensions are ordered as they appear in handshake response headers, as per RFC 6455, chapter 9.1. It does not state
any ordering in regards of sender/receiver side and current implementation reflects that. See TODO below for
possible
issue related to ordering.
Let's say we have negotiated two extensions, ext1 and ext2 in this order without parameters, so handshake response
headers will be: "sec-websocket-extensions: ext1, ext2". Prefix "c_" means client side, prefix "s_" server side.
client -> server +--------+ +--------+ +--------+ +--------+ client >----| c_ext1 |-->| c_ext2 |--> [network] --> | s_ext1 |-->| s_ext2 |--> server +--------+ +--------+ +--------+ +--------+ client <- server +--------+ +--------+ +--------+ +--------+ client <----| c_ext2 |<--| c_ext1 |<-- [network] <-- | s_ext2 |<--| s_ext1 |<-- server +--------+ +--------+ +--------+ +--------+Any exception thrown from processIncoming or processOutgoing will be logged. Rest of extension chain will be invoked without any modifications done in "faulty" extension.
OnError
won't be triggered. (this
might
change).
TODO: - naming. - ordering - we might need to ensure that compression/decompression is invoked first when receiving and last when sending message (to enable access to uncompressed data for other extensions). - param negotiation. - param validation. - general validation - two extensions using same rsv bit cannot be "negotiated" for same session/connection. - negotiation exception handling (onExtensionNegotiation)
Modifier and Type | Interface and Description |
---|---|
static interface |
ExtendedExtension.ExtensionContext
Context present as a parameter in all
ExtendedExtension methods. |
Modifier and Type | Method and Description |
---|---|
void |
destroy(ExtendedExtension.ExtensionContext context)
Context lifecycle method.
|
List<javax.websocket.Extension.Parameter> |
onExtensionNegotiation(ExtendedExtension.ExtensionContext context,
List<javax.websocket.Extension.Parameter> requestedParameters)
Parameter negotiation.
|
void |
onHandshakeResponse(ExtendedExtension.ExtensionContext context,
List<javax.websocket.Extension.Parameter> responseParameters)
Called only on the client side when handshake response arrives.
|
Frame |
processIncoming(ExtendedExtension.ExtensionContext context,
Frame frame)
Process incoming frame.
|
Frame |
processOutgoing(ExtendedExtension.ExtensionContext context,
Frame frame)
Process outgoing frame.
|
Frame processIncoming(ExtendedExtension.ExtensionContext context, Frame frame)
context
- per-connection/session context.frame
- websocket frame representation.Frame processOutgoing(ExtendedExtension.ExtensionContext context, Frame frame)
context
- per-connection/session context.frame
- websocket frame representation.List<javax.websocket.Extension.Parameter> onExtensionNegotiation(ExtendedExtension.ExtensionContext context, List<javax.websocket.Extension.Parameter> requestedParameters)
context
- extension context.requestedParameters
- requested parameters (from handshake request).void onHandshakeResponse(ExtendedExtension.ExtensionContext context, List<javax.websocket.Extension.Parameter> responseParameters)
context
- extension context.responseParameters
- extension parameters returned from the server.void destroy(ExtendedExtension.ExtensionContext context)
ExtendedExtension.ExtensionContext
won't be used
after this method is called.context
- extension context to be destroyed.Copyright © 2012-2015, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.