1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.spdy.parser;
15
16 import java.nio.ByteBuffer;
17
18 public class UnknownControlFrameBodyParser extends ControlFrameBodyParser
19 {
20 private final ControlFrameParser controlFrameParser;
21 private State state = State.BODY;
22 private int remaining;
23
24 public UnknownControlFrameBodyParser(ControlFrameParser controlFrameParser)
25 {
26 this.controlFrameParser = controlFrameParser;
27 }
28
29 @Override
30 public boolean parse(ByteBuffer buffer)
31 {
32 switch (state)
33 {
34 case BODY:
35 {
36 remaining = controlFrameParser.getLength();
37 state = State.CONSUME;
38
39 }
40 case CONSUME:
41 {
42 int consume = Math.min(remaining, buffer.remaining());
43 buffer.position(buffer.position() + consume);
44 remaining -= consume;
45 if (remaining > 0)
46 return false;
47 reset();
48 return true;
49 }
50 default:
51 {
52 throw new IllegalStateException();
53 }
54 }
55 }
56
57 private void reset()
58 {
59 state = State.BODY;
60 remaining = 0;
61 }
62
63 private enum State
64 {
65 BODY, CONSUME
66 }
67 }