org.eclipse.jetty.websocket.api.Frame Maven / Gradle / Ivy
//
// ========================================================================
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
// which is available at https://www.apache.org/licenses/LICENSE-2.0.
//
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
// ========================================================================
//
package org.eclipse.jetty.websocket.api;
import java.nio.ByteBuffer;
/**
* An immutable websocket frame.
*/
public interface Frame
{
enum Type
{
CONTINUATION((byte)0x00),
TEXT((byte)0x01),
BINARY((byte)0x02),
CLOSE((byte)0x08),
PING((byte)0x09),
PONG((byte)0x0A);
public static Type from(byte op)
{
for (Type type : values())
{
if (type.opcode == op)
{
return type;
}
}
throw new IllegalArgumentException("OpCode " + op + " is not a valid Frame.Type");
}
private final byte opcode;
Type(byte code)
{
this.opcode = code;
}
public byte getOpCode()
{
return opcode;
}
public boolean isControl()
{
return (opcode >= CLOSE.getOpCode());
}
public boolean isData()
{
return (opcode == TEXT.getOpCode()) || (opcode == BINARY.getOpCode());
}
public boolean isContinuation()
{
return opcode == CONTINUATION.getOpCode();
}
@Override
public String toString()
{
return this.name();
}
}
byte[] getMask();
byte getOpCode();
ByteBuffer getPayload();
/**
* The original payload length ({@link ByteBuffer#remaining()})
*
* @return the original payload length ({@link ByteBuffer#remaining()})
*/
int getPayloadLength();
Type getType();
boolean hasPayload();
boolean isFin();
boolean isMasked();
boolean isRsv1();
boolean isRsv2();
boolean isRsv3();
}