All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.firefly.codec.http2.frame.PingFrame Maven / Gradle / Ivy

There is a newer version: 4.0.3.2
Show newest version
package com.firefly.codec.http2.frame;

import java.util.Objects;

public class PingFrame extends Frame {
	public static final int PING_LENGTH = 8;
	private static final byte[] EMPTY_PAYLOAD = new byte[8];

	private final byte[] payload;
	private final boolean reply;

	/**
	 * Creates a PING frame with an empty payload.
	 *
	 * @param reply
	 *            whether this PING frame is a reply
	 */
	public PingFrame(boolean reply) {
		this(EMPTY_PAYLOAD, reply);
	}

	/**
	 * Creates a PING frame with the given {@code long} {@code value} as
	 * payload.
	 *
	 * @param value
	 *            the value to use as a payload for this PING frame
	 * @param reply
	 *            whether this PING frame is a reply
	 */
	public PingFrame(long value, boolean reply) {
		this(toBytes(value), reply);
	}

	/**
	 * Creates a PING frame with the given {@code payload}.
	 *
	 * @param payload
	 *            the payload for this PING frame
	 * @param reply
	 *            whether this PING frame is a reply
	 */
	public PingFrame(byte[] payload, boolean reply) {
		super(FrameType.PING);
		this.payload = Objects.requireNonNull(payload);
		if (payload.length != PING_LENGTH)
			throw new IllegalArgumentException("PING payload must be 8 bytes");
		this.reply = reply;
	}

	public byte[] getPayload() {
		return payload;
	}

	public long getPayloadAsLong() {
		return toLong(payload);
	}

	public boolean isReply() {
		return reply;
	}

	private static byte[] toBytes(long value) {
		byte[] result = new byte[8];
		for (int i = result.length - 1; i >= 0; --i) {
			result[i] = (byte) (value & 0xFF);
			value >>= 8;
		}
		return result;
	}

	private static long toLong(byte[] payload) {
		long result = 0;
		for (int i = 0; i < 8; ++i) {
			result <<= 8;
			result |= (payload[i] & 0xFF);
		}
		return result;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy