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