blob: 4b7f04c1e43455ca3fb8f3b49babc5b7acf42a43 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.mina.http2.api;
import java.nio.charset.Charset;
/**
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public final class Http2Constants {
/**
* Mask used when decoding on a 4 byte boundary, masking the reserved
* bit
*/
public static final int HTTP2_31BITS_MASK = 0x7FFFFFFF;
/**
* Mask used when decoding on a 4 byte boundary, retrieving
* the exclusive bit
*/
public static final int HTTP2_EXCLUSIVE_MASK = 0x80000000;
/**
* Length of the HTTP2 header (length, type, flags, streamID)
*/
public static final int HTTP2_HEADER_LENGTH = 9;
/*
* Frame types
*/
/**
* DATA frame
*/
public static final short FRAME_TYPE_DATA = 0x00;
/**
* HEADERS frame
*/
public static final short FRAME_TYPE_HEADERS = 0x01;
/**
* PRIORITY frame
*/
public static final short FRAME_TYPE_PRIORITY = 0x02;
/**
* RST_STREAM frame
*/
public static final short FRAME_TYPE_RST_STREAM = 0x03;
/**
* SETTINGS stream
*/
public static final short FRAME_TYPE_SETTINGS = 0x04;
/**
* PUSH_PROMISE frame
*/
public static final short FRAME_TYPE_PUSH_PROMISE = 0x05;
/**
* PING frame
*/
public static final short FRAME_TYPE_PING = 0x06;
/**
* GOAWAY frame
*/
public static final short FRAME_TYPE_GOAWAY = 0x07;
/**
* WINDOW_UPDATE frame
*/
public static final short FRAME_TYPE_WINDOW_UPDATE = 0x08;
/**
* CONTINUATION frame
*/
public static final short FRAME_TYPE_CONTINUATION = 0x09;
/*
* Flags
*/
public static final byte FLAGS_END_STREAM = 0x01;
public static final byte FLAGS_ACK = 0x01;
public static final byte FLAGS_END_HEADERS = 0x04;
public static final byte FLAGS_PADDING = 0x08;
public static final byte FLAGS_PRIORITY = 0x20;
/*
* Error codes
*/
/**
* The associated condition is not as a result of an error. For example, a GOAWAY might include this code to indicate graceful shutdown of a connection.
*/
public static final int NO_ERROR = 0x0;
/**
* The endpoint detected an unspecific protocol error. This error is for use when a more specific error code is not available.
*/
public static final int PROTOCOL_ERROR = 0x1;
/**
* The endpoint encountered an unexpected internal error.
*/
public static final int INTERNAL_ERROR = 0x2;
/**
* The endpoint detected that its peer violated the flow control protocol.
*/
public static final int FLOW_CONTROL_ERROR = 0x3;
/**
* The endpoint sent a SETTINGS frame, but did not receive a response in a timely manner. See Settings Synchronization (Section 6.5.3).
*/
public static final int SETTINGS_TIMEOUT = 0x4;
/**
* The endpoint received a frame after a stream was half closed.
*/
public static final int STREAM_CLOSED = 0x5;
/**
* The endpoint received a frame with an invalid size.
*/
public static final int FRAME_SIZE_ERROR = 0x6;
/**
* The endpoint refuses the stream prior to performing any application processing, see Section 8.1.4 for details.
*/
public static final int REFUSED_STREAM = 0x7;
/**
* Used by the endpoint to indicate that the stream is no longer needed.
*/
public static final int CANCEL = 0x8;
/**
* The endpoint is unable to maintain the header compression context for the connection.
*/
public static final int COMPRESSION_ERROR = 0x9;
/**
* The connection established in response to a CONNECT request (Section 8.3) was reset or abnormally closed.
*/
public static final int CONNECT_ERROR = 0xa;
/**
* The endpoint detected that its peer is exhibiting a behavior that might be generating excessive load.
*/
public static final int ENHANCE_YOUR_CALM = 0xb;
/**
* The underlying transport has properties that do not meet minimum security requirements (see Section 9.2).
*/
public static final int INADEQUATE_SECURITY = 0xc;
/**
* The endpoint requires that HTTP/1.1 be used instead of HTTP/2.
*/
public static final int HTTP_1_1_REQUIRED = 0xd;
/*
* Settings related stuff
*/
public static final int SETTINGS_HEADER_TABLE_SIZE = 0x01;
public static final int SETTINGS_HEADER_TABLE_SIZE_DEFAULT = 4096;
public static final int SETTINGS_ENABLE_PUSH = 0x02;
public static final int SETTINGS_ENABLE_PUSH_DEFAULT = 1;
public static final int SETTINGS_MAX_CONCURRENT_STREAMS = 0x03;
public static final int SETTINGS_MAX_CONCURRENT_STREAMS_DEFAULT = Integer.MAX_VALUE;
public static final int SETTINGS_INITIAL_WINDOW_SIZE = 0x04;
public static final int SETTINGS_INITIAL_WINDOW_SIZE_DEFAULT = 65535;
public static final int SETTINGS_MAX_FRAME_SIZE = 0x05;
public static final int SETTINGS_MAX_FRAME_SIZE_DEFAULT = 16384;
public static final int SETTINGS_MAX_HEADER_LIST_SIZE = 0x06;
public static final int SETTINGS_MAX_HEADER_LIST_SIZE_DEFAULT = Integer.MAX_VALUE;
public static final Charset US_ASCII_CHARSET = Charset.forName("US-ASCII");
public static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
}