Skip to content

Commit fe7635b

Browse files
committed
Provide a setter/getter to set the deflater level
1 parent 1e9fbbf commit fe7635b

File tree

2 files changed

+30
-39
lines changed

2 files changed

+30
-39
lines changed

src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,23 +53,28 @@ public class PerMessageDeflateExtension extends CompressionExtension {
5353
// For WebSocketClients, this variable holds the extension parameters that client himself has requested.
5454
private Map<String, String> requestedParameters = new LinkedHashMap<>();
5555

56-
private Inflater inflater = new Inflater(true);
57-
private Deflater deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true);
58-
59-
public Inflater getInflater() {
60-
return inflater;
61-
}
56+
private int deflaterLevel = Deflater.DEFAULT_COMPRESSION;
6257

63-
public void setInflater(Inflater inflater) {
64-
this.inflater = inflater;
65-
}
58+
private Inflater inflater = new Inflater(true);
59+
private Deflater deflater = new Deflater(this.deflaterLevel, true);
6660

67-
public Deflater getDeflater() {
68-
return deflater;
61+
/**
62+
* Get the compression level used for the compressor.
63+
* @return the compression level (0-9)
64+
*/
65+
public int getDeflaterLevel() {
66+
return this.deflaterLevel;
6967
}
7068

71-
public void setDeflater(Deflater deflater) {
72-
this.deflater = deflater;
69+
/**
70+
* Set the compression level used for the compressor.
71+
* @param level the compression level (0-9)
72+
*/
73+
public void setDeflaterLevel(int level) {
74+
this.deflater.setLevel(level);
75+
this.deflaterLevel = level;
76+
//If the compression level is changed, the next invocation of deflate will compress the input available so far with the old level (and may be flushed); the new level will take effect only after that invocation.
77+
this.deflater.deflate(new byte[0]);
7378
}
7479

7580
/**
@@ -333,6 +338,7 @@ public IExtension copyInstance() {
333338
clone.setThreshold(this.getThreshold());
334339
clone.setClientNoContextTakeover(this.isClientNoContextTakeover());
335340
clone.setServerNoContextTakeover(this.isServerNoContextTakeover());
341+
clone.setDeflaterLevel(this.getDeflaterLevel());
336342
return clone;
337343
}
338344

src/test/java/org/java_websocket/extensions/PerMessageDeflateExtensionTest.java

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -197,64 +197,49 @@ public void testCopyInstance() {
197197
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
198198
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
199199
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
200-
// Adjust this to the factory
201-
//assertEquals(deflateExtension.getDeflater(), newDeflateExtension.getDeflater());
202-
//assertEquals(deflateExtension.getInflater(), newDeflateExtension.getInflater());
200+
assertEquals(deflateExtension.getDeflaterLevel(), newDeflateExtension.getDeflaterLevel());
201+
203202

204203
deflateExtension = new PerMessageDeflateExtension();
205204
deflateExtension.setThreshold(512);
206205
deflateExtension.setServerNoContextTakeover(false);
207206
deflateExtension.setClientNoContextTakeover(true);
207+
deflateExtension.setDeflaterLevel(Deflater.BEST_COMPRESSION);
208208
newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance();
209209

210210
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
211211
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
212212
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
213+
assertEquals(deflateExtension.getDeflaterLevel(), newDeflateExtension.getDeflaterLevel());
213214

214215

215216
deflateExtension = new PerMessageDeflateExtension();
216217
deflateExtension.setThreshold(64);
217218
deflateExtension.setServerNoContextTakeover(true);
218219
deflateExtension.setClientNoContextTakeover(false);
220+
deflateExtension.setDeflaterLevel(Deflater.NO_COMPRESSION);
219221
newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance();
220222

221223
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
222224
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
223225
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
226+
assertEquals(deflateExtension.getDeflaterLevel(), newDeflateExtension.getDeflaterLevel());
224227
}
225228

226229
@Test
227-
public void testGetInflater() {
228-
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
229-
assertEquals(deflateExtension.getInflater().getRemaining(), new Inflater(true).getRemaining());
230-
}
231-
232-
@Test
233-
public void testSetInflater() {
234-
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
235-
deflateExtension.setInflater(new Inflater(false));
236-
assertEquals(deflateExtension.getInflater().getRemaining(), new Inflater(false).getRemaining());
237-
}
238-
239-
@Test
240-
public void testGetDeflater() {
230+
public void testDeflaterLevel() {
241231
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
242-
assertEquals(deflateExtension.getDeflater().finished(),
243-
new Deflater(Deflater.DEFAULT_COMPRESSION, true).finished());
232+
assertEquals(Deflater.DEFAULT_COMPRESSION, deflateExtension.getDeflaterLevel());
233+
deflateExtension.setDeflaterLevel(Deflater.BEST_SPEED);
234+
assertEquals(Deflater.BEST_SPEED, deflateExtension.getDeflaterLevel());
244235
}
245236

246-
@Test
247-
public void testSetDeflater() {
248-
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
249-
deflateExtension.setDeflater(new Deflater(Deflater.DEFAULT_COMPRESSION, false));
250-
assertEquals(deflateExtension.getDeflater().finished(),
251-
new Deflater(Deflater.DEFAULT_COMPRESSION, false).finished());
252-
}
253237
@Test
254238
public void testDefaults() {
255239
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
256240
assertFalse(deflateExtension.isClientNoContextTakeover());
257241
assertTrue(deflateExtension.isServerNoContextTakeover());
258242
assertEquals(1024, deflateExtension.getThreshold());
243+
assertEquals(Deflater.DEFAULT_COMPRESSION, deflateExtension.getDeflaterLevel());
259244
}
260245
}

0 commit comments

Comments
 (0)