Class PerMessageDeflateExtension
- java.lang.Object
-
- org.java_websocket.extensions.DefaultExtension
-
- org.java_websocket.extensions.CompressionExtension
-
- org.java_websocket.extensions.permessage_deflate.PerMessageDeflateExtension
-
- All Implemented Interfaces:
IExtension
public class PerMessageDeflateExtension extends CompressionExtension
-
-
Field Summary
Fields Modifier and Type Field Description private static int
BUFFER_SIZE
private static java.lang.String
CLIENT_MAX_WINDOW_BITS
private static java.lang.String
CLIENT_NO_CONTEXT_TAKEOVER
private static int
clientMaxWindowBits
private boolean
clientNoContextTakeover
private java.util.zip.Deflater
deflater
private static java.lang.String
EXTENSION_REGISTERED_NAME
private java.util.zip.Inflater
inflater
private java.util.Map<java.lang.String,java.lang.String>
requestedParameters
private static java.lang.String
SERVER_MAX_WINDOW_BITS
private static java.lang.String
SERVER_NO_CONTEXT_TAKEOVER
private static int
serverMaxWindowBits
private boolean
serverNoContextTakeover
private static byte[]
TAIL_BYTES
-
Constructor Summary
Constructors Constructor Description PerMessageDeflateExtension()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
acceptProvidedExtensionAsClient(java.lang.String inputExtension)
Check if the received Sec-WebSocket-Extensions header field contains a offer for the specific extension if the endpoint is in the role of a clientboolean
acceptProvidedExtensionAsServer(java.lang.String inputExtension)
Check if the received Sec-WebSocket-Extensions header field contains a offer for the specific extension if the endpoint is in the role of a serverIExtension
copyInstance()
Extensions must only be by one websocket at all.void
decodeFrame(Framedata inputFrame)
Decode a frame with a extension specific algorithm.private void
decompress(byte[] data, java.io.ByteArrayOutputStream outputBuffer)
void
encodeFrame(Framedata inputFrame)
Encode a frame with a extension specific algorithm.private boolean
endsWithTail(byte[] data)
java.lang.String
getProvidedExtensionAsClient()
Return the specific Sec-WebSocket-Extensions header offer for this extension if the endpoint is in the role of a client.java.lang.String
getProvidedExtensionAsServer()
Return the specific Sec-WebSocket-Extensions header offer for this extension if the endpoint is in the role of a server.void
isFrameValid(Framedata inputFrame)
This extension requires the RSV1 bit to be set only for the first frame.java.lang.String
toString()
Return a string which should contain the class name as well as additional information about the current configurations for this extension (DEBUG purposes)-
Methods inherited from class org.java_websocket.extensions.DefaultExtension
equals, hashCode, reset
-
-
-
-
Field Detail
-
EXTENSION_REGISTERED_NAME
private static final java.lang.String EXTENSION_REGISTERED_NAME
- See Also:
- Constant Field Values
-
SERVER_NO_CONTEXT_TAKEOVER
private static final java.lang.String SERVER_NO_CONTEXT_TAKEOVER
- See Also:
- Constant Field Values
-
CLIENT_NO_CONTEXT_TAKEOVER
private static final java.lang.String CLIENT_NO_CONTEXT_TAKEOVER
- See Also:
- Constant Field Values
-
SERVER_MAX_WINDOW_BITS
private static final java.lang.String SERVER_MAX_WINDOW_BITS
- See Also:
- Constant Field Values
-
CLIENT_MAX_WINDOW_BITS
private static final java.lang.String CLIENT_MAX_WINDOW_BITS
- See Also:
- Constant Field Values
-
serverMaxWindowBits
private static final int serverMaxWindowBits
- See Also:
- Constant Field Values
-
clientMaxWindowBits
private static final int clientMaxWindowBits
- See Also:
- Constant Field Values
-
TAIL_BYTES
private static final byte[] TAIL_BYTES
-
BUFFER_SIZE
private static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
serverNoContextTakeover
private boolean serverNoContextTakeover
-
clientNoContextTakeover
private boolean clientNoContextTakeover
-
requestedParameters
private java.util.Map<java.lang.String,java.lang.String> requestedParameters
-
inflater
private java.util.zip.Inflater inflater
-
deflater
private java.util.zip.Deflater deflater
-
-
Method Detail
-
decodeFrame
public void decodeFrame(Framedata inputFrame) throws InvalidDataException
Description copied from interface:IExtension
Decode a frame with a extension specific algorithm. The algorithm is subject to be implemented by the specific extension. The resulting frame will be used in the application- Specified by:
decodeFrame
in interfaceIExtension
- Overrides:
decodeFrame
in classDefaultExtension
- Parameters:
inputFrame
- the frame, which has do be decoded to be used in the application- Throws:
InvalidDataException
- Throw InvalidDataException if the received frame is not correctly implemented by the other endpoint or there are other protocol errors/decoding errors
-
decompress
private void decompress(byte[] data, java.io.ByteArrayOutputStream outputBuffer) throws java.util.zip.DataFormatException
- Throws:
java.util.zip.DataFormatException
-
encodeFrame
public void encodeFrame(Framedata inputFrame)
Description copied from interface:IExtension
Encode a frame with a extension specific algorithm. The algorithm is subject to be implemented by the specific extension. The resulting frame will be send to the other endpoint.- Specified by:
encodeFrame
in interfaceIExtension
- Overrides:
encodeFrame
in classDefaultExtension
- Parameters:
inputFrame
- the frame, which has do be encoded to be used on the other endpoint
-
endsWithTail
private boolean endsWithTail(byte[] data)
-
acceptProvidedExtensionAsServer
public boolean acceptProvidedExtensionAsServer(java.lang.String inputExtension)
Description copied from interface:IExtension
Check if the received Sec-WebSocket-Extensions header field contains a offer for the specific extension if the endpoint is in the role of a server- Specified by:
acceptProvidedExtensionAsServer
in interfaceIExtension
- Overrides:
acceptProvidedExtensionAsServer
in classDefaultExtension
- Parameters:
inputExtension
- the received Sec-WebSocket-Extensions header field offered by the other endpoint- Returns:
- true, if the offer does fit to this specific extension
-
acceptProvidedExtensionAsClient
public boolean acceptProvidedExtensionAsClient(java.lang.String inputExtension)
Description copied from interface:IExtension
Check if the received Sec-WebSocket-Extensions header field contains a offer for the specific extension if the endpoint is in the role of a client- Specified by:
acceptProvidedExtensionAsClient
in interfaceIExtension
- Overrides:
acceptProvidedExtensionAsClient
in classDefaultExtension
- Parameters:
inputExtension
- the received Sec-WebSocket-Extensions header field offered by the other endpoint- Returns:
- true, if the offer does fit to this specific extension
-
getProvidedExtensionAsClient
public java.lang.String getProvidedExtensionAsClient()
Description copied from interface:IExtension
Return the specific Sec-WebSocket-Extensions header offer for this extension if the endpoint is in the role of a client. If the extension returns an empty string (""), the offer will not be included in the handshake.- Specified by:
getProvidedExtensionAsClient
in interfaceIExtension
- Overrides:
getProvidedExtensionAsClient
in classDefaultExtension
- Returns:
- the specific Sec-WebSocket-Extensions header for this extension
-
getProvidedExtensionAsServer
public java.lang.String getProvidedExtensionAsServer()
Description copied from interface:IExtension
Return the specific Sec-WebSocket-Extensions header offer for this extension if the endpoint is in the role of a server. If the extension returns an empty string (""), the offer will not be included in the handshake.- Specified by:
getProvidedExtensionAsServer
in interfaceIExtension
- Overrides:
getProvidedExtensionAsServer
in classDefaultExtension
- Returns:
- the specific Sec-WebSocket-Extensions header for this extension
-
copyInstance
public IExtension copyInstance()
Description copied from interface:IExtension
Extensions must only be by one websocket at all. To prevent extensions to be used more than once the Websocket implementation should call this method in order to create a new usable version of a given extension instance.
The copy can be safely used in conjunction with a new websocket connection.- Specified by:
copyInstance
in interfaceIExtension
- Overrides:
copyInstance
in classDefaultExtension
- Returns:
- a copy of the extension
-
isFrameValid
public void isFrameValid(Framedata inputFrame) throws InvalidDataException
This extension requires the RSV1 bit to be set only for the first frame. If the frame is type is CONTINUOUS, RSV1 bit must be unset.- Specified by:
isFrameValid
in interfaceIExtension
- Overrides:
isFrameValid
in classCompressionExtension
- Parameters:
inputFrame
- the received frame- Throws:
InvalidDataException
- Throw InvalidDataException if the received frame is not correctly implementing the specification for the specific extension
-
toString
public java.lang.String toString()
Description copied from interface:IExtension
Return a string which should contain the class name as well as additional information about the current configurations for this extension (DEBUG purposes)- Specified by:
toString
in interfaceIExtension
- Overrides:
toString
in classDefaultExtension
- Returns:
- a string containing the class name as well as additional information
-
-