diff options
| author | Alan Conway <aconway@apache.org> | 2008-10-10 04:49:48 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-10-10 04:49:48 +0000 |
| commit | 5d07d177cfc5eca21c44981bbe342f0cdcced4e5 (patch) | |
| tree | 0f5f83642ed5effed52a5e2547565362ce2aea8c /cpp/src/qpid/broker | |
| parent | e7ceead683231ef2cb35a6ee70488e859f023d12 (diff) | |
| download | qpid-python-5d07d177cfc5eca21c44981bbe342f0cdcced4e5.tar.gz | |
QPID-1340 froM Mick Goulish: preliminary client-side failover support.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@703319 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker')
| -rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 13 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/Broker.h | 6 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/ConnectionHandler.cpp | 8 |
3 files changed, 24 insertions, 3 deletions
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index 8fffebf04b..9a3925b053 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -140,7 +140,8 @@ Broker::Broker(const Broker::Options& conf) : qpid::SessionState::Configuration( conf.replayFlushLimit*1024, // convert kb to bytes. conf.replayHardLimit*1024), - *this) + *this), + getKnownBrokers(boost::bind(&Broker::getKnownBrokersImpl, this)) { if(conf.enableMgmt){ QPID_LOG(info, "Management enabled"); @@ -426,5 +427,15 @@ uint32_t Broker::queueMoveMessages( boost::shared_ptr<sys::Poller> Broker::getPoller() { return poller; } +std::vector<Url> +Broker::getKnownBrokersImpl() +{ + knownBrokers.clear(); + knownBrokers.push_back ( qpid::Url::getIpAddressesUrl ( getPort() ) ); + return knownBrokers; +} + + + }} // namespace qpid::broker diff --git a/cpp/src/qpid/broker/Broker.h b/cpp/src/qpid/broker/Broker.h index 905b16d54f..fec32d620d 100644 --- a/cpp/src/qpid/broker/Broker.h +++ b/cpp/src/qpid/broker/Broker.h @@ -113,6 +113,9 @@ class Broker : public sys::Runnable, public Plugin::Target, void declareStandardExchange(const std::string& name, const std::string& type); + std::vector<Url> knownBrokers; + std::vector<Url> getKnownBrokersImpl(); + public: @@ -191,6 +194,9 @@ class Broker : public sys::Runnable, public Plugin::Target, boost::shared_ptr<sys::ConnectionCodec::Factory> getConnectionFactory() { return factory; } void setConnectionFactory(boost::shared_ptr<sys::ConnectionCodec::Factory> f) { factory = f; } + + boost::function<std::vector<Url> ()> getKnownBrokers; + }; }} diff --git a/cpp/src/qpid/broker/ConnectionHandler.cpp b/cpp/src/qpid/broker/ConnectionHandler.cpp index fae4992270..c47037cf9c 100644 --- a/cpp/src/qpid/broker/ConnectionHandler.cpp +++ b/cpp/src/qpid/broker/ConnectionHandler.cpp @@ -28,6 +28,7 @@ #include "qpid/framing/ServerInvoker.h" #include "qpid/framing/enum.h" #include "qpid/log/Statement.h" +#include "qpid/Url.h" #include "AclModule.h" using namespace qpid; @@ -127,8 +128,11 @@ void ConnectionHandler::Handler::tuneOk(uint16_t /*channelmax*/, void ConnectionHandler::Handler::open(const string& /*virtualHost*/, const framing::Array& /*capabilities*/, bool /*insist*/) { - framing::Array knownhosts; - client.openOk(knownhosts); + std::vector<Url> urls = connection.broker.getKnownBrokers(); + framing::Array array(0x95); // str16 array + for (std::vector<Url>::iterator i = urls.begin(); i < urls.end(); ++i) + array.add(boost::shared_ptr<Str16Value>(new Str16Value(i->str()))); + client.openOk(array); } |
