diff options
author | Gordon Sim <gsim@apache.org> | 2013-05-23 12:19:12 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2013-05-23 12:19:12 +0000 |
commit | 057bf80a65e5271e631eb02b64d13b00b36c1c97 (patch) | |
tree | 7ed1ff21d2938b18b8e73ef2d94bcf709b100c55 /cpp | |
parent | 2bf57b8dfb9067364287d371267dc29c27996d29 (diff) | |
download | qpid-python-057bf80a65e5271e631eb02b64d13b00b36c1c97.tar.gz |
QPID-4880: Qualify the name passed back to the client for dynamically created nodes with the brokers domain
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1485658 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/qpid/broker/amqp/Session.cpp | 26 | ||||
-rw-r--r-- | cpp/src/qpid/broker/amqp/Session.h | 1 |
2 files changed, 20 insertions, 7 deletions
diff --git a/cpp/src/qpid/broker/amqp/Session.cpp b/cpp/src/qpid/broker/amqp/Session.cpp index 7360edc764..afa87db1c3 100644 --- a/cpp/src/qpid/broker/amqp/Session.cpp +++ b/cpp/src/qpid/broker/amqp/Session.cpp @@ -171,12 +171,20 @@ std::string Session::generateName(pn_link_t* link) { std::stringstream s; s << qpid::types::Uuid(true) << "::" << pn_link_name(link); - if (!connection.getDomain().empty()) { - s << "@" << connection.getDomain(); - } return s.str(); } +std::string Session::qualifyName(const std::string& name) +{ + if (connection.getDomain().empty()) { + return name; + } else { + std::stringstream s; + s << name << "@" << connection.getDomain(); + return s.str(); + } +} + void Session::attach(pn_link_t* link) { if (pn_link_is_sender(link)) { @@ -187,11 +195,13 @@ void Session::attach(pn_link_t* link) throw qpid::Exception("No source specified!");/*invalid-field?*/ } else if (pn_terminus_is_dynamic(source)) { name = generateName(link); + QPID_LOG(debug, "Received attach request for outgoing link from " << name); + pn_terminus_set_address(pn_link_source(link), qualifyName(name).c_str()); } else { name = pn_terminus_get_address(source); + QPID_LOG(debug, "Received attach request for outgoing link from " << name); + pn_terminus_set_address(pn_link_source(link), name.c_str()); } - QPID_LOG(debug, "Received attach request for outgoing link from " << name); - pn_terminus_set_address(pn_link_source(link), name.c_str()); setupOutgoing(link, source, name); } else { @@ -201,11 +211,13 @@ void Session::attach(pn_link_t* link) throw qpid::Exception("No target specified!");/*invalid field?*/ } else if (pn_terminus_is_dynamic(target)) { name = generateName(link); + QPID_LOG(debug, "Received attach request for incoming link to " << name); + pn_terminus_set_address(pn_link_target(link), qualifyName(name).c_str()); } else { name = pn_terminus_get_address(target); + QPID_LOG(debug, "Received attach request for incoming link to " << name); + pn_terminus_set_address(pn_link_target(link), name.c_str()); } - QPID_LOG(debug, "Received attach request for incoming link to " << name); - pn_terminus_set_address(pn_link_target(link), name.c_str()); setupIncoming(link, target, name); } diff --git a/cpp/src/qpid/broker/amqp/Session.h b/cpp/src/qpid/broker/amqp/Session.h index b142224cfd..fa2b029986 100644 --- a/cpp/src/qpid/broker/amqp/Session.h +++ b/cpp/src/qpid/broker/amqp/Session.h @@ -96,6 +96,7 @@ class Session : public ManagedSession, public boost::enable_shared_from_this<Ses void setupOutgoing(pn_link_t* link, pn_terminus_t* source, const std::string& name); void setupIncoming(pn_link_t* link, pn_terminus_t* target, const std::string& name); std::string generateName(pn_link_t*); + std::string qualifyName(const std::string&); }; }}} // namespace qpid::broker::amqp |