1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.http2.generator;
20
21 import java.nio.ByteBuffer;
22
23 import org.eclipse.jetty.http2.Flags;
24 import org.eclipse.jetty.http2.frames.Frame;
25 import org.eclipse.jetty.http2.frames.FrameType;
26 import org.eclipse.jetty.http2.frames.PingFrame;
27 import org.eclipse.jetty.io.ByteBufferPool;
28 import org.eclipse.jetty.util.BufferUtil;
29
30 public class PingGenerator extends FrameGenerator
31 {
32 public PingGenerator(HeaderGenerator headerGenerator)
33 {
34 super(headerGenerator);
35 }
36
37 @Override
38 public void generate(ByteBufferPool.Lease lease, Frame frame)
39 {
40 PingFrame pingFrame = (PingFrame)frame;
41 generatePing(lease, pingFrame.getPayload(), pingFrame.isReply());
42 }
43
44 public void generatePing(ByteBufferPool.Lease lease, byte[] payload, boolean reply)
45 {
46 if (payload.length != PingFrame.PING_LENGTH)
47 throw new IllegalArgumentException("Invalid payload length: " + payload.length);
48
49 ByteBuffer header = generateHeader(lease, FrameType.PING, PingFrame.PING_LENGTH, reply ? Flags.ACK : Flags.NONE, 0);
50
51 header.put(payload);
52
53 BufferUtil.flipToFlush(header, 0);
54 lease.append(header, true);
55 }
56 }