@Override public void startCompression() { CompressionFilter ioFilter = (CompressionFilter) ioSession.getFilterChain().get(COMPRESSION_FILTER_NAME); ioFilter.setCompressOutbound(true); }
@Override public void addCompression() { IoFilterChain chain = ioSession.getFilterChain(); String baseFilter = EXECUTOR_FILTER_NAME; if (chain.contains(TLS_FILTER_NAME)) { baseFilter = TLS_FILTER_NAME; } chain.addAfter(baseFilter, COMPRESSION_FILTER_NAME, new CompressionFilter(true, false, CompressionFilter.COMPRESSION_MAX)); }
@Override public void onPreAdd(IoFilterChain parent, String name, NextFilter nextFilter) throws Exception { if (parent.contains(CompressionFilter.class)) { throw new IllegalStateException("Only one " + CompressionFilter.class + " is permitted."); } Zlib deflater = new Zlib(compressionLevel, Zlib.MODE_DEFLATER); Zlib inflater = new Zlib(compressionLevel, Zlib.MODE_INFLATER); IoSession session = parent.getSession(); session.setAttribute(DEFLATER, deflater); session.setAttribute(INFLATER, inflater); }
@Override public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { if (!compressInbound || !(message instanceof IoBuffer)) { nextFilter.messageReceived(session, message); return; } Zlib inflater = (Zlib) session.getAttribute(INFLATER); if (inflater == null) { throw new IllegalStateException(); } IoBuffer inBuffer = (IoBuffer) message; IoBuffer outBuffer = inflater.inflate(inBuffer); nextFilter.messageReceived(session, outBuffer); }
@Override public void onPostRemove(IoFilterChain parent, String name, NextFilter nextFilter) throws Exception { super.onPostRemove(parent, name, nextFilter); IoSession session = parent.getSession(); if (session == null) { return; } Zlib inflater = (Zlib) session.getAttribute(INFLATER); Zlib deflater = (Zlib) session.getAttribute(DEFLATER); if (deflater != null) { deflater.cleanUp(); } if (inflater != null) { inflater.cleanUp(); } } }
@Override protected Object doFilterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws IOException { if (!compressOutbound) { return null; } if (session.containsAttribute(DISABLE_COMPRESSION_ONCE)) { // Remove the marker attribute because it is temporary. session.removeAttribute(DISABLE_COMPRESSION_ONCE); return null; } Zlib deflater = (Zlib) session.getAttribute(DEFLATER); if (deflater == null) { throw new IllegalStateException(); } IoBuffer inBuffer = (IoBuffer) writeRequest.getMessage(); if (!inBuffer.hasRemaining()) { // Ignore empty buffers return null; } else { return deflater.deflate(inBuffer); } }
public void startStreamCompression ( final int compressionLevel, final boolean startInactive ) { logger.info ( "Starting stream compression: {} (startInactive: {})", compressionLevel, startInactive ); if ( startInactive ) { this.session.setAttribute ( CompressionFilter.DISABLE_COMPRESSION_ONCE, Boolean.TRUE ); } replaceMarker ( "streamCompression", new CompressionFilter ( compressionLevel ) ); }
@Override public void startCompression() { CompressionFilter ioFilter = (CompressionFilter) ioSession.getFilterChain().get(COMPRESSION_FILTER_NAME); ioFilter.setCompressOutbound(true); }
public void startStreamCompression ( final int compressionLevel, final boolean startInactive ) { logger.info ( "Starting stream compression: {} (startInactive: {})", compressionLevel, startInactive ); if ( startInactive ) { this.session.setAttribute ( CompressionFilter.DISABLE_COMPRESSION_ONCE, Boolean.TRUE ); } replaceMarker ( "streamCompression", new CompressionFilter ( compressionLevel ) ); }
@Override public void addCompression() { IoFilterChain chain = ioSession.getFilterChain(); String baseFilter = EXECUTOR_FILTER_NAME; if (chain.contains(TLS_FILTER_NAME)) { baseFilter = TLS_FILTER_NAME; } chain.addAfter(baseFilter, COMPRESSION_FILTER_NAME, new CompressionFilter(true, false, CompressionFilter.COMPRESSION_MAX)); }