diff options
author | Ted Ross <tross@apache.org> | 2010-03-16 21:38:35 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2010-03-16 21:38:35 +0000 |
commit | 46eaa1d1dc3be11277a1568ef33608744e5145b5 (patch) | |
tree | 1e816a94f450258b1be20d5265c3b9de4319b60b | |
parent | eac621b6c39cdfb5f6bbaa9661ebcb9630062b01 (diff) | |
download | qpid-python-46eaa1d1dc3be11277a1568ef33608744e5145b5.tar.gz |
Added type conversions for the broker's use of the QMF-generated headers.
from qpid::framing::FieldTable to qpid::messaging::Variant::Map
from qpid::framing::Uuid to qpid::messaging::Uuid
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qmf-devel0.7a@924001 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/include/qpid/framing/FieldTable.h | 1 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/Exchange.cpp | 4 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/Queue.cpp | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/SemanticState.cpp | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/SessionAdapter.cpp | 9 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/System.cpp | 3 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/management/ManagementAgent.cpp | 51 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/management/ManagementAgent.h | 3 |
8 files changed, 66 insertions, 9 deletions
diff --git a/qpid/cpp/include/qpid/framing/FieldTable.h b/qpid/cpp/include/qpid/framing/FieldTable.h index 085f7ed110..fdb1a28b9d 100644 --- a/qpid/cpp/include/qpid/framing/FieldTable.h +++ b/qpid/cpp/include/qpid/framing/FieldTable.h @@ -51,6 +51,7 @@ class FieldTable typedef boost::shared_ptr<FieldValue> ValuePtr; typedef std::map<std::string, ValuePtr> ValueMap; typedef ValueMap::iterator iterator; + typedef ValueMap::const_iterator const_iterator; typedef ValueMap::const_reference const_reference; typedef ValueMap::reference reference; typedef ValueMap::value_type value_type; diff --git a/qpid/cpp/src/qpid/broker/Exchange.cpp b/qpid/cpp/src/qpid/broker/Exchange.cpp index 7bb70ed24a..1d3da982d8 100644 --- a/qpid/cpp/src/qpid/broker/Exchange.cpp +++ b/qpid/cpp/src/qpid/broker/Exchange.cpp @@ -149,7 +149,7 @@ Exchange::Exchange(const string& _name, bool _durable, const qpid::framing::Fiel mgmtExchange = new _qmf::Exchange (agent, this, parent, _name); mgmtExchange->set_durable(durable); mgmtExchange->set_autoDelete(false); - mgmtExchange->set_arguments(args); + mgmtExchange->set_arguments(ManagementAgent::toMap(args)); if (!durable) { if (name.empty()) { agent->addObject (mgmtExchange, 0x1000000000000004LL); // Special default exchange ID @@ -336,7 +336,7 @@ void Exchange::Binding::startManagement() { management::ObjectId queueId = mo->getObjectId(); mgmtBinding = new _qmf::Binding - (agent, this, (Manageable*) parent, queueId, key, args); + (agent, this, (Manageable*) parent, queueId, key, ManagementAgent::toMap(args)); if (!origin.empty()) mgmtBinding->set_origin(origin); agent->addObject (mgmtBinding, agent->allocateId(this)); diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index 4ff3cf6d2c..bed25d6f12 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/cpp/src/qpid/broker/Queue.cpp @@ -872,7 +872,7 @@ void Queue::configure(const FieldTable& _settings, bool recovering) if (p && p->convertsTo<std::string>()) insertSequenceNumbers(p->get<std::string>()); if (mgmtObject != 0) - mgmtObject->set_arguments (_settings); + mgmtObject->set_arguments(ManagementAgent::toMap(_settings)); if ( isDurable() && ! getPersistenceId() && ! recovering ) store->create(*this, _settings); diff --git a/qpid/cpp/src/qpid/broker/SemanticState.cpp b/qpid/cpp/src/qpid/broker/SemanticState.cpp index 73ef807a0a..5148d88e72 100644 --- a/qpid/cpp/src/qpid/broker/SemanticState.cpp +++ b/qpid/cpp/src/qpid/broker/SemanticState.cpp @@ -280,7 +280,7 @@ SemanticState::ConsumerImpl::ConsumerImpl(SemanticState* _parent, if (agent != 0) { mgmtObject = new _qmf::Subscription(agent, this, ms , queue->GetManagementObject()->getObjectId() ,name, - !acquire, ackExpected, exclusive ,arguments); + !acquire, ackExpected, exclusive, ManagementAgent::toMap(arguments)); agent->addObject (mgmtObject, agent->allocateId(this)); mgmtObject->set_creditMode("WINDOW"); } diff --git a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp index c3b6f697fd..10eddc6045 100644 --- a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp +++ b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp @@ -106,7 +106,7 @@ void SessionAdapter::ExchangeHandlerImpl::declare(const string& exchange, const ManagementAgent* agent = getBroker().getManagementAgent(); if (agent) agent->raiseEvent(_qmf::EventExchangeDeclare(getConnection().getUrl(), getConnection().getUserId(), exchange, type, - alternateExchange, durable, false, args, + alternateExchange, durable, false, ManagementAgent::toMap(args), response.second ? "created" : "existing")); }catch(UnknownExchangeTypeException& /*e*/){ @@ -194,7 +194,8 @@ void SessionAdapter::ExchangeHandlerImpl::bind(const string& queueName, ManagementAgent* agent = getBroker().getManagementAgent(); if (agent) - agent->raiseEvent(_qmf::EventBind(getConnection().getUrl(), getConnection().getUserId(), exchangeName, queueName, exchangeRoutingKey, arguments)); + agent->raiseEvent(_qmf::EventBind(getConnection().getUrl(), getConnection().getUserId(), exchangeName, + queueName, exchangeRoutingKey, ManagementAgent::toMap(arguments))); } }else{ throw NotFoundException("Bind failed. No such exchange: " + exchangeName); @@ -389,7 +390,7 @@ void SessionAdapter::QueueHandlerImpl::declare(const string& name, const string& ManagementAgent* agent = getBroker().getManagementAgent(); if (agent) agent->raiseEvent(_qmf::EventQueueDeclare(getConnection().getUrl(), getConnection().getUserId(), - name, durable, exclusive, autoDelete, arguments, + name, durable, exclusive, autoDelete, ManagementAgent::toMap(arguments), queue_created.second ? "created" : "existing")); } @@ -499,7 +500,7 @@ SessionAdapter::MessageHandlerImpl::subscribe(const string& queueName, ManagementAgent* agent = getBroker().getManagementAgent(); if (agent) agent->raiseEvent(_qmf::EventSubscribe(getConnection().getUrl(), getConnection().getUserId(), - queueName, destination, exclusive, arguments)); + queueName, destination, exclusive, ManagementAgent::toMap(arguments))); } void diff --git a/qpid/cpp/src/qpid/broker/System.cpp b/qpid/cpp/src/qpid/broker/System.cpp index 455ad11cf2..4a30696f75 100644 --- a/qpid/cpp/src/qpid/broker/System.cpp +++ b/qpid/cpp/src/qpid/broker/System.cpp @@ -22,6 +22,7 @@ #include "qpid/management/ManagementAgent.h" #include "qpid/framing/Uuid.h" #include "qpid/sys/SystemInfo.h" +#include "qpid/messaging/Uuid.h" #include <iostream> #include <fstream> @@ -64,7 +65,7 @@ System::System (string _dataDir, Broker* broker) : mgmtObject(0) } } - mgmtObject = new _qmf::System (agent, this, systemId); + mgmtObject = new _qmf::System(agent, this, messaging::Uuid(systemId.c_array())); std::string sysname, nodename, release, version, machine; qpid::sys::SystemInfo::getSystemId (sysname, nodename, diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.cpp b/qpid/cpp/src/qpid/management/ManagementAgent.cpp index 9595807e7d..4254961f5e 100644 --- a/qpid/cpp/src/qpid/management/ManagementAgent.cpp +++ b/qpid/cpp/src/qpid/management/ManagementAgent.cpp @@ -29,13 +29,17 @@ #include "qpid/sys/Time.h" #include "qpid/broker/ConnectionState.h" #include "qpid/broker/AclModule.h" +#include "qpid/messaging/Variant.h" +#include "qpid/messaging/Uuid.h" #include <list> #include <iostream> #include <fstream> #include <sstream> +#include <typeinfo> using boost::intrusive_ptr; using qpid::framing::Uuid; +using qpid::messaging::Variant; using namespace qpid::framing; using namespace qpid::management; using namespace qpid::broker; @@ -1517,3 +1521,50 @@ void ManagementAgent::debugSnapshot(const char* type) { msg << " new objects: " << newManagementObjects.size(); QPID_LOG(trace, msg.str()); } + +qpid::messaging::Variant::Map ManagementAgent::toMap(const FieldTable& from) +{ + qpid::messaging::Variant::Map map; + + for (FieldTable::const_iterator iter = from.begin(); iter != from.end(); iter++) { + const string& key(iter->first); + const FieldTable::ValuePtr& val(iter->second); + + if (typeid(val.get()) == typeid(Str8Value) || typeid(val.get()) == typeid(Str16Value)) { + map[key] = Variant(val->get<string>()); + } else if (typeid(val.get()) == typeid(FloatValue)) { + map[key] = Variant(val->get<float>()); + } else if (typeid(val.get()) == typeid(DoubleValue)) { + map[key] = Variant(val->get<double>()); + } else if (typeid(val.get()) == typeid(IntegerValue)) { + map[key] = Variant(val->get<int>()); + } else if (typeid(val.get()) == typeid(TimeValue)) { + map[key] = Variant(val->get<int64_t>()); + } else if (typeid(val.get()) == typeid(Integer64Value)) { + map[key] = Variant(val->get<int64_t>()); + } else if (typeid(val.get()) == typeid(Unsigned64Value)) { + map[key] = Variant(val->get<uint64_t>()); + } else if (typeid(val.get()) == typeid(FieldTableValue)) { + map[key] = Variant(toMap(val->get<FieldTable>())); + } else if (typeid(val.get()) == typeid(VoidValue)) { + map[key] = Variant(); + } else if (typeid(val.get()) == typeid(BoolValue)) { + map[key] = Variant(val->get<bool>()); + } else if (typeid(val.get()) == typeid(Unsigned8Value)) { + map[key] = Variant(val->get<uint8_t>()); + } else if (typeid(val.get()) == typeid(Unsigned16Value)) { + map[key] = Variant(val->get<uint16_t>()); + } else if (typeid(val.get()) == typeid(Unsigned32Value)) { + map[key] = Variant(val->get<uint32_t>()); + } else if (typeid(val.get()) == typeid(Integer8Value)) { + map[key] = Variant(val->get<int8_t>()); + } else if (typeid(val.get()) == typeid(Integer16Value)) { + map[key] = Variant(val->get<int16_t>()); + } else if (typeid(val.get()) == typeid(UuidValue)) { + map[key] = Variant(messaging::Uuid(val->get<framing::Uuid>().c_array())); + } + } + + return map; +} + diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.h b/qpid/cpp/src/qpid/management/ManagementAgent.h index 3e00ebeb81..356710cb95 100644 --- a/qpid/cpp/src/qpid/management/ManagementAgent.h +++ b/qpid/cpp/src/qpid/management/ManagementAgent.h @@ -32,6 +32,7 @@ #include "qpid/management/ManagementEvent.h" #include "qpid/management/Manageable.h" #include "qmf/org/apache/qpid/broker/Agent.h" +#include "qpid/messaging/Variant.h" #include <qpid/framing/AMQFrame.h> #include <memory> #include <string> @@ -126,6 +127,8 @@ public: uint16_t getBootSequence(void) { return bootSequence; } void setBootSequence(uint16_t b) { bootSequence = b; } + static messaging::Variant::Map toMap(const framing::FieldTable& from); + private: struct Periodic : public qpid::sys::TimerTask { |