summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Broker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/Broker.cpp')
-rw-r--r--cpp/src/qpid/broker/Broker.cpp35
1 files changed, 18 insertions, 17 deletions
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp
index 4074723c28..5ffac46474 100644
--- a/cpp/src/qpid/broker/Broker.cpp
+++ b/cpp/src/qpid/broker/Broker.cpp
@@ -370,34 +370,35 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId,
return status;
}
-boost::shared_ptr<ProtocolFactory> Broker::getProtocolFactory() const {
- assert(protocolFactories.size() > 0);
- return protocolFactories[0];
+boost::shared_ptr<ProtocolFactory> Broker::getProtocolFactory(const std::string& name) const {
+ ProtocolFactoryMap::const_iterator i = protocolFactories.find(name);
+ if (i == protocolFactories.end()) return boost::shared_ptr<ProtocolFactory>();
+ else return i->second;
}
-void Broker::registerProtocolFactory(ProtocolFactory::shared_ptr protocolFactory) {
- protocolFactories.push_back(protocolFactory);
-}
-
-// TODO: This can only work if there is only one protocolFactory
+//TODO: should this allow choosing the port by transport name?
uint16_t Broker::getPort() const {
return getProtocolFactory()->getPort();
}
-// TODO: This should iterate over all protocolFactories
-void Broker::accept() {
- for (unsigned int i = 0; i < protocolFactories.size(); ++i)
- protocolFactories[i]->accept(poller, factory.get());
+void Broker::registerProtocolFactory(const std::string& name, ProtocolFactory::shared_ptr protocolFactory) {
+ protocolFactories[name] = protocolFactory;
}
+void Broker::accept() {
+ for (ProtocolFactoryMap::const_iterator i = protocolFactories.begin(); i != protocolFactories.end(); i++) {
+ i->second->accept(poller, factory.get());
+ }
+}
-// TODO: How to chose the protocolFactory to use for the connection
void Broker::connect(
- const std::string& host, uint16_t port, bool /*useSsl*/,
+ const std::string& host, uint16_t port, const std::string& transport,
boost::function2<void, int, std::string> failed,
sys::ConnectionCodec::Factory* f)
{
- getProtocolFactory()->connect(poller, host, port, f ? f : factory.get(), failed);
+ boost::shared_ptr<ProtocolFactory> pf = getProtocolFactory(transport);
+ if (pf) pf->connect(poller, host, port, f ? f : factory.get(), failed);
+ else throw Exception(QPID_MSG("Unsupported transport type: " << transport));
}
void Broker::connect(
@@ -407,7 +408,7 @@ void Broker::connect(
{
url.throwIfEmpty();
TcpAddress addr=boost::get<TcpAddress>(url[0]);
- connect(addr.host, addr.port, false, failed, f);
+ connect(addr.host, addr.port, TCP_TRANSPORT, failed, f);
}
uint32_t Broker::queueMoveMessages(
@@ -436,7 +437,7 @@ Broker::getKnownBrokersImpl()
return knownBrokers;
}
-
+const std::string Broker::TCP_TRANSPORT("tcp");
}} // namespace qpid::broker