summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Exchange.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/Exchange.cpp')
-rw-r--r--cpp/src/qpid/broker/Exchange.cpp80
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;
+}