org.jivesoftware.openfire.http.BoshBindingError Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* 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.jivesoftware.openfire.http;
import javax.servlet.http.HttpServletResponse;
/**
* An enum defining all errors which can happen during a BOSH session.
*/
public enum BoshBindingError {
/**
* The format of an HTTP header or binding element received from the client is unacceptable
* (e.g., syntax error), or Script Syntax is not supported.
*/
badRequest(Type.terminate, "bad-request", HttpServletResponse.SC_BAD_REQUEST),
/**
* The target domain specified in the 'to' attribute or the target host or port specified in the
* 'route' attribute is no longer serviced by the connection manager.
*/
hostGone(Type.terminate, "host-gone"),
/**
* The target domain specified in the 'to' attribute or the target host or port specified in the
* 'route' attribute is unknown to the connection manager.
*/
hostUnknown(Type.terminate, "host-unknown"),
/**
* The initialization element lacks a 'to' or 'route' attribute (or the attribute has no value)
* but the connection manager requires one.
*/
improperAddressing(Type.terminate, "improper-addressing"),
/**
* The connection manager has experienced an internal error that prevents it from servicing the
* request.
*/
internalServerError(Type.terminate, "internal-server-error"),
/**
* (1) 'sid' is not valid, (2) 'stream' is not valid, (3) 'rid' is larger than the upper limit
* of the expected window, (4) connection manager is unable to resend response, (5) 'key'
* sequence is invalid (6) script syntax is not enabled
*/
itemNotFound(Type.terminate, "item-not-found", HttpServletResponse.SC_NOT_FOUND),
/**
* Another request being processed at the same time as this request caused the session to
* terminate.
*/
otherRequest(Type.terminate, "other-request"),
/**
* The client has broken the session rules (polling too frequently, requesting too frequently,
* too many simultaneous requests).
*/
policyViolation(Type.terminate, "policy-violation",
HttpServletResponse.SC_FORBIDDEN),
/**
* The connection manager was unable to connect to, or unable to connect securely to, or has
* lost its connection to, the server.
*/
remoteConnectionFailed(Type.terminate, "remote-connection-failed"),
/**
* Encapsulates an error in the protocol being transported.
*/
remoteStreamError(Type.terminate, "remote-stream-error"),
/**
* The connection manager does not operate at this URI (e.g., the connection manager accepts
* only SSL or TLS connections at some https: URI rather than the http: URI requested by the
* client). The client may try POSTing to the URI in the content of the <uri/> child
* element.
*/
seeOtherUri(Type.terminate, "see-other-uri"),
/**
* The connection manager is being shut down. All active HTTP sessions are being terminated. No
* new sessions can be created.
*/
systemShutdown(Type.terminate, "system-shutdown"),
/**
* The error is not one of those defined herein; the connection manager SHOULD include
* application-specific information in the content of the <body> wrapper.
*/
undefinedCondition(Type.terminate, "undefined-condition");
private Type errorType;
private String condition;
private int legacyErrorCode = HttpServletResponse.SC_BAD_REQUEST;
BoshBindingError(Type errorType, String condition, int legacyErrorCode) {
this(errorType, condition);
this.legacyErrorCode = legacyErrorCode;
}
BoshBindingError(Type errorType, String condition) {
this.errorType = errorType;
this.condition = condition;
}
public Type getErrorType() {
return errorType;
}
/**
* Returns the condition that caused the binding error. This should be returned to the client
* so that the client can take appropriate action.
*
* @return the condition that caused the binding error.
*/
public String getCondition() {
return condition;
}
/**
* Returns the legacy HTTP error code which is related to the binding error. With the 1.6
* version of BOSH the use of HTTP errors was deprecated in favor of using errors inside of the
* response to the client so that they could be more easily processed on the client side.
*
* @return the legacy HTTP error code which is related to the binding error.
*/
public int getLegacyErrorCode() {
return legacyErrorCode;
}
public enum Type {
/**
* The terminate error condition prevents the client from making any further requests until a
* new session is established.
*/
terminate(null),
/**
* In the case of a recoverable binding error the client MUST repeat the HTTP request and
* all the preceding HTTP requests that have not received responses. The content of these
* requests MUST be identical to the <body> elements of the original requests. This
* allows the connection manager to recover a session after the previous request was lost
* due to a communication failure.
*/
recoverable("error");
private String type;
Type(String type) {
this.type = type;
}
/**
* Returns the type that will be displayed to the client.
*
* @return the type that will be displayed to the client.
*/
public String getType() {
if (type == null) {
return name();
}
else {
return type;
}
}
}
}