summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-05-23 12:19:12 +0000
committerGordon Sim <gsim@apache.org>2013-05-23 12:19:12 +0000
commit057bf80a65e5271e631eb02b64d13b00b36c1c97 (patch)
tree7ed1ff21d2938b18b8e73ef2d94bcf709b100c55 /cpp
parent2bf57b8dfb9067364287d371267dc29c27996d29 (diff)
downloadqpid-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.cpp26
-rw-r--r--cpp/src/qpid/broker/amqp/Session.h1
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