blob: 362b2a0e22eeea4c4cb47bafd0bb6e77079a30f9 [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.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.hc.core5.http2;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Errors codes defined by HTTP/2 specification.
*
* @since 5.0
*/
public enum H2Error {
/**
* Graceful shutdown
* <p>
* The associated condition is not as a result of an error.
*/
NO_ERROR (0x00),
/**
* Protocol error detected
* <p>
* The endpoint detected an unspecific protocol error. This error is for use when a more
* specific error code is not available
*/
PROTOCOL_ERROR (0x01),
/**
* Implementation fault
* <p>
* The endpoint encountered an unexpected internal error.
*/
INTERNAL_ERROR (0x02),
/**
* Flow control limits exceeded.
* <p>
* The endpoint detected that its peer violated the flow control protocol.
*/
FLOW_CONTROL_ERROR (0x03),
/**
* Settings not acknowledged.
* <p>
* The endpoint sent a SETTINGS frame, but did not receive a response in a timely manner.
*/
SETTINGS_TIMEOUT (0x04),
/**
* Frame received for closed stream.
* <p>
* The endpoint received a frame after a stream was half closed.
*/
STREAM_CLOSED (0x05),
/**
* Frame size incorrect.
* <p>
* The endpoint received a frame with an invalid size.
*/
FRAME_SIZE_ERROR (0x06),
/**
* Stream not processed
* <p>
* The endpoint refuses the stream prior to performing any application processing.
*/
REFUSED_STREAM (0x07),
/**
* Stream canceled.
* <p>
* Used by the endpoint to indicate that the stream is no longer needed
*/
CANCEL (0x08),
/**
* Compression state not updated.
* <p>
* The endpoint is unable to maintain the header compression context for the connection.
*/
COMPRESSION_ERROR (0x09),
/**
* TCP connection error.
* <p>
* The connection established in response to a CONNECT request was reset or abnormally closed.
*/
CONNECT_ERROR (0x0a),
/**
* Processing capacity exceeded.
* <p>
* The endpoint detected that its peer is exhibiting a behavior that might be generating
* excessive load.
*/
ENHANCE_YOUR_CALM (0x0b),
/**
* Negotiated TLS parameters not acceptable.
* <p>
* The underlying transport has properties that do not meet minimum security requirements.
*/
INADEQUATE_SECURITY (0x0c),
/**
* Use HTTP/1.1 for the request.
* <p>
* The endpoint requires that HTTP/1.1 be used instead of HTTP/2.
*/
HTTP_1_1_REQUIRED (0x0d);
int code;
H2Error(final int code) {
this.code = code;
}
public int getCode() {
return code;
}
private static final ConcurrentMap<Integer, H2Error> MAP_BY_CODE;
static {
MAP_BY_CODE = new ConcurrentHashMap<>();
for (final H2Error error: values()) {
MAP_BY_CODE.putIfAbsent(error.code, error);
}
}
public static H2Error getByCode(final int code) {
return MAP_BY_CODE.get(code);
}
}