summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-10-10 04:49:48 +0000
committerAlan Conway <aconway@apache.org>2008-10-10 04:49:48 +0000
commit5d07d177cfc5eca21c44981bbe342f0cdcced4e5 (patch)
tree0f5f83642ed5effed52a5e2547565362ce2aea8c /cpp/src/qpid/broker
parente7ceead683231ef2cb35a6ee70488e859f023d12 (diff)
downloadqpid-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.cpp13
-rw-r--r--cpp/src/qpid/broker/Broker.h6
-rw-r--r--cpp/src/qpid/broker/ConnectionHandler.cpp8
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);
}