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

javax.net.websocket.CloseReason Maven / Gradle / Ivy

//
//  ========================================================================
//  Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package javax.net.websocket;

/**
 * A class encapsulating the reason why a web socket has been closed, or why it
 * is being asked to close. Note the acceptable uses of codes and reason phrase
 * defined in RFC 6455.
 * 
 * @since DRAFT 001
 */
public class CloseReason extends java.lang.Object {
    /**
     * A marker interface for the close codes. This interface may be implemented
     * by enumerations that contain web socket close codes, for example
     * enumerations that contain all the in use close codes as of web socket
     * 1.0, or an enumeration that contains close codes that are currently
     * reserved for special use by the web socket specification.
     */
    public static interface CloseCode {
	/**
	 * Returns the code number, for example the integer '1000' for normal
	 * closure.
	 * 
	 * @return the code number
	 */
	int getCode();
    }

    /**
     * An Enumeration of status codes for a web socket close that are defined in
     * the specification.
     */
    public static enum CloseCodes implements CloseReason.CloseCode {
	/**
	 * 1000 indicates a normal closure, meaning that the purpose for which
	 * the connection was established has been fulfilled.
	 */
	NORMAL_CLOSURE(1000),
	/**
	 * 1001 indicates that an endpoint is "going away", such as a server
	 * going down or a browser having navigated away from a page.
	 */
	GOING_AWAY(1001),
	/**
	 * 1002 indicates that an endpoint is terminating the connection due to
	 * a protocol error.
	 */
	PROTOCOL_ERROR(1002),
	/**
	 * 1003 indicates that an endpoint is terminating the connection because
	 * it has received a type of data it cannot accept (e.g., an endpoint
	 * that understands only text data MAY send this if it receives a binary
	 * message).
	 */
	CANNOT_ACCEPT(1003),
	/** 1004 Reserved. The specific meaning might be defined in the future. */
	RESERVED(1004),
	/**
	 * 1005 is a reserved value and MUST NOT be set as a status code in a
	 * Close control frame by an endpoint. It is designated for use in
	 * applications expecting a status code to indicate that no status code
	 * was actually present.
	 */
	NO_STATUS_CODE(1005),
	/**
	 * 1006 is a reserved value and MUST NOT be set as a status code in a
	 * Close control frame by an endpoint. It is designated for use in
	 * applications expecting a status code to indicate that the connection
	 * was closed abnormally, e.g., without sending or receiving a Close
	 * control frame.
	 */
	CLOSED_ABNORMALLY(1006),
	/**
	 * 1007 indicates that an endpoint is terminating the connection because
	 * it has received data within a message that was not consistent with
	 * the type of the message (e.g., non-UTF-8 [RFC3629] data within a text
	 * message).
	 */
	NOT_CONSISTENT(1007),
	/**
	 * 1008 indicates that an endpoint is terminating the connection because
	 * it has received a message that violates its policy. This is a generic
	 * status code that can be returned when there is no other more suitable
	 * status code (e.g., 1003 or 1009) or if there is a need to hide
	 * specific details about the policy.
	 */
	VIOLATED_POLICY(1008),
	/**
	 * 1009 indicates that an endpoint is terminating the connection because
	 * it has received a message that is too big for it to process.
	 */
	TOO_BIG(1009),
	/**
	 * 1010 indicates that an endpoint (client) is terminating the
	 * connection because it has expected the server to negotiate one or
	 * more extension, but the server didn't return them in the response
	 * message of the WebSocket handshake. The list of extensions that are
	 * needed SHOULD appear in the /reason/ part of the Close frame. Note
	 * that this status code is not used by the server, because it can fail
	 * the WebSocket handshake instead.
	 */
	NO_EXTENSION(1010),
	/**
	 * 1011 indicates that a server is terminating the connection because it
	 * encountered an unexpected condition that prevented it from fulfilling
	 * the request.
	 */
	UNEXPECTED_CONDITION(1011),
	// FIXME: missing codes from
	// https://www.ietf.org/mail-archive/web/hybi/current/msg09649.html
	// FIXME: missing 1012 (SERVICE_RESTART)
	// FIXME: missing 1013 (TRY_AGAIN_LATER)
	/**
	 * 1015 is a reserved value and MUST NOT be set as a status code in a
	 * Close control frame by an endpoint. It is designated for use in
	 * applications expecting a status code to indicate that the connection
	 * was closed due to a failure to perform a TLS handshake (e.g., the
	 * server certificate can't be verified).
	 */
	TLS_HANDSHAKE_FAILURE(1015);

	private int code;

	private CloseCodes(int value) {
	    this.code = value;
	}

	/**
	 * Return the code number of this status code.
	 */
	@Override
	public int getCode() {
	    return this.code;
	}
    }

    private CloseReason.CloseCode closeCode;
    private String reasonPhrase;

    /**
     * Creates a reason for closing a web socket connection with the given code
     * and reason phrase.
     * 
     * @param closeCode
     * @param reasonPhrase
     */
    // FIXME: limit size of reasonPhrase to what will fit in Close frame
    public CloseReason(CloseReason.CloseCode closeCode, String reasonPhrase) {
	this.closeCode = closeCode;
	this.reasonPhrase = reasonPhrase;
    }

    /**
     * The Close code associated with this CloseReason
     * 
     * @return the close code
     */
    public CloseReason.CloseCode getCloseCode() {
	return this.closeCode;
    }

    /**
     * The reason phrase associated with this CloseReason.
     * 
     * @return the reason phrase.
     */
    public String getReasonPhrase() {
	return this.reasonPhrase;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy