summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2010-03-16 21:38:35 +0000
committerTed Ross <tross@apache.org>2010-03-16 21:38:35 +0000
commit46eaa1d1dc3be11277a1568ef33608744e5145b5 (patch)
tree1e816a94f450258b1be20d5265c3b9de4319b60b
parenteac621b6c39cdfb5f6bbaa9661ebcb9630062b01 (diff)
downloadqpid-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.h1
-rw-r--r--qpid/cpp/src/qpid/broker/Exchange.cpp4
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/SemanticState.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/SessionAdapter.cpp9
-rw-r--r--qpid/cpp/src/qpid/broker/System.cpp3
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.cpp51
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.h3
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
{