chromium/components/cronet/android/api/src/org/chromium/net/QuicException.java

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.net;

/**
 * Subclass of {@link NetworkException} which contains a detailed
 * <a href="https://www.chromium.org/quic">QUIC</a> error code from <a
 * href="https://cs.chromium.org/search/?q=symbol:%5CbQuicErrorCode%5Cb"> QuicErrorCode</a>. An
 * instance of {@code QuicException} is passed to {@code onFailed} callbacks when the error code is
 * {@link NetworkException#ERROR_QUIC_PROTOCOL_FAILED NetworkException.ERROR_QUIC_PROTOCOL_FAILED}.
 */
public abstract class QuicException extends NetworkException {
    /**
     * Constructs an exception that is caused by a QUIC protocol error.
     *
     * @param message explanation of failure.
     * @param cause the cause (which is saved for later retrieval by the {@link
     * java.io.IOException#getCause getCause()} method). A null value is permitted, and indicates
     * that the cause is nonexistent or unknown.
     */
    protected QuicException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * Returns the <a href="https://www.chromium.org/quic">QUIC</a> error code, which is a value
     * from <a href="https://cs.chromium.org/search/?q=symbol:%5CbQuicErrorCode%5Cb">
     * QuicErrorCode</a>.
     */
    public abstract int getQuicDetailedErrorCode();

    /** Returns the side responsible for terminating the QUIC connection. */
    public @ConnectionCloseSource int getConnectionCloseSource() {
        return ConnectionCloseSource.UNKNOWN;
    }
}