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.DataInfo;
25 import org.eclipse.jetty.spdy.frames.DataFrame;
26
27 public class DataFrameGenerator
28 {
29 private final ByteBufferPool bufferPool;
30
31 public DataFrameGenerator(ByteBufferPool bufferPool)
32 {
33 this.bufferPool = bufferPool;
34 }
35
36 public ByteBuffer generate(int streamId, int length, DataInfo dataInfo)
37 {
38 ByteBuffer buffer = bufferPool.acquire(DataFrame.HEADER_LENGTH + length, true);
39 buffer.position(DataFrame.HEADER_LENGTH);
40
41 int read = dataInfo.readInto(buffer);
42
43 buffer.putInt(0, streamId & 0x7F_FF_FF_FF);
44 buffer.putInt(4, read & 0x00_FF_FF_FF);
45
46 byte flags = dataInfo.getFlags();
47 if (dataInfo.available() > 0)
48 flags &= ~DataInfo.FLAG_CLOSE;
49 buffer.put(4, flags);
50
51 buffer.flip();
52 return buffer;
53 }
54 }