diff options
Diffstat (limited to 'cpp/src/qpid/broker/Exchange.cpp')
-rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index 2d5cb09d7c..83466085bc 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -21,10 +21,52 @@ #include "Exchange.h" #include "ExchangeRegistry.h" +#include "qpid/management/ManagementAgent.h" using namespace qpid::broker; using qpid::framing::Buffer; using qpid::framing::FieldTable; +using qpid::management::ManagementAgent; +using qpid::management::ManagementObject; +using qpid::management::Manageable; +using qpid::management::Args; + +Exchange::Exchange (const string& _name, Manageable* parent) : + name(_name), durable(false), persistenceId(0) +{ + if (parent != 0) + { + ManagementAgent::shared_ptr agent = ManagementAgent::getAgent (); + if (agent.get () != 0) + { + mgmtExchange = management::Exchange::shared_ptr + (new management::Exchange (this, parent, _name)); + agent->addObject (mgmtExchange); + } + } +} + +Exchange::Exchange(const string& _name, bool _durable, const qpid::framing::FieldTable& _args, + Manageable* parent) + : name(_name), durable(_durable), args(_args), alternateUsers(0), persistenceId(0) +{ + if (parent != 0) + { + ManagementAgent::shared_ptr agent = ManagementAgent::getAgent (); + if (agent.get () != 0) + { + mgmtExchange = management::Exchange::shared_ptr + (new management::Exchange (this, parent, _name)); + agent->addObject (mgmtExchange); + } + } +} + +Exchange::~Exchange () +{ + if (mgmtExchange.get () != 0) + mgmtExchange->resourceDestroy (); +} Exchange::shared_ptr Exchange::decode(ExchangeRegistry& exchanges, Buffer& buffer) { @@ -56,5 +98,43 @@ uint32_t Exchange::encodedSize() const + args.size(); } +ManagementObject::shared_ptr Exchange::GetManagementObject (void) const +{ + return dynamic_pointer_cast<ManagementObject> (mgmtExchange); +} +Exchange::Binding::Binding(const string& _key, Queue::shared_ptr _queue, Exchange* parent) + : queue(_queue), key(_key) +{ + if (parent != 0) + { + ManagementAgent::shared_ptr agent = ManagementAgent::getAgent (); + if (agent.get() != 0) + { + ManagementObject::shared_ptr mo = queue->GetManagementObject(); + if (mo.get() != 0) + { + uint64_t queueId = mo->getObjectId(); + mgmtBinding = management::Binding::shared_ptr + (new management::Binding (this, (Manageable*) parent, queueId, key)); + agent->addObject (mgmtBinding); + } + } + } +} + +Exchange::Binding::~Binding () +{ + if (mgmtBinding.get () != 0) + mgmtBinding->resourceDestroy (); +} +ManagementObject::shared_ptr Exchange::Binding::GetManagementObject () const +{ + return dynamic_pointer_cast<ManagementObject> (mgmtBinding); +} + +Manageable::status_t Exchange::Binding::ManagementMethod (uint32_t, Args&) +{ + return Manageable::STATUS_UNKNOWN_METHOD; +} |