1 /*
2  * JBoss, Home of Professional Open Source.
3  * Copyright 2014 Red Hat, Inc., and individual contributors
4  * as indicated by the @author tags.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  */

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 /**
33  * Content coding for 'deflate'
34  *
35  * @author Stuart Douglas
36  */

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