diff options
author | Ted Ross <tross@apache.org> | 2011-02-02 18:16:57 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2011-02-02 18:16:57 +0000 |
commit | 9991fae5ea4415b6ef760a4430658202b90264bc (patch) | |
tree | 93399916cd50e0ac10aa761144b4915d9085e217 /cpp/src/qmf/ConsoleSession.cpp | |
parent | 24fb6939e5420ecae9033687c8c6081a62cd42a5 (diff) | |
download | qpid-python-9991fae5ea4415b6ef760a4430658202b90264bc.tar.gz |
QPID-3032 - Modifications to the QMFv2 implementation:
1) Use the topic exchange as the base for direct and reply-to addresses.
2) Add a strict-security option to the Console and Agent APIs that narrows the messaging
patterns used such that they can easily be controlled by broker ACL policy.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1066562 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qmf/ConsoleSession.cpp')
-rw-r--r-- | cpp/src/qmf/ConsoleSession.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/cpp/src/qmf/ConsoleSession.cpp b/cpp/src/qmf/ConsoleSession.cpp index f327170c5e..00ea397c4b 100644 --- a/cpp/src/qmf/ConsoleSession.cpp +++ b/cpp/src/qmf/ConsoleSession.cpp @@ -36,6 +36,7 @@ using namespace qmf; using qpid::messaging::Address; using qpid::messaging::Connection; using qpid::messaging::Receiver; +using qpid::messaging::Sender; using qpid::messaging::Duration; using qpid::messaging::Message; using qpid::types::Variant; @@ -82,6 +83,14 @@ ConsoleSessionImpl::ConsoleSessionImpl(Connection& c, const string& options) : iter = optMap.find("max-agent-age"); if (iter != optMap.end()) maxAgentAgeMinutes = iter->second.asUint32(); + + iter = optMap.find("listen-on-direct"); + if (iter != optMap.end()) + listenOnDirect = iter->second.asBool(); + + iter = optMap.find("strict-security"); + if (iter != optMap.end()) + strictSecurity = iter->second.asBool(); } } @@ -148,24 +157,26 @@ void ConsoleSessionImpl::open() directBase = "qmf." + domain + ".direct"; topicBase = "qmf." + domain + ".topic"; - string myKey("qmf-console-" + qpid::types::Uuid(true).str()); + string myKey("direct-console." + qpid::types::Uuid(true).str()); - replyAddress = Address(directBase + "/" + myKey + ";{node:{type:topic}}"); + replyAddress = Address(topicBase + "/" + myKey + ";{node:{type:topic}}"); // Create AMQP session, receivers, and senders session = connection.createSession(); Receiver directRx = session.createReceiver(replyAddress); Receiver topicRx = session.createReceiver(topicBase + "/agent.#"); // TODO: be more discriminating - Receiver legacyRx = session.createReceiver("amq.direct/" + myKey + ";{node:{type:topic}}"); + if (!strictSecurity) { + Receiver legacyRx = session.createReceiver("amq.direct/" + myKey + ";{node:{type:topic}}"); + legacyRx.setCapacity(64); + directSender = session.createSender(directBase + ";{create:never,node:{type:topic}}"); + directSender.setCapacity(128); + } directRx.setCapacity(64); topicRx.setCapacity(128); - legacyRx.setCapacity(64); - directSender = session.createSender(directBase + ";{create:never,node:{type:topic}}"); topicSender = session.createSender(topicBase + ";{create:never,node:{type:topic}}"); - directSender.setCapacity(64); topicSender.setCapacity(128); // Start the receiver thread @@ -371,7 +382,9 @@ void ConsoleSessionImpl::sendBrokerLocate() msg.setCorrelationId("broker-locate"); msg.setSubject("broker"); - directSender.send(msg); + Sender sender = session.createSender(directBase + ";{create:never,node:{type:topic}}"); + sender.send(msg); + sender.close(); QPID_LOG(trace, "SENT AgentLocate to broker"); } |