1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.handler.codec.http;
17
18 import org.jboss.netty.buffer.ChannelBuffer;
19 import org.jboss.netty.handler.codec.compression.ZlibEncoder;
20 import org.jboss.netty.handler.codec.compression.ZlibWrapper;
21 import org.jboss.netty.handler.codec.embedder.EncoderEmbedder;
22
23
24
25
26
27
28
29
30
31
32
33
34 public class HttpContentCompressor extends HttpContentEncoder {
35
36 private final int compressionLevel;
37
38
39
40
41 public HttpContentCompressor() {
42 this(6);
43 }
44
45
46
47
48
49
50
51
52
53 public HttpContentCompressor(int compressionLevel) {
54 if (compressionLevel < 0 || compressionLevel > 9) {
55 throw new IllegalArgumentException(
56 "compressionLevel: " + compressionLevel +
57 " (expected: 0-9)");
58 }
59 this.compressionLevel = compressionLevel;
60 }
61
62 @Override
63 protected EncoderEmbedder<ChannelBuffer> newContentEncoder(String acceptEncoding) throws Exception {
64 ZlibWrapper wrapper = determineWrapper(acceptEncoding);
65 if (wrapper == null) {
66 return null;
67 }
68
69 return new EncoderEmbedder<ChannelBuffer>(new ZlibEncoder(wrapper, compressionLevel));
70 }
71
72 @Override
73 protected String getTargetContentEncoding(String acceptEncoding) throws Exception {
74 ZlibWrapper wrapper = determineWrapper(acceptEncoding);
75 if (wrapper == null) {
76 return null;
77 }
78
79 switch (wrapper) {
80 case GZIP:
81 return "gzip";
82 case ZLIB:
83 return "deflate";
84 default:
85 throw new Error();
86 }
87 }
88
89 private ZlibWrapper determineWrapper(String acceptEncoding) {
90
91 if (acceptEncoding.indexOf("gzip") >= 0) {
92 return ZlibWrapper.GZIP;
93 }
94 if (acceptEncoding.indexOf("deflate") >= 0) {
95 return ZlibWrapper.ZLIB;
96 }
97 return null;
98 }
99 }