summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/messaging
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2010-04-09 15:08:47 +0000
committerGordon Sim <gsim@apache.org>2010-04-09 15:08:47 +0000
commitef958e7b221d38ec76c392f76a66978211d6d1f9 (patch)
tree111ba60857b7613f18e64f5c817d6e271428013e /cpp/src/qpid/messaging
parent2daf8e11866364ff4955ee69625bf401e9baa93c (diff)
downloadqpid-python-ef958e7b221d38ec76c392f76a66978211d6d1f9.tar.gz
QPID-664: changed connect() back to open(),removed detach(),defined new exception hierarchy, added ability to re-use reconnect/replay logic for resource-limit-exceeded errors
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@932451 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/messaging')
-rw-r--r--cpp/src/qpid/messaging/Address.cpp4
-rw-r--r--cpp/src/qpid/messaging/Connection.cpp9
-rw-r--r--cpp/src/qpid/messaging/ConnectionImpl.h5
-rw-r--r--cpp/src/qpid/messaging/Message.cpp4
-rw-r--r--cpp/src/qpid/messaging/Session.cpp11
-rw-r--r--cpp/src/qpid/messaging/SessionImpl.h1
-rw-r--r--cpp/src/qpid/messaging/exceptions.cpp58
7 files changed, 76 insertions, 16 deletions
diff --git a/cpp/src/qpid/messaging/Address.cpp b/cpp/src/qpid/messaging/Address.cpp
index 0c522888e7..a516959edb 100644
--- a/cpp/src/qpid/messaging/Address.cpp
+++ b/cpp/src/qpid/messaging/Address.cpp
@@ -148,8 +148,4 @@ std::ostream& operator<<(std::ostream& out, const Address& address)
return out;
}
-InvalidAddress::InvalidAddress(const std::string& msg) : Exception(msg) {}
-
-MalformedAddress::MalformedAddress(const std::string& msg) : Exception(msg) {}
-
}} // namespace qpid::messaging
diff --git a/cpp/src/qpid/messaging/Connection.cpp b/cpp/src/qpid/messaging/Connection.cpp
index 81a72bb876..14e713d425 100644
--- a/cpp/src/qpid/messaging/Connection.cpp
+++ b/cpp/src/qpid/messaging/Connection.cpp
@@ -39,7 +39,7 @@ Connection::Connection(const Connection& c) : Handle<ConnectionImpl>() { PI::cop
Connection& Connection::operator=(const Connection& c) { return PI::assign(*this, c); }
Connection::~Connection() { PI::dtor(*this); }
-Connection::Connection(const std::string& url, const std::string& o)
+Connection::Connection(const std::string& url, const std::string& o) throw(InvalidOptionString)
{
Variant::Map options;
AddressParser parser(o);
@@ -54,9 +54,8 @@ Connection::Connection(const std::string& url, const Variant::Map& options)
PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options));
}
-void Connection::connect() { impl->connect(); }
-bool Connection::isConnected() { return impl->isConnected(); }
-void Connection::detach() { impl->detach(); }
+void Connection::open() { impl->open(); }
+bool Connection::isOpen() { return impl->isOpen(); }
void Connection::close() { impl->close(); }
Session Connection::createSession(const std::string& name) { return impl->newSession(false, name); }
Session Connection::createTransactionalSession(const std::string& name)
@@ -69,6 +68,4 @@ void Connection::setOption(const std::string& name, const Variant& value)
impl->setOption(name, value);
}
-InvalidOptionString::InvalidOptionString(const std::string& msg) : Exception(msg) {}
-
}} // namespace qpid::messaging
diff --git a/cpp/src/qpid/messaging/ConnectionImpl.h b/cpp/src/qpid/messaging/ConnectionImpl.h
index 148105476d..23ab5272d0 100644
--- a/cpp/src/qpid/messaging/ConnectionImpl.h
+++ b/cpp/src/qpid/messaging/ConnectionImpl.h
@@ -38,9 +38,8 @@ class ConnectionImpl : public virtual qpid::RefCounted
{
public:
virtual ~ConnectionImpl() {}
- virtual void connect() = 0;
- virtual bool isConnected() = 0;
- virtual void detach() = 0;
+ virtual void open() = 0;
+ virtual bool isOpen() = 0;
virtual void close() = 0;
virtual Session newSession(bool transactional, const std::string& name) = 0;
virtual Session getSession(const std::string& name) const = 0;
diff --git a/cpp/src/qpid/messaging/Message.cpp b/cpp/src/qpid/messaging/Message.cpp
index 753d3cec1b..1a04abe15b 100644
--- a/cpp/src/qpid/messaging/Message.cpp
+++ b/cpp/src/qpid/messaging/Message.cpp
@@ -111,13 +111,13 @@ template <class C> struct MessageCodec
checkEncoding(requested) || checkEncoding(message.getContentType());
}
- template <class T> static void decode(const Message& message, T& object, const std::string& encoding)
+ static void decode(const Message& message, typename C::ObjectType& object, const std::string& encoding)
{
checkEncoding(message, encoding);
C::decode(message.getContent(), object);
}
- template <class T> static void encode(const T& map, Message& message, const std::string& encoding)
+ static void encode(const typename C::ObjectType& map, Message& message, const std::string& encoding)
{
checkEncoding(message, encoding);
std::string content;
diff --git a/cpp/src/qpid/messaging/Session.cpp b/cpp/src/qpid/messaging/Session.cpp
index eb5e3766b8..bd9048e893 100644
--- a/cpp/src/qpid/messaging/Session.cpp
+++ b/cpp/src/qpid/messaging/Session.cpp
@@ -94,6 +94,15 @@ Connection Session::getConnection() const
return impl->getConnection();
}
-KeyError::KeyError(const std::string& msg) : Exception(msg) {}
+void Session::checkError() { impl->checkError(); }
+bool Session::hasError()
+{
+ try {
+ checkError();
+ return false;
+ } catch (const std::exception&) {
+ return true;
+ }
+}
}} // namespace qpid::messaging
diff --git a/cpp/src/qpid/messaging/SessionImpl.h b/cpp/src/qpid/messaging/SessionImpl.h
index 7acead5b04..e9a200b22e 100644
--- a/cpp/src/qpid/messaging/SessionImpl.h
+++ b/cpp/src/qpid/messaging/SessionImpl.h
@@ -54,6 +54,7 @@ class SessionImpl : public virtual qpid::RefCounted
virtual Sender getSender(const std::string& name) const = 0;
virtual Receiver getReceiver(const std::string& name) const = 0;
virtual Connection getConnection() const = 0;
+ virtual void checkError() = 0;
private:
};
}} // namespace qpid::messaging
diff --git a/cpp/src/qpid/messaging/exceptions.cpp b/cpp/src/qpid/messaging/exceptions.cpp
new file mode 100644
index 0000000000..5d2683fffe
--- /dev/null
+++ b/cpp/src/qpid/messaging/exceptions.cpp
@@ -0,0 +1,58 @@
+/*
+ *
+ * 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/messaging/exceptions.h"
+
+namespace qpid {
+namespace messaging {
+
+MessagingException::MessagingException(const std::string& msg) : qpid::types::Exception(msg) {}
+MessagingException::~MessagingException() throw() {}
+
+InvalidOptionString::InvalidOptionString(const std::string& msg) : MessagingException(msg) {}
+KeyError::KeyError(const std::string& msg) : MessagingException(msg) {}
+
+
+LinkError::LinkError(const std::string& msg) : MessagingException(msg) {}
+
+AddressError::AddressError(const std::string& msg) : LinkError(msg) {}
+ResolutionError::ResolutionError(const std::string& msg) : AddressError(msg) {}
+MalformedAddress::MalformedAddress(const std::string& msg) : AddressError(msg) {}
+AssertionFailed::AssertionFailed(const std::string& msg) : ResolutionError(msg) {}
+NotFound::NotFound(const std::string& msg) : ResolutionError(msg) {}
+
+ReceiverError::ReceiverError(const std::string& msg) : LinkError(msg) {}
+FetchError::FetchError(const std::string& msg) : ReceiverError(msg) {}
+NoMessageAvailable::NoMessageAvailable() : FetchError("No message to fetch") {}
+
+SenderError::SenderError(const std::string& msg) : LinkError(msg) {}
+SendError::SendError(const std::string& msg) : SenderError(msg) {}
+TargetCapacityExceeded::TargetCapacityExceeded(const std::string& msg) : SendError(msg) {}
+
+SessionError::SessionError(const std::string& msg) : MessagingException(msg) {}
+TransactionError::TransactionError(const std::string& msg) : SessionError(msg) {}
+TransactionAborted::TransactionAborted(const std::string& msg) : TransactionError(msg) {}
+UnauthorizedAccess::UnauthorizedAccess(const std::string& msg) : SessionError(msg) {}
+
+ConnectionError::ConnectionError(const std::string& msg) : MessagingException(msg) {}
+
+TransportFailure::TransportFailure(const std::string& msg) : MessagingException(msg) {}
+
+}} // namespace qpid::messaging