com.fireflysource.net.websocket.common.extension.compress.DeflateFrameExtension Maven / Gradle / Ivy
package com.fireflysource.net.websocket.common.extension.compress;
import com.fireflysource.net.websocket.common.exception.BadPayloadException;
import com.fireflysource.net.websocket.common.frame.Frame;
import java.util.zip.DataFormatException;
/**
* Implementation of the
* deflate-frame
* extension seen out in the wild.
*/
public class DeflateFrameExtension extends CompressExtension {
@Override
public String getName() {
return "deflate-frame";
}
@Override
int getRsvUseMode() {
return RSV_USE_ALWAYS;
}
@Override
int getTailDropMode() {
return TAIL_DROP_ALWAYS;
}
@Override
public void incomingFrame(Frame frame) {
// Incoming frames are always non concurrent because
// they are read and parsed with a single thread, and
// therefore there is no need for synchronization.
if (frame.getType().isControl() || !frame.isRsv1() || !frame.hasPayload()) {
nextIncomingFrame(frame);
return;
}
try {
ByteAccumulator accumulator = newByteAccumulator();
decompress(accumulator, frame.getPayload());
decompress(accumulator, TAIL_BYTES_BUF.slice());
forwardIncoming(frame, accumulator);
} catch (DataFormatException e) {
throw new BadPayloadException(e);
}
}
}