1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.common.io.payload;
20
21 import java.nio.ByteBuffer;
22
23 import org.eclipse.jetty.websocket.api.extensions.Frame;
24
25 public class DeMaskProcessor implements PayloadProcessor
26 {
27 private boolean isMasked;
28 private byte mask[];
29 private int offset;
30
31 @Override
32 public void process(ByteBuffer payload)
33 {
34 if (!isMasked)
35 {
36 return;
37 }
38
39 int start = payload.position();
40 int end = payload.limit();
41 for (int i = start; i < end; i++, offset++)
42 {
43 payload.put(i,(byte)(payload.get(i) ^ mask[offset % 4]));
44 }
45 }
46
47 @Override
48 public void reset(Frame frame)
49 {
50 this.isMasked = frame.isMasked();
51 if (isMasked)
52 {
53 this.mask = frame.getMask();
54 }
55 else
56 {
57 this.mask = null;
58 }
59
60 offset = 0;
61 }
62 }