blob: c417262c455ddc85957a0cca5e0d28aa00a079e4 [file] [log] [blame]
#ifndef QPID_AMQP_0_10_EXCEPTION_H
#define QPID_AMQP_0_10_EXCEPTION_H
/*
*
* 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.
*
*/
#include "qpid/Exception.h"
#include "qpid/amqp_0_10/specification_fwd.h"
namespace qpid {
namespace amqp_0_10 {
/**
* Raised when the connection is unexpectedly closed. Sessions with
* non-0 timeout may be available for re-attachment on another connection.
*/
struct QPID_COMMON_CLASS_EXTERN ConnectionException : public qpid::Exception {
// FIXME aconway 2008-04-04: Merge qpid::ConnectionException
// into this when the old code is removed.
typedef connection::CloseCode Code;
ConnectionException(Code c, const std::string m)
: qpid::Exception(m), code(c) {}
Code code;
};
/**
* Raised when a session is unexpectedly detached for any reason, or
* if an attempt is made to use a session that is not attached.
*/
struct QPID_COMMON_CLASS_EXTERN SessionException : public qpid::Exception {
// FIXME aconway 2008-04-04: should not have a code at this level.
// Leave in place till old preview code is gone.
SessionException(int /*code*/, const std::string& msg) : qpid::Exception(msg) {}
};
/** Raised when the state of a session has been destroyed */
struct QPID_COMMON_CLASS_EXTERN SessionDestroyedException : public SessionException {
// FIXME aconway 2008-04-04: should not have a code at this level.
// Leave in place till old preview code is gone.
SessionDestroyedException(int code, const std::string& msg) : SessionException(code, msg){}
};
/** Raised when a session is destroyed due to an execution.exception */
struct QPID_COMMON_CLASS_EXTERN SessionAbortedException : public SessionDestroyedException {
typedef execution::ErrorCode Code;
SessionAbortedException(Code c, const std::string m)
: SessionDestroyedException(c, m), code(c) {}
Code code;
};
/**
* Raised when a session with 0 timeout is unexpectedly detached
* and therefore expires and is destroyed.
*/
struct QPID_COMMON_CLASS_EXTERN SessionExpiredException : public SessionDestroyedException {
typedef session::DetachCode Code;
SessionExpiredException(Code c, const std::string m)
: SessionDestroyedException(c, m), code(c) {}
Code code;
};
/**
* Raised when a session with non-0 timeout is unexpectedly detached
* or if an attempt is made to use a session that is not attached.
*
* The session is not necessarily destroyed, it may be possible to
* re-attach.
*/
struct QPID_COMMON_CLASS_EXTERN SessionDetachedException : public SessionException {
typedef session::DetachCode Code;
SessionDetachedException(Code c, const std::string m)
: SessionException(c, m), code(c) {}
Code code;
};
}} // namespace qpid::amqp_0_10
#endif /*!QPID_AMQP_0_10_EXCEPTION_H*/