diff options
Diffstat (limited to 'cpp/src/qpid/messaging/Connection.cpp')
-rw-r--r-- | cpp/src/qpid/messaging/Connection.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/cpp/src/qpid/messaging/Connection.cpp b/cpp/src/qpid/messaging/Connection.cpp index c8a60fc56b..c40d32cbc1 100644 --- a/cpp/src/qpid/messaging/Connection.cpp +++ b/cpp/src/qpid/messaging/Connection.cpp @@ -48,34 +48,35 @@ Connection::Connection(const std::string& url, const std::string& o) Variant::Map options; AddressParser parser(o); if (o.empty() || parser.parseMap(options)) { - ConnectionImpl* impl = ProtocolRegistry::create(url, options); - if (impl) { - PI::ctor(*this, impl); - } else { - PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); - } + PI::ctor(*this, ProtocolRegistry::create(url, options)); } else { throw InvalidOptionString("Invalid option string: " + o); } } Connection::Connection(const std::string& url, const Variant::Map& options) { - ConnectionImpl* impl = ProtocolRegistry::create(url, options); - if (impl) { - PI::ctor(*this, impl); - } else { - PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); - } + PI::ctor(*this, ProtocolRegistry::create(url, options)); } Connection::Connection() { Variant::Map options; std::string url = "127.0.0.1:5672"; - PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); + PI::ctor(*this, ProtocolRegistry::create(url, options)); } -void Connection::open() { impl->open(); } +void Connection::open() +{ + while (true) { + try { + impl->open(); + return; + } catch (const ProtocolVersionError& e) { + PI::set(*this, ProtocolRegistry::next(PI::get(impl).get())); + QPID_LOG(info, e.what() << ", trying alternative protocol version..."); + } + } +} bool Connection::isOpen() { return impl->isOpen(); } bool Connection::isOpen() const { return impl->isOpen(); } void Connection::close() { impl->close(); } |