protected CompressExtension() { tailDrop = getTailDropMode(); rsvUse = getRsvUseMode(); }
@Override protected void onCompleteFailure(Throwable x) { // Fail all the frames in the queue. FrameEntry entry; while ((entry = pollEntry()) != null) notifyCallbackFailure(entry.callback,x); }
Inflater inflater = getInflater(); if (!supplyInput(inflater,buf)) LOG.debug("Decompress: read 0 {}",toDetail(inflater)); break; LOG.debug("Decompressed {} bytes: {}",read,toDetail(inflater)); LOG.debug("Decompress: exiting {}",toDetail(inflater));
protected void forwardIncoming(Frame frame, ByteAccumulator accumulator) { DataFrame newFrame = new DataFrame(frame); // Unset RSV1 since it's not compressed anymore. newFrame.setRsv1(false); ByteBuffer buffer = getBufferPool().acquire(accumulator.getLength(),false); try { BufferUtil.flipToFill(buffer); accumulator.transferTo(buffer); newFrame.setPayload(buffer); nextIncomingFrame(newFrame); } finally { getBufferPool().release(buffer); } }
@Override public void outgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode) { // We use a queue and an IteratingCallback to handle concurrency. // We must compress and write atomically, otherwise the compression // context on the other end gets confused. if (flusher.isFailed()) { notifyCallbackFailure(callback,new ZipException()); return; } FrameEntry entry = new FrameEntry(frame,callback,batchMode); if (LOG.isDebugEnabled()) LOG.debug("Queuing {}",entry); offerEntry(entry); flusher.iterate(); }
Deflater deflater = getDeflater(); if (endsWithTail(payload)) if (frame.isFin() && endsWithTail(payload))
@Override protected void nextIncomingFrame(Frame frame) { if (frame.isFin() && !incomingContextTakeover) { LOG.debug("Incoming Context Reset"); decompressCount.set(0); getInflater().reset(); } super.nextIncomingFrame(frame); }
@Override protected void nextOutgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode) { if (frame.isFin() && !outgoingContextTakeover) { LOG.debug("Outgoing Context Reset"); getDeflater().reset(); } super.nextOutgoingFrame(frame, callback, batchMode); }
@Override public void writeFailed(Throwable x) { notifyCallbackFailure(current.callback,x); // If something went wrong, very likely the compression context // will be invalid, so we need to fail this IteratingCallback. failed(x); } }