1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.spdy.generator;
20
21 import java.nio.ByteBuffer;
22
23 import org.eclipse.jetty.spdy.ByteBufferPool;
24 import org.eclipse.jetty.spdy.api.SPDY;
25 import org.eclipse.jetty.spdy.frames.ControlFrame;
26 import org.eclipse.jetty.spdy.frames.GoAwayFrame;
27
28 public class GoAwayGenerator extends ControlFrameGenerator
29 {
30 public GoAwayGenerator(ByteBufferPool bufferPool)
31 {
32 super(bufferPool);
33 }
34
35 @Override
36 public ByteBuffer generate(ControlFrame frame)
37 {
38 GoAwayFrame goAway = (GoAwayFrame)frame;
39
40 int frameBodyLength = 8;
41 int totalLength = ControlFrame.HEADER_LENGTH + frameBodyLength;
42 ByteBuffer buffer = getByteBufferPool().acquire(totalLength, true);
43 generateControlFrameHeader(goAway, frameBodyLength, buffer);
44
45 buffer.putInt(goAway.getLastStreamId() & 0x7F_FF_FF_FF);
46 writeStatusCode(goAway, buffer);
47
48 buffer.flip();
49 return buffer;
50 }
51
52 private void writeStatusCode(GoAwayFrame goAway, ByteBuffer buffer)
53 {
54 switch (goAway.getVersion())
55 {
56 case SPDY.V2:
57 break;
58 case SPDY.V3:
59 buffer.putInt(goAway.getStatusCode());
60 break;
61 default:
62 throw new IllegalStateException();
63 }
64 }
65 }