1
18
19 package io.undertow.server.handlers.encoding;
20
21 import io.undertow.UndertowLogger;
22 import io.undertow.conduits.DeflatingStreamSinkConduit;
23 import io.undertow.conduits.GzipStreamSinkConduit;
24 import io.undertow.server.ConduitWrapper;
25 import io.undertow.server.HttpServerExchange;
26 import io.undertow.util.ConduitFactory;
27 import io.undertow.util.ObjectPool;
28 import org.xnio.conduits.StreamSinkConduit;
29
30 import java.util.zip.Deflater;
31
32
37 public class GzipEncodingProvider implements ContentEncodingProvider {
38
39 private final ObjectPool<Deflater> deflaterPool;
40
41 public GzipEncodingProvider() {
42 this(Deflater.DEFAULT_COMPRESSION);
43 }
44
45 public GzipEncodingProvider(int deflateLevel) {
46 this(DeflatingStreamSinkConduit.newInstanceDeflaterPool(deflateLevel));
47 }
48
49 public GzipEncodingProvider(ObjectPool<Deflater> deflaterPool) {
50 this.deflaterPool = deflaterPool;
51 }
52
53 @Override
54 public ConduitWrapper<StreamSinkConduit> getResponseWrapper() {
55 return new ConduitWrapper<StreamSinkConduit>() {
56 @Override
57 public StreamSinkConduit wrap(final ConduitFactory<StreamSinkConduit> factory, final HttpServerExchange exchange) {
58 UndertowLogger.REQUEST_LOGGER.tracef("Created GZIP response conduit for %s", exchange);
59 return new GzipStreamSinkConduit(factory, exchange, deflaterPool);
60 }
61 };
62 }
63 }
64