diff options
Diffstat (limited to 'simple/simple-http/src/main/java/org/simpleframework/http/socket/CloseCode.java')
-rw-r--r-- | simple/simple-http/src/main/java/org/simpleframework/http/socket/CloseCode.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/simple/simple-http/src/main/java/org/simpleframework/http/socket/CloseCode.java b/simple/simple-http/src/main/java/org/simpleframework/http/socket/CloseCode.java new file mode 100644 index 0000000..c64c605 --- /dev/null +++ b/simple/simple-http/src/main/java/org/simpleframework/http/socket/CloseCode.java @@ -0,0 +1,150 @@ +/* + * CloseCode.java February 2014 + * + * Copyright (C) 2014, Niall Gallagher <niallg@users.sf.net> + * + * Licensed 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.simpleframework.http.socket; + +/** + * The <code>CloseCode</code> enumerates the closure codes specified in + * RFC 6455. When closing an established connection an endpoint may + * indicate a reason for closure. The interpretation of this reason by + * an endpoint, and the action an endpoint should take given this reason, + * are left undefined by RFC 6455. The specification defines a set of + * status codes and specifies which ranges may be used by extensions, + * frameworks, and end applications. The status code and any associated + * textual message are optional components of a Close frame. + * + * @author niall.gallagher + */ +public enum CloseCode { + + /** + * Indicates the purpose for the connection has been fulfilled. + */ + NORMAL_CLOSURE(1000), + + /** + * Indicates that the server is going down or the client browsed away. + */ + GOING_AWAY(1001), + + /** + * Indicates the connection is terminating due to a protocol error. + */ + PROTOCOL_ERROR(1002), + + /** + * Indicates the connection received a data type it cannot accept. + */ + UNSUPPORTED_DATA(1003), + + /** + * According to RFC 6455 this has been reserved for future use. + */ + RESERVED(1004), + + /** + * Indicates that no status code was present and should not be used. + */ + NO_STATUS_CODE(1005), + + /** + * Indicates an abnormal closure and should not be used. + */ + ABNORMAL_CLOSURE(1006), + + /** + * Indicates that a payload was not consistent with the message type. + */ + INVALID_FRAME_DATA(1007), + + /** + * Indicates an endpoint received a message that violates its policy. + */ + POLICY_VIOLATION(1008), + + /** + * Indicates that a payload is too big to be processed. + */ + TOO_BIG(1009), + + /** + * Indicates that the server did not negotiate an extension properly. + */ + NO_EXTENSION(1010), + + /** + * Indicates an unexpected error within the server. + */ + INTERNAL_SERVER_ERROR(1011), + + /** + * Indicates a validation failure for TLS and should not be used. + */ + TLS_HANDSHAKE_FAILURE(1015); + + /** + * This is the actual integer value representing the code. + */ + public final int code; + + /** + * This is the high order byte for the closure code. + */ + public final int high; + + /** + * This is the low order byte for the closure code. + */ + public final int low; + + /** + * Constructor for the <code>CloseCode</code> object. This is used + * to create a closure code using one of the pre-defined values + * within RFC 6455. + * + * @param code this is the code that is to be used + */ + private CloseCode(int code) { + this.high = code & 0x0f; + this.low = code & 0xf0; + this.code = code; + } + + /** + * This is the data that represents the closure code. The array + * contains the high order byte and the low order byte as taken + * from the pre-defined closure code. + * + * @return a byte array representing the closure code + */ + public byte[] getData() { + return new byte[] { (byte)high, (byte)low }; + } + + + public static CloseCode resolveCode(int high, int low) { + for(CloseCode code : values()) { + if(code.high == high) { + if(code.low == low) { + return code; + } + } + } + return NO_STATUS_CODE; + } +} |